Agent chat: one column for transcript and composer; pinned, steady streaming

Merged
TE
23d ago
+484-37

Leo finds the side padding in agent chats too wide and uneven, and sees the chat jump and jitter while a reply streams.

What changes

  • The transcript and the composer share one readable column. A narrow pane leaves the page edge (--page-edge, 18px, from #20121) on each side. A wide pane widens the column up to a readable cap and keeps it centered.
  • The view stays at a streaming reply's latest line unless you scroll up. Nothing moves when a queue appears, when a row opens, or when a reply streams a few words at a time.

Before

The transcript's rows sat in a 720px column inside 26.5px gutters. The composer sat in a 760px column inside 16px gutters, so their edges never lined up.

Proof

webviews/test/agent-pane-chat-column.test.ts (Chromium) measures the column at four pane widths. It also reads every painted frame while a reply streams, a queue appears, a command opens and a reply streams word by word. The test commit is red on base; the results are below.

Changelog

  • Changed: Agent chats read in one column shared by the transcript and composer, with page-edge side padding, and stay pinned to the bottom while a reply streams.

🤖 Generated with Claude Code


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.


Summary by cubic

The agent chat now reads in one column shared by the transcript and composer, stays pinned to the streaming reply's latest line, and styles prompts as solid bubbles with a single Copy action.

Previously the transcript used a 720px column inside 26.5px gutters and the composer a 760px column inside 16px gutters, so their edges never lined up. Content growth only glided on the first placement step, so streamed text dropped by the estimate's error and slid past its place at each token; now every step glides and the moves add up. Queued prompts lay over the transcript's foot, and a prompt was a translucent, unevenly padded bubble with two Copy buttons on hover.

  • The column is 720px, 62.5% of a wider pane up to an 800px cap, centered, at least the page edge (18px) from each side; model.ts and the minimap mirror it.
  • The transcript now ends above queued prompts, and rows reveal a floating Copy only for keyboard focus and a selected range (a prompt's hover shows the one under its bubble, 12px text insets, 10px radius).
  • Adds a Chromium regression test (agent-pane-chat-column.test.ts) that measures the column at four pane widths and samples every painted frame while a reply streams, a queue appears, and a command opens. Followed and code-card rest positions allow a few pixels of settle, since line heights are fractional.