Skip to content

cmux NEXT composer: shared searchable destinations - #25316

Merged
teamleaderleo merged 18 commits into
feat-cmux-nextfrom
lane/nx-composer-searchable-repair11
Oct 26, 2026
Merged

teamleaderleo merged 18 commits into
feat-cmux-nextfrom
lane/nx-composer-searchable-repair11

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 26, 2026 •

Copy link
Copy Markdown
Collaborator

The classic machine picker now filters destinations, and project selection uses the shared Combobox already used by folders and environments. Typing filters rows; Enter picks; Tab completes readable text and then reaches connect/browse actions. Remote projects retain their machine identity even when paths match.

Leo, 2026-10-26: “in many many places we need that search capability. that combobox. for machines/environments, for models, etc. wherever you think it'd be relevant. but basically most things in the composer area... not permission sessings probably since it's smol”

The model picker already searches models and harness names. This fills the classic machine gap and removes the project chooser's duplicate keyboard/listbox implementation. Committed choices use aria-current separately from the highlighted suggestion. Permission menus retain their small menu.

Replaces #25277.

Reference matched: Claude desktop apps/claude/live/environment-picker.png: an immediately available filter, compact destination rows, and separate connect actions. Existing cmux glass and colors are retained. All captures below come from gallery fixtures.

Validation

Rebased onto current feat-cmux-next at 7246ee32b673ebe586fed6f1507b56190a24fc98; reviewed exact head is 5f284903e29dec68ac2aebf7116507278eac17a4 (tree 34f731743605f250e6a8127b67005e8e648f0aca). This PR is webview-only, so its before/after evidence is from the real Chromium/WebKit gallery captures below; the Mac builder capture route applies to native app captures and is not needed for these changed files.

Exact head: 5f284903e29dec68ac2aebf7116507278eac17a4; source tree: 34f731743605f250e6a8127b67005e8e648f0aca.

Managed proof 40268328247 completed successfully on Blacksmith: 124 tests across eight focused/neighboring picker suites, targeted formatting/lint, type checking, five behavioral red states, and a visual regression red state. The 13 focused tests cover machine filtering, opaque remote project identity after Tab, unchanged current/private-folder selection, keyboard access to connect actions, duplicate folder labels, and primary/right/middle/disabled/synthetic click behavior.

The visual test fails before the scoped field styling and passes afterward: the search field fills the menu and has no native input border. The run produced 24 Chromium/WebKit light/dark captures tied to the base and final source trees. Filtering changes list content: only the two typing steps permit a bounded layout-shift score of 0.002 (observed maximum 0.001876); all other layout/anchor/popup error checks retain their zero limit.

Independent Codex gpt-6-astra xhigh review: SHIP at this exact head, session 01a17667-d774-7072-8766-8959946276c9. Review was static; runtime proof is the hosted run above. The source worktree stayed clean and unchanged throughout proof. No tests or builds ran on Big Red or the GCP lane VM.

Whole-repository bun run check reports the same four warnings and zero errors on untouched base and final head; normalized diagnostics match (0ec142a8f596f0fd4160abca2b6fca1ddf17d3d983d41339961e582d01becd12). Targeted changed-file lint has zero warnings/errors. Localization uses existing keys only; localize-changes found zero new/changed keys. Strict catalog validation reports unchanged repository debt.

Before / after

Surface Before After
Machines, dark Machines before, dark Machines after, dark
Projects, dark Projects before, dark Projects after, dark
Machines, light Machines before, light Machines after, light
Projects, light Projects before, light Projects after, light

Changelog

Added: Searchable machine selection and shared project completion in the composer.

Agent session: big-red

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

Copy link
Copy Markdown
Collaborator Author

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

@github-actions

github-actions Bot commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

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

Review 817d0a8: 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=pr25316 -f ref=lane/nx-composer-searchable-repair11 -f platform=macos -f backend_mode=local

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

gh run download 40268195345 -R manaflow-ai/cmux -n gallery-advisory-25316-817d0a8e85ecba3d00084a5df1dd7e841fbe6f15 (then read gallery-review.json)

