Picker: choose Cmux as a provider, not an agent harness
Cmux routes no longer appear as selectable agent harnesses. The existing Account / CLI login row is now Provider and offers compatible Cmux routes alongside direct accounts. Choosing a provider changes the session route through the existing callback; real launchers such as cmux-codex remain available.
Leo’s words: “cmux should not show up in this list”; “is cmux supposed to be our model router? should not work like that ... user should pick harness, and change provider to cmux, something like that”.
Only the reported cmux-router and local-coderouter kinds are excluded as harness choices. Family eligibility, inherited route restrictions, current legacy bindings, and refused-switch feedback remain intact. This is separate from native popup migration #27140 and canonical launch-variant grouping #26969; it does not implement either change.
Integration requirement: #27140 must carry these provider/harness semantics into its native declarative rows: exclude only router kinds from the harness rail, retain real cmux-prefixed launchers, and expose compatible Cmux routes in Provider with the same session-bound route callback and refusal handling. Merge/rebase ordering must preserve this fix; replacing the web menu with native rows must not restore the old Account-only filter.
The gallery contains three treatments at new-tab.quick-model-menu: provider-submenu, provider-inline, and provider-grouped. The compact submenu is selected because it keeps the existing footer position and height. The reference is Claude desktop’s compact model picker (model-picker-open.png); existing colors and materials are retained.
Verification
-
Red: run 40795927087, snapshot
877d3f951bb0edad4697fae27aa6742c8a404394: 44 passed, 2 expected failures (router selectable; Provider row absent). -
Green: run 40796285392, snapshot
d47fbddc0e07204d7869b42f85e0164c242b0234: fullbun run checkpassed; 67 tests passed across the catalog, compact menu, and failed-turn route tests. That original snapshot and original head389c2bf5af4428e41c8a7547529a2f9fd8e99744share tree106f58e9df3feb1a53bffe9ea0cd4b5bfbf99d3f. -
Focused command:
cd webviews && bun test src/agent-session/acpmux/modelCatalog.local.test.ts test/model-menu-compact.test.tsx(green run additionally coverstest/turn-error-card.test.tsx). -
Localization reuses
picker.provider, translated in all 21 shipped locales.localize-changesreports existing unrelated catalog parity debt; no catalog files change. -
Follow-up red: run 40797028972, snapshot
baeb997d1bfcbd3501d9882b92149f9b2c60ba03: 4 passed, 1 expected failure when a router and real launcher share a family. -
Final full webview checks passed in run 40797054598; all provider/catalog regressions passed. The 67-test sweep had one failure in the existing optional reasoning-slider focus assertion (66 passed). The exact failure was the active element not yet having class
acpmux-effort-rangeafter the test’s zero-delay yield. The slider’s existing focus effect waits for an animation frame. A final-head rerun passed all 67 tests in run 40797336225, snapshot1014ff419a8635355ba278739dcbdb5327d21287with the same final tree. The first baseline comparison, run 40797496184, had an invalid setup because its shallow checkout lacked the base commit; its failures are discarded. The corrected bounded baseline comparison in run 40797904300 explicitly fetched and checked outfeat-cmux-nextcommit7bf46b579c0435d6cd103fca79190bfdad9f799f. Running that exact optional-slider test 10 times produced 2 passes and 8 failures at base line 310 with the identicalactiveElementassertion, expectedtrue, receivedfalse. This confirms the prior focus failure is an existing base flake; the final-head focused sweep remains 67/67 passing. Snapshotdce0dd6d90cefb2c80e954073331d7aede0abdc7and final head7c12da130b23b8c1db8e3e3d979a517598fd4b91share tree7dcc53adbff36310ec0a075190d6ea228433178a. -
Independent gpt-6-astra/high review: SHIP at
7c12da130b23b8c1db8e3e3d979a517598fd4b91, after fixing the shared-family representative bug found on the original head.
Observed / Not run
Behavioral red/green and complete webview checks are observed. All six light/dark gallery states rendered ready and their PNG archive transferred successfully in run 40797255970. The captured snapshot 80f5cc06a5429bf215c073edf2626d23b272e2ca has the final head’s exact tree; each PNG’s results.json names that SHA and QuickModelMenu.gallery.tsx. The compact submenu and grouped alternative fit; the inline variant consumes more height and is not the default. Exact-head independent review passed. The Gallery line below requests the standard before/after artifact, including the existing combined state. Native app capture is not claimed for this web consumer change. Risk: the row is renamed in every composer using this menu; existing gallery and browser selectors are updated with it.
Capture files
The successful capture run log contains the PNG archive between PROVIDER_CAPTURE_BEGIN and PROVIDER_CAPTURE_END; these are synthetic gallery fixtures. Relative paths inside that archive:
new-tab.quick-model-menu--provider-submenu--en--Apple_System_Colors--w520-chromium.pngnew-tab.quick-model-menu--provider-submenu--en--Apple_System_Colors_Light--w520-chromium.pngnew-tab.quick-model-menu--provider-inline--en--Apple_System_Colors--w520-chromium.pngnew-tab.quick-model-menu--provider-inline--en--Apple_System_Colors_Light--w520-chromium.pngnew-tab.quick-model-menu--provider-grouped--en--Apple_System_Colors--w520-chromium.pngnew-tab.quick-model-menu--provider-grouped--en--Apple_System_Colors_Light--w520-chromium.png
Gallery: new-tab.quick-model-menu/combined, new-tab.quick-model-menu/provider-submenu, new-tab.quick-model-menu/provider-inline, new-tab.quick-model-menu/provider-grouped
Changelog
Fixed: choose Cmux as a model provider while keeping agent harness choices separate.
Agent session: agent session