cmux NEXT: ship native Session Info by default
Summary
Native Session Info is now the shipped path in cmux NEXT. The page remains authoritative for section and row computation and action policy; the existing agent.sessionInfo.native Debug Settings switch remains the explicit fallback to the web panel when turned off. The native AppKit panel starts below the header and fills the pane to the foot when there is no composer stack.
The port builds on prior art in #27513 and the current model/action bridge in #31867. Section builders and parity work landed in #31906, #31958, #31930, #32056, #32122, and the activity renderer in #32210 (merged as bb4dbd64117ee483775236ad4475408f53c68989).
Leo's words, softened for public text:
“the session rail Session Info thing ... why is the button not toggled? ... you still haven't done the full-length thing. It's still just this constrained height for, like, no reason at all.”
“plus we're gonna be doing that part natively in Swift anyways?”
“But I literally said to do that. I literally said to do that.”
“You can just edit the web UI” / “it's so lame to be delaying the entire thing based off of ... the Swift thing”.
Leo-ask: ask-560d04c05d
Parity checklist
- Header toggle and panel geometry: starts below the header/shared tab row, reaches the pane foot when there is no composer foot, and has no title row for a normal chat.
- Environment: machine kind (Local/SSH/Cloud), repository and branch rows, links, and no Save button.
- Context: usage and compaction summary, current context controls, meter segments, and page-owned progress text.
- Connectors: connected/reconnect rows, status and actions, including pending and failed reconnect states.
- Changes: session-scoped changes rows, KINDS hover ordering, links, and row actions.
- Sources: files, URLs, MCP tools/servers, pasted images, and show-more/show-fewer behavior.
- Outputs: five-row fold and whole-row show-more/show-less action.
- Subagents: scope filtering, running limits, nested sessions, running retry spinner (
working), shared running waves (wave), progress text, links, and ended/show-more folds. - Tasks/workflows: workflow ordering, phase folds and phase actions, workflow counts/marks, background-task
>_glyph, servers, timers, finished folds, and stop actions. - Activity fields: Swift Codable and AppKit rendering consume every page field (
working,wave.index,wave.periodMs,wave.stepMs,progress, andmarks) without inferring page policy; wave animation restarts after occlusion changes and server rows remain static like web. - Usage: usage rows, limits, context segments, and running waves.
- Cloud repository rows: de-duplicated repository actions and cloud links.
- Remote Control: pointer icon and toggle/action forwarding.
- Folds and reorder: section folds, six-dot reorder model, drag actions, and page-owned validation.
- Links and actions: safe external/native URL routing, menus, buttons, toggles, hover/help, and gesture-gated native/context-menu copy.
- Fallback: turning
agent.sessionInfo.nativeoff removes the AppKit panel and restores the page panel without a reload. - Capture witness:
session-info-nativegallery/tour covers light and dark states, real header click, toggle-on state, and full-length geometry.
The Swift side remains a thin Codable renderer and action forwarder. It adds no section state machine or policy; the page owns all lists, labels, ordering, folds, and actions.
Testing
- Native default assertion:
AgentPaneNativeSessionInfoTests.nativeSessionInfoShipsOnByDefault. - Existing native Session Info tests cover model decoding, geometry, fallback switching, bridge actions, row reconciliation, activity fields, and gesture-gated copy.
- Capture tour:
scripts/cmux-next/media/tours/session-info-native.json(light and dark states, real header click, full-length readiness assertion). - A fresh compile check and focused web tests will be recorded at this exact head.
Changelog
Added: Native Session Info is on by default, with the web panel retained as an explicit fallback.
UI review
Verdict: ship it
Findings
Blockers
- None
Should fix
- None
Nits
- None
Needs a human / needs a device
- None
Agent session: agent session
agent-identity footer --repo manaflow-ai/cmux