Repository navigation
🤖 feat: VS Code webview dock uses the desktop live line - #7692
Conversation
The webview dock stacked one full-width row per activity kind (sub-agents, background bashes) above its turn status. Render them as chips in the turn status row inside ChatActivityPanelsProvider, as desktop's ChatActivityLine does (#7660, #7687): one panel open at a time, the row kept between turns for its chips and hidden without any, keyed per connection and workspace. Refs #7689 Signed-off-by: Thomas Kosiewski <tk@coder.com>
Signed-off-by: Thomas Kosiewski <tk@coder.com>
…precondition The live line's bash chip shows only a count, so the server-switch test's textContent probe for "background bash" could no longer see the previous server's processes: it passed with the connection-switch cache reset removed. Probe the chip element instead, as the first-reveal test already does. The chord test now checks the sub-agents panel starts closed, so only the chord can open it. Signed-off-by: Thomas Kosiewski <tk@coder.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
@codex review |
|
Codex Review: Didn't find any major issues. What shall we delve into next? Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
🛡️ Codex Security Review · Automatically triggeredSecurity review completed. No security issues were found in this pull request. Reviewed commit: Only the user who started this review can view the report in Codex. ℹ️ About Codex security reviews in GitHubThis is an experimental Codex feature. Security reviews are triggered when:
Once complete, Codex will leave suggestions, or a comment if no findings are found. |
🟢 e2e stories (Haiku): 14 passed22 agent steps · 7 replayed from cache · 15 model calls · 46.4k tokens (27% cached) All 14 tests in 9 files
e2e 0.20.0 · 1m 21s · web · run artifacts 🟢 e2e Electron stories (Haiku): 3 passed3 agent steps · 3 model calls · 7.9k tokens (33% cached) All 3 tests in 3 files
e2e 0.20.0 · 18.6s · electron · run artifacts 🟢 e2e agent repros (Haiku): no tests selectedSpend: $0.00 of the $1.00 cap (proxy ledger) e2e 0.20.0 · 5.3s · 2 targets (web, phone) · run artifacts |
Summary
The VS Code webview dock now uses the desktop live line: one row with the turn status plus a sub-agents chip and a background-bash chip, each opening its panel. The two full-width rows above the composer are gone. Fixes #7689 (refs #4968).
Background
#7660 and #7687 folded the desktop composer's activity rows into one live line (
ChatActivityLinerenders the chips as theactivityofStreamingBarrierinsideChatActivityPanelsProvider). #7660 left the webview on the old rows on purpose, so a narrow VS Code sidebar still spent one row per kind.Implementation
All changes are in
vscode/src/webview/. No file undersrc/changes, so desktop behavior and the desktop bundle stay as they are.App.tsx: oneChatActivityPanelsProvider(dataComponent="ChatActivityLine") wrapsVscodeStreamingBarrier, whoseactivityisSubAgentTasksDock,BackgroundProcessesBannerand the sharedChatActivityOverflowChip("+N", as on desktop). The provider key includes the connection and the workspace (activity-line-<connection>-<workspace>), so no open panel or bash output dialog carries over to another workspace or server. Without a server connection the line getsnullchips, as before (no last-known processes offered).StreamingBarrier.tsx: forwardsactivityand passesshowModelName={false}like the desktop line. Without an aggregator it renders the sameStreamingBarrierContentwith an idle state instead ofnull, so the chips show between turns and never remount when a turn starts or ends. With no chip and no turn, the shared view hides the row.SubAgentTasksDock.tsx: usesuseChatActivityPanel("sub-agents")instead of a persisted expanded flag, the same as desktopSubAgentTasksDecoration. Opening one panel closes the other. ThegetSubAgentTasksExpandedKeyentry stays in the storage cleanup registry, so old persisted values still get cleaned up.Narrow widths: the shared provider opens panels in its bottom sheet at widths of 768 px or less, or heights of 500 px or less. Desktop does the same. So at 740 px and 400 px the panels open in the sheet. At wider widths they open as a popover above the line.
Perf-owner checks:
make check-react-compilerstays green with the same pre-existing "1 known skipped" as main. The change adds noeslint-disable react-hooks, no manual memo, and no per-row transcript work. Dist CSS assets: 2 before, 2 after (out/xumChatView.css,out/katex/katex.min.css). No shared CSS was added, and thewebviewCss.test.tsdrift guard passes unchanged.Validation
BUN_RUNTIME_TRANSPILER_CACHE_PATH=0 bun test ./vscode/src/webview/(Bun 1.4.3): 110 pass. New tests inApp.test.tsx("vscode webview live line (🤖 feat: VS Code webview dock folds its activity rows into the desktop live line #7689)"): both chips share one line and one panel slot; Ctrl+Alt+A from the composer opens the sub-agents panel; an open panel survives a turn starting and ending but does not carry over to another workspace. Each new test fails against a deliberate break. The existing terminate, sub-agent select and Ctrl+Shift+J keyboard tests pass on the chip UI.make static-checkpasses.Before (main)
740 px, live turn:

400 px, live turn:

After
740 px, live turn:

400 px, live turn:

740 px, between turns (chips only):

400 px, sub-agents chip opened (shared bottom sheet at this width):

1000 px, sub-agents panel above the line:

Risks
The risk is low and limited to the webview dock. The chips and panels are the shared desktop components. The webview only changes where they mount. Sub-agent panel state is no longer persisted per workspace, which matches desktop.
Pre-existing, not changed here: after a switch to file mode, a stale streaming status stays in the line. I checked the stub on main, and main shows the same.
Generated with
xum• Model:anthropic:claude-opus-5-5• Thinking:high• Cost:$11.53