Skip to content

cmux NEXT composer: search files, chats, and pages from + - #26568

Merged
teamleaderleo merged 11 commits into
feat-cmux-nextfrom
lane/nx-plus-search
Oct 30, 2026
Merged

teamleaderleo merged 11 commits into
feat-cmux-nextfrom
lane/nx-plus-search

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 28, 2026 •

Copy link
Copy Markdown
Collaborator

Leo asked: “likewise, the chatgpt desktop app, let's do their + symbol's capabiliities for our composer. we want to be having more command palette related capabilities and stff to be able to to be surfaced”.

Base already absorbed most of this branch: the shared composerPlusRegistry (#26566) and the searchable + palette (#26843). This PR is now the remaining piece on top of them: the + menu's Search section gains Search chats and Search pages, in the chat composer and in New Tab.

  • Search chats runs agentPane.searchChats, the command palette's chats page.
  • Search pages runs history.search, the palette's History search page. The agent pane used to refuse history.search (AgentPaneModel.runAction allowed only newTab.page, agentPane.searchChats and the connect actions), so the row did nothing. It now goes through AgentPaneModel.paletteActions, which allows both palette pages. Like Cmd-K, they open the app's own palette, so they don't use gesture credit.
  • If the app refuses either action, the composer says so in a notice (composer.offloadNotRun) instead of silently doing nothing.
  • New Tab has no file search, so its + offers no Search files. Before, it called searchFiles, which the pane refuses. A host that passes no onPlusCommand gets no search rows at all.
  • The chat composer's Search section header now reads "Search" instead of "Search files", since it holds more than files.

Risk: small and contained. One action id is added to the agent pane's allow list (a palette page that is already in the menu, keyboard and palette surfaces). The rest is webview menu rows.

Tests: composerPlusRegistry.test.ts checks that both rows dispatch through the extension handler and that their ids are in the Swift paletteActions set. NewTabScreen.test.tsx checks that New Tab shows both rows, runs them, and shows no Search files. Without a handler it shows no rows. AgentPaneConnectActionTests.paletteSearchPagesRunWithoutAGesture checks that history.search runs and searchFiles stays refused (fleet package-test lane: passed). The focused bun suites (33 pass), the web typecheck and the catalog key check pass on Linux CI. The gallery add-menu (chat) and attachment-menu (New Tab) states now check for both rows.

No capture: the only native change is one id added to the agent pane's action allow list (AgentPaneModel.paletteActions), which draws nothing; the visible change is webview-only and is shown by the gallery captures below.

Gallery captures

Gallery: agent-pane.composer/add-menu, agent-pane.new-tab/attachment-menu

Linux Chromium gallery, base e7ab659e vs head e19ae982 (the gallery advisory run at this head). The New Tab + gains Search chats and Search pages under a Search header. In the chat + the section header now reads Search, and the rows sit under it in the scrolling menu.

Before After
Chat, dark
Chat, light
New Tab, dark
New Tab, light

Agent session: agent session

🤖 Generated with Claude Code

@github-actions

github-actions Bot commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

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

Review 28aa820: 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=pr26568 -f ref=lane/nx-plus-search -f platform=macos -f backend_mode=local

Gallery before/after for 28aa820: 2 states rendered, 4 images differ (picked by the Gallery: line in the PR body). Images are in the run's artifact, not on this public PR.

gh run download 40998253932 -R manaflow-ai/cmux -n gallery-advisory-26568-28aa82014d4954b5f92d9b710d5c547397adc527 (then read gallery-review.json)

States
State Theme Status Diff Picked by
agent-pane.composer/add-menu Apple System Colors Light changed 0.0435% pr-body
agent-pane.composer/add-menu Apple System Colors changed 0.0426% pr-body
agent-pane.new-tab/attachment-menu Apple System Colors Light changed 5.66% pr-body
agent-pane.new-tab/attachment-menu Apple System Colors changed 5.58% pr-body

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 28aa82014d (run 40992305404 attempt 1): 2 code, 1 unknown.

Job Verdict Why
web / react-apps-base-check (1) code a web test failed
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 composer-menu-dismiss.test.ts chromium: agent-pane.new-tab reasoning-chip at 760 px: picking a mode or a level hands the keyboard ...: failed (job)
  • seen on other PRs composer-menu-dismiss.test.ts chromium: agent-pane.new-tab reasoning-chip at 300 px: picking a mode or a level hands the keyboard ...: failed (job)
  • seen on other PRs composer-menu-dismiss.test.ts webkit: agent-pane.new-tab reasoning-chip at 760 px: picking a mode or a level hands the keyboard ba...: failed (job)
  • seen on other PRs composer-menu-dismiss.test.ts webkit: agent-pane.new-tab reasoning-chip at 300 px: picking a mode or a level hands the keyboard ba...: 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)
  • seen on other PRs reasoning-own-control.test.ts New Tab at 400 px: the model button opens its menu, whose Effort row lists live levels: failed (job)
  • seen on other PRs reasoning-own-control.test.ts New Tab at 300 px: the model button opens its menu, whose Effort row lists live levels: failed (job)
  • seen on other PRs reasoning-own-control.test.ts live chat at 760 px: the model button opens its menu, whose Effort row lists live levels: failed (job)
  • seen on other PRs agent-pane-bottom-stack.test.ts the question, the dock, the queue and the card stack without overlapping or a gap where the strip wa...: failed (job)
  • seen on other PRs agent-pane-bottom-stack.test.ts in a short pane the transcript keeps room and the queue scrolls inside its height: failed (job)
  • ... 6 more in the job logs