States
State Theme Status Diff Picked by
agent-pane.add-project-panel/environment Apple System Colors Light unchanged 0% own styles.css
agent-pane.add-project-panel/environment Apple System Colors unchanged 0% own styles.css
agent-pane.add-project-panel/sources Apple System Colors Light changed 1.53% own styles.css
agent-pane.add-project-panel/sources Apple System Colors changed 1.52% own styles.css
agent-pane.add-project-panel/directory Apple System Colors Light changed 2.12% own styles.css
agent-pane.add-project-panel/directory Apple System Colors changed 2.07% own styles.css
agent-pane.add-project-panel/keyboard Apple System Colors Light unchanged 0% own styles.css
agent-pane.add-project-panel/keyboard Apple System Colors unchanged 0% own styles.css
agent-pane.changes-file-menu/closed Apple System Colors Light unchanged 0% own styles.css
agent-pane.changes-file-menu/closed Apple System Colors unchanged 0% own styles.css
agent-pane.changes-file-menu/open Apple System Colors Light unchanged 0% own styles.css
agent-pane.changes-file-menu/open Apple System Colors unchanged 0% own styles.css
agent-pane.changes-file-menu/keyboard Apple System Colors Light unchanged 0% own styles.css
agent-pane.changes-file-menu/keyboard Apple System Colors unchanged 0% own styles.css
agent-pane.changes-git-actions/toolbar Apple System Colors Light unchanged 0% own styles.css
agent-pane.changes-git-actions/toolbar Apple System Colors unchanged 0% own styles.css
agent-pane.changes-git-actions/commit-form Apple System Colors Light unchanged 0% own styles.css
agent-pane.changes-git-actions/commit-form Apple System Colors unchanged 0% own styles.css
agent-pane.changes-git-actions/include-new Apple System Colors Light unchanged 0% own styles.css
agent-pane.changes-git-actions/include-new Apple System Colors unchanged 0% own styles.css
agent-pane.changes-git-actions/keyboard Apple System Colors Light unchanged 0% own styles.css
agent-pane.changes-git-actions/keyboard Apple System Colors unchanged 0% own styles.css
agent-pane.changes-git-actions/busy Apple System Colors Light unchanged 0% own styles.css
agent-pane.changes-git-actions/busy Apple System Colors unchanged 0% own styles.css
agent-pane.changes-git-actions/push-refused Apple System Colors Light unchanged 0% own styles.css
agent-pane.changes-git-actions/push-refused Apple System Colors unchanged 0% own styles.css
agent-pane.changes-options-menu/closed Apple System Colors Light unchanged 0% own styles.css
agent-pane.changes-options-menu/closed Apple System Colors unchanged 0% own styles.css
agent-pane.changes-options-menu/open Apple System Colors Light unchanged 0% own styles.css
agent-pane.changes-options-menu/open Apple System Colors unchanged 0% own styles.css
agent-pane.changes-options-menu/keyboard Apple System Colors Light unchanged 0% own styles.css
agent-pane.changes-options-menu/keyboard Apple System Colors unchanged 0% own styles.css

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

red: cmux-next checks (god files, concurrency, crash safety, l10n); no finished base run on 900234f to compare; do not merge until green; see lane-rules

Tour of 5f284903e2 (run): no media. The tour did not run: only webview code changed (7 path(s)), which the gallery advisory run checks in Linux Chromium on the pull request (its artifact holds any captures); add the media-tour-mac label, then re-add media-tour, to tour it on a Mac.

@blacksmith-sh

blacksmith-sh Bot commented Oct 26, 2026 •

Copy link
Copy Markdown

Found 73 test failures on Blacksmith runners:

Failures

