cx-wyh9f: the New Tab card is the agent composer's: field, model and Send, then the project row
Leo asked (10-13, from a photo of the New Tab page): the search field, its selection and the "Choose project" plus model pickers under it read as illogical. The New Tab card should be the agent composer.
It also covers hq#1925 item 12, the live New Tab text overlap: "No agent to ask" showed through "Search the web", and "Search the web for …" showed through the New terminal / browser / chat row.
What changed
- The New Tab card now has the agent composer's order (Composer.tsx): the field, then the bar with the agent's model chip and, at its end, the mic and Send (
acpmux-composer-actions), then the location row. - The project leaves the bar. It is now the composer's own location row (
ComposerContext) at the card's bottom: the folder menu with the projects, Choose folder…, and the computer, exactly as a new chat shows it. It still names the folder a prompt starts in (the host's start folder or a pick), never the~the tab inherited (cx-7fje0). - hq#1925 item 12: the overlap came from a see-through suggestions popover. #20153 (op-next-steering) made it solid, after the audited build (38e84dbe90b8 lacks it). This PR adds a regression check for it, with no further code change.
- Layout only. The field's visual styling (fill, edge, focus ring, selection) belongs to op-next-icons, and the suggestions dropdown's readability and ranking to op-next-steering.
Tests
webviews/test/new-tab-composer-layout.test.tsx: inside the card, the field, the model chip, Send and the location row come in that order, the row names the project, and the bar holds no project control. Red on a107cea22a3b, green on 9af1fbf12698.new-tab-project-chip.test.tsx(which folder the project names) andhideable-chrome.test.tsx(a popup from the card keeps its own menu) now find the folder control in the location row; same assertions, and the label is the composer's "Choose folder".- Gallery:
ComposerContextjoins the New Tab entry's covers. The PR's gallery run is the before and after of every New Tab state. - Gallery
agent-pane.new-tab/typed-over-note(hq#1925 item 12): with no harness and typed text, the popover is opaque, and every item of the line and row under it hits the popover, not the page. Red: the audit's live captures on 38e84dbe90b8, and #20153's own red (the popover fill fell back to the transparent page). This play was not run on the pre-#20153 tree, because browsers run only in CI. bun run checkpasses.gallery-coverage.test.tsfails on base (conversation/turns.ts).
Changelog
- Changed: the New Tab composer matches the agent composer: the model and Send under the field, the project in the location row below.
🤖 Generated with Claude Code
Need help on this PR? Tag @codesmith-bot with what you need.
Summary by cubic
The New Tab card now follows the agent composer's layout: the field on top, then the bar with the model chip, mic, and Send, then the location row showing the project the chat starts in. "Integrate a harness" appears only when no harness is installed, as one dismissible line under the field; dismissing it hides the line for good, across relaunches.
Changes
- The card's bar holds only the model chip, the mic, and Send; the project lives in the composer's location row below, using the composer's own
ComposerContext. - The location row names the machine the chat starts on, as the host does, and offers no other machine (a New Tab chat starts where the page runs).
- In a pane under 480 px the location row takes its room from the space above the card, so All chats stays the page's only scroller.
- The field takes focus back after a folder pick, so Return sends instead of reopening the menu.
- The hint waits for acpmux's harness list; a harness it lists but cannot run still counts as installed.
- Dismissal is stored via
newTab.rememberharnessHint: "dismissed"so every later page stays quiet.