Repository navigation
🤖 feat: keyboard shortcuts for the background processes strip - #5633
Conversation
|
Preview deployment for your docs. Learn more about Mintlify Previews.
💡 Tip: Enable Automations to automatically generate PRs for you. |
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. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 8ac1707cfe
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
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".
… ignore the chord in the palette
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d56b9d80e0
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
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".
…ile the pane is inert
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 5b2e605bdf
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
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".
…s; list only the global chord in Settings
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 5e03a59daf
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
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".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 58d46988eb
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
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".
Readiness record
Generated with |
Summary
The background processes strip now has keyboard shortcuts on desktop and in the VS Code webview.
Ctrl/Cmd+Shift+Jexpands the strip and focuses its first row. Arrow keys move between rows,Enteropens the output viewer,Backspaceterminates the process, andEsc(or the chord again) collapses the strip and returns focus to where it was. Desktop also gets a "Focus Background Processes" palette entry.Fixes #5197
Implementation
BackgroundProcessesBanner, so desktop and the webview get the same shortcuts. The rows use a roving tabindex. Row keys go throughChatInputDecoration's new optionalcontentRef/onContentKeyDownprops and callstopKeyboardPropagation, soEscon a row does not also reach the window-level stream interrupt.preventDefaulted).Enter, focus returns to the row (the dialog has no trigger for Radix to restore focus to). With no focus origin (palette activation),Escleaves focus on the strip's toggle button.isDialogOpen()does not detect. The chord and the palette request are also ignored while the strip sits in aninertpane (desktop keeps the chat pane mounted under immersive review).keybinds.ts:FOCUS_BACKGROUND_PROCESSES, and the row-scopedBACKGROUND_PROCESS_NEXT/PREV/VIEW_OUTPUT/TERMINATE. Settings → Keybinds lists them in a new "Background processes" group, anddocs/config/keybinds.mdxdocuments them (the webview has no palette or settings).KeyboardFocusedRowstory was removed in the last push because its play failed in CI at phone width. The six App.test cases cover its assertion (the chord focuses the first row) and more.Decisions
did-keydownin VS Code's webviewpre/index.html), so the chord avoids VS Code's global bindings (Ctrl+Shift+Bruns the build task). Electron usesCtrl+Shift+R(force reload) andCtrl+Shift+I(devtools).Ctrl/Cmd+Shift+Jis free in Xum, and VS Code binds it only inside the search view.Backspace, notDelete: the macOS delete key reportsBackspace. It acts only on a focused strip row, like the existing one-click Terminate button.Validation
Test-first. Before the fix, the new App tests failed:
Round 1 of the normal review added three cases (natural exit, palette origin, palette open). Against the previous head, those tests failed (3 fail). Round 2 added two more (row removed while its dialog is open, inert pane). Against the previous head, those failed too (2 fail). Round 3 added the terminal case, which fails without the guard.
After the fix:
bun test ./vscode/src/webview/App.test.tsx -t "#5197"6 pass. The new palette test insources.test.tspasses. Two mutation checks failed as expected: no refocus after removal, and no refocus after closing the dialog.bun test ./vscode/src/webview/webviewCss.test.ts(drift guard) passes.CSS: no CSS files changed. The webview dist CSS asset count stays at 2 (
xumChatView.css,katex/katex.min.css). The new utilities compile into the existing stylesheets, and the drift guard confirms the webview defines them.Dogfood:
env -C vscode node esbuild.config.js) served with a host stub at 300 px (narrow sidebar), 390 px and 900 px. With agent-browser I pressed the chord from the composer: row 0 was focused.ArrowDownwent to row 1.Backspacesentworkspace.backgroundBashes.terminate {processId: "bash_2"}.Enteropened the output viewer (getOutputcalls).Escclosed it and focus returned to the row. A secondEsccollapsed the strip and focused the textarea.Ctrl+Shift+Jhint) focused row 0.Webview, 300 px sidebar, second row focused:
Webview, 390 px:
Webview, tooltip hint:
Desktop, 1200 px:
Desktop, 390 px:
Desktop palette entry:
Size: 472 changed lines (464+, 8-), tests included, 4 of them regenerated in
builtInSkillContent.generated.tsfrom the docs change. The coordinator accepted up to 506.Risks
Low. The chord listener exists only while processes are listed, and row keys act only when a strip row has focus. Mouse behavior is unchanged.
Generated with
xum• Model:anthropic:claude-opus-5-5• Thinking:high• Cost:$2.45