feat(web): vendor keyboard shortcuts + ?, j/k, Shift+F#20
Conversation
Vendors the keyboard-shortcuts registry, useShortcut hook, ShortcutLabel, and KeyboardShortcutsDialog from the hosted stage monorepo. Mounts the dialog at the SPA root so ? toggles a help menu listing every registered shortcut grouped by category. Adds Shift+F to toggle the Files-tab side picker and j/k to step through the file list (lifts the picker's collapsed state up so the shortcut and the in-panel button share one source of truth).
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit e4a6067. Configure here.
There was a problem hiding this comment.
Code Review
This pull request implements a keyboard shortcut system, including a shortcuts dialog, file navigation keys, and a files panel toggle. It adds Radix UI and react-hotkeys-hook as dependencies. Review feedback identifies opportunities to improve type safety in the shortcut grouping logic and to remove a redundant check in the file navigation hook.
The hook was vendored alongside the keyboard-shortcuts framework but nothing currently consumes it (ShortcutTooltip wasn't ported). Easy to re-add when the first tooltip needs a shortcut.
Iterate via Object.keys cast to ShortcutKey[] so KEYBOARD_SHORTCUTS[key] inherits its full type. Drops the per-iteration entry-value assertion that Object.entries forced.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: cd14a3901e
ℹ️ 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".
| "class-variance-authority": "^0.7.1", | ||
| "clsx": "^2.1.1", | ||
| "lucide-react": "^0.562.0", | ||
| "radix-ui": "^1.4.3", |
There was a problem hiding this comment.
Avoid mixing unified and per-primitive Radix deps
Adding radix-ui here while keeping the existing @radix-ui/react-* dependencies creates a mixed dependency strategy that now resolves duplicate Radix primitive versions in the lockfile (for example, multiple @radix-ui/react-separator versions). This increases install/build footprint and raises the chance of subtle UI inconsistencies from version skew; use either the unified radix-ui package consistently or keep per-primitive packages only.
Useful? React with 👍 / 👎.

Summary
Vendors the keyboard-shortcuts framework from the hosted stage monorepo and wires up the first three shortcuts.
?toggles a help dialog (mounted at the SPA root) listing every registered shortcut grouped by category.Shift+Ftoggles the file picker on the Files-changed tab;j/kstep through the file list.Changes
lib/keyboard-shortcuts.tsregistry withSHOW_SHORTCUTS,TOGGLE_FILES,NEXT_FILE,PREV_FILE(only entries that map to existing features — others omitted to avoid ghost shortcuts).lib/use-shortcut.ts,lib/use-file-navigation-keys.ts,components/keyboard/{shortcut-label,shortcuts-dialog}.tsx, and shadcncomponents/ui/dialog.tsx.react-hotkeys-hookdep.CollapsiblePickeris now controlled — requiredisCollapsed/onCollapsedChangeprops soShift+Fand the in-panel button share one source of truth.FilesPageowns the state.Testing
pnpm typecheck,pnpm lint,pnpm test(124 passing), andpnpm buildall clean. Browser interaction not yet verified — please confirm?opens the dialog andj/k/Shift+Fwork on the Files tab.