DeepSeek Harness Plugin Hub

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

探索

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

社区

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

相关链接

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

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

DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins

dsh-popup-notify

Popup Notify

通过 Windows 原生模态弹窗为 DeepSeek Harness 提醒审批请求、提问与计划审阅、回合结束;零依赖,无预编译二进制。

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

npx -y @deepseek-ai/dsh plugin --profile web add dsh-popup-notify@0.1.4
README兼容性版本

兼容性与来源证明

Popup Notify 以 dsh-popup-notify 发布,当前版本为 0.1.4。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

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

版本

0.1.4stable
2026/10/21
0.1.3stable
2026/10/21
0.1.1stable
2026/10/21

相关插件

正在加载相关插件…

最新版
0.1.4
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
33.4 kB
文件数
10
Surface
any
许可证
MIT
发布源
npm
GitHub
★ 0
周下载
0
最近提交
2026/10/21
查看源码 ↗
README Badge

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

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

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

认领这个 Plugin →
报告问题

相关插件

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

Acp App@deepseek-ai/dsh-acp-appdsh ACP 配置文件包:基于 dsh-base 的仅限自动化的 JSON-RPC stdio 和进程生命周期管理Ds Botds-botDS Bot:DeepSeek Harness 的一组长期运行的 Bot,支持主 Bot、Bot 间消息和群聊Ab Wechat Scrapedsh-ab-wechat-scrape--- description: "树外 wechat_scrape 工具:获取微信公众号文章,过滤推广区块,并将每篇文章保存为 Markdown 文件,供此机器的 dsh 配置文件维护者使用。" kind: "package-reference" ---Pocketdsh-pocket把 DeepSeek Harness 装进你的口袋:一个包、一个设置页,手机扫码即同步访问电脑上的 DSH(局域网 + 公网,实时同屏)。

README

dsh-popup-notify

English | 中文

Modal desktop popups for DeepSeek Harness. Three moments that need you back at the window each raise a topmost dialog that stays until you dismiss it — not a toast that fades after a few seconds.

  • Needs permission — a tool asks for approval.
  • Needs a decision — the model asks you a question, or submits a plan for review.
  • Run finished — a root agent goes from running to idle.

Zero npm dependencies. No bundled binaries, no build step, no post-install script: 340 lines of plain ESM driving PowerShell. Windows only.

Requires DeepSeek Harness 0.2.1-rc.2 or newer.

Install

dsh plugin --profile web add dsh-popup-notify

Then restart, or let the profile patch layer hot-reload. The bundle inserts one row:

- insert:
    - id: popup-notify
      name: 'dsh-popup-notify'

Uninstall with dsh plugin --profile web remove dsh-popup-notify.

The Plugins page shows this bundle's card from resources the package exports: ./locale/en.json and ./locale/zh.json supply meta.title and meta.description, and ./icon supplies the artwork. DSH resolves those paths through Node's module resolver without loading the plugin, so a manifest that exports only . renders the bare package name with no description and the default icon.

Why a modal instead of a toast

Windows toasts disappear on their own and stack up in Notification Center, where it is easy to miss them. When a run is blocked waiting for you, a dialog that refuses to leave until dismissed is the honest representation of that state.

The dialog runs in its own process, so it never blocks the agent loop. Only one is on screen at a time — further notices queue and appear as you close the current one.

Configuration

Override any key on the row's config in your profile's cordis.patch.yml. A patch replaces the whole config value, so restate the keys you want.

- id: popup-notify
  config:
    notifyOnComplete: false
    sound: false

Behaviour

KeyDefaultMeaning
notifyOnApprovaltruePop when a tool asks for approval.
notifyOnQuestiontruePop when ask_user_question or exit_plan_mode runs.
notifyOnCompletetruePop when a root agent finishes a run.
ignoreSubagentstrueSilence subagents, workflow workers, and AgentTeams members.
soundtruePlay the system asterisk sound with the dialog.
completeCooldownMs10000Minimum gap between two completion popups for one session.
plainDialogfalseDrop the topmost owner form. Use if a dialog lands somewhere odd; it may then open behind other windows.
testOnStartfalsePop once on mount to confirm the PowerShell path works.
traceFile''Append a diagnostic line per event and per dialog. Empty disables it.

Message templates

Every message is a template. {placeholder} is filled from the event; unknown placeholders stay verbatim.

KeyDefault
titleDeepSeek Harness
approvalMessage工具 {tool} 需要你的权限确认
approvalReasonSuffix\n\n理由:{reason}
questionMessage需要你的回答:{question}
questionCountSuffix\n\n(共 {count} 个问题,请在对话里逐个回答)
planReviewMessage有一份计划等你审阅:批准,或继续规划。
completeMessageAgent 响应已结束,可以查看结果了。
completeReasonSuffix\n\n(结束原因:{reason})
projectSuffix\n\n项目:{project}

{reason} is the turn's end reason — absent for completed, otherwise aborted, error, max-tokens, and so on. {project} is the session working directory's basename. Set projectSuffix: '' to drop the source line, and completeReasonSuffix: '' to stop naming abnormal endings.

How it hooks in

Extension pointModeUse
approval/requestwaterfallPops, then next() so the configured answerers still decide.
tools/pre-executewaterfallMatches ask_user_question and exit_plan_mode, pops, then next() so the tool runs.
agent/statusemitPops on the running → idle edge of a root agent.

DSH exposes no question event: ctx.userQuestions.ask() is a service call, and the pending question reaches the browser as a mux frame the host plugin never sees. Matching the two asking tool names at tools/pre-execute is the observable point that fires before you answer, which is what a reminder needs.

Both waterfalls call next(). A listener that returns without it would short-circuit the chain, so approval would resolve unavailable and the asking tool would never run.

Known limitations

  • Windows only. Other platforms log one warning per notice and skip.
  • Not every approval pops. With the never approval policy the service returns rejected before dispatching approval/request, so nothing can observe the ask. Session approvals only exist under the ask policy.
  • The dialog is not clickable through to the conversation. It reports state; answering still happens in the DSH window.
  • Only the two asking tools are recognised. A future interaction tool that also blocks on a human needs its name added to the matcher.
  • One dialog at a time. A long absence can leave several queued behind the one on screen.
  • plainDialog: true loses topmost. The no-owner MessageBox may open behind other windows.

Development

npm test                      # 22 unit tests, no dialogs spawned
node tests/smoke-dialog.mjs   # opens and closes one real dialog

The unit suite injects a fake spawnDialog, so it never touches the screen. smoke-dialog.mjs is the only file that opens a real window.

License

MIT