DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

Approval Hotkeys — DeepSeek Harness 插件(DSH Plugin)
← Plugins

dsh-approval-hotkeys

Approval Hotkeys

DeepSeek Harness 插件:为每个交互面板提供快捷键——按 Enter 键确认(主)按钮,按 Esc 键取消(批准、问题/选项、计划审查;遵循 Claude Code 的使用习惯)。

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add dsh-approval-hotkeys@0.1.6
README兼容性版本
Approval panel — Enter: Allow once, Esc: RejectQuestion panel — Enter: Submit, Esc: Discard the groupPlan review panel — Enter: Approve, Esc: Decline

兼容性与来源证明

Approval Hotkeys 以 dsh-approval-hotkeys 发布,当前版本为 0.1.6。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
npm
Registry 更新时间
2026/9/21

版本

0.1.6stable
2026/9/10
0.1.5stable
2026/8/31
0.1.4stable
2026/8/24
查看其余 4 个版本收起版本
0.1.3stable
2026/8/20
0.1.2stable
2026/8/19
0.1.1stable
2026/8/19
0.1.0stable
2026/8/19

相关插件

正在加载相关插件…

最新版
0.1.6
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
339 kB
文件数
14
Surface
web
许可证
MIT
发布源
npm
GitHub
★ 0
周下载
153
安全扫描
✓ v0.1.6 扫描通过
查看源码 ↗项目主页 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录

相关插件

继续浏览 ui-customization 分类下经过校验的插件。

Web App@deepseek-ai/dsh-web-appdsh 浏览器界面捆绑包:位于 dsh-base 之上的 Web 补丁层,加上运行时粘合插件(提供前端 dist、Web 界面提示符、bash 运行时变量和 URL 行)Experimental Agent Team Web Profile@deepseek-ai/dsh-experimental-agent-team-web-profile用于 Agent Teams Remote 和 UI 插件的实验性 Web 配置层Client Ui Task Board@linxin666/dsh-client-ui-task-board面向 DSH Web GUI 的主机权威任务面板,支持实际会话执行、主机 cron 调度以及可选的跨平台空闲睡眠保护;以挂载方式提供,无需修改 DSH 源代码。Client Ui Git Graph@linxin666/dsh-client-ui-git-graph外部 dsh Web GUI 插件:空会话 Git 分支选择器和 Git 图,包含实际的主机端 Git 操作与防护,作为 dsh 配置文件包

README

dsh-approval-hotkeys

Approval-panel hotkeys for DeepSeek Harness, for every approval source — not just edits.

English | 中文

A deliberately minimal plugin with one generic rule: Enter always presses the confirm button (the primary, right-most action); Esc always presses the cancel button — on every button-bearing interaction panel the harness renders.

PanelEnter → confirmEsc → cancel
Approval ([data-approval-key])Allow onceReject
Question / choice ([data-question-key])Submit / NextDiscard the group
Plan review ([data-plan-review-key])ApproveDecline (or discuss)

The panel anchors are harness-generic, so the hotkeys work on every interaction the GUI shows — edit approvals, permission escalations, tool questions, plan reviews. This is the Claude Code habit: confirm with Enter, refuse with Esc.

Approval panel

Every approval — edits, permission escalations, anything routed through the ApprovalPanel. Enter presses Allow once, Esc presses Reject.

Approval panel — Enter: Allow once, Esc: Reject

Question / choice panel

Tool questions (ask_user_question). Enter presses Submit / Next, Esc presses Discard the group.

Question panel — Enter: Submit, Esc: Discard the group

Plan review panel

Enter presses Approve, Esc presses Decline (or Discuss when the panel has no decline action).

Plan review panel — Enter: Approve, Esc: Decline

Install

dsh plugin --profile web add dsh-approval-hotkeys

Restart dsh web — or, since this plugin is pure browser-side, just refresh the page when the host side did not change. No configuration, no settings page.

Supported harness versions: the whole 0.1 line from 0.1.0-rc.6 on, prereleases included — declared as an optional peer on @deepseek-ai/dsh-client-modules with the range ^0.1.0-rc.6 || ^0.1.1-0 || ^0.1.2-0 || ^0.1.3-0 || ^0.1.5-0 (see docs/release.md for why the || union is required).

