dsh-notify: DSH Cross-Device Task Notification

前言

在 DeepSeek Harness(DSH)里跑长任务时,常见做法是盯着界面等一轮结束,或在工具需要审批、代理向你提问时再回来操作。人一旦离开电脑或切到别的窗口,就容易错过「回合结束」「等待批准」「等待回答」这几类节点。邮件、自建脚本或第三方监控可以补位,但都要自己接事件、管密钥、还要和 DSH 的会话状态对齐。

下面介绍社区插件 dsh-notify(维护者 miiy,分类:客户端)。它在 DSH Host 侧监听会话事件,在你配置的渠道上发出通知:本机通知中心、浏览器标签页、ntfy 推送到手机、飞书自定义机器人,可任意组合。密钥走 Host 凭证接口,不写入配置文件。

这是什么

dsh-notify 的定位是:为 DeepSeek Harness 提供跨设备通知(Cross-device notifications for DeepSeek Harness)。长任务运行期间不必「人在场」;当一轮结束、或进入等待你的批准/回答时,在你启用的渠道上推送消息。

插件当前版本为 0.2.1(见仓库 package.json),许可证 MIT。运行要求:node >= 22,dsh >= 0.2.1-0。

核心功能

通知渠道

渠道 投递方式 凭证
local macOS 通知中心、Windows Toast、Linux notify-send 无
browser 已打开的 GUI 标签页触发系统通知 浏览器通知权限
ntfy ntfy 发布 API topic,可选 token
feishu 飞书/Lark 自定义机器人 Webhook Webhook 前缀 + token,可选签名校验 secret

触发条件

在 Settings → Notifications 中可分别配置:

  1. Turn completes:回合在 completed / error / max-tokens 时通知;用户主动停止(aborted)不会提供通知选项。
  2. Waiting for approval:工具调用需要你决策时通知。
  3. Waiting for an answer:代理向你提问时通知。

离开才发、在场不打扰

每条通知默认会等待一段「无输入窗口」(默认 60 秒,可在 Wait before sending 调整;设为 0 则立即发送)。若在该窗口内你已回复、批准、回答,或你正在阅读该会话的回复(回合结束后在该会话内滚动、点击或按键会被视为已读),则消息不会发出。设计意图是:人还在电脑前处理对话时,不重复用外部渠道轰炸。

配置与密钥

  • 图形配置入口:Settings → Notifications(选渠道、填凭证、Send test 测通)。
  • 非敏感配置落在 ~/.dsh/dsh-notify/config.json(权限 0600)。
  • 敏感信息经 Host credential seam 存储;设置页只显示「是否已设置」,不展示明文。

消息模板支持占位符(未知占位符会原样保留):

  • 回合结束:{title} {outcome} {project} {duration} {preview} {error}
  • 等待批准:{title} {project} {tool} {reason}
  • 等待回答:{title} {project} {question} {count}

模板第一行为标题,其余为正文;Restore 可恢复默认文案。

安装与启用

官方提供三种方式,安装命令以 README 为准。

1. 通过 Host 的 installBundle(安装并启用)

在对话里让代理执行,或在 Settings → Plugins 的安装框粘贴同一 spec:

install the plugin `github:miiy/dsh-notify`

或安装 spec:

github:miiy/dsh-notify

Host 的 installBundle 会安装包、写入 dsh.profile.bundles 并热应用,一步完成。

2. CLI(仅安装,需手动开启)

dsh plugin --profile <profile> add github:miiy/dsh-notify

dsh plugin 在 profile 目录内转发给 pnpm,不会自动 compose。插件会出现在 Settings → Plugins 中且默认 关闭;打开开关后才会加入 dsh.profile.bundles。若开关未即时生效,可重启 dsh web。纯 JavaScript bundle 无 build 脚本,一般无需 allowBuilds 审批。

接受的 spec 形式还包括:git+https://…、托管仓库 URL、本地绝对路径、npm 包名等。

3. 本地 checkout 开发

见仓库 MAINTENANCE.md 中 Run from a checkout。

典型用法

  1. 按上文任选方式安装并启用插件。
  2. 打开 Settings → Notifications,勾选需要的渠道并完成凭证(Browser 需点 Allow notifications)。
  3. 配置触发项与 Wait before sending,按需编辑消息模板。
  4. 对每个已保存配置的渠道点 Send test,确认能收到真实测试消息。
  5. 启动一个会跑较久或需要中途审批的任务,离开当前会话;在空闲窗口满足条件后,应能在所选渠道收到对应事件通知。

仓库内开发者自检(与日常使用无关,摘自 README):

node --check index.js && node --check client.js
node tests/harness.mjs   # host half
node tests/client.mjs    # settings page

适用场景与注意

适合谁:经常在 DSH 里跑长回合、需要离开工位又不愿漏掉「结束 / 待批 / 待答」的开发者;希望用手机 ntfy 或飞书机器人做轻量提醒的用户。

权限与安全:插件以当前 dsh 进程 的权限运行,能访问该进程可访问的资源。安装前请阅读 GitHub 源码 与 MIT 许可证,自行评估是否满足环境要求。社区目录 skillhub.cn 为独立站点,与 DeepSeek / 幻方无官方从属关系。

架构概览(便于排查问题):Host 半在 index.js 处理会话事件与通知出站;客户端半在 client.js 提供设置页、浏览器渠道与已读回执;channels.js 实现 local / ntfy / feishu 发送;配置与校验在 config.js。

结尾

dsh-notify 把 DSH 会话里的关键节点接到本机、浏览器、ntfy 与飞书,并用空闲窗口与已读回执减少误扰。需要进一步了解参数与截图时,可看仓库 README 与设置页说明。

羽毛球分组比赛记分
小程序二维码

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

Xiaoye