dsh-watchman:DSH 长任务离席时的手机告警

前言

在 DeepSeek Harness(DSH)里跑长任务时,人离开电脑很常见:任务跑完、中途报错、或卡在「等你点同意」——这些时刻若没有人盯着,往往要事后翻日志才知道。社区里也有用 dsh-remote 等方案远程盯会话的做法;dsh-watchman(守夜人告警)则把「待审批、报错、任务结束、订阅断线、登录态失效」等事件推到手机(Server酱 / Bark / 企业微信群机器人),并在 DSH 设置页里可视化配置,不必手改配置文件。

下面介绍这个插件的定位、能力与安装用法。事实以 GitHub 仓库 README 为准;DSH 插件生态由社区目录等站点聚合,与 DeepSeek / 幻方无官方从属关系。

这是什么

dsh-watchman 由维护者 Beeasy-L 发布,在 SkillHub 等目录中归类为 联网工具。当前 package.json 版本为 0.1.0,许可证 MIT,Node 要求 >=20。

一句话:把 DSH 里需要你拍板、任务报错、任务结束、订阅断线、harness cookie 失效等时刻,通过 Server酱(微信)、Bark(iPhone)或企业微信群机器人通知到你;凭据只存本机,界面与日志里以打码形式展示。

核心功能

推送通道

三种通道任选其一,完整 URL 或只填 key 均可识别:

通道 填写内容 获取方式
serverchan SENDKEY(SCT 开头) sct.ftqq.com 微信扫码;免费额度有限
bark https://api.day.app/<key> 或 key iPhone 安装 Bark App
wecom 群机器人 webhook 或 key 企业微信内部群 → 群机器人(需管理员开启权限)

设置页与宿主路由

安装并重启 DSH 后,在 设置 → 守夜人告警 可查看状态、选通道、配置推哪些事件、发送测试、查看日志。

宿主侧提供四条路由(均做同源校验):

方法 路径 说明
GET /plugins/watchman/state 打码后的配置、进程状态、日志尾部
POST /plugins/watchman/config 保存 channel、target、enabled、dedup_minutes、pushOn
POST /plugins/watchman/test 立即发一条测试推送
POST /plugins/watchman/control start / stop / restart 守夜人进程

事件与分级

事件订阅复用 dsh-remote 运行时里的 dsh-events.mjs。未安装 dsh-remote 时插件仍可安装并发送测试推送,但收不到 DSH 宿主事件流。

默认推送的事件包括:

事件 级别 默认
approval-request 工具放行待批 待审批 开
user-question / plan-review 等你回答 待审批 开
session-error 任务报错 报错 开
turn-end 任务结束 结束(异常结束会升格) 开
gap 订阅断线 断线 开
auth-error cookie 失效 报错 开

同一事件在默认 30 分钟 去重窗口内只推一次;去重表落盘到 ~/.dsh-watchman/watchman.dedupe.json,进程重启也不会重复轰炸。若「任务结束」太吵,可在配置里关掉 pushOn.turnEnd,仅异常结束仍推送。

架构要点

订阅与推送跑在 独立进程 lib/watchman.mjs 中,告警链路不依赖 DSH 主进程重启;使用 pid 锁保证单实例。数据目录默认 ~/.dsh-watchman(可用插件配置 dataDir 覆盖),事件源默认读 ~/.dsh-remote(可用 relayDir 覆盖)。

安装与启用

前置:DSH 桌面端或 Web 端,且具备 settings.section 槽位。

官方 README 给出的安装方式如下(装完需 重启 DSH):

# 从 GitHub 装(推荐,无需等 npm 发布)
dsh plugin --profile desktop add "github:Beeasy-L/dsh-watchman"

# 或从本地源码装(开发时)
dsh plugin --profile desktop add "file:C:\path\to\dsh-watchman"

# 若已发布到 npm
dsh plugin --profile desktop add dsh-watchman

典型用法

设置页配置

  1. 重启 DSH 后打开 设置 → 守夜人告警。
  2. 选择通道并填写 Server酱 SENDKEY、Bark key 或企业微信 webhook。
  3. 按需开关各事件类型,点击「发送测试到手机」确认通道可用。
  4. 状态区出现「已连上宿主事件流」时,事件源正常。

命令行改配置(可选)

向本机 DSH 端口 POST JSON(端口替换为实际值):

curl -X POST http://127.0.0.1:<DSH端口>/plugins/watchman/config \
  -H 'content-type: application/json' \
  -d '{"channel":"serverchan","target":"SCT....","enabled":true}'

独立运行守夜人进程

不经 DSH 界面也可前台调试:

node lib/watchman.mjs              # 前台运行
node lib/watchman.mjs --dry-run    # 只打印不发送
node lib/watchman.mjs --verbose    # 输出事件分类明细
node lib/watchman.mjs --test       # 发测试推送后退出

通道层离线自测:

node test/notify.selftest.mjs

适用场景与注意

适合谁:经常在 DSH 里挂长任务、需要离席但仍要及时处理审批或报错的开发者;已有 Server酱、Bark 或企业微信内部群机器人的人上手最快。

权限与安全:插件以当前 DSH 进程权限运行,安装前建议阅读仓库源码与 MIT 许可证。推送 key 仅保存在本机 config.json,README 说明插件不会把完整凭据发往第三方;路由失败被 try/catch 隔离,避免拖垮宿主。

排查收不到推送:先在设置页发测试;看日志是否「已连上宿主事件流」;DSH 换端口后可在设置页重启守夜人;企业微信须 内部群 且已开群机器人。若同时启用 dsh-remote 的微信机器人,同一事件可能收到两条通知,可按需关闭一侧。

与 dsh-remote 的关系:事件流复用 dsh-remote 的 dsh-events.mjs,推送走你自己的 Server酱 / Bark / 企业微信,与 dsh-remote 的 ilink 机器人互不冲突。

结尾

dsh-watchman 把 DSH 长任务里「人不在场」的空窗补上:分级事件、去重防抖、独立进程与设置页配置,适合需要手机侧及时知晓审批与报错的场景。

  • 目录页:https://www.skillhub.cn/plugins/Beeasy-L/dsh-watchman
  • GitHub:https://github.com/Beeasy-L/dsh-watchman
羽毛球分组比赛记分
小程序二维码

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

Xiaoye