For contributors: install from a local checkout or a pinned commit — dsh plugin --profile web add /path/to/dsh-approval-hotkeys or dsh plugin --profile web add github:SiriLee/dsh-approval-hotkeys#<sha>. A git install fails on first run until you add an allowBuilds key to the profile's pnpm-workspace.yaml (pnpm blocks git dependencies from running build scripts); after that it runs the plugin's prepare and installs it.

How it works

  • Enter → confirm: clicks the panel's primary button — the last button of its action row ("Allow once", "Submit/Next", "Approve"). The harness's Button component has no stable data-variant attribute (variants are CSS-Modules hash classes), so the plugin anchors on the layout contract that the confirm action always renders last — which is exactly the primary-colored button.
  • Esc → cancel: clicks the panel's cancel button — Reject (first), Discard (header), Decline (footer second-last, or Discuss when the panel has no decline action). Without a panel, Esc is left alone (no pause/stop binding — the GUI's own stop button and shortcuts own that).

Guards (what the plugin deliberately does NOT do)

  • Never while typing: keydown inside an input / textarea / select / contentEditable (the composer owns Enter/Esc there — e.g. Shift+Enter newline, Esc dismisses suggestions).
  • Enter with focus on a button: left to the browser (it activates the focused button natively) and to the panel itself (the question composer's options submit on Enter) — acting again would double-fire.
  • Never on chords or repeats: Ctrl/Meta/Alt+key combinations and held-key repeats are left alone.
  • Esc with no panel: left alone — the plugin never stops or pauses the agent; panels are the only surface it acts on.

Button resolution contract (data-hotkey="none")

Enter/Esc resolve their buttons by position (first / last / header-last / footer-last), not by a stable semantic attribute — the harness's Button component exposes no reliable data-role/data-variant, so position is the only stable signal available to a client plugin that does not own the panel DOM. That makes button order the single coupling point to the harness layout.

To keep that coupling safe when other plugins inject buttons into a panel (utility toggles, decorative controls), this plugin skips any button marked data-hotkey="none" when resolving the confirm/cancel action. Any plugin that adds a non-action button into an interaction panel should mark it:

<button data-hotkey="none">Collapse diff</button>

This is a cooperative, opt-out contract, not a hard guarantee. It reliably covers "a plugin inserts an extra non-action button ahead of the action row" (such as dsh-edit-approval's diff collapse toggle). It does not cover:

  • a plugin that injects a button without the marker (contract ignored), or
  • a plugin that reorders / inserts a genuinely actionable button among the real confirm/cancel buttons (the semantics changed, not just a decoration added), or
  • a change to the harness's own panel layout.

Those cases need a stable semantic anchor in the harness panel DOM (e.g. data-role="confirm" / data-role="cancel") — a harness-repo change, not a client-plugin fix. File an issue / PR against deepseek-harness if it bites.

Design notes

  • Pure browser (client) plugin: the host half is a no-op stub. All behavior is a single document keydown listener registered inside one ctx.effect, torn down on unload/HMR.
  • Relies on the stable ApprovalPanel DOM contract: reject renders first, allow-once last, both disabled after an answer — so a double-answer is impossible and the button-order dependency is the only harness coupling.
  • The panel lookup prefers the current session's pending approval key and falls back to the first panel in DOM order.

Development

npm install
npm run typecheck   # tsc --noEmit (host + client)
npm test            # vitest (jsdom unit tests for the dispatch logic)
npm run build       # esbuild: lib/index.js + lib/client.js + .d.ts
node scripts/verify-host.mjs

Release

The first publish is manual (npm publish --access public), then the GitHub Actions Trusted Publishing workflow takes over — push a v<semver> tag and CI publishes with provenance. Full steps: docs/release.md.

Security

Pure browser-side plugin: the host half is an empty stub, and all behavior is a document-level keydown listener that clicks existing panel buttons. No network requests, no file access, no credentials.

License

MIT