Skip to content

cmux-tui: new-frontend-browser-tab can make its tab directly in a new split (frontend-browser-tab-split-v1) - #32862

Merged
cmux-bot[bot] merged 4 commits into
feat-cmux-nextfrom
lane/right-open-split-first
Nov 3, 2026
Merged

cmux-bot[bot] merged 4 commits into
feat-cmux-nextfrom
lane/right-open-split-first

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Nov 3, 2026 •

Copy link
Copy Markdown
Collaborator

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-tab takes an optional split ({direction, pane_id, split_id}, only with pane), behind the new capability frontend-browser-tab-split-v1, the same object new-conversation-tab takes under conversation-tab-split-v1. The tab is created directly in a new pane on that side of pane, in one pane.split commit: one pane-added delta 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.md and sdk-schema.json; SDK bindings regenerated (cmux-tui/bindings/codegen/generate.py --write), and the raw Rust client's keyed create names split as 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-core server::frontend_browser_split_tests (from #23032): one commit, one pane-added, no tab-added on the source pane, caller-minted ids, refusals (no pane, after with split, 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 split is unaffected. Rust only, no Swift.

Agent session: agent session

🤖 Generated with Claude Code


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


Summary by cubic

Fixes new-frontend-browser-tab so a link opened to the right appears directly in its new split pane instead of first rendering in the source pane.

  • Adds an optional split field ({direction, pane_id?, split_id?}, shared with new-conversation-tab) behind the frontend-browser-tab-split-v1 capability, so the tab is created in one pane.split commit with a single pane-added delta and is never listed by the source pane.
  • Sending split without pane is refused, after is refused with split, and keyed creates fingerprint their split so a retry with a different split conflicts.
  • Clients that don't send split are 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.

View guided diff Turn on auto-fix

austinywang and others added 4 commits November 3, 2026 02:04
…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
@github-actions

github-actions Bot commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

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

Review 31ba863: 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=pr32862 -f ref=lane/right-open-split-first -f platform=macos -f backend_mode=local

Shipped in:

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (subagent claude-opus-5-5 medium): SHIP at 31ba863

Checked the split path of new-frontend-browser-tab against new-conversation-tab {split} (both use TabSplit / split_tab_pane_with_fields_as): validation, the caller-minted ids, pinned-dock-alone-v1, refusals that come before the browser record is registered, the keyed fingerprint (a different split under the same key is idempotency.conflict), and the advertised capability. Tests: cargo test -p cmux-tui-core --lib -- frontend_browser conversation_tab, 82 passed (fast checks run 41568171601); cargo check -p cmux-sdk passed.

Follow-ups:

  • [follow-up] frontend_browser_split_tests.rs:165: no test covers a split that fails inside the mux after the record is registered (a pane_id already in use, a refused dock split).
  • [follow-up] frontend_browser_history.rs:88: with split, activate:false is accepted and has no effect, while after is refused. Refuse it as well, or document it.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex gpt-6-astra high, router-review): SHIP at 31ba863
Visual verdict: no images; Leo tries the build

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

@cmux-bot
cmux-bot Bot merged commit de2ecaf into feat-cmux-next Nov 3, 2026
234 of 259 checks passed
@cmux-bot
cmux-bot Bot deleted the lane/right-open-split-first branch November 3, 2026 04:22

This branch was previously deployed

1 inactive deployment
ci-routing-agent — 31ba863e Deployed Nov 3, 2026 by teamleaderleo via cmux-tui tree preflight #103487
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.

2 participants