Sidebar: a workspace hover preview lists its tabs, each one click away (carry #28139)

Merged
TE
5d ago
+1388-21

Carries #28139 (its owner lane went idle about six hours ago mid-step; all of its commits are kept with their authorship) onto current feat-cmux-next.

Leo, verbatim, 2026-10-30: “i still dont see the hover previews being like rex with multiple tabs being clickable”

Earlier asks this answers, verbatim: “and also why dont we have the rex thing yet of being abel to access the individual tabs in a workspace on its hover preview the best of both worlds thing” and (2026-10-24) “default just only show the inner tabs on hover and be able to go to and focus them when hovering ovre workspaces … wouldnt first prompt/input needing/whatever MAYBE be nice...? idk tho. we can tuck that behind toggle”.

Change

A workspace's hover preview in the sidebar lists that workspace's tabs, and each one is a click away: clicking a tab row focuses that workspace and that tab. The card opens tabs-first; status, prompts, history, usage and custom content stay available behind one "Show details" toggle. Overflowing tabs expand inside the same bounded scroll area with "Show more". Arrow keys move through tabs only while the pointer is on the card; keys on the workspace row still go to the focused terminal. Spec: leo-workspace design/sidebar.md (Hover previews; the tab list was listed there as cmux#24785, which this carries).

Carry work on top of #28139: merged feat-cmux-next; the conflicts were in HoverCardBody/HoverCardCoordinator (base added cornerRadius, this PR added interactive; both kept and passed through to HoverCardPanel.present) and plans/cmux-next/sidebar-owner.md (both sections kept).

Screenshots

Fleet captures (2x, cmux-mac-mini via capture-host, the hover-card gallery's synthetic data), cropped to the card. Before is base b93dcfbc826d, after is this head.

Before (base)After (this PR)
Lightbefore lightafter light
Darkbefore darkafter dark

Before, the card had no tabs at all: status, facts, PR and resources only. After, the chosen default opens tabs-first; each row is one tab (kind icon, name, folder, its status dot or spinner) and clicking it focuses that tab. "Show 3 more" expands the list in place; "Show details" brings back the status, facts, PR and resources.

The full gallery, with the three other placements we compared (tabs after status, tabs below title with details open, compact tabs below details): light, dark.

I viewed the after images (both crops and the full gallery, light and dark) before marking this ready. pr-media upload through cmux-ci capture --pr failed from this agent host (glaeda's broker refuses the contents API read, #28265), so the images went up with scripts/pr-media.py directly.

Validation

Pending at the head: fleet app compile, the hover-card suites (WorkspaceTabHoverCardTests and the nine adapted hover suites), independent review.

Risk: hover-card event routing. The card now takes mouse events, so the focused terminal must keep its keys while the pointer rests on the workspace row (covered by WorkspaceTabHoverCardTests).

Size: about 1,250 lines, most of it the 21-locale strings for the details toggle and the regression tests; the list, its click routing and the toggle are one interaction and don't land usefully apart.

Agent session: agent session