Test View Logs
/tmp/tmpg9ixmjxx/summary-fail.json (live):/summary-fail.json (live): View Logs
/tmp/tmpgms_qt_p/summary-missing.json (live):/summary-missing.json (live): View Logs
[new_workspaces] debug.new_workspace timed 0 of 50 new workspace rows/
[new_workspaces] debug.new_workspace timed 0 of 50 new workspace rows
View Logs
[new_workspaces] the window draws no frames/[new_workspaces] the window draws no frames View Logs
[tabs] debug.tab_switch timed 0 of 40 switches/
[tabs] debug.tab_switch timed 0 of 40 switches
View Logs
[tabs] the window draws no frames/[tabs] the window draws no frames View Logs
bench OTHER_SWIFT_FLAGS is 'OTHER_SWIFT_FLAGS=$(inherited) -DCMUX_BENCH_HOOKS -DCMUX_BL
OCKING_CHECKS'/
bench OTHER_SWIFT_FLAGS is 'OTHER_SWIFT_FLAGS=$(inherited) -DCMUX_BENCH_HOOKS -DCMUX_BL
OCKING_CHECKS'
View Logs
bench OTHER_SWIFT_FLAGS is 'OTHER_SWIFT_FLAGS=$(inherited) -DCMUX_BENCH_HOOKS -DCMUX_BL
OCKING_CHECKS'/
bench OTHER_SWIFT_FLAGS is 'OTHER_SWIFT_FLAGS=$(inherited) -DCMUX_BENCH_HOOKS -DCMUX_BL
OCKING_CHECKS'
View Logs
convention violations found (ERROR lines above)./
convention violations found (ERROR lines above).
View Logs
test/agent-pane-bottom-stack.test.ts/agent-pane-bottom-stack.test View Logs

...and 63 more test failures. View all on Blacksmith

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

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

cmux-next / cmux-next checks (god files, concurrency, crash safety, l10n) › Script tests (pin-cmux-tui, embed-cef, ensure-cef store) is red on 10 of 14 fresh feat-cmux-next PR heads in the last 2:00:00, so it is most likely a base red, not this PR's. The base-reds lane has it; a base merge picks up the fix once it lands.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Owned by nx-composer on big-red

Leo, 2026-10-26: "in many many places we need that search capability. that combobox. for machines/environments, for models, etc. wherever you think it’d be relevant. but basically most things in the composer area... not permission sessings probably since it’s smol"

Classic machines now use the shared Combobox already used by folder and environment pickers; projects reuse it instead of hand-rolling keyboard and listbox behavior. Existing model and harness name search stays in the model picker. Only listed machines can be submitted. Shared completion gives opaque remote project keys readable text without losing the selected machine. Static targeted formatter and lint: 0 warnings/errors. Behavioral red/green and gallery proof are prepared for managed CI; no tests or builds ran on the lane VM.

Agent-Session: https://cmux.com/deeplink/agent?harness=codex&session=01a175ec-d023-74e1-a705-c0cab51d4796&host=big-red
Fix independent Astra review findings: completed search fields release Tab to their adjacent actions and keep the popover open on internal focus changes. aria-current identifies the committed project, private-folder and machine choice separately from the highlighted suggestion. Added regressions first in f83daf4; hosted red/green remains pending. Targeted formatter/lint passes; no tests/builds on VM.

Agent-Session: https://cmux.com/deeplink/agent?harness=codex&session=01a175ec-d023-74e1-a705-c0cab51d4796&host=big-red
The shared LocationPicker keeps absolute-path completion for folders; only machine IDs complete to their display labels. Addresses independent Astra P2 with a regression committed first. Targeted formatter/lint0warnings/errors; runtime validation prepared for managed CI.

Agent-Session: https://cmux.com/deeplink/agent?harness=codex&session=01a175ec-d023-74e1-a705-c0cab51d4796&host=big-red
Preserve full folder paths in accessible option labels, and share the committed-row predicate between aria-current and the visible checkmark. An unmatched Use path command never inherits the private-folder check. Red regressions precede the fix; targeted static lint/format passes, managed runtime remains pending.

Agent-Session: https://cmux.com/deeplink/agent?harness=codex&session=01a175ec-d023-74e1-a705-c0cab51d4796&host=big-red
Mouse press rows still pick directly, matching the existing composer menu behavior. Tab completion keeps the opaque row key for Enter after the readable completion text filters the list; typed changes clear stale identity. This fixes the hosted focused and classic New Tab regressions.

Agent-Session: https://cmux.com/deeplink/agent?harness=codex&session=01a175ec-d023-74e1-a705-c0cab51d4796&host=big-red
Regression first: primary mouse presses select once; right and middle presses, disabled rows, and synthetic keyboard clicks follow their own paths.

Agent-Session: https://cmux.com/deeplink/agent?harness=codex&session=01a175ec-d023-74e1-a705-c0cab51d4796&host=big-red
Primary left presses select once; right and middle buttons and disabled rows do not invoke onSubmit. Synthetic or keyboard clicks still submit when no physical press already activated the row. Addresses the independent review finding with red-first coverage.

