Repository navigation
cmux-next: chat clicks open beside the chat, one right pane - #20553
teamleaderleo wants to merge 20 commits into
Conversation
open-beside-e2e.py seeds a reply with two loopback links and a file path (debug.agent_pane seed_rows fixture: "links", webviews linksTurn.ts) and native-clicks them: the first link opens a pane right of the chat, the second adds a tab to that pane, a re-click adds none, and the file ref's page lands in that pane too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Leo 2026-10-14: a link (a PR's among them) or a file ref clicked in a chat opens in the pane right of the chat, the in-app way. ChatBeside is the one router: the first click with no pane there makes one (a new column, as an agent's own browser does through AgentBesidePlacement); each later click adds a tab to that pane, never another split; a click on what a tab there already shows selects that tab. Keyboard focus stays in the chat. Command-click keeps the old place: the default browser for a link, a tab in the chat's pane for a file. A turn's diff chip with no header split beside the chat joins that pane. Wired: AgentTabContent (AgentPaneView.openURL: transcript links, PR chips and links, the link menu's Open Link; onOpenFile: path chips, changed-file rows) and AgentChatSplitToggles (the Changes diff). File pages take a beside hook (FilePageService, FilePageOpener, ViewerService). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
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 |
Gallery21 states changed: agent-pane.transcript/long-code, agent-pane.thread-minimap/long-chat, agent-pane.transcript/github-references, agent-pane.transcript/permission, agent-pane.transcript/working-tools, ... · 1 play check failed Diff page and renders (the run's 15 more on the diff page. Live preview (follows this branch; start it with
Play checks failed (0 px anchor movement, 0 layout shift, no frame over 33 ms unless the entry gives a reason):
75 nondeterministic states differed from a second render of the same head (a clock or fixture leak) and are not counted as changes. |
This comment has been minimized.
This comment has been minimized.
|
red: web / Web status; do not merge until green; see lane-rules |
|
cmux-next tour of Path-selected interactions
Agent pane (before): 3 ok
Screenshots (11)1. Launch
Screenshots (11)1. Launch Tours are data in |
|
Unclear: CI failed on
Not re-run automatically: Written by |
|
Agents: |
…ows still opens beside Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tches anchors A file a pane other than the one beside the chat shows (the chat's own, after a Command-click) no longer turns the click into a silent no-op: the beside open always makes its tab, looking only in the pane beside the chat for one to select, and only where a store tab can move there; else the old place. The placement is made only when the tab opens, so no tracked run waits out its bound. A link click carries its own modifiers (AgentPaneLinkClick); a link to another anchor opens its own tab; the unused diff entity is gone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… the old path Review of #20553: a file click while the daemon reconnects made no store tab, yet reported success and left the placement waiting 30 s. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tions lint Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- vp fmt webviews/test/ime-composition-keys.test.ts - vp fmt webviews/test/new-tab-omnibar-pointer.test.ts Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/38568956332
…and stays in view A New Tab page with seeded rows is no chat, so it never docks; this check binds a session on acpmux's fake harness and adds a fifth row: after the first click the chat is in a shown left dock and the opened pane is in view. Red 0/5 on the test build (links go to the default browser), green 5/5 on the fix (besidefix4, cua-4). Runs without --showcase (showcase mocks acpmux). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Base's per-build isolation (cx-is1kf.3, 677f1e1) moved a build's acpmux home from ~/.acpmux/tags/<slug> to ~/.acpmux/builds/<key>; the script looked only in tags/ and stopped at "no acpmux daemon came up". It matches its own build by the tag as a whole word, so tilesub3 never takes tilesubred3's daemon. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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. |
|
Visual preview of c5309e7: in the maintainers' private review feed. |
|
Orphaned: no activity for 118 h, and no lane holds a lease on it. The orphan sweep could not merge |
|
Superseded on
If one pane beside the chat is still wanted (for example behind the — cg-lane-adopt (agent; Leo's GUI push) |
|
Owned by orphan-sweep on cosmic-gray · session |
|
Owned by chief-pet-message-no-persist on cosmic-gray · session |
|
Closing as superseded by #22822 (7997e21, Leo 2026-10-20). On base, what a page opens is a tab in its own pane, routed through |
|
Adopted by orphan-sweep: this PR had no owner for 15+ minutes (orphan-sweep watch). The work so far is theirs; orphan-sweep lands it. |






































Bead: cx-1ndnn
In a chat, links, file refs and the Changes diff chip now open in the pane to the right of the chat. The first click makes that pane: a chat alone in its workspace docks left and the page opens right of it, so the chat stays in view. Later clicks add tabs to the same pane, never another split. Clicking something already open there selects its tab. Cmd-click keeps the old behavior: the default browser for links, the chat's own pane for files.
ChatBesideis the one routing entry point. It finds the pane right of the chat, selects a tab there that already shows the entity, or opens the entity there through the existing beside-caller placement (openBrowser,ViewerService.openFile(…, beside:)). Keyboard focus stays in the chat. Anything it can't place (a remote or reconnecting daemon, a file kind the browser previews) falls back to the old open.Call sites wired:
AgentTabContentopenURL: transcript links, PR chips and links, Open Link. A link click's own modifiers decide Cmd (AgentPaneLinkClick, set around the open indecidePolicyFor).AgentTabContentonOpenFile(tab target): path chips, changed-file rows, project files and instructions.AgentChatSplitToggles: the Changes diff chip targets the beside pane when one exists.Not wired yet (follow-ups on cx-1ndnn): subagent transcripts, terminals, Cmd for file refs (the page's open-file message needs the click's metaKey), and re-clicking the Changes chip selecting its tab. The opt-in Tile subagents layout builds on this.
No new animation: the dock and the tab use the existing placement.
Testing
open-beside-realchat-e2e.py: a real chat (acpmux fake harness)open-beside-e2e.py: a New Tab page seeded with the links replyopen-beside-realchat-e2e.pyafter the base merge (24f8b66: #20659's attach fix, #20635), Mac DEV buildDEV builds on cua-3/cua-4. The Linux pool shipped a stale web bundle, so those builds were made on Macs (cx-s3k17). Two Opus reviews: the second found nothing blocking; its reconnect finding is fixed (a reconnecting daemon takes the old path).
The real-chat script finds the build's acpmux home under
~/.acpmux/builds/<key>since base's per-build isolation (cx-is1kf.3); before #20659 every chat attach was refused on base (cx-b08ei), so the script could not bind a chat.Pre-push: crash ratchet, concurrency, god files (nothing grew), system-blue, conventions lint, webviews
bun run check.Proof
The recording below is from window snapshots of real DEV builds at 1500x900, with the composer's machine name blanked. I watched it. Before: nothing opens in the app; at the end the file page fills the chat's pane. After: the chat docks left, /pr/1, /pr/2 and notes.md open as tabs in one pane right of it, and the chat stays in view.
Changelog
🤖 Generated with Claude Code
Showcase
Full quality: open-beside-before-after.mp4
Open the live gallery