前言¶
在 DeepSeek Harness(DSH)里跑长任务或远程会话时,人往往不会一直盯着界面。任务结束、失败、需要审批或提问时,若没有任何提醒,只能反复刷新或靠记忆回去看。社区插件 dsh-notify(维护者 iruoy)面向同一类需求:在 DSH 0.2.0-rc.2 API 之上,把会话事件推到浏览器桌面通知和 Slack Incoming Webhook,并可在设置页里按事件类型分别开关。浏览器侧即使 DSH 跑在远程服务器上,只要本机有打开 DSH 的标签页,仍可在当前电脑上收到通知;Slack 则在无浏览器连接时也能继续投递。
下面介绍插件定位、能力边界、安装步骤与配置要点。事实以 GitHub 仓库 README 为准;当前资料中 package 版本为 0.2.6,许可证 MIT。
这是什么¶
dsh-notify 是 DSH 的 Web 侧插件:监听 Harness 会话生命周期事件,向浏览器和/或 Slack 发送结构化通知。仓库已包含编译产物,安装后无需本地 build。
维护者与仓库:github:iruoy/dsh-notify;SkillHub 目录页:https://www.skillhub.cn/plugins/iruoy/dsh-notify(社区目录,与 DeepSeek / 幻方无官方从属关系)。
环境与依赖¶
安装与运行前需满足 README 中的要求:
- DeepSeek Harness,且具备 0.2.0-rc.2 API。
- Node.js 22.19+ 或 24+(与
package.json中engines一致)。 - 浏览器通知:桌面浏览器支持 Notifications、Web Locks、EventSource;站点为 HTTPS 或 localhost 上的 HTTP。
- Slack 通知:有效的 Slack Incoming Webhook URL。
核心功能¶
双通道通知¶
- 浏览器:在查看 DSH 的电脑上弹出系统级通知(权限由浏览器与操作系统共同决定)。
- Slack:通过 Webhook 发消息;可配置 DSH base URL,消息里可带 Open in DSH 链接。
两类通道的事件勾选相互独立;八种主事件默认对两种通道均开启。
事件类型¶
| 事件 | 通知含义 |
|---|---|
completed |
任务完成 |
error |
任务失败 |
aborted |
任务中止 |
blocked |
任务被阻塞 |
max-tokens |
达到 token 上限 |
interrupted |
DSH 在恢复过程中报告 turn 中断 |
approval |
请求审批 |
question |
提问(Slack 侧仅含会话标识,不含问题正文) |
子 agent 的浏览器通知与 Slack 通知是单独 opt-in,默认关闭。Slack 在开启子 agent 选项后也不会发送子任务完成;其他已选中的子 agent 终端/审批类事件可发送。Slack 的 Include response summaries 默认关闭;开启后最多附加 1,500 字符的助手回复(可能含代码或敏感内容)。
Slack 消息内容¶
除事件与会话标题外,消息可包含:工作区路径、human input(最多 1,500 字符,不含注入指令与 tool 结果)、耗时、model/provider、reasoning effort、单 turn 的 token 用量(按 model/effort 分组;缺失时标为 partial)。配置了 base URL 时附带打开会话的链接。
预估 API 成本(Slack)¶
对 Models.dev 公开目录中与 openai、anthropic 精确匹配的 provider/model,Slack 通知可显示 Estimated API-equivalent cost(USD);codex 映射为 openai,claude / claude-code 映射为 anthropic。价格为社区维护的公开列表价,不是账单或订阅费用;无需 API key。插件在启动时若缓存缺失或超过 24 小时会从 https://models.dev/api.json 后台拉取,并每小时检查更新;有效价格与 state.json 同目录下的 pricing.json 持久化。
投递历史与重试¶
设置页 Recent deliveries 展示最近 20 条事件及浏览器/Slack 投递状态。
- 浏览器:重连后可从最近 200 条存储事件中补发;多标签同 profile 时每个事件只弹一次;点击通知可聚焦 DSH 并打开对应会话。
- Slack:持久队列最多 100 条待发送,可 survive DSH 重启;网络/限流/服务端错误最多共 6 次尝试,并尊重 Slack 返回的重试间隔。
安装与启用¶
在已具备 DSH Web profile 的环境中,使用 README 给出的命令(勿自行改写仓库路径):
dsh plugin --profile web add github:iruoy/dsh-notify
dsh web
安装完成后在 Web UI 打开 Settings → Notify 进行配置。
典型用法¶
浏览器通知¶
- 点击 Enable notifications,并在浏览器权限弹窗中允许。
- 勾选需要触发浏览器通知的事件类型。
- 点击 Save settings。
- 点击 Send test notification 验证是否送达。
至少保留一个 DSH 标签页打开才能收到浏览器通知。若权限曾被拒绝,需在浏览器站点设置中重新允许;系统通知设置也可能静音。
Slack 通知¶
- 在 Webhook 字段粘贴 Incoming Webhook URL。
- 将 DSH base URL 设为访问 DSH 的地址,例如
https://dsh.example.com(保存时若未填,默认使用当前浏览器 origin)。 - 勾选要发往 Slack 的事件。
- Save settings 后点击 Send Slack test。
更换 Webhook:输入新 URL 并保存;留空则保留已有 Webhook。删除:点击 Remove webhook 再保存。
测试按钮与事件勾选无关,可单独用来验通道。
状态存储与远程访问¶
设置、Webhook(仅存服务端,浏览器侧仅显示是否已配置)、待投递队列与历史写入:
$DSH_HOME/dsh-notify/state.json
未设置 DSH_HOME 时默认为 ~/.dsh/dsh-notify/state.json。状态文件权限为仅属主读写。
适用场景与注意¶
适合:本地或远程跑 DSH、需要任务终态或审批/提问提醒的开发者;希望在 Slack 频道汇总会话摘要与(可选)token/预估成本信息的团队。
注意:
- 插件在当前 dsh 进程权限下运行;安装前请自行审阅 源码与 MIT 许可证。
- 浏览器通知只表示浏览器已接受展示请求,操作系统仍可能抑制;休眠机器或挂起标签会延迟送达。
- Slack 摘要选项可能泄露任务细节;Webhook 与
state.json应妥善保护。 - 升级插件时,README 对旧版队列中无法区分主/子 agent 的完成事件有取消策略,升级后若依赖 Slack 排队投递,需对照 README Delivery history and retries 一节预期行为。
结尾¶
dsh-notify 把 DSH 会话的八种标准事件接到浏览器与 Slack,并在设置页集中管理权限、事件、子 agent 与 Slack 摘要策略;适合「Harness 在远端、人在本机或 IM 里收信」的工作方式。更多细节与后续更新见 GitHub:iruoy/dsh-notify,目录索引见 SkillHub 插件页。