DeepSeek Harness Plugin

YEYEYEYESHIFU/dsh-session-hotkeys

Stars ★ 3 Downloads (30d) 1,172 Category Sessions & Messages Added 2026-08-16 npm dsh-session-hotkeys

Session hotkeys for the DSH Web GUI: switch sessions like browser tabs (positional Alt+1-9, pinned slots, previous/next, new/archive/rename), keyboard model switching via Alt+M, alternate send, Esc focus hand-off, and Alt+W to close or restore a dsh-split-screen workspace — all rebindable with Windows/macOS presets. Verified on DSH 0.1.1 and 0.1.5.

Install

# from npm (prebuilt)

dsh plugin --profile web add dsh-session-hotkeys

# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)

dsh plugin --profile web add github:YEYEYEYESHIFU/dsh-session-hotkeys

Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).

README

This plugin publishes its README in Chinese only.

Session hotkeys for DeepSeek Harness Web · 给 DeepSeek Harness Web 的会话快捷键插件

Switch sessions from the keyboard the way you switch browser tabs. 像切换浏览器标签页一样用键盘管理会话。


Install

DSH Web (dsh CLI):

dsh plugin --profile web add "dsh-session-hotkeys"

DeepSeek Harness Desktop: the desktop profile is reserved — the standalone CLI refuses it (profile "desktop" is managed exclusively by the Electron application). Install from Settings → Plugins inside the app instead, which applies the change live (no restart needed). The equivalent command line, run through the desktop's own bundled CLI, is:

"<install dir>/DeepSeek Harness.exe" --expose-internals \
  "<install dir>/resources/app.asar/dsh/node_modules/@deepseek-ai/dsh-desktop-host/lib/cli.js" \
  plugin --profile desktop add "dsh-session-hotkeys"

Restart DSH web after installing there; the desktop app picks the plugin up without a restart. 桌面版无需重启,浏览器版安装后重启 dsh web。

English · 简体中文

English

Why

  • Alt+1-9 jumps straight to the Nth session; hold the configured switch modifiers to show 1–9 beside the first nine sidebar rows, then release to hide them. Alt+↑/↓ cycles through sessions — no mouse needed.
  • Everything is rebindable from the panel, with Windows / macOS presets that are screened against browser & system shortcuts.
  • Works while you're typing in the chat input — no blur-first step. Plain typing never triggers anything.
  • Esc toggles to the chat: the first press hands focus to the transcript (↑↓ / PgUp / PgDn scroll), closing the panel, exiting nav, or dismissing the model menu on the way; the second press returns focus to exactly where it was — model selector (ring restored), input (caret intact), anything. Composer popups (slash commands) and IME keep their own Esc.
  • Pure browser plugin: no network requests, no server-side state, nothing collected.

Keybindings

Defaults shown; rebind any of them in the panel (Alt+P → Keys tab).

Action Windows macOS
Switch to Nth session Alt+1-9 ⌃⇧1-9
Show position badges 1–9 beside the first nine sessions (hold, then press a digit to switch) hold Alt hold ⌃⇧
Previous / next session Alt+↑ / Alt+↓ ⌃⌥↑ / ⌃⌥↓
Pin slot (pin / jump / unpin) Alt+Shift+1-9 ⌃⌥1-9
Jump to pinned slot Ctrl+Alt+1-9 ⌃⌥⇧1-9
New session Alt+N ⌃⌥N
Archive current session Alt+Shift+A ⌃⌥A
Open archived list Alt+Shift+U ⌃⌥U
Rename current session Alt+Shift+R ⌃⌥R
Navigation mode (↑↓ select · Enter open · Esc cancel) Alt+` ⌃`
Open panel Alt+P ⌃⌥P
Collapse / expand the conversation sidebar Alt+B ⌃⌥B
Close the focused split pane (last one tucks the workspace away) Alt+W ⌃⌥W
Focus search box Alt+Shift+F ⌃⇧F
Focus model selector Alt+M ⌃⌥M
Focus back to chat input Alt+Enter ⌃⌥Enter
Toggle chat focus (Esc → transcript, again → back; panel/nav/menu cancel on the way) Esc Esc
Send with alternate busy behavior Alt+Shift+Enter ⌃⌥⇧Enter

Notes

  • Archiving asks for confirmation first and never deletes anything — archived sessions stay listed in the panel's Archived page. (DSH 0.1.x has no public unarchive API, so restoring is host-side.)
  • Bindings and pins are saved in browser localStorage and survive restarts. Clearing site data resets them.
  • The sidebar must be expanded: session order is read from the rendered rows.

