Repository navigation
feat(app): open session Extensions lists on hover - #58021
Conversation
One flyout beside the Extensions card glides between MCP, Plugins, Skills and LSP and clips to each list. Lists swap at once while the box glides, so two lists never show together. Rows switch at once; a safe triangle, measured when a list opens and on scroll or resize, keeps a diagonal move into the open list from switching rows. ArrowRight and Enter open into the list, ArrowLeft and Escape close back to the row. The rows are disclosures (aria-expanded, aria-controls) of labelled groups. The dot is the status: a failed dot shows its error on hover and opens the details, status words stay for assistive technology, and the "Configured …" headings are gone.
There was a problem hiding this comment.
I couldn't find a bug in the hover flyout, and it works as described. On this branch, the three e2e specs gave 30/30 in a second full run. The first run had one failure that didn't come back: "submenus follow ltr", where the popover didn't reappear on reopen. That test then passed 6/6 when run alone, so it looks like an occasional failure under parallel load, but I didn't run it on the base to compare. typecheck and bun test in packages/gui-extensions are clean.
Public API: unchanged. This only touches the app UI and its gui-extensions i18n strings.
One concern, not blocking: in the MCP list, failed and connecting servers are now shown only by a dot colour (see inline comment).
| aria-disabled={pending()} | ||
| aria-busy={busy()} | ||
| description={server().status.status === "pending" ? label() : undefined} | ||
| description={label()} |
There was a problem hiding this comment.
With the status words moved to sr-only, sighted users can only tell "failed" and "connecting" apart from "connected" by the dot colour. A failed server's switch is also shown as on (see the screenshot: playwright looks the same as figma apart from a red vs green dot), and its error is reached through a 6px dot. Could the failed state (and perhaps "Connecting…") keep a small visible cue, so the status isn't conveyed by colour alone?


What it does
The session details popover's Extensions lists (MCP, Plugins, Skills, LSP) now open on hover, the way native submenus do, instead of needing a click. One panel beside the card moves to the row under the pointer and resizes to fit each list. A coloured dot shows each item's status, and hovering a red dot shows the error.
How it works
translateYand resizes with aclip-path, on a 0.25 s spring with no bounce. Its shadow is adrop-shadowso it follows the clip. Lists swap instantly while the box moves, so two lists never show at once. Only the first open and the last close fade. With reduced motion, the flyout just fades.aria-expanded,aria-controls) for labelled groups.data-prevent-autofocuskeeps Escape away from the session view, which used to send subagents to their parent.Risk
This changes only the desktop popover; the narrow-screen drawers are unchanged. Hover timing and the safe triangle are the parts most likely to feel off, so watch the clip for the diagonal move.
Proof
Both clips use fictional servers and plugins. Each was recorded headless at 8× and 16× time dilation, then retimed to 1× and 0.25×. The pointer is drawn into the page.
1×: hovering down the rows, back to MCP, then diagonally into its list, ending on a failed server's dot.
extensions-hover-1x.mp4
0.25×:
extensions-hover-0.25x.mp4
bun run test:e2e:built -- session-summary mcp-workspace-toggle mobile-extension-drawers: 31 passed. This includes a new case for hover, the diagonal move and the keyboard.bun typecheckin gui-extensions andbun run lint:changed: clean.--no-verify. The pre-pushbun run checkfails only onactivity-chips.fixture.tsx, the beta typecheck break that fix(app): restore beta typecheck in activity chip fixture #57969 fixes.