Skip to content

cmux next: a leaner Session Info that moves the chat aside - #36937

Merged
lucasr1b merged 1 commit into
feat-cmux-nextfrom
lucas/session-info-lean
Nov 6, 2026
Merged

lucasr1b merged 1 commit into
feat-cmux-nextfrom
lucas/session-info-lean

Conversation

@lucasr1b

@lucasr1b lucasr1b commented Nov 6, 2026 •

Copy link
Copy Markdown
Collaborator

Session Info listed every section whether it had content or not, covered the chat's prompts at many pane widths, and kept the chat's scrollbar left of the panel. Its Outputs listed web links and code edits instead of the files the chat made, and its Changes row missed work an agent had already committed. This PR rebuilds the panel around what the chat has and makes it sit beside the chat the way the Codex app's panel does.

  • Sections. A section shows only when it has content. Usage and Connectors always show, folded, with "None" when empty. A Show more line is an item of the section order (sectionOrder.ts MORE_LINE): sections under it fold away, and a drag across it pins or tucks a section. Environment is pinned first with no grip. Section heads lose their icons; the reorder grip sits in the left gutter.
  • Environment. Machine, project (opens its Files tab), branch, and a Changes row with the folder's git line counts (changeCounts.ts: uncommitted work, else the branch against its base), which opens the diff beside the chat. No grant rows, cloud note or repository row.
  • Context. One line, a meter and "used / size". A click unfolds the breakdown from Messages down (ContextSection.tsx rowsOnly). The composer's context card keeps its Details link, which opens Session Info on Context, unfolded and lit.
  • Outputs. The files the chat made (chatOutputs.ts): documents its replies point to (Markdown links, inline code paths, bare names in the chat's folder) and deliverables its file tools created. Never code edits or web links. A file the host reports missing drops off. Opening one uses the same link.openPath as a path chip, local chats only.
  • Subagents and background tasks. Lean lines (mark, name, time; a state word only when it needs a look) with ended ones folded into one "N done" row. Servers are task rows with Stop in the time's place on hover.
  • Open state (sessionInfoState.ts). New chats open with the panel; closing it is remembered per chat. A pane too narrow for a readable chat beside it holds the panel closed until the person opens it, then shows it as a popover.
  • Steps aside (stepAside.ts). Clicking the folder, Changes, an output or a subagent hides the panel; it comes back when the view it opened closes (the header's lit tool, the page's visibility, or the chat narrowing then widening). The toggle, the palette or a reveal brings it back at once.
  • Placement (SessionInfo.tsx sessionInfoStage, pushedRoom, pushKeepsColumn; sessionInfo.css). Wherever the chat's column fits beside the whole panel, the column moves left and centers in what the panel leaves. The chat keeps the pane's full width, so its scrollbar stays at the pane's right edge, and the column keeps its own width, so no line rewraps. The move animates through a registered --acpmux-session-info-shift on the motion tokens, only while the panel comes in or leaves; a resize moves the column at once. Panes too narrow for the column and the panel still get the panel over the chat.
  • Chat cut. The transcript's cut around the panel re-measures when the panel's content changes (chatCut.ts), so a Show more or a fold no longer lets the chat show through the grown panel for a frame or two.
  • Subagent view. The "Subagent of" pill stays pinned at the top of the subagent's transcript (VirtualTranscript.tsx, rows/SubagentOfPillRow.tsx). In a subagent split, the pill, its × and Escape ask the app for chat.subagentBack (subagents/subagentPanes.ts), so the split can close and the chat tab that opened it take focus. The app side of that request is its own pull request (it changes the page's host request list); until it lands, an app that does not answer shows the chat in place, as before.

Unchanged: the Debug native panel keeps taking its room from the chat's row. chat.subagentBack is listed as unserved in schemas/agent-bridge/contract.json until #36946 serves it.

Takes back #28617: Session Info's Environment no longer lists the chat's grants, to match the ChatGPT app's panel; grants are still revoked from the chat menu's Revoke Granted Access, which that change kept.

Takes back #31958: Session Info's Subagents section draws lean lines and one plain ended fold, without the ended avatars, and shows the running-limit row only while started chats run or wait for a slot; the native panel's models from that change are kept.

