Repository navigation
cmux NEXT composer: capability-driven Fast and work-on New Tab - #24631
Conversation
Bugbot needs on-demand usage enabledBugbot uses usage-based billing for this team and requires on-demand usage to be enabled. A team admin can enable on-demand usage in the Cursor dashboard. |
|
Bead |
Bugbot needs on-demand usage enabledBugbot uses usage-based billing for this team and requires on-demand usage to be enabled. A team admin can enable on-demand usage in the Cursor dashboard. |
Bugbot needs on-demand usage enabledBugbot uses usage-based billing for this team and requires on-demand usage to be enabled. A team admin can enable on-demand usage in the Cursor dashboard. |
28353cf to
7a44b91
Compare
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Review App of this head (app.zip, kept 1 day)
Gallery before/after for
States
Pick other states with a Probably yours: CI failed on
Failures:
A web test can import code this PR changes without being one of its files: Matched log linesNot re-run automatically: Written by red: cmux-next checks (god files, concurrency, crash safety, l10n); no finished base run on be5d73b to compare; do not merge until green; see lane-rules Tour of |
|
Found 77 test failures on Blacksmith runners: Failures
...and 67 more test failures. View all on Blacksmith: run 40047934541, run 40047934556, run 40047934523
|
7a44b91 to
a307936
Compare
a307936 to
c6f460c
Compare
c6f460c to
1c4e147
Compare
Bugbot needs on-demand usage enabledBugbot uses usage-based billing for this team and requires on-demand usage to be enabled. A team admin can enable on-demand usage in the Cursor dashboard. |
1c4e147 to
a13049b
Compare
a13049b to
acb7920
Compare
Avoid nested interactive roles while preserving the direct pointer toggle beside the model name. Agent-Session: https://cmux.com/deeplink/agent?harness=codex&session=01a16a89-20f0-7ff2-8bb0-ec0bb3ae3a5e&host=big-red
Agent-Session: Leo Li
00c9918 to
272d73a
Compare
teamleaderleo
left a comment
There was a problem hiding this comment.
SHIP — exact head 272d73a.
Independent Codex review confirms capability-driven Fast placement, New Tab widget defaults/settings, all-locale generated strings, and optional-widget CSS. No P1/P2/P3 findings. Fleet app compile receipt b228b69108e4de7864f2bcca completed without compiler errors; controller reported no target list on this Linux compile lane.
|
Shipped in:
|
Each fails on the bare tip (full run at 2ee04b0; again alone at e869761, step 280e825d1b47e01c8df4b8ff). Stale premises (the test follows the change's intent): - IconFamilyAttributeTests: 5e7966c made folding finished thoughts the default; the test passes that default. - ContextMenuStandardTests: #24707 (0bf7675) put Inspect Element in the tab bar's + menu. - AcpmuxRefusedDaemonTests: #24795 (c7daff2) rewrote the refusal copy (no socket path; Quit that app; the holder-less refusal reconnects on its own) and left its own test on the old copy. - AgentPaneTranscriptStepTests, AgentPageProviderEventsTests: since #24617 (4abd404) a new subscription's events go out a main-actor turn later; the tests wait for them (bounded by the suite time limit). Real breaks (the code is fixed): - ActionSurfaceParityTests: #24707 made the sidebar section menu 13 top-level rows (the limit is 12); its Inspect Element goes in the Options folder. - TabSelectionActionsTests: Save and Close Tab (#23176) had a target reason for a menu row only, so the palette's run on a terminal tab was enabled and then refused; the reason now covers the untargeted run too. - SettingsSchemaExportTests: #24631 (78d7472) added four New Tab widget settings (clock, timer, warm greeting, quote) without strings or an agent policy: their 8 strings in all 21 locales, and the agent may set them. - NativeTooltipGuardTests: Mac Screen (ffc998b, 0372726) and No Color (c3bd2b2) drew raw tool tips: the No Color swatch uses themedToolTip, the toolbar's own helper is renamed setThemedHelp (it already set themedToolTip), the menu bar status item is marked native. - WorkspaceNameSourceTests: #24627 (f8c226e) counted any renamed '~' as unnamed (nameRevision > 0); only the automatic namer's '~' is. - AgentPaneMediaNoAutoActionTests: #24619 (5ff4b0c) resolved every image.load through the raster-only image roots, so a chat's own SVG or PDF was refused; non-raster files resolve in the chat's roots again. - BrowserProfileLinkMenuTests: e01bdd4 gave menu symbols their natural size; a profile's symbol is centered in the 16 pt square again, so names line up. - PhoneProcessRunner (passed alone, failed in the full run): a captured run ended before its stderr was read; it now waits for the end of stderr too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Each fails on the bare tip (full run at 2ee04b0; again alone at e869761, step 280e825d1b47e01c8df4b8ff). Stale premises (the test follows the change's intent): - IconFamilyAttributeTests: 5e7966c made folding finished thoughts the default; the test passes that default. - ContextMenuStandardTests: #24707 (0bf7675) put Inspect Element in the tab bar's + menu. - AcpmuxRefusedDaemonTests: #24795 (c7daff2) rewrote the refusal copy (no socket path; Quit that app; the holder-less refusal reconnects on its own) and left its own test on the old copy. - AgentPaneTranscriptStepTests, AgentPageProviderEventsTests: since #24617 (4abd404) a new subscription's events go out a main-actor turn later; the tests wait for them (bounded by the suite time limit). Real breaks (the code is fixed): - ActionSurfaceParityTests: #24707 made the sidebar section menu 13 top-level rows (the limit is 12); its Inspect Element goes in the Options folder. - TabSelectionActionsTests: Save and Close Tab (#23176) had a target reason for a menu row only, so the palette's run on a terminal tab was enabled and then refused; the reason now covers the untargeted run too. - SettingsSchemaExportTests: #24631 (78d7472) added four New Tab widget settings (clock, timer, warm greeting, quote) without strings or an agent policy: their 8 strings in all 21 locales, and the agent may set them. - NativeTooltipGuardTests: Mac Screen (ffc998b, 0372726) and No Color (c3bd2b2) drew raw tool tips: the No Color swatch uses themedToolTip, the toolbar's own helper is renamed setThemedHelp (it already set themedToolTip), the menu bar status item is marked native. - WorkspaceNameSourceTests: #24627 (f8c226e) counted any renamed '~' as unnamed (nameRevision > 0); only the automatic namer's '~' is. - AgentPaneMediaNoAutoActionTests: #24619 (5ff4b0c) resolved every image.load through the raster-only image roots, so a chat's own SVG or PDF was refused; non-raster files resolve in the chat's roots again. - BrowserProfileLinkMenuTests: e01bdd4 gave menu symbols their natural size; a profile's symbol is centered in the 16 pt square again, so names line up. - PhoneProcessRunner (passed alone, failed in the full run): a captured run ended before its stderr was read; it now waits for the end of stderr too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
`web/tests/model-catalog.test.ts` "the checked-in catalog > acpmux bundles the same catalog" is red on `feat-cmux-next`: it asserts the two files are byte-identical, and #24631 added `inlineFast: true` to the nine OpenAI models in `web/data/model-catalog/snapshot.json` without the bundled copy. That is the `CI / web / Web tests (4/4)` red on every PR that pulls the web lane in. `web/tools/refresh-model-catalog-snapshot.ts` writes one body to both paths, so the snapshot is the source of truth and the bundled copy is its copy; this is `cp web/data/model-catalog/snapshot.json cmux-tui/crates/acpmux/catalog/models-v1.json`, nothing else. The only difference was those nine `inlineFast` flags, and `inlineFast` is read by the composer's model picker in `webviews/`, not by acpmux, which serves the bytes: offline and first-run acpmux now offers the same inline Fast toggle as the live feed, which is what #24631 intended. ### Observed / Not run Observed: `cmp` on the two files now reports no difference; the structural diff before this commit was exactly nine `"inlineFast": true` lines under the `openai` provider's models. Not run: the web Bun suite (no `bun install` for `web/` on this host); CI's web lane runs it on this PR. Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a174e4-3868-7f51-8f3d-21b34ad270b2&host=huge-blue
…xture, and acpmux's bundled catalog (#25180) * docs(web): the cmux-next CLI and settings references are fresh again (base red) `web/tests/next-docs.test.ts` is red on `feat-cmux-next`: the CLI and MCP reference last matched the action catalog at cf81808, and the catalog has moved many times since (`remote.openRemote`, `sidebar.item.toggleArchive` and others), while the settings reference misses `agentPane.display.environment.placement`. Nothing regenerates them on a base push, so the `CI / web / Web tests` shards fail on every PR that pulls that lane in, and `web/tests/docs-search-cache.test.ts` fails with them. Written by `bun web/scripts/export-next-docs.ts`, the generator the test's own `expect(buildCliReference(...)).toEqual(...)` compares against. No hand edits. ### Observed / Not run Observed: at `origin/feat-cmux-next`, the generator rewrites both files to these bytes, so both assertions' inputs were stale. Not run: the web Bun suite itself (no `bun install` for `web/` on this host); CI's web lane runs it on this PR. Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a174e4-3868-7f51-8f3d-21b34ad270b2&host=huge-blue * CI: the two cmux-next docs references join the generated-files baseline `cmux-next no new generated files` errors on a PR that edits a tracked generated file no "committed" generator and no baseline line covers, and both next-docs references are exactly that: git tracks them (cf81808) and generated-files.json has no entry for `bun web/scripts/export-next-docs.ts`. So the regeneration this PR is, which is the only way to make web/tests/next-docs.test.ts green, cannot pass that guard without the lines. The baseline is defined as "the generated files git still tracks that no committed generator covers", and the base tracks both, so this is the guard's own door for them; its other two (a new committed export in generated_outputs.py, a widened committed generator) are refused on purpose, because outputs may only move out of git. The cutover that gitignores these and generates them with the docs removes both lines again. Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a174e4-3868-7f51-8f3d-21b34ad270b2&host=huge-blue * test(web): the docs-search fixture links web/data, which the generator imports (base red) `web/tests/docs-search-cache.test.ts` is red on `feat-cmux-next`: its fixture symlinks `app`, `i18n`, `messages` and `node_modules` into a temp `web/` and runs `tools/build-docs-search.mjs` there, but cf81808 gave that generator three imports under `../data/next-docs/` (the generated CLI and settings references and `pages`). The fixture cannot resolve them, so every build in the test dies with "Cannot find module '../data/next-docs/cli-reference.generated.json'" before any assertion runs, which is the `CI / web / Web tests (2/4)` and `(4/4)` red on every PR that pulls the web lane in. `data` joins the symlinked directories. It is read-only in the fixture, like the other four; nothing in the test writes under it. ### Observed / Not run Observed: the import list in web/tools/build-docs-search.mjs:15-17 against the fixture's symlink list at web/tests/docs-search-cache.test.ts:55, and the CI log's module-resolution failure naming exactly that path. Not run: the test itself (no `bun install` for `web/` on this Linux host, and the test needs pagefind from node_modules); CI's web lane runs it on this PR. Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a174e4-3868-7f51-8f3d-21b34ad270b2&host=huge-blue * model catalog: acpmux's bundled copy is the snapshot again (base red) `web/tests/model-catalog.test.ts` "the checked-in catalog > acpmux bundles the same catalog" is red on `feat-cmux-next`: it asserts the two files are byte-identical, and #24631 added `inlineFast: true` to the nine OpenAI models in `web/data/model-catalog/snapshot.json` without the bundled copy. That is the `CI / web / Web tests (4/4)` red on every PR that pulls the web lane in. `web/tools/refresh-model-catalog-snapshot.ts` writes one body to both paths, so the snapshot is the source of truth and the bundled copy is its copy; this is `cp web/data/model-catalog/snapshot.json cmux-tui/crates/acpmux/catalog/models-v1.json`, nothing else. The only difference was those nine `inlineFast` flags, and `inlineFast` is read by the composer's model picker in `webviews/`, not by acpmux, which serves the bytes: offline and first-run acpmux now offers the same inline Fast toggle as the live feed, which is what #24631 intended. ### Observed / Not run Observed: `cmp` on the two files now reports no difference; the structural diff before this commit was exactly nine `"inlineFast": true` lines under the `openai` provider's models. Not run: the web Bun suite (no `bun install` for `web/` on this host); CI's web lane runs it on this PR. Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a174e4-3868-7f51-8f3d-21b34ad270b2&host=huge-blue * docs(web): the settings reference picks up agentPane.attachmentView The base merge added the setting; the generated reference follows the schema. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-24ce2bb1cc47fb95fa20 --------- Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
#24631 made Add Widgets a disclosure whose role=menu list stayed in the DOM while closed. The page's Escape handler stands down for any open menu, so Escape never ended edit mode. The menu now renders only while open, a pick closes it, and Escape closes it before it ends edit mode. new-tab-widget-edit now drives the widget menu (show) instead of the old {edit: add} button.
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
The composer’s Fast affordance follows model capability instead of a harness-name guess. Models marked as a free, easy inline toggle show a lightning bolt directly beside the model name in the picker; paid or otherwise non-toggleable Fast stays tucked inside the model menu. Claude therefore has no bolt while Codex can show one. The New Tab Minimal default is the composer alone: no greeting or heading is shown until the user opts into the work-on question and other widgets.
Leo’s direction: “the bolt sits beside the model name only for harnesses where fast is a free, easy toggle (Codex). For Claude (paid fast), and any harness where fast isn't freely toggleable, keep fast tucked inside the model menu; show no bolt on the button.” He later clarified: “Default new tab: no heading text at all ... Add opt-in widgets above the composer, each its own toggle, all off by default.”
The new-tab customize menu and Settings expose independent toggles for the work-on heading, clock, stopwatch, original warm time-of-day lines, and a bundled public-domain quote. Gallery variants cover all widgets off and all on, plus Codex-above, Claude-below, and current-fixed layout comparisons.
Coordination
Validation
git diff --check@base-ui/utils/useIsoLayoutEffectdependency.Changelog
Made Fast placement capability-driven and added opt-in New Tab widgets with a quiet composer-only default.
agent-identity footer
Agent session: big-red
Gallery: agent-pane.new-tab/widgets-all-off, agent-pane.new-tab/widgets-all-on, agent-pane.new-tab/layout-codex-tabs-above, agent-pane.composer/reasoning-codex