Agent chat: pin a waiting steer's Send now, × and Copy to the bubble's edge

Merged
TE
3d ago
+78-0

Relayed from Leo's look at a transcript capture: "Queued-message controls. 'Send now ×' and the copy icon float loosely under the bubble. Align them to the bubble's edge."

What I found

On the current base, a waiting steer's controls already sit exactly where a sent prompt's controls sit. #31683 made that change (merged 2026-11-02 02:51 UTC). Before it, the waiting steer's row stayed in flow (#27580), so it sat inset from the bubble and took its own height. A capture from a build before #31683 shows the loose row.

I measured base with the shared footer test and the gallery, in Chromium at 880px and 360px, with short and wrapping prompts:

Copy glyph right minus bubble rightGlyph top minus bubble bottomIcon button
Waiting steer (Send now, ×, Copy)0 px8 px28×28
Same prompt once sent (time, Copy, Retry)0 px8 px28×28

The two steers in agent-pane.composer/steer-waiting-stack measure the same.

What this changes

Tests and gallery only. No CSS change.

  • webviews/test/queued-user-footer.test.ts: the test checked only the outer row's box. It now also checks the controls in each width, length and theme case: Copy's glyph ends on the bubble's right edge, both while waiting and once sent. The glyphs keep the sent row's gap under the bubble. Every queued icon button and the sent Copy are the transcript-action-control square. If a change moved the controls inside a correct-looking row box, the old test would still pass, and this one fails.
  • QueuedUserFooter.gallery.ts: adds a new stack variant with two waiting steers. Only the newest one offers Send now. The balanced and stack plays now check the same glyph alignment against the sent prompt in the same frame.

Design spec: leo-workspace design/chat-transcript.md, "A queued personal prompt stays right-aligned in the sent-prompt bubble position. Send now and the withdrawal × occupy the same footer slot directly under the bubble's right edge." Nothing in the spec changes.

Observed / Not run

  • Observed on fast checks at this tree: CMUX_BROWSER_TESTS=1 bun test test/queued-user-footer.test.ts, 12 pass and 0 fail. Gallery plays for agent-pane.queued-user-footer compact, balanced, roomy, stack and read pass in dark and light. accepted fails its click step at base too, and this PR leaves it unchanged. vp lint and the type check are clean. One formatting fix was applied after that run.
  • Not run: the native app build. The native host draws SF Symbols in place of the browser fallback glyphs, so pixel positions in the app may differ slightly from this harness.

Changelog

none

Agent session: agent session


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


Summary by cubic

Strengthens the queued-footer regression test and gallery so a waiting steer's controls (Send now, ×, Copy) are verified to align to the bubble's edge exactly as the sent prompt's row does.

  • The test now compares the controls themselves — Copy's glyph on the bubble's right edge, the glyphs' gap under the bubble, and each icon button's square — instead of only the outer row's box.
  • Adds a gallery stack variant showing two waiting steers, where only the newest offers Send now, and checks both align against the sent prompt. The check reads each row's Copy glyph by its label, so a version chevron in a sent row can't stand in for it.
  • No CSS or behavior changes; the controls already sit correctly on the current base.