Changelog

  • Changed: Session Info lists only what the chat has, keeps less-used sections under Show more, and opens on new chats.
  • Changed: Opening Session Info slides the chat aside and centers it beside the panel; the chat's scrollbar stays at the pane's edge.
  • Changed: Session Info steps aside for the files, changes, outputs and subagents it opens, and comes back when they close.
  • Changed: A subagent's "Subagent of" pill stays at the top of its view.
  • Fixed: Session Info's Outputs list the files a chat made, and its Changes count includes committed work.

Tests

  • src/agent-session/acpmux/session-info/chatOutputs.test.ts: documents found by Markdown link, inline code path and bare name; fenced code, web links and commands in inline code skipped; created deliverables in, code files and edits out; a file both linked and created listed once.
  • src/agent-session/acpmux/session-info/changeCounts.test.ts: a reply that changes nothing gives no counts; uncommitted work wins, a clean tree falls back to the branch's own commits.
  • src/agent-session/acpmux/session-info/sectionOrder.test.ts and test/session-info-section-order.test.tsx: the Show more line in saved and legacy orders; Environment stays first and has no handle; a drag above it lands right under it.
  • test/session-info-per-pane-state.test.ts: a new chat opens the panel whatever another chat chose; a closed chat stays closed.
  • test/session-info-surfaces.test.tsx: a project row and a subagent row each hide the panel and bring it back when the opened view closes (the subagent case fails without the wrapper in SessionInfo.tsx); a narrow pane opens the panel as a popover.
  • test/session-info-step-aside.test.tsx: the hook comes back after a lit tool goes out and after the page shows again, at once on a refused open or the person's toggle, and after the settle time when nothing showed (the shell-width signal is the surfaces test's subagent case).
  • test/session-info.test.tsx, test/session-info-width-stages.test.ts, src/agent-session/acpmux/session-info/sessionInfoPopover.test.ts, src/agent-session/acpmux/session-info/findBarClear.test.ts: the stage at each width, the whole room and equal gaps wherever the pinned column fits, overlay below that.
  • test/session-info-chat-cut.test.ts: a section added to the panel re-measures the cut with no ResizeObserver callback (fails without the MutationObserver).
  • test/subagent-of-close.test.tsx: the pill is drawn once, outside the scroller, with the row keeping only its room; backToOpeningChat sends chat.subagentBack and reads its answer.

Review

Two independent reviews of the diff (correctness first), a third of the fixes, and a fourth of the gallery play and layout-shift baseline updates on this head (no product code). Fixed before push:

  • A pushed panel sat over a side panel beside the chat (a document, Background tasks): it now stays left of it, as the floating panel does.
  • In the narrow range where the column moves only part of the panel's width, the overflow reading ran before the column slid and kept asking for more room until the panel lay over the chat: it now measures where the column is drawn.
  • Some opens change nothing the step aside can see (a split already open, a tab added to the right column, a document opened in another app): with no sign within 2 s, the panel comes back (STEP_ASIDE_SETTLE_MS, tested).

Left as known (P2):

  • Find in Chat can select a match that sits under the pinned "Subagent of" pill.
  • Outputs re-read the whole transcript when a row is added or a turn starts or ends (fine today, grows with very long chats).
  • With more than 2,000 inspected paths, the shared path cache evicts and asks again.
  • An unrelated header tool lighting up while Session Info is aside (Preview, when the agent starts a server) keeps it aside until that tool goes out or the toggle opens it.

Observed / Not run

Observed:

  • Locally: the related web suites pass, one file per process (330 files, plus the new fallback test), scripts/web-lint.sh and the type check pass, and prepush-gate.py passes. The thread-minimap-default-wave test fails one run in two on this branch and on a clean origin/feat-cmux-next alike.
  • A tagged dev build was used throughout. The layout was measured in the agent pane's browser mock at 1100 to 2400px wide: equal gaps beside the panel, the scrollbar at the pane's edge, and the column sliding with the panel.

Not run: no screenshots yet; no fleet build or capture.

@lucasr1b lucasr1b added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Nov 6, 2026
@lucasr1b
lucasr1b temporarily deployed to ci-routing-agent November 6, 2026 00:34 — with GitHub Actions Inactive
@github-actions

github-actions Bot commented Nov 6, 2026 •

Copy link
Copy Markdown
Contributor

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

Review 1d3b279: 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=pr36937 -f ref=lucas/session-info-lean -f platform=macos -f backend_mode=local

Gallery before/after for 1d3b279: 16 states rendered, 10 images differ, 3805 more touched states not rendered. Images are in the run's artifact, not on this public PR; the independent review of this head reads them on its own, so the PR needs no hand-made screenshots of these states.

gh run download 42184231184 -R manaflow-ai/cmux -n gallery-advisory-36937-1d3b27939d1038dfedf3078aecd16ee5a9539a4e (then read gallery-review.json)

States
State Theme Status Diff Picked by
agent-pane.access-offer/turn-no-credits Apple System Colors Light unchanged 0% own conversation.css
agent-pane.access-offer/turn-no-credits Apple System Colors unchanged 0% own conversation.css
agent-pane.access-offer/turn-low-credits Apple System Colors Light unchanged 0% own conversation.css
agent-pane.access-offer/turn-low-credits Apple System Colors unchanged 0% own conversation.css
agent-pane.access-offer/turn-no-offer Apple System Colors Light unchanged 0% own conversation.css
agent-pane.access-offer/turn-no-offer Apple System Colors unchanged 0% own conversation.css
agent-pane.activity-line-looks/none Apple System Colors Light unchanged 0% own conversation.css
agent-pane.activity-line-looks/none Apple System Colors unchanged 0% own conversation.css
agent-pane.activity-line-looks/spinner Apple System Colors Light changed 0.0529% own conversation.css
agent-pane.activity-line-looks/spinner Apple System Colors changed 0.0489% own conversation.css
agent-pane.activity-line-looks/kind Apple System Colors Light changed 0.0265% own conversation.css
agent-pane.activity-line-looks/kind Apple System Colors changed 0.0255% own conversation.css
agent-pane.activity-line-looks/aligned Apple System Colors Light unchanged 0% own conversation.css
agent-pane.activity-line-looks/aligned Apple System Colors unchanged 0% own conversation.css
agent-pane.agent-call-card/before-closed Apple System Colors Light unchanged 0% own conversation.css
agent-pane.agent-call-card/before-closed Apple System Colors unchanged 0% own conversation.css
agent-pane.agent-call-card/before-open Apple System Colors Light unchanged 0% own conversation.css
agent-pane.agent-call-card/before-open Apple System Colors unchanged 0% own conversation.css
agent-pane.agent-call-card/report-closed Apple System Colors Light unchanged 0% own conversation.css
agent-pane.agent-call-card/report-closed Apple System Colors unchanged 0% own conversation.css
agent-pane.agent-call-card/report-open Apple System Colors Light changed 0.0001% own conversation.css
agent-pane.agent-call-card/report-open Apple System Colors unchanged 0% own conversation.css
agent-pane.agent-call-card/report-running Apple System Colors Light changed 0.0079% own conversation.css
agent-pane.agent-call-card/report-running Apple System Colors changed 0.0065% own conversation.css
agent-pane.agent-call-card/report-running-open Apple System Colors changed 0.0079% own conversation.css
agent-pane.agent-call-card/report-running-open Apple System Colors Light changed 0.0071% own conversation.css
agent-pane.agent-call-card/report-failed Apple System Colors Light unchanged 0% own conversation.css
agent-pane.agent-call-card/report-failed Apple System Colors unchanged 0% own conversation.css
agent-pane.agent-call-card/stacked-open Apple System Colors Light changed 0.0003% own conversation.css
agent-pane.agent-call-card/stacked-open Apple System Colors unchanged 0% own conversation.css
agent-pane.approval-edits/single Apple System Colors Light unchanged 0% own conversation.css
agent-pane.approval-edits/single Apple System Colors unchanged 0% own conversation.css

Pick other states with a Gallery: entry.id, entry.id/variant line in the PR body.

Passes: CI passes on 1d3b27939d.

CI passes on 1d3b27939d (run 42184231710 attempt 1).

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.

web and size checks: green

The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/42189704961 at 405cf67 failed: cmux-next crash ends the app.
Those jobs last passed at d09adbd. This pull request is one of 2 merged since: #37052, #36937.
If the failure is in your change, fix forward on feat-cmux-next. Pull requests run only the tiers their paths reach (docs/ci/cmux-next-tiers.md); label a batch PR full-ci to run them all before merging.

