Repository navigation
cmux-tui: new-frontend-browser-tab can make its tab directly in a new split (frontend-browser-tab-split-v1) - #32862
Conversation
…er in the source pane (red) User report 2026-10-20: a pull request link clicked in an agent chat opened as another tab of the chat's pane, then slid into a right split. Fails: the browser tab is made in the source pane and moved with move-tab-to-split. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e daemon commit
new-frontend-browser-tab takes split {direction, pane_id?, split_id?}
(frontend-browser-tab-split-v1), sharing conversation-tab-split-v1's pane.split
path: the tab is created in the new pane, one pane-added delta, the source pane
never lists it. The app shows the split with a stand-in tab in the click's
frame and sends one create; an older daemon, files and new columns keep the
make-then-move path. A web link dropped on a right or bottom edge splits
directly too.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…d_browser_tab; api-compat surface lists split CI: E0592 duplicate keyed_frontend_browser_tab in frontend_browser_keys.rs (the new private helper reused open_url's name), and api-compat-check found spec/api-compat.surface.json stale for new-frontend-browser-tab's split. Also drops the unnecessary crate::mux:: qualifications rustc warned about. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…-tab split The raw Rust client's keyed browser create names split as missing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-ed9226b71907d8aaa0b6
|
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)
Shipped in:
|
|
Review (subagent claude-opus-5-5 medium): SHIP at 31ba863 Checked the Follow-ups:
|
|
Review (codex gpt-6-astra high, router-review): SHIP at 31ba863 Reviewed split creation, idempotent retries, failure cleanup, and shared conversation-tab behavior; no actionable findings. Six SDK generation checks and 16 Python protocol tests passed (Rust tests ran separately on fast checks: 82 passed). Follow-ups: none |
Leo (2026-11-03): "it's so slow to open and close idk if there's some sort of threading issue but it's nigh instant for claude and codex so we nede to be at least as fast" and "the browser/tab opening animation still plays on the main pane before going". Earlier ask (#23032's title): "a link opened to the right appears in its split, never in the source pane first".
leo-named-fix. This is the daemon half; the app wiring follows in a second PR.
What
new-frontend-browser-tabtakes an optionalsplit({direction, pane_id, split_id}, only withpane), behind the new capabilityfrontend-browser-tab-split-v1, the same objectnew-conversation-tabtakes underconversation-tab-split-v1. The tab is created directly in a new pane on that side ofpane, in onepane.splitcommit: onepane-addeddelta whose pane holds only the tab, and the source pane never lists it. Today the app creates the tab in the source pane, waits for the store to list it, then sends a move to a new split: two daemon round trips, and the page shows in the source pane first.Spec:
cmux-tui/spec/commands.mdandsdk-schema.json; SDK bindings regenerated (cmux-tui/bindings/codegen/generate.py --write), and the raw Rust client's keyed create namessplitas missing.Carried commits
The three code commits are austinywang's from #23032 (authorship kept), cherry-picked onto current feat-cmux-next with only their daemon, spec and test parts; the generated bindings were regenerated instead of merged. The crate diff is line-for-line the same as #23032's. #23032's Swift side no longer applies on today's base (the browser opener moved to stand-in tabs), so the app wiring is rebuilt in the follow-up PR.
Tests
cmux-tui-coreserver::frontend_browser_split_tests(from #23032): one commit, onepane-added, notab-addedon the source pane, caller-minted ids, refusals (nopane,afterwithsplit, bad direction, a refused dock split creates no tab), pinned-dock-alone opens a column.Risk
Low. Additive request field behind a new capability; a client that does not send
splitis unaffected. Rust only, no Swift.Agent session: agent session
🤖 Generated with Claude Code
Open in [code]smith · Need help on this PR? Tag
@codesmith-botwith what you need.Summary by cubic
Fixes
new-frontend-browser-tabso a link opened to the right appears directly in its new split pane instead of first rendering in the source pane.splitfield ({direction, pane_id?, split_id?}, shared withnew-conversation-tab) behind thefrontend-browser-tab-split-v1capability, so the tab is created in onepane.splitcommit with a singlepane-addeddelta and is never listed by the source pane.splitwithoutpaneis refused,afteris refused withsplit, and keyed creates fingerprint their split so a retry with a different split conflicts.splitare unaffected. This is the daemon half; the app wiring that sends it follows in a second PR, and older daemons keep the make-then-move path.Written for commit 31ba863. Summary will update on new commits.