Skip to content

cmux next: a Prototype composer look with a Model panel - #27265

Closed
lucasr1b wants to merge 5 commits into
feat-cmux-nextfrom
next-model-selector
Closed

lucasr1b wants to merge 5 commits into
feat-cmux-nextfrom
next-model-selector

Conversation

@lucasr1b

@lucasr1b lucasr1b commented Oct 29, 2026 •

Copy link
Copy Markdown
Collaborator

The composer's model menu holds every harness's models, the rail, the search, Effort, the accounts and Fast mode in one list. On a harness with few models (Codex) the menu shrinks and cuts off part of the rail, and the chips sit on three edges of the box. This PR adds a fourth New Tab dot, Prototype, that tries a different layout. Claude Minimal, Claude + Quick Actions and Codex Minimal do not change.

  • Prototype look (composerLook.ts prototype, newtab/tabDots.ts): a fourth dot, with the quick actions. In it, the model and mode chips sit in the box's bottom row (+, model, mode, then mic and Send), and folder and computer sit above the box. Its location menus open above first, away from the box (locationPopover.ts).
  • Model panel (QuickModelPanel.tsx): the chip opens a short menu (Model, Effort, Provider, Fast mode). Effort stays its own row: model rows draw no effort choices in this look. Model opens a panel beside it: an icon rail (Starred, then each harness once), the search field and the tab's models, with More models in place. The panel starts at its row, fits the shown tab up to the room it has, and opens on hover, as Effort does.
  • Mode menu (ComposerPickers.tsx): in the Prototype look, Claude Code's rows draw the icon column, with Codex's icons on the matching levels (Manual a hand, Accept edits the terminal shield, Bypass permissions the "!" shield). Names stay each harness's own.
  • Menus (ui/Menu.tsx): MenuPopup takes shift={false} (pinned to its anchor's edge) and alignOffset; Submenu takes pinned, firstRowInset, openOnHover, onOpenChange and onPopupKeyDown. Focus in one of a menu's own submenus counts as inside the menu when it closes. Defaults are unchanged.
  • Fix for every look: a location chip keeps its open-state pill under the pointer (composerLocation.css).

Unchanged: the default looks' menu (QuickModelMenu.tsx), layout and tests. The Debug setting for the rail's placement has no effect in the Prototype look. Known: in the Prototype look, while the Model panel is open from hover, a click on Fast mode can be lost to Base UI's hover safe area.

Changelog

  • Added: a Prototype style on New Tab that tries a model panel and chips inside the composer box.
  • Fixed: a folder or computer chip keeps its highlight while its menu is open, also under the pointer.
Preview (Prototype dot: model panel and chips in the box)
prototype-dot-model-panel-and-chips-in-the-box-after.mov

Tests

  • test/new-tab-dots.test.tsx: the page draws four dots, Prototype the fourth, and the Prototype look shows its dot with or without the actions.
  • The default looks' menu, layout and mode tests run unchanged.

Observed / Not run

  • Ran bun test on the 81 test files that reach the changed code: 495 pass, 18 skip, 0 fail.
  • test/model-menu-compact.test.tsx "the menu opens with a search field that has the keyboard" and "the optional reasoning slider ..." failed in some full-file runs on this branch and on the base commit alike; they pass alone.
  • bunx tsc, scripts/web-lint.sh and scripts/cmux-next/prepush-gate.py pass.
  • Dogfooded in a tagged local build (New Tab, Claude and Codex tabs). Not run: no test yet covers the Prototype look's menu or layout; no gallery entry; no capture.

View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.


Summary by cubic

Adds a fourth New Tab dot, Prototype, previewing a composer where the model and mode chips sit in the box's bottom row and the model menu opens a side panel with an icon rail, search, and the tab's models. Claude Minimal, Claude + Quick Actions, and Codex Minimal stay as they are.

  • The panel opens on hover, as the Effort menu does; Prototype's location menus open above the box.
  • Prototype's mode rows draw Codex's icons on Claude's matching modes; each harness keeps its own names.
  • Fixes for every look: a location chip keeps its highlight while its menu is open, and known model providers keep their own spelling ("OpenCode", not "opencode").

Written for commit 1e4f7ef. Summary will update on new commits.

View guided diff Turn on auto-fix

@lucasr1b lucasr1b added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 29, 2026
@github-actions

github-actions Bot commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

cmux status (one comment, edited in place; each line is updated by the job that owns it)

Review 876de48: HQ feed card · gallery before/after runs · checks

App of this head (app.zip, kept 1 day)

gh workflow run reload-build.yml -R manaflow-ai/cmux --ref feat-cmux-next -f tag=pr27265 -f ref=next-model-selector -f platform=macos -f backend_mode=local

Gallery before/after for 876de48: 16 states rendered, 4 images differ, 2300 more touched states not rendered. Images are in the run's artifact, not on this public PR.

gh run download 40951766249 -R manaflow-ai/cmux -n gallery-advisory-27265-876de48561eb68d5cd003aa3d26e40abf73279b3 (then read gallery-review.json)

States
State Theme Status Diff Picked by
agent-pane.composer/font-size-chat-14 Apple System Colors Light unchanged 0% own Composer.tsx
agent-pane.composer/font-size-chat-14 Apple System Colors unchanged 0% own Composer.tsx
agent-pane.composer/font-size-new-chat-14 Apple System Colors Light unchanged 0% own Composer.tsx
agent-pane.composer/font-size-new-chat-14 Apple System Colors unchanged 0% own Composer.tsx
agent-pane.composer/font-size-new-tab-14 Apple System Colors Light changed 0.12% own Composer.tsx
agent-pane.composer/font-size-new-tab-14 Apple System Colors changed 0.12% own Composer.tsx
agent-pane.composer/font-size-chat-21 Apple System Colors Light unchanged 0% own Composer.tsx
agent-pane.composer/font-size-chat-21 Apple System Colors unchanged 0% own Composer.tsx
agent-pane.composer/font-size-new-chat-21 Apple System Colors Light unchanged 0% own Composer.tsx
agent-pane.composer/font-size-new-chat-21 Apple System Colors unchanged 0% own Composer.tsx
agent-pane.composer/font-size-new-tab-21 Apple System Colors Light changed 0.12% own Composer.tsx
agent-pane.composer/font-size-new-tab-21 Apple System Colors changed 0.12% own Composer.tsx
agent-pane.composer/font-size-chat-28 Apple System Colors Light unchanged 0% own Composer.tsx
agent-pane.composer/font-size-chat-28 Apple System Colors unchanged 0% own Composer.tsx
agent-pane.composer/font-size-new-chat-28 Apple System Colors Light unchanged 0% own Composer.tsx
agent-pane.composer/font-size-new-chat-28 Apple System Colors unchanged 0% own Composer.tsx
agent-pane.composer-context/closed Apple System Colors Light unchanged 0% own composerLocation.css
agent-pane.composer-context/closed Apple System Colors unchanged 0% own composerLocation.css
agent-pane.composer-context/folder-menu Apple System Colors Light unchanged 0% own composerLocation.css
agent-pane.composer-context/folder-menu Apple System Colors unchanged 0% own composerLocation.css
agent-pane.composer-context/folder-pinned-search Apple System Colors Light unchanged 0% own composerLocation.css
agent-pane.composer-context/folder-pinned-search Apple System Colors unchanged 0% own composerLocation.css
agent-pane.composer-context/folder-short-note Apple System Colors Light unchanged 0% own composerLocation.css
agent-pane.composer-context/folder-short-note Apple System Colors unchanged 0% own composerLocation.css
agent-pane.composer-context/folder-short-note-de Apple System Colors Light unchanged 0% own composerLocation.css
agent-pane.composer-context/folder-short-note-de Apple System Colors unchanged 0% own composerLocation.css
agent-pane.composer-context/folder-short-note-fr Apple System Colors Light unchanged 0% own composerLocation.css
agent-pane.composer-context/folder-short-note-fr Apple System Colors unchanged 0% own composerLocation.css
agent-pane.composer-context/folder-long-list Apple System Colors Light unchanged 0% own composerLocation.css
agent-pane.composer-context/folder-long-list Apple System Colors unchanged 0% own composerLocation.css
agent-pane.composer-context/folder-favicons Apple System Colors Light unchanged 0% own composerLocation.css
agent-pane.composer-context/folder-favicons Apple System Colors unchanged 0% own composerLocation.css

Pick other states with a Gallery: entry.id, entry.id/variant line in the PR body.

Unclear: web / react-apps-check failed: no known signature; failed step: Check webview test shards.

CI failed on 1e4f7ef8e0 (run 40995496698 attempt 1): 1 code, 1 unknown.

Job Verdict Why
web / react-apps-base-check (4) code a web test failed
web / react-apps-check unknown no known signature; failed step: Check webview test shards

Failures:

  • seen on other PRs agent-pane-step-rows.test.ts a step row shows nothing more on hover; its chevron is there at rest: failed (job)
  • seen on other PRs model-menu-submenu-up.test.ts chromium: at the window's foot, Effort opens up from its row: failed (job)
  • seen on other PRs model-menu-submenu-up.test.ts chromium: at the window's top, Effort opens down from its row: failed (job)
  • seen on other PRs model-menu-submenu-up.test.ts webkit: at the window's foot, Effort opens up from its row: failed (job)
  • seen on other PRs model-menu-submenu-up.test.ts webkit: at the window's top, Effort opens down from its row: failed (job)
  • seen on other PRs reasoning-menu-check.test.ts chromium: the check trails the chosen row; labels start at the row's inset: failed (job)
  • seen on other PRs reasoning-menu-check.test.ts webkit: the check trails the chosen row; labels start at the row's inset: failed (job)
  • seen on other PRs reasoning-own-control.test.ts New Tab at 760 px: the model button opens its menu, whose Effort row lists live levels: failed (job)
Matched log lines
web / react-apps-base-check (4): (fail) a step row shows nothing more on hover; its chevron is there at rest [966.21ms]

Not re-run automatically: web / react-apps-base-check (4), web / react-apps-check are not machine failures.

Written by scripts/ci/classify_failures.py (ci-failure-attribution.yml); signatures are its SIGNATURES table. A machine verdict is the runner's fault, not this PR's; yours means the failing file is one this PR changes, also red on main that main's latest full suite fails the same way, seen on other PRs that it failed on another pull request's run lately.

red: cmux-next checks (god files, concurrency, crash safety, l10n); NEW: red check: Script tests (pin-cmux-tui, embed-cef, ensure-cef store) (+1 more) is not red on the base ebdd35a; do not merge until green; see lane-rules
red: web / Web status; base red: the same failure on the base ebdd35a; does not block
red: web / react-apps-base-check (1); no finished base run on ebdd35a to compare; do not merge until green; see lane-rules
red: web / react-apps-check; base red: the same failure on the base ebdd35a; does not block

@teamleaderleo

Copy link
Copy Markdown
Collaborator

Bead cx-9b4r07 created for this PR by the cmux coordinator.

@blacksmith-sh

blacksmith-sh Bot commented Oct 29, 2026 •

Copy link
Copy Markdown

Found 1 test failure on Blacksmith runners:

Failure

Test View Logs
test_every_listed_hook_is_one_glaeda_released_with_the_check (main.SigningHooksInSt
epWithGlaedaTests.test_every_listed_hook_is_one_glaeda_released_with_the_check)/
test_every_listed_hook_is_one_glaeda_released_with_the_check (main.SigningHooksInSt
epWithGlaedaTests.test_every_listed_hook_is_one_glaeda_released_with_the_check)
View Logs

Fix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

@lucasr1b
lucasr1b temporarily deployed to ci-routing-agent October 29, 2026 10:15 — with GitHub Actions Inactive
@lucasr1b
lucasr1b force-pushed the next-model-selector branch from ad0f4a2 to 05d5b98 Compare October 29, 2026 20:41
@lucasr1b
lucasr1b temporarily deployed to ci-routing-agent October 29, 2026 20:41 — with GitHub Actions Inactive
@lucasr1b
lucasr1b force-pushed the next-model-selector branch from 05d5b98 to 876de48 Compare October 29, 2026 20:44
@lucasr1b
lucasr1b temporarily deployed to ci-routing-agent October 29, 2026 20:44 — with GitHub Actions Inactive
@lucasr1b lucasr1b added the ready-to-land Reviewed at this head; next-autoland merges it into feat-cmux-next when its only reds are base reds label Oct 29, 2026
…selector

# Conflicts:
#	webviews/src/agent-session/acpmux/modelVariants.ts
@lucasr1b lucasr1b removed the ready-to-land Reviewed at this head; next-autoland merges it into feat-cmux-next when its only reds are base reds label Oct 30, 2026
@lucasr1b
lucasr1b temporarily deployed to ci-routing-agent October 30, 2026 03:06 — with GitHub Actions Inactive
@lucasr1b lucasr1b added the ready-to-land Reviewed at this head; next-autoland merges it into feat-cmux-next when its only reds are base reds label Oct 30, 2026
@lucasr1b
lucasr1b temporarily deployed to ci-routing-agent October 30, 2026 03:09 — with GitHub Actions Inactive
@lucasr1b lucasr1b removed the ready-to-land Reviewed at this head; next-autoland merges it into feat-cmux-next when its only reds are base reds label Oct 30, 2026
@lucasr1b lucasr1b closed this Oct 30, 2026

This branch was previously deployed

1 inactive deployment
ci-routing-agent — 1e4f7ef8 Deployed Oct 30, 2026 by lucasr1b via wait for same-key tree publisher #79993
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk:normal Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants