Session Info: the page draws it by default again, with the native panel's header buttons (held for Leo)

Merged
TE
3d ago
+170-46

Leo's call (team thread): "buttons stay in swift, summary panel in react", "i just want a good one".

Leo: "also as for the session info like why dont we just bring back the web ish session info and just nativize the buttons? if the fixes are slow..."

This is a ready fallback, held on purpose. #32643 once flipped the native panel off and #32650 reverted it. This PR does the same flip (agent.sessionInfo.native default true to false), so it stays held until Leo has seen the native fixes (items 1-6) in a nightly and chooses. It does not land on review alone.

What changes

  1. The page draws Session Info by default. AgentPaneTunables.nativeSessionInfo defaults to false (Debug Settings can still turn the native panel on). The default test now reads pageDrawsSessionInfoByDefault, and schemas/defaults/cmux-next.json follows.
  2. Web header buttons match the native panel (#32674):
    • Section titles are medium weight (500). This was already true on web, so nothing changes there.
    • The fold chevron goes after the title and shows on hover only (cmux#32765). It used to sit at rest after the count (order: 1, or margin-left: auto with no count). Now it sits one grid gap after the title, hidden at rest with its room kept, so the title doesn't move. It shows on head :hover or :focus-visible.
    • The six-dot grip shows only on header hover. It used to show while the pointer was anywhere over the section. Now it shows when the head is hovered (for a bare section like Environment, its first row), when the grip itself is hovered or has keyboard focus, or during a drag. Nothing draws at rest, and hovering the section's other rows doesn't show it.
    • The pressed toggle fill was already on web (#32704), so nothing changes there.
  3. No background card when pushed (Leo, 2026-11-02: "we still HAVE AN ASININE BACKGROUND"; native #32661). The panel is .ui-glass only where the chat runs under it: floating over the chat's column (a foot) or as the short-pane popover. When it is pushed beside the chat, or floating in the empty gutter, it has no fill, blur or shadow, and the see-through blur is off there too.

Spec (leo-workspace design/session-info.md, header chevron/grip row): "The fold chevron sits one grid gap after the title in a 16pt box and shows only on hover (or keyboard focus with Full Keyboard Access). The six-dot grip is in the header's right inset, past the trailing column, and shows only on hover or while dragging; at rest neither glyph draws. ... Web follow-up: the web panel (sessionInfo.css .acpmux-session-info-section__fold, order: 1) still draws its fold chevron at rest, after the count; it should match native (after the title, on hover)." Item 3 departs from that spec's rule 6, "Glass, the composer's glass", for the pushed and gutter cases. The spec needs that line updated if this PR lands.

Gallery

SessionInfo.gallery.tsx:

  • push: its play asserts there is no card (not .ui-glass, transparent background, no backdrop filter, no shadow).
  • New header-chevron-hover: every chevron is hidden at rest. On head hover the chevron shows after the title, and the title doesn't move.
  • New header-grip-hover: no grip shows at rest, and none shows when a body row is hovered. On head hover the grip shows at the head's right edge.
  • glass-over-transcript now floats over the chat's column (foot), where glass stays.

Tests

  • test/session-info-glass.test.tsx (browser lane): over the chat the panel is glass, and under Reduce Transparency it is opaque. Pushed or in the gutter it has no card, also under Reduce Transparency.
  • scripts/check-popup-hover-reveals.ts: the old section-hover exemption is replaced by the new head-hover grip and chevron reveals. Neither opens a menu.

Observed / Not run

  • Observed: bun install --frozen-lockfile, then bun test on the hover-reveal checker test and every test/session-info* and test/native-session-info* test: 243 pass, 15 skip (browser lane), 1 fail. The failure is "a running subagent's hover card with a long command stays in the page". It fails the same way on base in the same batch and passes alone.
  • Observed: bun scripts/check-popup-hover-reveals.ts passes. vp lint and vp check --no-fmt --no-lint pass (no type errors), and so do the design-token, layout-grid, ui-review, session-info-names, fixed-waits, browser-lanes and surface-roles checks. scripts/web-lint.sh stops only on ChiefPromptBubble.gallery.ts formatting, which is red on base and not in this diff.
  • Fleet compile check for CmuxNext: see the comment below.
  • Not run locally: the browser-lane glass test and the gallery plays (CI and Freestyle only).

Regressing PR for the header look: #31930 (first native panel). The web chevron placement predates it.

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

Turns the page-drawn Session Info back on by default, with section headers matching the native panel's, and drops the card background when the panel doesn't float over the chat. This is a held fallback: it flips agent.sessionInfo.native from true to false, waiting on Leo's call after he reviews the native fixes (items 1–6) in a nightly.

  • The page draws Session Info by default; Debug Settings can still turn the native panel on.
  • The fold chevron sits one grid gap after the title, hidden at rest, and shows only when the section head is hovered or keyboard-focused; the title doesn't move when it shows.
  • The six-dot grip shows only while the head (a bare section's first row), the grip itself, or a drag is over it—never at rest and never for a pointer over the section's other rows.
  • Glass stays only where the chat runs under the panel (over the chat's column or as a popover); pushed beside the chat or floating in the gutter, the panel has no fill, blur, or shadow.