Chat toolbar: one compact group with SF Symbols

Merged
TE
9d ago
+258-19

Agent chats now have one compact tool group: Session Info, Changes when available, Terminal, Browser, then chat actions. Base commit 702344519b8 already removes the duplicate native new-terminal/new-browser buttons for every pane; the pane + and “…” menu remain their creation paths. This PR keeps that base behavior and focuses on the agent-chat group, SF Symbol glyphs, per-button highlights, and Session Info placement.

Leo: "you still haven't fixed this, the top right buttons. Like the session... I mean, how has it taken so ungodly long to fix these things?"

Leo: "ugly and useless top left plus now egregious amounts of vertical space taken up by absolutely nothing of use / plus the top right buttons still has that wack background"

Compared with nightly source f83ddd6b204221b1b019e67734cf129e8e431aee, base now supplies the duplicate native-button removal for every pane; this PR uses host SF Symbol templates for the web tools and reduces the standalone header from 44px to 28px. The selected panel glyph uses accent ink in both the SF Symbol and fallback paths, with no backdrop; hover feedback remains on its own button. No toolbar tile or group highlight is introduced. The earlier removal of the machine/folder label remains. Includes dependent #26372, which keeps the header aligned when Session Info pushes the conversation; land that first.

Gallery: agent-pane.header-tools/unified-compact, agent-pane.header-tools/unified-roomy, agent-pane.header-tools/unified-tight, agent-pane.header/standalone-compact, agent-pane.header/standalone-roomy, agent-pane.header/standalone-tight, agent-pane.header/session-info-push-open, agent-pane.header/quiet

The gallery keeps three group treatments: compact (chosen: 24px targets, 2px gaps, 16px glyphs), roomy (28px/4px), and tight (24px/0px). Compact fits the native 28px row while keeping adjacent actions distinct. Three standalone row heights (24/28/32px) show why the chosen height removes unused space without shrinking targets. References: the existing Claude/Codex desktop tool strips and the reported six-icon row; private captures are not attached. Browser gallery glyphs use the existing fallback; the app loads actual macOS SF Symbols.

Validation: the SF Symbol request/order regression fails on the preceding head and passes with the implementation (2 tests, 57 assertions). The host-backed pressed-state assertion also fails on 407343df53264e9ed13f2e17221df7be416e7ba4 and passes with the selected tint, including clearing it when unpressed. The standalone header test fails at 44px on base and passes at 28px. Five Chromium browser checks pass for overlay/push, header/tab-row placement, resize, and clicking the Session Info toggle. The focused unit set passes 31 tests; full webviews check (lint, format, types, layers, fixed-wait and design-token checks) and pre-push checks pass. The alternate gallery sizes are rendered before interaction measurement, so the hover check measures only hover and keeps its zero-layout-shift threshold. The Swift regression checks that no pane kind exposes newSurface/openBrowser as resting buttons. Web validation and pre-push checks pass. The exact-head fleet compile-check (job 823574b5b0408c957ad3035f) is blocked by the same unrelated base error in ComputerUseSetup.swift:236:73 ([String : Any] is non-Sendable); this PR does not touch that file.

Risk: native duplicate removal is inherited from base for every pane, while commands and the pane +/“…” menu remain available. Symbol images reuse the existing cached host endpoint and React subscription, with its unmount cleanup; no new observer, timer, animation loop, or transcript-row work is added. The native Push-open retake at 43538bffed195c7586c680c63261d7098d6d0d38 was attempted on the fleet, but its exact-head build is blocked by the unrelated base compile error above; the existing web captures remain valid. Each prior capture recorded a connected chat with seven transcript rows and completed layout, and passed the capture privacy check.

Native retake at the corrected head: Push always + Session Info open (light/dark)

The exact-head native retake was dispatched for 43538bffed195c7586c680c63261d7098d6d0d38 (fleet job 61145685baa39046844fedf6). It could not produce stills because the base ComputerUseSetup.swift:236:73 compile error stopped the app build; no stale or private image is attached.

After: push-open

Capture steps-43918dc97b at 1198cd0793ea (fleet build, capture mini, text checked for private data)

LightDark
lightdark

After: push-closed

Capture steps-5c67eb02e0 at 1198cd0793ea (fleet build, capture mini, text checked for private data)

LightDark
lightdark

After: overlay-open

Capture steps-bd491bc422 at 1198cd0793ea (fleet build, capture mini, text checked for private data)

LightDark
lightdark

After: overlay-closed

Capture steps-e300da5a29 at 1198cd0793ea (fleet build, capture mini, text checked for private data)

LightDark
lightdark

Before: nightly f83ddd6b, same states

Before push-open

Capture steps-43918dc97b at f83ddd6b2042 (fleet build, capture mini, text checked for private data)

LightDark
lightdark

Before push-closed

Capture steps-5c67eb02e0 at f83ddd6b2042 (fleet build, capture mini, text checked for private data)

LightDark
lightdark

Before overlay-open

Capture steps-bd491bc422 at f83ddd6b2042 (fleet build, capture mini, text checked for private data)

LightDark
lightdark

Before overlay-closed

Capture steps-e300da5a29 at f83ddd6b2042 (fleet build, capture mini, text checked for private data)

LightDark
lightdark

Agent session: agent session