前言¶
DeepSeek Harness(DSH)在长时间运行时,任务完成或需要人工介入的节点容易被忽略。桌面通知和 HTTP 推送是两种常见的提醒方式:前者依赖浏览器,后者依赖宿主进程。dsh-notify 插件同时提供这两种能力,并支持从通知返回对应会话。
是什么¶
@mill413/dsh-notify 是一个为 DeepSeek Harness Web 提供桌面通知和自定义 HTTP 推送的独立插件,当前版本 0.4.2,目标宿主为 @deepseek-ai/dsh@0.2.1-rc.3,使用 MIT 许可证。插件在任务结束或等待审批、回答时触发提醒,支持从桌面通知打开对应会话。
核心功能¶
插件提供两种通知通道:
- 浏览器桌面通知:在主会话停止运行、出现新的待审批/待回答/计划审阅请求时触发。要求 DSH 页面保持打开且浏览器允许通知。子代理等待审批或回答时会提醒,但结束时不单独发送完成通知。默认只在页面隐藏或失去焦点时发送。
- 自定义 HTTP 推送:在主 Agent 从 running 转为 idle、Agent 发起审批或提问时触发。要求 DSH 宿主进程保持运行,可以关闭浏览器。关闭浏览器不会停止 HTTP 推送,但宿主关机、休眠或停止后无法继续发送。
两种通道的触发条件互不相同,浏览器通知总开关与 HTTP 推送开关独立;任务完成、等待处理两个触发开关由两种通道共用。
安装与启用¶
插件可以从源码构建并安装打包产物,不需要下载或构建 DSH 源码。构建与安装步骤如下:
- 从源码构建:
pnpm install --frozen-lockfile
pnpm run verify
pnpm test
pnpm run build
npm pack
- 使用目标正式 runtime 的
dsh plugin add安装生成的 tarball:
dsh plugin add /absolute/path/to/mill413-dsh-notify-0.4.2.tgz
若通过 Launcher 运行 DSH,先从其实际配置确认 DSH_LAUNCHER_DSH_COMMAND,并使用相同的 DSH_HOME 与 profile:
"$DSH_LAUNCHER_DSH_COMMAND" plugin --profile web add /absolute/path/to/mill413-dsh-notify-0.4.2.tgz
插件自带 cordis.patch.yml,由 CLI 加入 profile;无需手动编辑宿主配置。安装完成后按你的部署方式重新加载 DSH。若部署使用 dsh-web.service systemd 用户服务,在产物和配置确认可用后执行一次 systemctl --user restart dsh-web.service,再检查服务状态。
启用步骤:
- 打开 插件 → 桌面通知(dsh-notify),展开设置卡片。
- 点击浏览器通知授权按钮,再使用测试通知确认效果。
- 按需调整任务完成、等待处理和仅后台提醒开关,点击保存。
- 如需手机或其他渠道提醒,填写 HTTP 接口配置,先测试推送,再启用并保存。
HTTP 推送配置¶
请求由 DSH 宿主发送。接口地址中的 localhost 指向宿主所在机器。关闭浏览器不会停止 HTTP 推送,但宿主关机、休眠或停止后无法继续发送。
配置项:
- 接口地址:完整的 HTTP 或 HTTPS URL;不支持 URL 内嵌用户名、密码
- 请求方法:
POST、PUT、PATCH或GET;GET 不携带请求体 - 请求头:自定义鉴权和内容类型等;名称为空的行忽略
- 请求体模板:合法 JSON 会在解析后替换字符串中的变量,再序列化;其他内容按普通文本替换
- 图标地址:提供给
{{icon}}的 URL,需能被接收端访问;插件不上传图标
默认请求体:
{
"title": "{{title}}",
"body": "{{body}}",
"level": "{{level}}",
"group": "{{group}}",
"icon": "{{icon}}"
}
可用变量:
| 变量 | 值 |
|---|---|
{{title}} |
会话标题;测试时为固定测试标题 |
{{body}} |
任务完成、等待审批或等待回答的提示;子代理有额外标记 |
{{event}} |
complete、approval、question 或 test |
{{level}} |
完成、测试为 default;审批、提问为 high |
{{group}} |
固定为 dsh |
{{sessionId}} |
会话 ID;测试时为空 |
{{time}} |
ISO 8601 时间 |
{{icon}} |
配置的图标地址;未配置时为空字符串,JSON 字段仍保留 |
未知变量保持原样。变量只替换请求体中的值,不替换 URL、请求头或 JSON 键。普通文本模式不进行 URL 编码;对接表单接口时需自行确定编码方式。
有请求体且未指定 Content-Type 时,默认使用 application/json。纯文本或表单接口应显式设置相应请求头。单次请求超时为 5 秒,没有重试或离线队列;HTTP 2xx 视为成功,接收服务是否最终送达由接收服务负责。
例如,可以设置接口为 https://notify.example.com/api/send,请求头为 Authorization: Bearer <YOUR_TOKEN>,再按接收服务要求修改请求体。
隐私与权限¶
- 插件没有内置第三方接收地址;HTTP 推送默认关闭,只向你配置的地址发送。
- 默认模板发送会话标题、事件提示、级别、分组和图标地址;模板也可包含会话 ID 和时间。插件不主动发送对话正文。
- 接口凭据随插件设置保存在 DSH profile 中,不由本插件加密。不要将运行时 profile、真实请求头或带凭据的截图提交到仓库。
- 测试接口通过宿主 Connection API 注册,依赖宿主鉴权。能访问该功能的用户可要求宿主向指定 HTTP 地址发送请求,包括宿主可访问的内网服务;请遵循宿主的访问权限边界。
- 接口返回的错误消息可能出现在设置页或宿主日志中。
浏览器限制与排查¶
| 现象 | 检查项 |
|---|---|
| 无法请求通知权限 | 使用 HTTPS 或浏览器认可的本机安全上下文;普通局域网 HTTP 地址通常不满足要求 |
| 已授权但没有弹窗 | 检查系统勿扰模式、浏览器站点权限、总开关和“仅在前台之外提醒” |
| 手机浏览器不能发桌面通知 | 本插件使用 Notification 构造器,没有 Service Worker 推送实现;部分移动浏览器不支持 |
| 关闭页面后没有桌面通知 | 桌面通道要求页面保持打开;需要离线于浏览器的提醒时使用 HTTP 通道 |
| HTTP 推送失败 | 从宿主侧检查网络、接口地址、请求头及接收服务日志,使用设置页测试推送 |
Windows 桌面端使用固定 16 字符的会话摘要 tag,避免完整会话 ID 导致通知标识过长;完成和交互通知分别保留同会话替换行为。
适用场景与注意¶
适合需要实时提醒的 DSH 用户,尤其是长时间运行任务、频繁审批或需要人工介入的场景。HTTP 推送适合需要跨设备或离线提醒的场景,但依赖宿主进程保持运行。
注意:插件以当前 dsh 进程权限运行,安装前应检查源码与许可证。接口凭据保存在 DSH profile 中,不加密;不要将运行时 profile 或带凭据的截图提交到仓库。浏览器通知受限于浏览器与页面状态,需要离线于浏览器的提醒应使用 HTTP 通道。
总结¶
dsh-notify 为 DeepSeek Harness 提供了桌面通知与 HTTP 推送两种提醒方式,支持从通知返回对应会话,适合需要实时提醒的场景。插件当前版本 0.4.2,目标宿主 @deepseek-ai/dsh@0.2.1-rc.3,使用 MIT 许可证。
- 目录页:https://www.skillhub.cn/plugins/mill413/dsh-notify
- GitHub:https://github.com/mill413/dsh-notify