🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

守夜人告警 Beeasy-L/dsh-watchman

DeepSeek Harness
Beeasy-L10 天前有提交已提供中文文档扫描:含敏感能力

任务卡住或报错时,把提醒推送到你的手机微信

30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/26 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Beeasy-L/dsh-watchman
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么[目录]—
dsh 原生插件 · other
暂无时间戳·判据 →
装得上吗[实装验证]—
本站尚未做安装检查
暂无时间戳·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/05·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 10 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 23 处,展示前 23 条)
  • 读取本地文件
    lib/index.js:74
    return JSON.parse(readFileSync(p, 'utf8'))
  • 写入本地文件
    lib/index.js:81
    mkdirSync(dirname(p), { recursive: true })
  • 写入本地文件
    lib/index.js:82
    writeFileSync(p, JSON.stringify(obj, null, 2), 'utf8')
  • 读取本地文件
    lib/index.js:95
    const n = Number(String(readFileSync(files(cfg).pid, 'utf8')).trim())
  • 读取本地文件
    lib/index.js:116
    const size = statSync(p).size
  • 读取本地文件
    lib/index.js:166
    eventsModuleReady: existsSync(cfg.eventsModule),
  • 读取本地文件
    lib/index.js:185
    if (existsSync(crt)) env.NODE_EXTRA_CA_CERTS = crt
  • 读取本地文件
    lib/index.js:193
    if (!existsSync(ENTRY)) return { started: false, reason: `缺少订阅脚本:${ENTRY}` }
  • 执行外部命令来自配置/变量
    lib/index.js:194
    const child = spawn(process.execPath, [ENTRY], {
  • 写入本地文件
    lib/index.js:222
    mkdirSync(cfg.dataDir, { recursive: true })
  • 发起网络请求
    lib/client.js:93
    return fetch(path, {
  • 读取本地文件
    lib/notifier.mjs:57
    const obj = JSON.parse(readFileSync(filePath, "utf8"));
  • 写入本地文件
    lib/notifier.mjs:68
    writeFileSync(filePath, JSON.stringify(Object.fromEntries(sentCache)), "utf8");
  • 发起网络请求
    lib/notifier.mjs:80
    const res = await fetch(url, {
  • 写入本地文件
    lib/watchman.mjs:45
    mkdirSync(DATA_DIR, { recursive: true });
  • 读取本地文件
    lib/watchman.mjs:77
    const old = Number(String(readFileSync(PID_PATH, "utf8")).trim());
  • 写入本地文件
    lib/watchman.mjs:90
    writeFileSync(PID_PATH, String(process.pid), "utf8");
  • 读取本地文件
    lib/watchman.mjs:99
    return JSON.parse(readFileSync(p, "utf8"));
  • 写入本地文件
    lib/watchman.mjs:126
    appendFileSync(LOG_PATH, line + "\n", "utf8");
  • 读取本地文件
    lib/watchman.mjs:138
    return readdirSync(cfg.relayDir)
  • 读取本地文件
    lib/watchman.mjs:351
    if (!existsSync(cfg.eventsModule)) {
  • 读取本地文件
    lib/watchman.mjs:423
    if (Number(String(readFileSync(PID_PATH, "utf8")).trim()) === process.pid) unlinkSync(PID_PATH);
  • 删除本地文件
    lib/watchman.mjs:423
    if (Number(String(readFileSync(PID_PATH, "utf8")).trim()) === process.pid) unlinkSync(PID_PATH);
扫描于 2026/11/5(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

守夜人告警:把 DeepSeek Harness 的待审批/报错/任务结束推到手机(Server酱/Bark/企业微信群机器人),设置页可视化配置。

README

由 DeepSeek 最新模型翻译生成
dsh-watchman · 守夜人告警 把 DeepSeek Harness 的「需要你拍板 / 任务报错 / 任务结束 / 订阅断线 / 登录态失效」推到你手机微信(或 Bark、企业微信群机器人),并在设置页里可视化配置。 你在电脑上让 DSH 跑长任务,人离开了——任务跑完了、报错了、卡在「等你点同意」,这些时刻你并不知道。这个插件负责在你不在场时替你盯着,出事喊你。 特性 - 三种推送通道:Server酱(微信)、Bark(iPhone)、企业微信群机器人;填完整地址或只填 key 都认 - 设置页可视化配置:设置 → 守夜人告警 —— 状态、通道、推哪些事件、发送测试、看日志,不用敲配置 - 事件分流 + 分级:🔴 报错/登录态失效 · 🟡 待审批/断线 · 🟢 任务结束 - 去重防抖:同一事件在窗口期(默认 30 分钟)只推一次,绝不连环轰炸;去重表落盘,进程重启也不会重复推 - 独立进程:订阅与推送跑在独立进程里,告警链路不依赖 DSH 重启;宿主崩了,已连上的链路照跑 - 单实例保护:pid 锁,重复启动会被拒绝(去重表是进程内的,双实例会推两遍) - 凭据不出本机:地址只以打码形式(如 SCT123…
展开完整文档(README 剩余 1 节)
dsh-watchman · 守夜人告警

把 DeepSeek Harness 的「需要你拍板 / 任务报错 / 任务结束 / 订阅断线 / 登录态失效」推到你手机微信(或 Bark、企业微信群机器人),并在设置页里可视化配置。

你在电脑上让 DSH 跑长任务,人离开了——任务跑完了、报错了、卡在「等你点同意」,这些时刻你并不知道。这个插件负责在你不在场时替你盯着,出事喊你。

特性

- 三种推送通道:Server酱(微信)、Bark(iPhone)、企业微信群机器人;填完整地址或只填 key 都认
- 设置页可视化配置:设置 → 守夜人告警 —— 状态、通道、推哪些事件、发送测试、看日志,不用敲配置
- 事件分流 + 分级:🔴 报错/登录态失效 · 🟡 待审批/断线 · 🟢 任务结束
- 去重防抖:同一事件在窗口期(默认 30 分钟)只推一次,绝不连环轰炸;去重表落盘,进程重启也不会重复推
- 独立进程:订阅与推送跑在独立进程里,告警链路不依赖 DSH 重启;宿主崩了,已连上的链路照跑
- 单实例保护:pid 锁,重复启动会被拒绝(去重表是进程内的,双实例会推两遍)
- 凭据不出本机:地址只以打码形式(如 SCT123…aBcD)返回给界面与日志;所有路由做同源校验

前置

| 要求 | 说明 |
| DSH | 桌面端或 Web 端,含 settings.section 槽位 |
| 事件源(可选) | 事件订阅复用 dsh-remote 运行时里的 dsh-events.mjs。没有它插件仍能安装、能发测试推送,只是收不到 DSH 事件 |

为什么不自己实现事件订阅:dsh-remote 已经把宿主的事件流(/api/remote.mux 的 $events、 session/follow)与审批回执在真机上跑通了,复用它比重新逆向协议可靠得多。

安装

从 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

装完重启 DSH:宿主半边(4 条路由)与界面半边(设置页一节)都在启动时装配。

配置通道

打开 设置 → 守夜人告警,选通道并填地址:

| 通道 | 填什么 | 怎么拿 |
| serverchan | SENDKEY(SCT 开头) | sct.ftqq.com 微信扫码即得;免费额度有限 |
| bark | https://api.day.app/<key> 或只填 key | iPhone 装 Bark App,打开就有 key;免费、不限量 |
| wecom | 群机器人完整 webhook 或只填 key | 企业微信群 → 右上角 ⋯ → 群机器人 → 添加(需企业管理员开启该权限,且群必须是企业内部群) |

配置也可以直接写文件(数据目录见下),或命令行调路由:

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

推哪些事件

| 事件 | 级别 | 去重键 | 默认 |
| approval-request 工具放行待批 | 🟡 | approval:<eventId> | 开 |
| user-question / plan-review 等你回答 | 🟡 | question:<eventId> | 开 |
| session-error 任务报错 | 🔴 | error:<sessionId>:<eventId> | 开 |
| turn-end 任务结束 | 🟢(异常结束转 🟡) | turnend:<sessionId>:<eventId> | 开 |
| gap 订阅断线(期间通知可能漏) | 🟡 | gap | 开 |
| auth-error harness cookie 失效 | 🔴 | auth-error | 开 |

「任务结束」想要安静模式:关掉 turnEnd,则只有异常结束(error / aborted / blocked / interrupted / max-tokens)才推。

命令行(不经 DSH 也能独立跑)

node lib/watchman.mjs # 前台运行,Ctrl+C 退出
node lib/watchman.mjs --dry-run # 只打印不真发(排查用)
node lib/watchman.mjs --verbose # 连事件分类明细都打
node lib/watchman.mjs --test # 发一条测试到手机后退出

node test/notify.selftest.mjs # 通道层离线自测(打桩 fetch,不联网)

架构

DSH 宿主进程 ├─ 插件 host 半边 lib/index.js 4 条路由:state / config / test / control └─ 插件 client 半边 lib/client.js 设置页「守夜人告警」一节 │ 读写同一份配置、可启停 ▼ 独立进程 lib/watchman.mjs ├─ createEventSubscriber ← 复用 dsh-remote 的 dsh-events.mjs 连宿主事件流 ├─ 事件分类 → 分级 + 去重(落盘) └─ lib/notifier.mjs → Server酱 / Bark / 企业微信

宿主半边的路由:

| 方法 | 路径 | 说明 |
| GET | /plugins/watchman/state | 配置(地址打码)+ 进程状态 + 日志尾部 |
| POST | /plugins/watchman/config | 保存 {channel,target,enabled,dedup_minutes,pushOn};target 留空=不改 |
| POST | /plugins/watchman/test | 立刻发一条测试到手机 |
| POST | /plugins/watchman/control | {action:"start"\|"stop"\|"restart"} |

数据文件

数据目录默认 ~/.dsh-watchman(可用插件配置 dataDir 覆盖):

| 文件 | 内容 |
| config.json | 通道、地址(凭据)、开关、去重分钟数 |
| watchman.config.json | relayDir、eventsModule、pushOn 事件开关 |
| watchman.log | 运行日志 |
| watchman.pid | 当前进程号(单实例锁) |
| watchman.dedupe.json | 去重表(跨重启) |

事件源默认读 ~/.dsh-remote(可用 relayDir 覆盖)。

常见问题

收不到推送?
1. 设置页点「发送测试到手机」——失败会给出通道侧原话(如企业微信 errcode)
2. 看状态区的通道与地址打码是否符合预期
3. 看「最近日志」:已连上宿主事件流 才说明事件源正常
4. Server酱免费额度有限;企业微信要内部群且管理员已开启「群机器人」

任务结束也推,太吵? 关掉 pushOn.turnEnd。

日志里出现 已连上宿主事件流 但事件不来? DSH 换端口后事件订阅需要重连,插件每 30 秒重新发现上游与 harness cookie;重启一次守夜人(设置页「重启」)即可立刻生效。

同时装了 dsh-remote 的微信机器人? 两者互不冲突:dsh-remote 走腾讯 ilink 机器人,本插件走你自己的通道;但同一事件可能收到两条通知,按需关掉一边。

隐私与安全

- 推送地址(含 key)只存在本机数据目录里,插件从不把它发往任何第三方服务
- 界面与日志里只出现打码形式(如 SCT123…aBcD)
- 4 条路由全部做同源校验,跨域请求直接被拒
- 路由处理器各自 try/catch:路由出问题最多返回 500,不会把宿主带下去

致谢

- 通道层(企业微信 / Bark / Server酱 的请求形状、去重语义、分级)搬自 「星火续火花」 项目的「守夜人」告警模块(core/notifier.py),做了 ESM 化 + 去重表落盘
- 事件订阅复用 dsh-remote 的 dsh-events.mjs (createEventSubscriber / NODE_KINDS / 未来的 answerApproval)

License

MIT
预览分享卡片长什么样 ↓Beeasy-L/dsh-watchman
分享 · DeepSeek Harness Hub
Beeasy-L/dsh-watchman

任务卡住或报错时,把提醒推送到你的手机微信

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部