How keyboard shortcuts are wired globally and per-panel in this repo.
packages/web-client/src/utils/keyboardShortcuts.ts.packages/web-client/src/index.ts and wired with:isEnabled() (respects the keyboard shortcuts preference + open dialogs)getActivePanel() (for scope resolution)clientPreferences)services.keyboardShortcuts.register(...) so plugins can register panel-scoped shortcuts.KeyboardNavigationController via KeyboardShortcutRegistry.register(...).document keydown listener (capture phase) and dispatches by key.isEditableTarget pattern in KeyboardNavigationController).Ctrl+S (see split-panel shortcut in KeyboardNavigationController).PanelWorkspaceController and persisted in local storage (aiAssistantPanelFocusHistory).Ctrl+C/L/N focus the last-used chat/lists/notes panel.services.keyboardShortcuts.register(...) from the panel module (see lists/notes/time-tracker).scope: 'panelType' + panelType for a shared binding across all instances of a panel.scope: 'panelInstance' + panelId for instance-specific bindings.bindingId to support user-configurable overrides (defaults to id if omitted).event.preventDefault() and event.stopPropagation() before returning true.panel.active context and cache isPanelSelected.CommandPaletteController attaches a keydown listener while open and consumes keys like Escape.PanelWorkspaceController listens for Escape to close modal panels, but blocks when certain overlays are open.KeyboardShortcutallowShift: match even when Shift is pressed but not part of the modifiers.allowWhenDisabled: allow handling even when global shortcuts are disabled (useful for dialogs).priority: resolve conflicts within the same scope.platform: restrict to mac, win, linux, or all.services.keyboardShortcuts so bindings can be overridden later.