前言¶
在 DSH(DeepSeek Harness)里跑智能体时,任务往往在后台继续执行:一轮结束、向你提问、或某个工具调用等你点批准。如果窗口不在前台,很容易错过这些「控制权交还给你」的时刻,只能反复切回浏览器或盯着终端。
常见做法是人工轮询会话列表,或依赖桌面应用自带的提醒——但 DSH 的插件模型允许在 host 层挂一行监听,把进程内事件转成系统通知。下面介绍社区插件 dsh-windows-notifier(维护者 ADkun,分类:客户端):它在 Windows 上监听整个 DSH 进程的相关事件,用系统 Toast 提醒你,并支持点击通知打开 DSH Web GUI。
这是什么¶
dsh-windows-notifier 是给 DSH 用的 Windows 原生通知插件:任意对话把控制权交还给你时,弹一条 Windows 系统通知。它监听的是整个 DSH 进程的事件,因此后台正在运行的对话同样会通知你,不必一直盯着某个会话窗口。
- 目录页:SkillHub 插件页
- 源码与文档:GitHub — ADkun/dsh-windows-notifier
- 当前包版本(
package.json):0.4.0,许可证 MIT,要求 Node.js >= 20
什么时候会通知¶
插件根据 DSH 派发的事件决定标题与正文。通知正文第一行是对话标题(取自 DSH 会话标题;尚未生成标题时回退到工作目录名),第二行是状态说明或具体内容(提问、工具名、错误信息、运行时长等)。
| 场景 | 通知标题 | 触发事件 |
|---|---|---|
| 任务完成,可以继续对话 | 对话已完成 | agent/status → idle |
智能体向你提问(ask_user_question) |
需要你的输入 | user-questions/request |
| 有操作等待你批准 | 需要你批准 | approval/request |
| 某一步/某一轮出错 | 对话出错 | agent/error |
| 本轮被中止(可选,默认关) | 本轮已中止 | agent/status + turn/end: aborted |
多智能体与后台委派: 默认开启 waitForSubagents 时,调度方在子代理仍在运行时不误报「对话已完成」;子代理全部结束后才补发完成通知。默认不对 subagent / workflow 子会话的「一轮跑完」弹完成通知(避免弹窗轰炸);子会话若需要提问、审批或报错仍会通知。若也要听子会话的结束,可在配置里打开 includeSubagents。
点击通知: 可打开 DSH 的 Web GUI(自动读取当前 Web 服务端口,也可用 launchUrl 指定)。GUI 目前没有会话级路由,点击后打开的是首页。
工作原理(简要)¶
DSH 进程 host 组合里挂载插件行 dsh-windows-notifier。插件同时观察两条通道:
internal/dispatch—— 在作用域过滤之前公布派发,用{ global: true }可看到所有作用域的事件,是监听任意对话(含后台对话)的可靠入口。- 直接监听
agent/status、user-questions/request、approval/request、agent/error—— 兜底。
两条通道对同一载荷用 WeakSet 去重,避免重复通知。实际弹出由短命的 powershell.exe 调用 scripts/toast.ps1,通过 WinRT Windows.UI.Notifications 显示 Toast;无额外 npm 依赖,不阻塞问答/审批瀑布链。
安装与启用¶
DSH 通过 cordis.yml 与 profile 的插件依赖加载第三方包。从 0.2.0 起,包自带 bundle patch,安装并选中后会在 profile 里自动插入插件行 id: windows-notifier、name: dsh-windows-notifier,一般不必手写该行。
注意: desktop profile 不能通过 CLI 的 dsh plugin 管理(由 Electron 应用独占);请在 Desktop 插件市场里安装/升级。装包不等于选中:依赖装上但 dsh.profile.bundles 里没有该包时,插件不会生效。
从本仓库同步到 profile(README 实测路径)¶
在克隆或解压后的仓库根目录执行:
# 默认:装进每一个有 package.json 的 profile
powershell -NoProfile -File scripts\sync-to-profile.ps1
# 只装一个 profile
powershell -NoProfile -File scripts\sync-to-profile.ps1 -Profile web
脚本会 npm pack 生成 tarball,并对每个目标 profile 执行 dsh plugin --profile <profile> add "file:<tgz 绝对路径>",并核对 dsh.profile.bundles 是否包含 dsh-windows-notifier。
从 GitHub 安装到指定 profile¶
README 给出的形式示例(后端为 pnpm,需 PATH 上有 pnpm):
dsh plugin --profile web add github:ADkun/dsh-windows-notifier
安装后需重启 DSH 进程(或按你 profile 的加载方式)使 host 重新导入插件。改 src/ 内代码也必须重启;patchReload: live 的 profile 对 config: 改动可热加载。
不要把插件行写进机器级 $DSH_HOME\cordis.patch.yml。 该层会在各 profile patch 之后应用,可能覆盖你在界面保存的配置,并导致 Host 拒绝保存(提示配置被 home patch 覆盖)。
配置(可选)¶
行内可不写 config:,各开关在 src/settings.js 中有 schema 默认值。per-profile 配置写在 $DSH_HOME\profiles\<profile>\cordis.patch.yml,例如:
- id: windows-notifier
name: 'dsh-windows-notifier'
config:
logFile: 'D:\dsh\dsh-windows-notifier\.dsh-windows-notifier.log'
README 还提到 launchUrl、waitForSubagents、includeSubagents 等项;具体默认值与说明以仓库内 settings/schema 为准。
典型用法¶
- 按上文在目标 profile(如
web)安装并确认 bundle 已选中,重启 DSH。 - 在 Windows 上照常使用 DSH:前台或后台会话在需要输入、审批、完成或出错时,应出现系统通知。
- 需要验证 Toast 链路时,包内提供脚本(见
package.json的scripts.toast):
npm run toast
(在插件包目录下执行,等价于 node scripts/send-test-toast.mjs。)
适用场景与注意¶
适合谁: 在 Windows 上使用 DSH、且经常让智能体在后台跑长任务的用户;希望用系统通知而不是一直盯着 Web 界面的开发者。
环境限制: 仅 Windows(依赖 PowerShell 与 WinRT Toast)。Linux/macOS 用户应另选其他客户端类插件或方案。
安全与信任: 插件以当前 dsh 进程 的权限运行,能读取进程内会话事件并启动 PowerShell 弹通知。安装前请阅读 MIT 许可 与源码,仅从可信来源安装。社区目录 SkillHub 与 DeepSeek / 幻方无官方从属关系,属社区生态「一切皆插件」的独立收录。
结尾¶
dsh-windows-notifier 把 DSH 里「需要你回来」的几类事件统一成 Windows 原生通知,并兼顾后台会话与多智能体委派下的误报抑制。若你在 Windows 上跑 DSH,值得把它加进 profile 试一轮。