Agent-Session: https://cmux.com/deeplink/agent?harness=codex&session=01a175ec-d023-74e1-a705-c0cab51d4796&host=big-red
Regression first: stale physical presses still permit keyboard activation, and Tab skips disabled destinations before Enter.

Agent-Session: https://cmux.com/deeplink/agent?harness=codex&session=01a175ec-d023-74e1-a705-c0cab51d4796&host=big-red
Validate completed keys against current enabled suggestions, choose enabled rows for Tab completion, and suppress only the real mouse follow-up click. An incomplete press no longer swallows keyboard activation. This addresses the independent Astra findings with red-first coverage.

Agent-Session: https://cmux.com/deeplink/agent?harness=codex&session=01a175ec-d023-74e1-a705-c0cab51d4796&host=big-red
Fix the generic Combobox test fixture: provide the labels queried by the test, and count both the standalone physical press and later keyboard click as independent submissions.

Agent-Session: https://cmux.com/deeplink/agent?harness=codex&session=01a175ec-d023-74e1-a705-c0cab51d4796&host=big-red
Gallery regression first: project search fills the popover width and retains the composer field style instead of the native short input.

Agent-Session: https://cmux.com/deeplink/agent?harness=codex&session=01a175ec-d023-74e1-a705-c0cab51d4796&host=big-red
The shared search field keeps the old project chooser appearance through a scoped class, since its former wrapper selector no longer applies. It fills the menu width without a native input border. Gallery checks were committed first.

Agent-Session: https://cmux.com/deeplink/agent?harness=codex&session=01a175ec-d023-74e1-a705-c0cab51d4796&host=big-red
@teamleaderleo
teamleaderleo force-pushed the lane/nx-composer-searchable-repair11 branch from 817d0a8 to 5f28490 Compare October 26, 2026 10:00
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Independent Codex gpt-6-astra xhigh review: SHIP at exact rebased head 5f284903e29dec68ac2aebf7116507278eac17a4, tree 34f731743605f250e6a8127b67005e8e648f0aca. No concrete P0–P2 findings in the complete supplied diff.

Primary verification: prepush gate and diff check pass against current feat-cmux-next 7246ee32b673ebe586fed6f1507b56190a24fc98. The product diff remains web-only: shared searchable Combobox behavior for machine/project destinations, with permission menus unchanged. Hosted predecessor proof covered 124 tests, 13 focused regressions, 24 real Chromium/WebKit light/dark captures, and exact source/tree receipts; the rebased product diff is unchanged apart from ancestry. Captures were decoded and verified for PNG chunks, sizes, SHA-256, CRCs and IEND. Static review cannot independently verify hosted receipts.

The Mac --builder mac capture route is reserved for native app capture; this PR changes webviews only, so the real browser gallery captures are the relevant before/after evidence. No synthetic images are used.

Agent session: agent session

@teamleaderleo
teamleaderleo merged commit aae92e0 into feat-cmux-next Oct 26, 2026
134 of 144 checks passed
@teamleaderleo
teamleaderleo deleted the lane/nx-composer-searchable-repair11 branch October 26, 2026 10:22
@github-actions

github-actions Bot commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

lawrencecchen added a commit that referenced this pull request Oct 28, 2026
#25316 made the composer's folder and computer pickers shared searchable
destinations: a Popover with a search field, not a Menu. The pointer-close test
waited for a .ui-menu that never opens, so it timed out; it now waits for the
location popover and checks the same no-ring and focus outcomes.
lawrencecchen added a commit that referenced this pull request Oct 28, 2026
…ooter row

#26551 put the folder strip in the footer whenever the plain footer and the
Claude look were on, but the footer row only renders with chips. A New Tab
without chips lost its project strip (new-tab-minimal-default, new-tab-stage-layout).

Tests: new-tab-ask-model gives the global scope the ResizeObserver the
always-mounted footer row now uses; new-tab-minimal-default keeps the
headline slot that new-tab-headline-place requires, and matches the folder
option label of #25316.
lawrencecchen added a commit that referenced this pull request Oct 28, 2026
Combobox rows pick on the primary mousedown and skip the click that
follows (detail > 0) since #25316/#25304; a bare click() (detail 0) is a
separate pick, so the test recorded two new chats.
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.

1 participant