Matched log lines
web / react-apps-base-check (1): (fail) chromium: agent-pane.new-tab reasoning-chip at 760 px: picking a mode or a level hands the keyboard back to the prompt [31031.84ms]
web / react-apps-base-check (4): (fail) the question, the dock, the queue and the card stack without overlapping or a gap where the strip was [947.69ms]

Not re-run automatically: web / react-apps-base-check (1), 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); no finished base run on 0ce3c31 to compare; do not merge until green; see lane-rules

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

blacksmith-sh Bot commented Oct 28, 2026 •

Copy link
Copy Markdown

Found 16 test failures on Blacksmith runners:

Failures

Test View Logs
test/agent-pane-bottom-stack.test.ts/agent-pane-bottom-stack.test View Logs
test/agent-pane-bottom-stack.test.ts/agent-pane-bottom-stack.test View Logs
test/chat-open-long.test.ts/chat-open-long.test View Logs
test/chat-open-long.test.ts/chat-open-long.test View Logs
test/composer-menu-dismiss.test.ts/composer-menu-dismiss.test View Logs
test/composer-menu-dismiss.test.ts/composer-menu-dismiss.test View Logs
test/markdown-table-obsidian.test.ts/markdown-table-obsidian.test View Logs
test/markdown-table-obsidian.test.ts/markdown-table-obsidian.test View Logs
test/model-menu-submenu-up.test.ts/model-menu-submenu-up.test View Logs
test/model-menu-submenu-up.test.ts/model-menu-submenu-up.test View Logs

...and 6 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

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

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex gpt-6-astra high, next-review): BLOCK at 21f81db

  • webviews/src/agent-session/acpmux/Composer.tsx:1997 and newtab/NewTabScreen.tsx:1204: the Pages row calls action.run with history.search, but the agent-pane endpoint rejects that action ID. The catch suppresses the error, so Search pages silently does nothing.
  • webviews/src/agent-session/acpmux/newtab/NewTabScreen.tsx:1197: the New Tab Files row calls action.run with searchFiles, which is also not an allowed agent-pane action (and New Tab has no file-search UI). This row likewise silently does nothing.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Orphaned: no activity for 13 h, and no lane holds a lease on it. The orphan sweep could not merge feat-cmux-next in: conflicts in webviews/src/agent-session/acpmux/Composer.tsx, webviews/src/agent-session/acpmux/composerPlusRegistry.test.ts, webviews/src/agent-session/acpmux/composerPlusRegistry.ts. Listed for a lane to resolve.

