dsh-notify:DeepSeek Harness 的桌面通知与 HTTP 推送插件

前言

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 源码。构建与安装步骤如下:

  1. 从源码构建:
pnpm install --frozen-lockfile
pnpm run verify
pnpm test
pnpm run build
npm pack
  1. 使用目标正式 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,再检查服务状态。

启用步骤:

  1. 打开 插件 → 桌面通知(dsh-notify),展开设置卡片。
  2. 点击浏览器通知授权按钮,再使用测试通知确认效果。
  3. 按需调整任务完成、等待处理和仅后台提醒开关,点击保存。
  4. 如需手机或其他渠道提醒,填写 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
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