Agent chat: compact, consistent message actions

Closed
TE
3d ago
+440-39

Message controls now share one compact action row: 24px hit targets, 16px glyphs, and no negative margin between Retry and its model chevron. User prompts, assistant footers, received messages and sent messages use the same component. Native pages ask the existing validated harness.symbol image cache for actual SF Symbols; galleries and older hosts use the icon-catalog fallback in the same box.

Leo, 2026-10-27: "why is the copy button and the refresh button so far apart?" and "not ... evenly spaced, compact, unified, concise, simple, well-placed".

The layout follows the compact controls in the Claude Code action-row reference. No new motion or menu timing. Open model menus keep the shared row visible.

Gallery: agent-pane.message-action-row (compact, narrow). Captures use public-safe fixture text and the catalog fallback; they prove geometry, not native SF rasterization.

BeforeAfter
Before: uneven message controlsAfter: compact shared message controls
Claude Code referencecmux action rows
Claude Code compact message action-row referencecmux shared compact action rows

Validation: the Chromium regression first failed at 08720fc17f0733 because Retry's chevron target was 14px rather than 24px. The same command now passes 2 tests / 51 assertions, including keyboard Retry and another-model selection. The SF-symbol cache and existing user-action tests pass 16 tests / 72 assertions. bun run check also passes (format, lint, 2,887-file typecheck and protocol checks). Gallery coverage has exactly the same two failing assertions and finding lists on base and head; the new components are covered. Existing native localization baseline drift makes verify-local.py red in untouched catalogs; this change adds no shipped strings.

Coordination: this leaves the generic floating-copy removal/right-padding repair to #26096 and the PR pills to #26082. Queued/received presentation is nx-chat's separate work. This PR preserves their action callbacks and does not change IncomingMessageCard or QueuedMessageCard.

Status: exact-head Codex xhigh review and CI reconciliation are pending with nx-chat; do not merge before that receipt.

Changelog

Fixed: Message copy, retry and other actions use compact, evenly spaced controls with native SF Symbols.
Agent session: agent session