Gallery: whole-window app scenes you can try (app.window)
Leo: "we have teh gallery... we should have a faithful all-levle representation of the app through that stuff....." and "WE DONT NEED F***IGN SCREENSHOTS JUST LET ME TRY THE STUFF OUT".
What this adds
One gallery entry, app.window (webviews/src/gallery/scenes/AppWindow.gallery.ts), whose variants are whole-app scenes. Each one mounts the real agent pane (acpmux/main.tsx, AcpmuxApp) through agentPaneEntry, at the pane's real size in a real-size cmux window (the default window frame, src/gallery/window.ts), in dark and light. These are live panes, not pictures: every menu and panel is opened by the play steps a person's clicks would make, and the pane stays usable afterward, so anyone can open the gallery and try it.
| Variant | What it shows | How it gets there |
|---|---|---|
new-tab | The New Tab page as the app opens it (no stored template, so Minimal), with recent chats | the host's ready.newTab answer, as the app sends it |
chat-session-info | A chat after a few turns (reads, edits, a test run, a code block, a follow-up) with Session Info open | open by default; if it is closed, the play clicks the header's Session Info toggle |
composer-model-picker | That chat with the composer's model menu open | play: click the model button |
composer-effort-menu | The model menu with the current model's effort levels open | play: model button, then the Effort levels (side dropdown or submenu, by keyboard) |
environment-picker | A new chat with the computer (machine) picker open over a fleet of machines | play: click the location row's Computer control |
All data is synthetic, from src/gallery/fixtures/acpmux.ts (chat, noChat, manySessions, fleetPeers, CONTEXT_BREAKDOWN). No native chrome is drawn: window mode sizes the pane from the app's own metrics and draws only the web surface, as for every entry.
covers names the real component files (App.tsx#AcpmuxApp, NewTabScreen, ChatInspector/InspectorPanel, QuickModelMenu.tsx, ComposerPickers.tsx, ComposerContext, EnvironmentPicker.tsx), so scripts/gallery/touched.ts picks these scenes up when those files change.
Design specs (leo-workspace design/): new-tab.md, session-info.md, composer.md, model-picker.md, environment-picker.md. This PR changes none of those surfaces; it only shows them.
Gallery: app.window
Verification
Rendered on Linux CI (cmux-ci fast checks, Chromium, --frame window, 16:9, one pane, Apple System Colors dark and light): bun scripts/gallery/manifest.ts --entries app.window --themes pair then scripts/gallery-matrix/runner.ts. All 10 cases reached ready=1 and every play finished. I opened each still and checked it: New Tab shows its composer, the chat shows Session Info open, the model menu is open, the effort levels are open beside it with High checked, and the machine picker is open with This Mac, My machines and Cloud and VMs. Nothing is blank or cut off.
On the same run, bun test test/gallery-coverage.test.ts test/gallery-env.test.ts test/pane-english.test.ts test/gallery-agent-pane-entries.test.ts test/gallery-entry-store.test.ts has one failure, "every cover names a component or page that exists". It lists 54 covers from other entries (none from app.window), so it comes from the base, not this PR. bun run check type check: no errors. Oxlint: 0 errors.
Observed / Not run
Observed: the 10 renders and the tests above. Not run: WebKit renders, and a native app capture (this PR is a gallery fixture only).
Changelog
none
Risk: low (gallery fixture only, no shipped code).
Agent session: agent session
š¤ Generated with Claude Code
![View with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/view-with-codesmith-dark-v3-3x.png)
![Autofix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/autofix-with-codesmith-dark-3x.png)
Need help on this PR? Tag @codesmith-bot with what you need.
Summary by cubic
Adds app.window, a gallery entry that mounts the real agent pane at its real window size in five whole-app scenes a person reaches by using the app, so anyone can open the gallery and try the app instead of looking at screenshots.
- Variants: New Tab, a chat with Session Info open, the composer's model menu, its effort levels, and a new chat's machine picker.
- Open states come from play steps a person's clicks would make; each pane stays live after the scene renders.
- All data is synthetic, and
coversname the real component files so the scenes stay current when those files change.