Chrome maps both ⌘+1-9 and ⌃+1-9 to tab switching (Safari: ⌘+1-9), so positional switching uses ⌃⇧1-9. ⌥ alone would type special characters, so it is never used by itself. ⌃+↑/↓ is Mission Control and ⌃+N/P/F/B/A/E/K/D are Emacs line-editing keys in text fields, hence the ⌥ additions elsewhere. ⌃/⌘+Enter are the composer's own send chords, so the Enter-family adds ⌥. All combos were screened against macOS Chrome and Safari. On macOS all bindings render with native symbols (⌃ ⌥ ⇧ ⌘). The only modifier-free binding is Esc — no browser conflict in Chrome or Safari, the IME-cancel Esc is left untouched, and ⌘/⌃+Esc variants never match.

  • Tested with DSH Web from @deepseek-ai/dsh@0.1.1-rc.2; re-verified end-to-end on @deepseek-ai/dsh@0.1.5-rc.2 (2026-09-15) in both the standard and the split-view UI.
  • Re-verified end-to-end on @deepseek-ai/dsh@0.2.0-rc.2 (2026-09-30) — the runtime bundled with DeepSeek Harness Desktop 0.2.0-rc.2 — in the desktop profile, with no compatibility.json version exemption. The 0.2.0 launcher refuses to mount a bundle whose @deepseek-ai/dsh-* peers do not accept the running version, so this package declares ^0.2.0-rc.2 alongside ^0.1.1-rc.2.
  • 2026-11-11: DeepSeek Harness Desktop 44.7.0 bundles @deepseek-ai/dsh@0.2.2-rc.1; peers now include ^0.2.1-rc.2 || ^0.2.2-rc.1 so the compatibility gate mounts the bundle on those runtimes again. Key-by-key re-verification on the 0.2.2 UI is pending — report any binding that misbehaves.
  • Session order / search-box / model-selector targeting depend on DSH Web DOM class names (fuzzy fallbacks included); an upgrade may require updating this plugin.
  • On Windows, Alt-key default behavior is suppressed inside DSH Web so Chrome doesn't swallow Alt+digits; the tradeoff is numpad Alt-code entry (e.g. Alt+0167) doesn't work in input fields.
  • Key recording accepts letters, ` (backtick), F1–F12, and digits 1–9 (top row or numpad; NumLock required for numpad). Pressing Esc cancels recording, so the default Esc binding (input → chat) is restored with Reset rather than re-recorded.
  1. Add dsh-session-hotkeys to both dependencies and dsh.profile.bundles in the profile's package.json
  2. Run pnpm install inside the profile directory
  3. Restart DSH

Uninstall removes it from those two fields; bindings can be wiped via browser devtools localStorage keys dsh.session-hotkeys.keys / dsh.session-hotkeys.pins.

git clone https://github.com/YEYEYEYESHIFU/dsh-session-hotkeys.git
cd dsh-session-hotkeys
npm run verify     # self-check: package structure, parseable client bundle, no external imports

A browser-only Cordis bundle: reads sessions from sessions; switches with sessions.open() on DSH 0.1.x and uiWorkspace.openSession() on 0.2.0. Position order comes directly from the rendered sidebar DOM.

MIT licensed. Security issues: report via GitHub Issues.


简体中文

为什么值得装

  • Alt+1-9 直达第 N 个会话;按住当前顺序切换键位的修饰键,侧栏前九个会话旁会显示 1–9,松开即隐藏。Alt+↑/↓ 循环切换——全程不用鼠标。
  • 所有键位都能改,面板里录制式改键;Windows / macOS 双预设已逐项筛查系统与浏览器冲突。
  • 输入框聚焦时也能用,切会话不用先退出打字状态;普通打字永远不会误触发。
  • Esc 切换到聊天区:第一按把焦点交给会话内容(↑↓ / PgUp / PgDn 滚动),途中顺带关闭面板、退出导航、收起模型菜单;再按一次精确还原原焦点——模型选择(含高亮环)、输入框(光标原位)等。斜杠命令弹层与 IME 的 Esc 不受影响。
  • 纯浏览器插件:无网络请求、无服务端状态、不收集任何数据。

键位表

以下为默认键位,均可在面板(Alt+P → 按键页)重新录制。

动作 Windows macOS
切换到第 N 个会话 Alt+1-9 ⌃⇧1-9
显示位置角标 1–9(按住修饰键,再按数字切换) 按住 Alt 按住 ⌃⇧
上一个 / 下一个会话 Alt+↑ / Alt+↓ ⌃⌥↑ / ⌃⌥↓
固定槽位三态(固定/跳转/取消) Alt+Shift+1-9 ⌃⌥1-9
跳转固定槽位 Ctrl+Alt+1-9 ⌃⌥⇧1-9
新建会话 Alt+N ⌃⌥N
归档当前会话 Alt+Shift+A ⌃⌥A
打开已归档列表 Alt+Shift+U ⌃⌥U
重命名当前会话 Alt+Shift+R ⌃⌥R
导航模式(↑↓ 选择 · Enter 进入 · Esc 取消) Alt+` ⌃`
打开面板 Alt+P ⌃⌥P
折叠 / 展开左侧会话栏 Alt+B ⌃⌥B
关闭聚焦的分屏面板(最后一个收起工作区) Alt+W ⌃⌥W
聚焦并清空搜索框 Alt+Shift+F ⌃⇧F
聚焦模型选择 Alt+M ⌃⌥M
聚焦回聊天输入框 Alt+Enter ⌃⌥Enter
聊天区焦点切换(Esc 聚焦,再按还原;途中取消面板/导航/菜单) Esc Esc
非默认忙时方式发送 Alt+Shift+Enter ⌃⌥⇧Enter

说明

  • 归档有确认卡片且从不删除数据——归档的会话仍在面板「已归档」页可查。(DSH 0.1.x 无公开取消归档接口,恢复需宿主端操作。)
  • 键位与固定关系存于浏览器 localStorage,重启后依然有效;清除站点数据会重置。
  • 切换依赖侧边栏展开状态:显示顺序直接读取已渲染的侧边栏行。

Chrome 里 ⌘+1-9 和 ⌃+1-9 都会切换标签页(Safari 只有 ⌘),所以顺序切换用 ⌃⇧1-9。⌥ 单独按会打出特殊字符,因此从不当主修饰键。⌃+↑/↓ 是调度中心,⌃+N/P/F/B/A/E/K/D 是文本框的 Emacs 行编辑键,故相关组合都补了 ⌥。⌃/⌘+Enter 是输入框自带的发送快捷键,Enter 系列因此加 ⌥。全部组合已在 macOS Chrome 与 Safari 中逐项筛查无冲突。macOS 上键位一律用原生符号显示(⌃ ⌥ ⇧ ⌘)。唯一的无修饰键绑定是 Esc——Chrome 与 Safari 均无浏览器级冲突,输入法组合中的 Esc 不受影响,⌘/⌃+Esc 也不会误触发。

  • 已在 @deepseek-ai/dsh@0.1.1-rc.2 随附的 DSH Web 上测试;并在 @deepseek-ai/dsh@0.1.5-rc.2 上做了完整回归(2026-09-15,标准视图与分屏两种状态)。
  • 已在 @deepseek-ai/dsh@0.2.0-rc.2 上做完整回归(2026-09-30,即 DeepSeek Harness 桌面版 0.2.0-rc.2 内置的运行时),运行于 desktop profile,且无需 compatibility.json 版本豁免。0.2.0 启动器会拒绝挂载 @deepseek-ai/dsh-* peer 不匹配当前版本的包,因此本包在 ^0.1.1-rc.2 之外同时声明了 ^0.2.0-rc.2。
  • 2026-11-11:DeepSeek Harness 桌面版 44.7.0 内置的运行时为 @deepseek-ai/dsh@0.2.2-rc.1;本包 peer 已加入 ^0.2.1-rc.2 || ^0.2.2-rc.1,兼容性门禁会重新挂载本包。0.2.2 新界面上的逐键回归仍在进行——如有个别快捷键失效请反馈。
  • 会话顺序 / 搜索框 / 模型选择按钮的定位依赖 DSH Web 的 DOM 类名(带模糊匹配回退);DSH 升级后可能需要同步更新本插件。
  • Windows 上插件在 DSH Web 内屏蔽了 Alt 默认行为以免 Chrome 吞掉 Alt+数字;代价是输入框内小键盘 Alt 码(如 Alt+0167)不可用。
  • 改键支持字母、``、F1–F12 与数字 1–9(主键盘 / 小键盘均可;小键盘需开 NumLock)。按 Esc 会取消录制,默认的 Esc 键位(输入框 → 聊天区)请用「恢复默认」找回,而非重新录制。
  1. 在 profile 目录的 package.json 里把 dsh-session-hotkeys 加进 dependencies 与 dsh.profile.bundles
  2. 在该目录执行 pnpm install
  3. 重启 DSH

卸载即从这两个字段移除;如需彻底清掉自定义键位,可在浏览器开发者工具删除 localStorage 的 dsh.session-hotkeys.keys / dsh.session-hotkeys.pins。

git clone https://github.com/YEYEYEYESHIFU/dsh-session-hotkeys.git
cd dsh-session-hotkeys
npm run verify     # 自检:包结构 / 客户端 bundle 可解析且无外部依赖

纯浏览器端 Cordis bundle:从 sessions 服务读取会话;DSH 0.1.x 通过 sessions.open() 切换,0.2.0 通过 uiWorkspace.openSession() 切换;位置顺序来自已渲染的侧边栏 DOM。

MIT 开源。安全问题请通过 GitHub Issues 反馈。

Content from the project README on GitHub ↗

Links

More in this category

View the whole category →

Community comments

Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.