teamleaderleo and others added 2 commits October 29, 2026 15:27
Base absorbed the shared + registry (#26566) and the searchable palette (#26843);
this branch's earlier copies of them are dropped in favor of base.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-d3e7b519f093e7e33e5f
Leo: "likewise, the chatgpt desktop app, let's do their + symbol's
capabiliities for our composer. we want to be having more command palette
related capabilities and stff to be able to to be surfaced"

The chat composer's + and the New Tab + gain a Search section: Search chats
opens the palette's chats page (agentPane.searchChats) and Search pages opens
its History search page (history.search). The agent pane now allows
history.search (AgentPaneModel.paletteActions), so the row runs instead of
being refused; a refusal shows as the composer's notice. New Tab has no file
search, so it offers no Search files.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-d3e7b519f093e7e33e5f
@github-actions github-actions Bot added risk:high Risk tier (docs/ci/risk-tiers.md) and removed risk:normal Risk tier (docs/ci/risk-tiers.md) labels Oct 29, 2026
teamleaderleo and others added 2 commits October 29, 2026 17:43
New Tab shows no transcript, so the chat's notice never reached it: the page
now says the refusal over its composer until the next pick or edit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-d3e7b519f093e7e33e5f
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex gpt-6-astra high, next-review): SHIP at 28aa820

No blocking findings.

Review limited to the supplied diff and files; full repository reads were unavailable. Tests were not run.

@teamleaderleo
teamleaderleo merged commit 46c97e9 into feat-cmux-next Oct 30, 2026
173 of 183 checks passed
@teamleaderleo
teamleaderleo deleted the lane/nx-plus-search branch October 30, 2026 03:35
teamleaderleo added a commit that referenced this pull request Oct 30, 2026
Resolves conflicts with #26740 and #26568: keep the palette actions, keep
this PR's removal of the agent pane's sign-in fallback, and pass #26740's
chat pick into bindMachineCreation (read when the action runs, since sign-in
may finish after focus moved).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-5160a5704f7bd6c329fa
@github-actions

github-actions Bot commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

teamleaderleo added a commit that referenced this pull request Oct 30, 2026
cmux-bot Bot pushed a commit that referenced this pull request Oct 30, 2026
…26568) (#27993)

* Reapply "cmux NEXT composer: search files, chats, and pages from + (#26568)" (#27913)

This reverts commit 1a3add7.

Agent-Session: https://cmux.com/deeplink/agent?id=aid-d3e7b519f093e7e33e5f

* cmux NEXT composer: let the + menu take the pane's room so its Search rows stay whole

The + menu's Search section (Search files, Search chats, Search pages) made it 328px tall. Every
.acpmux-menu is capped at min(360px, 50vh), 300px in a 600px pane, so the menu scrolled and
clipped Search pages under its bottom edge: a press at its middle or bottom hit the composer
behind it. The + menu now takes the room the pane gives it (useUiAnchor still caps it to the
space above or below +), up to 520px.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-d3e7b519f093e7e33e5f

* cmux NEXT composer: the + menu scroll-fade test opens in a pane short enough to scroll

The + popup now takes the room the pane has above or below + (up to 520px) instead of 50vh,
so in the test's 420px pane the 328px menu fits and has nothing to scroll. The test checks
the scroll-edge fade, so it opens the picker in a 320px pane, as it does the palette, where
the rows still scroll.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-d3e7b519f093e7e33e5f

* cmux NEXT menus: an anchored menu keeps its scroll when it re-measures

useUiAnchor re-measures an overlay on any scroll in the capture phase, its own included, and
measuring takes the inline max-height off. A menu whose stylesheet cap is taller than the room
it has (the + menu, now up to 520px) grew to that cap for the measure, the browser clamped its
scroll to the taller box, and the clamp stayed: scrolling the + menu in a short pane snapped back
(composer-plus-menu-polish: scrollTop 21 of 100). The overlay's own scroll no longer re-measures,
and a re-measure puts the scroll back where it was.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-d3e7b519f093e7e33e5f

* cmux NEXT composer: the + search strings as three added entries, base's catalog untouched

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-d3e7b519f093e7e33e5f

* cmux NEXT composer: keep the + search strings as three added catalog entries

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-d3e7b519f093e7e33e5f

* Restore Localizable.xcstrings to base plus this PR's three strings

The base merge mangled the file's layout; this keeps base's file and adds only
composer.plusChatsHint, composer.plusPagesHint and composer.plusSearchPages.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-d3e7b519f093e7e33e5f

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

This branch was previously deployed

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

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant