blue-a11y/dsh-client-shortcuts ↗★ 1
@blue-a11y/dsh-client-shortcuts
DeepSeek Harness Web GUI 的全局键盘快捷键插件:ctx.shortcuts 注册表服务,以及 mod+l / mod+k / mod+shift+c 默认绑定
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:blue-a11y/dsh-client-shortcuts说明文档
阅读完整 README ↗@blue-a11y/dsh-client-shortcuts
Global keyboard shortcuts plugin for the dsh web GUI. ShortcutRegistry (the ctx.shortcuts service) owns one capture-phase keydown listener on window and fires registered combo handlers, releasing the event while focus sits in a text field unless a binding opts in. A 快捷键 settings page (registered into settings.section, built from @deepseek-ai/dsh-client-ui-primitives) lists every bindable action with record/reset rebinding and conflict detection. The node half is deliberately empty — the whole feature is browser UI.
mod matches Cmd on macOS and Ctrl elsewhere (e.metaKey || e.ctrlKey), the same convention the composer uses. The UI and README spell combos cmd-friendly (cmd+l ≡ mod+l).
Bindable actions
| Action | Default | Text-field scope |
|---|---|---|
| Focus composer | cmd+l | — |
| New session | cmd+shift+k | allowed |
| Stop generation | cmd+. | allowed |
| Toggle sidebar | cmd+b | allowed |
| Open details panel | cmd+shift+e | allowed |
| Close details panel | unbound | — |
| Previous session | cmd+[ | allowed |
| Next session | cmd+] | allowed |
| Toggle theme | unbound | — |
| Scroll to top | unbound | — |
| Scroll to bottom | unbound | — |
| Fork session | unbound | — |
Actions without a safe default ship unbound; record a combo in the settings page to activate one, and reset clears it back to unbound. Defaults deliberately avoid browser-reserved combos (cmd+n/t/w, cmd+shift+n/t/w/i/j/c, cmd+alt+i/j/u): those trigger the browser's own behavior before any page listener can preventDefault, so a web plugin can never bind them (desktop apps like Codex can — which is why its keymap cannot be copied verbatim). Option/Alt is likewise unusable for letters and brackets on macOS: it rewrites the produced character ( yields ), so no longer matches the registered key.