cx-ncc.103: agent pane recap card when a turn ends on a question (Labs)

Closed
TE
18d ago
+1702-27

cx-ncc.103. When a finished turn ends on a question, a recap card appears above the composer. It shows the answer's last paragraph (muted, at most three lines), the question, a default action on ⌘↩ ("Yes, open PR" when the question names one, otherwise "Yes"), and "Not now". This is part (2) of the in-session status parity work with Claude Code desktop (part 1, the plan card, is #20833).

  • Debug toggle: it shows only with the Debug Settings toggle "In-session status (plan card, recap card)" on (agent.sessionStatus, off by default). With it off, the pane is unchanged. No Labs gating.
  • Depends on #20953 (cx-ncc.104), which adds the toggle, its sessionStatus page event and useSessionStatus(). This branch merges it; land #20953 first.
  • Harness-agnostic: it reads the transcript rows, not any one harness's events.
  • Yes: sends the reply as a normal prompt. ⌘↩ triggers it while the composer is empty.
  • Not now and ×: dismiss the card for that question. The choice is remembered per session.
  • Hidden: while the agent works, or while a permission, trust or folder ask is up.
  • Strings: new recap.* strings in all 21 locales.

Transcript fix (all users, not only with the toggle on): the card made a transcript bug visible. A followed transcript stopped 16 px short of its last row, because the layout's total height left out the thread's top padding. Under Reduce Motion it also stuck at the old end for one frame, because the spacer's 0.01 ms transition let the browser clamp the scroll. The layout now counts the padding, and the spacer no longer transitions. Any chat that overflows had this cut; an assistant row's bottom padding usually hid it.

Captures

Gallery renders of the real pane (760×560, reduced motion). A real-app capture and clip from a DEV build follow in a comment.

Toggle on, darkToggle on, light
recap card darkrecap card light
Without the transcript fix: the card covers the footerToggle off: unchanged
recap before clipped darkrecap toggle off dark

Testing

  • bun test test/recap-card.test.ts (10 pass) and test/gallery-coverage.test.ts pass on sbx; bunx vp check is clean.
  • Browser test CMUX_BROWSER_TESTS=1 bun test test/agent-pane-recap-card.test.ts:
    • red at 93225a4a7aea: the new footer test fails with below: 16;
    • green at head: 5 pass (the card is turned on via cmuxAcpmuxBridge.applySessionStatus(true)).
  • The transcript jsdom tests (42) and the browser tests for follow-live, chat-column, bottom-stack, reading-place, soft-edges, history-paging and transcript-follow pass.

Changelog

  • Added: Debug toggle: a recap card offers a finished turn's question with a ⌘↩ default reply.
  • Fixed: the agent transcript now scrolls fully to its last row instead of stopping 16 px short.

🤖 Generated with Claude Code