Repository navigation
cmux-next: one model picker, a clickable context ring and an aligned composer footer - #17537
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Use the shared inline location treatment for recent project folders, add path descriptions and Browse, and style the portaled computer menu with the pane font and compact checkmark. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Regenerate the tracked agent pane resources so the composer picker changes ship in the native pane. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Apply the repository formatter to the composer location picker and refresh its tracked agent pane bundle. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Keep existing new-chat project selection behavior while matching the composer location row, showing project paths in the menu, and retaining Browse. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…into op-next-composer-footer # Conflicts: # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/pane.js
…xt ring (red) Fails today: the effort draws as a second chip, the context ring is an image with no click, and it disappears before the first usage update. Red: bun test src/agent-session/acpmux/composerPickers.test.tsx (25 pass, 6 fail). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…open its details - One model chip names the effort after the model in secondary text, with one chevron; its menu already holds the reasoning slider, so the separate effort chip goes (it stays only when an agent offers efforts without models). "Effort" still opens the menu for automation. - The context ring is a button: a click opens the share used, tokens used of the window and Compact (the agent's /compact) when the agent offers it. A live chat keeps the ring from its first frame; usage fills it in place. - The permission chip sits next to + again; Plan stays in the + menu. - Every bar control is 28px tall on an 8px gap, 10px from the box edge; Send is a 28px circle with a 16px arrow, the mic's size, not 32px. Green: bun test src/agent-session/acpmux/composerPickers.test.tsx (31 pass). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bugbot is paused — on-demand spend limit reachedBugbot uses usage-based billing for this team and has hit its on-demand spend limit. A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue. |
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configuration
You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
Unclear: CI failed on
Not re-run automatically: Written by |
…h labels only Keeps ComposerPickers.tsx under its ui-rules pending count (no raw role or key handlers) and drops the explanatory pending/compact hint copy. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…poser-footer # Conflicts: # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/ar.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/bs.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/da.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/de.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/en.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/es.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/fr.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/it.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/ja.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/km.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/ko.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/nb.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/pl.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/pt-BR.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/ru.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/th.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/tr.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/uk.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/vi.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/zh-Hans.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/zh-Hant.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/pane.js # webviews/src/agent-session/acpmux/ComposerContext.tsx # webviews/src/agent-session/acpmux/projectChooser.test.tsx # webviews/src/agent-session/acpmux/styles.css
…poser-footer # Conflicts: # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/ar.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/bs.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/da.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/de.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/en.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/es.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/fr.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/it.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/ja.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/km.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/ko.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/nb.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/pl.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/pt-BR.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/ru.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/th.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/tr.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/uk.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/vi.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/zh-Hans.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/zh-Hant.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/pane.js
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bugbot is paused — on-demand spend limit reachedBugbot uses usage-based billing for this team and has hit its on-demand spend limit. A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue. |
|
Batch queue: green. Stack Own check still red: Next: land it yourself with gh-merge-green on this receipt. |
…poser-footer # Conflicts: # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/pane.js
Bugbot is paused — on-demand spend limit reachedBugbot uses usage-based billing for this team and has hit its on-demand spend limit. A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue. |
|
Batch queue: green. Batch stack Next: land it yourself with gh-merge-green on this receipt. |
|
Batch queue: green. Batch stack Next: land it yourself with gh-merge-green on this receipt. |
…poser-footer # Conflicts: # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/pane.js
…poser-footer # Conflicts: # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/ar.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/bs.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/da.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/de.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/en.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/es.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/fr.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/it.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/ja.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/km.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/ko.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/nb.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/pl.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/pt-BR.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/ru.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/th.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/tr.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/uk.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/vi.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/zh-Hans.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/zh-Hant.js # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/pane.js
|
Batch queue: green. Batch stack Next: land it yourself with gh-merge-green on this receipt. |
|
The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/37510605955 at 96f7421 failed: cmux-next generated files, cmux-next swift test. |
|
The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/37515600457 at ff267c4 failed: cmux-next swift test. |
* test(cmux-next): batch dispatch runs every dispatch-gated job (red) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * ci(cmux-next): run every tier when dispatched on a next-batch branch Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test(ci): cmux-next batch queue selection, stacking and bisect (red) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * ci(cmux-next): implicit batch queue for feat-cmux-next Debounced PR events dispatch one batch: stack eligible PRs on feat-cmux-next, rebuild conflicted generated files, run every cmux-next tier and a fleet production build on the stack, then land each PR with gh-merge-green or bisect a red stack to its culprit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(ci): address batch workflows by id, not file name feat-cmux-next is not the default branch, so the Actions API cannot find a workflow file that exists only there by its name. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(ci): batch keeps one base and never blames a PR for a fleet failure Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(ci): batch skips workflow changes and stays off until enabled GitHub refuses the job token's push or merge of a .github/workflows change, so those PRs land by hand. Debounce dispatches only when CMUX_NEXT_BATCH_ENABLED is 1. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(ci): create batch branches at the base before pushing the stack Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(ci): batch pushes and merges with an App token; terse bot comments Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * docs(ci): batch queue App token, off switch and workflow PRs Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test(ci): batch queue serve loop, remote regeneration and local fleet build (red) python3 -m unittest tests.test_next_batch: 14 failures, all in the new ServeDebounce, RemoteRegeneration, LocalController and regen workflow tests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat(ci): serve the batch queue under a gh login; regenerate on runners next_batch.py serve polls open PRs, debounces like the debounce job and runs one batch at a time with the operator's gh login, so it runs without the batch App. Its pushes and merges start CI, so nothing is re-dispatched after landing; the fleet build uses the host's cmux-ci. Generators run the stack's code, so they no longer run on the controller: regen-linux (web, SDK) and regen (Swift) check out the stack with a read-only token and return a patch that the controller applies and pushes. python3 -m unittest tests.test_next_batch: 41 pass (14 failed on 552c900). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test(ci): Swift regeneration runs the workflow ref's generator (red) next-batch/20261006: the regen job ran the stack's own copy of regenerate-swift-exports.sh, which the stack does not have yet (exit 127). python3 -m unittest tests.test_next_batch: 1 failure. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(ci): run the Swift export generator from the workflow's ref The stack checkout keeps the stack's code; only the generator script comes from the trusted ref. python3 -m unittest tests.test_next_batch: OK. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test(ci): retry a mini job that was refused before writing a result (red) next-batch/20261006: the Swift regen job was refused at runner setup (a fleet build was waiting for the host) and the batch gave up. python3 -m unittest tests.test_next_batch: 3 errors. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(ci): dispatch a mini job once more when it wrote no result python3 -m unittest tests.test_next_batch: OK. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test(ci): a production fleet build passes no backend mode (red) cmux-ci build --production --backend-mode local: "production builds cannot use offline backend mode". python3 -m unittest tests.test_next_batch: 1 failure. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(ci): submit the production fleet build without a backend mode python3 -m unittest tests.test_next_batch: OK. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test(ci): the queue formats a PR's webviews before landing it (red) next-batch/20261006: #17527 and #17537 were validated green but web / react-apps-check failed on formatting and blocked landing. python3 -m unittest tests.test_next_batch: 5 failing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(ci): format a PR's webviews on a runner before landing it A PR changing webviews/ whose only red is web formatting stays eligible. Before landing it, regen-linux runs bun run check:fix (formatter and lint autofix) on its head and the queue pushes the patch to the PR's branch; gh-merge-green waits for the rerun. python3 -m unittest tests.test_next_batch: 50 OK. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test(ci): serve posts a receipt for owners instead of merging (red) Landing from the queue host is not allowed yet; owners land on the receipt. A receipt names the heavy jobs that ran, since cmux-next.yml skips them on next-batch/* until this PR is on feat-cmux-next. python3 -m unittest tests.test_next_batch: 4 failing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(ci): serve posts a receipt and owners land, unless --land python3 -m unittest tests.test_next_batch: 54 OK. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test(ci): page the open-PR query and retry a gateway timeout (red) next_batch.py select: gh api graphql failed: gh: HTTP 504 (100 PRs with files and checks in one query). python3 -m unittest tests.test_next_batch: 2 failing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(ci): page the open-PR query 30 at a time and retry a 5xx once python3 -m unittest tests.test_next_batch: OK; next_batch.py select: OK. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test(ci): a local run posts receipts unless --land (red) python3 -m unittest tests.test_next_batch: 1 failing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(ci): a local run posts receipts unless --land python3 -m unittest tests.test_next_batch: OK. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test(ci): an owner push during formatting waits for the next batch (red) Batch local-20261006-153816: #17534's owner pushed while its formatting ran; the report showed a raw git push error. python3 -m unittest tests.test_next_batch: 1 error. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(ci): an owner push during formatting leaves the PR for the next batch python3 -m unittest tests.test_next_batch: OK. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(ci): a PR with a green receipt at its head is not validated again Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test(ci): the queue never pushes to a branch it does not own (red) An opted-in PR by another author got the formatting push too. python3 -m unittest tests.test_next_batch: 1 failure. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(ci): push formatting only to batch authors' branches python3 -m unittest tests.test_next_batch: OK. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test(ci): serve reports a batch author's PR closed by someone else (red) Detect and alert only: number, actor and time to the coordinator; one alert for 3 or more within 10 minutes. python3 -m unittest tests.test_next_batch: 4 errors. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat(ci): serve reports a batch author's PR closed by someone else The minute poll runs on its own thread, so it keeps going while a batch runs; a PR leaving the open set costs one lookup. Detect and alert only. python3 -m unittest tests.test_next_batch: 63 OK. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test(ci): retry a truncated GraphQL reply once (red) serve log 20:34 and 20:37 UTC: gh api graphql failed: unexpected end of JSON input. python3 -m unittest tests.test_next_batch: 1 failure. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(ci): retry a truncated GraphQL reply once python3 -m unittest tests.test_next_batch: OK. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Problem
The agent composer footer ("GPT-6.1-Sol v High v (ring) | mic (send)") had three problems Leo hit in daily use:
Change
Matches the Codex desktop app composer (left: + then the access chip; right: ring, one model picker, mic, send).
openPicker("Effort")still opens the menu for automation. A default effort adds no text./compactwhen the agent lists that command. A live chat shows the ring from its first frame, and usage fills it in place (stability rule). Before the first usage update it shows 0% with no token counts. The popover is the sharedsrc/uiPopover (Base UI), so Escape and a click outside close it and focus returns to the ring. Nothing depends on hover.Builds on #17505 (location row) and #17503 (model labels); #17505's commits are merged in and drop out of the diff once it lands.
ACP
usage_updatereports only used and window size, so the popover cannot break down what is in context.Validation
bun test src/agent-session/acpmux/composerPickers.test.tsx(red commit: 25 pass, 6 fail; fix: 31 pass).bun test src/agent-session: 1012 pass, 0 fail.vp check src/agent-session/acpmux/: format, lint and types clean.scripts/cmux-next/build-agent-pane-web.sh --check: bundle current.scripts/verify-local.py: the localization parity errors are inherited fromfeat-cmux-next(none name a key from this PR). No Swift changed; the whole-tree Swift parse cannot run on this Linux host.context.title,context.percent,context.tokens,context.compact), labels only, translated into all 21 pane locales and regenerated intogenerated/strings.jsonandlocales/*.js.feat-cmux-nextleft unformatted (acpmux/conversation/*,pages/keybindings/model.test.ts), which failedreact-apps-check. Formatting only.feat-cmux-next:bun test src/agent-session test/ui-rules.test.ts1054 pass;vp checkclean.Changelog
Fixed the agent composer footer: one model and effort picker, a context ring that opens usage details and Compact on click, every control on one line, and a smaller Send button.
🤖 Generated with Claude Code
Need help on this PR? Tag
@codesmith-botwith what you need. Autofix is disabled.Summary by cubic
Redesigns the agent composer footer and location row, and makes every scroller follow the macOS "Show scroll bars" setting instead of forcing overlay or hidden indicators.
/compact) when the agent offers it, and stays at 0% before the first usage update.openPicker("Effort")still opens the menu for automation.Scrollbars follow macOS
SystemScrollers.observeandWebTheme.scrollerspropagate the system setting to every webview; the theme setsdata-scrollerson<html>and pages re-send it when the setting changes.check-scrollbars.shCI gate fails on forced scroller styles, hidden indicators, custom web scrollbars, andoverflow: scroll, with a listed exception policy.Written for commit 65fe235. Summary will update on new commits.