@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 Nov 6, 2026
@lucasr1b
lucasr1b force-pushed the lucas/session-info-lean branch from a1feb36 to fbd79eb Compare November 6, 2026 01:15
@lucasr1b
lucasr1b temporarily deployed to ci-routing-agent November 6, 2026 01:15 — with GitHub Actions Inactive
@lucasr1b
lucasr1b temporarily deployed to ci-routing-agent November 6, 2026 01:15 — with GitHub Actions Inactive
@lucasr1b
lucasr1b force-pushed the lucas/session-info-lean branch from fbd79eb to 36bd90f Compare November 6, 2026 01:22
@lucasr1b
lucasr1b temporarily deployed to ci-routing-agent November 6, 2026 01:22 — with GitHub Actions Inactive
@github-actions github-actions Bot added risk:normal Risk tier (docs/ci/risk-tiers.md) and removed risk:high Risk tier (docs/ci/risk-tiers.md) labels Nov 6, 2026
@lucasr1b
lucasr1b force-pushed the lucas/session-info-lean branch from 36bd90f to d635ed6 Compare November 6, 2026 01:54
@cursor

cursor Bot commented Nov 6, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot 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.

@lucasr1b
lucasr1b temporarily deployed to ci-routing-agent November 6, 2026 01:54 — with GitHub Actions Inactive
@blacksmith-sh

This comment has been minimized.

@lucasr1b
lucasr1b force-pushed the lucas/session-info-lean branch from d635ed6 to 0483101 Compare November 6, 2026 02:50
@lucasr1b
lucasr1b temporarily deployed to ci-routing-agent November 6, 2026 02:50 — with GitHub Actions Inactive
@lucasr1b
lucasr1b force-pushed the lucas/session-info-lean branch from 0483101 to c89f113 Compare November 6, 2026 03:13
@lucasr1b
lucasr1b temporarily deployed to ci-routing-agent November 6, 2026 03:13 — with GitHub Actions Inactive
@lucasr1b
lucasr1b temporarily deployed to ci-routing-agent November 6, 2026 03:14 — with GitHub Actions Inactive
@lucasr1b
lucasr1b force-pushed the lucas/session-info-lean branch from c89f113 to 2345fa3 Compare November 6, 2026 04:47
@lucasr1b
lucasr1b temporarily deployed to ci-routing-agent November 6, 2026 04:47 — with GitHub Actions Inactive
@lucasr1b
lucasr1b force-pushed the lucas/session-info-lean branch from 2345fa3 to ae3463d Compare November 6, 2026 05:36
@lucasr1b
lucasr1b temporarily deployed to ci-routing-agent November 6, 2026 05:37 — with GitHub Actions Inactive
@lucasr1b
lucasr1b force-pushed the lucas/session-info-lean branch from ae3463d to 688b4de Compare November 6, 2026 06:25
@lucasr1b
lucasr1b temporarily deployed to ci-routing-agent November 6, 2026 06:25 — with GitHub Actions Inactive
@lucasr1b
lucasr1b force-pushed the lucas/session-info-lean branch from 688b4de to 7efab7e Compare November 6, 2026 07:15
@lucasr1b
lucasr1b temporarily deployed to ci-routing-agent November 6, 2026 07:15 — with GitHub Actions Inactive
@lucasr1b
lucasr1b force-pushed the lucas/session-info-lean branch from 7efab7e to 1d3b279 Compare November 6, 2026 07:56
@lucasr1b
lucasr1b temporarily deployed to ci-routing-agent November 6, 2026 07:57 — with GitHub Actions Inactive
@lucasr1b lucasr1b added the ready-to-land Reviewed at this head; next-autoland merges it into feat-cmux-next when its only reds are base reds label Nov 6, 2026
@lucasr1b
lucasr1b temporarily deployed to ci-routing-agent November 6, 2026 07:57 — with GitHub Actions Inactive
@lucasr1b
lucasr1b merged commit 405cf67 into feat-cmux-next Nov 6, 2026
229 of 232 checks passed
@lucasr1b
lucasr1b deleted the lucas/session-info-lean branch November 6, 2026 08:43

This branch was previously deployed

1 inactive deployment
ci-routing-agent — 1d3b2793 Deployed Nov 6, 2026 by lucasr1b via wait for same-key tree publisher #118672
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready-to-land Reviewed at this head; next-autoland merges it into feat-cmux-next when its only reds are base reds risk:normal Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant