Align web and Chrome extension UI with VAV desktop - #31
Merged
Conversation
Desktop now starts the loopback web bridge on the embedded daemon (and in-process when there is no child). The side panel auto-discovers it, and a pasted Connect URI or local http/ws URL attaches to the same secret. Co-authored-by: Oboo Cheng <oboochin@gmail.com>
…dge. Electron e2e now boots with VAVD_SPAWN, waits for /discover on 4752–4762, and completes a phone hello over /vav. Co-authored-by: Oboo Cheng <oboochin@gmail.com>
Desktop 1.19.0 users open the app, then the side panel — or paste the Connect vav-daemon:// line. Cover both against a desktop-style spawned vavd (web on 4752) through a real Chrome extension turn. Co-authored-by: Oboo Cheng <oboochin@gmail.com>
runtime.onMessage ignored type=pair, so pasted Connect lines never reached the service worker. Accept that message, take the host name from welcome, and assert auto-discover plus vav-daemon:// paste against a uniquely named desktop-style vavd. Co-authored-by: Oboo Cheng <oboochin@gmail.com>
Web and the side panel were separate HTML/CSS/JS copies. They now mount the same app-shell: 232px sidebar, You/Agent transcript, thinking-process, tool-call rows, and the desktop run bar (mode · approval · model · thinking · Fast). iOS already used that order; keep it as the phone reference next to desktop. Co-authored-by: Oboo Cheng <oboochin@gmail.com>
Phone clients were a second UI (custom sidebar, contract fields as the run bar). They now render the same App / Sidebar / SessionDetail / Composer shell, with pairing and page-context chrome on top. Sending configures the host conversation before the turn so e2e model/approval stick. Co-authored-by: Oboo Cheng <oboochin@gmail.com>
Stub the desktop preload surface the browser is missing so App can mount. Configure still lands on the host conversation; tests now read the thread that received the turn instead of a workspace-minted empty session. Co-authored-by: Oboo Cheng <oboochin@gmail.com>
The HTML is now the App mount (phone.js). The /vav socket lives in the bundle, not inline markup. Co-authored-by: Oboo Cheng <oboochin@gmail.com>
…umn. Phone clients already mount App, but they skipped filePreview.css — the rules that make WorkspaceView a flex session + collapsed preview drawer. Without them the composer crushes into a strip and the empty file-preview state paints over the log. Import the same index.css desktop uses, and assert the dock stays a horizontal session column in Chrome. Co-authored-by: Oboo Cheng <oboochin@gmail.com>
The current-tab chip was a fixed overlay at the old vanilla composer offset, so it covered the desktop dock. Portal it into detail-stream (same slot as attachment chips) and assert it does not overlap the composer. Harden vavd spawn teardown against EIO on close. Co-authored-by: Oboo Cheng <oboochin@gmail.com>
Headless Chrome sometimes throws EIO on close after a green assertion. That flake was failing otherwise-passing web and extension layout runs. Co-authored-by: Oboo Cheng <oboochin@gmail.com>
macos-14 now ships system Chrome, so the test ran against a browser it was meant to skip and timed out on the stub reply. Prefer Playwright's browser; only fall back to system Chrome on a developer machine. Co-authored-by: Oboo Cheng <oboochin@gmail.com>
tsc for src/main has no DOM types. Read page globals from globalThis when Playwright runs the probe in Chrome so typecheck can stay node-only. Co-authored-by: Oboo Cheng <oboochin@gmail.com>
sessionStore.send requires attachments, and popupMenu needs the native menu item types. CI never reached tsc while the browser tests failed. Co-authored-by: Oboo Cheng <oboochin@gmail.com>
macOS runners sometimes asserted the minted temp dir before the host bind was visible on ConversationStore, after the dial already returned. Co-authored-by: Oboo Cheng <oboochin@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Web, Remote, and the Chrome extension were a second product: vanilla DOM, a
<select>run bar, and custom You/Agent markup. They now mount the same desktopApp—Sidebar,SessionDetail,Transcript,Composer,SessionRunPicker,AgentModelPicker— and load the sameindex.css(including workspace-view flex) so the session column stays a horizontal composer dock, not a crushed preview.Phone-only chrome stays thin: pairing, the current-tab chip (ported into the desktop
detail-streamabove the dock), and the e2e contract fields (#model/#approval/#sendForm).window.vavis a phone-protocol adapter (hello.role=phone). Turns stay in vavd. The worker does not grow anAgentRuntime.Sending writes
configureon the same conversation beforesend. Browser e2e covers web configure/stub reply and extension pair (URL, auto-discover,vav-daemon://) plus page context, and asserts the composer dock is a horizontal session column that the page chip does not cover.iOS cannot import React; it keeps the same phone protocol and desktop run-bar order.