dsh-run-watchdog
Verified@mskyurina/dsh-run-watchdog · v0.1.3 · ISC · Web UI
Purpose-aware monitoring for DeepSeek Harness long-running commands
Install
dsh plugin add @mskyurina/dsh-run-watchdog Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Tags
Creators
Readme
dsh-run-watchdog
English | 简体中文
结合任务目的和运行日志,判断长任务是否值得继续等待,发现异常时提醒主 Agent。
适用于 DeepSeek Harness 的训练、构建、测试和数据处理任务。支持 DeepSeek / Jev,版本 0.1.3。
演示

训练出现 NaN,watchdog 及时提醒 Agent。
安装
Desktop:通过 npm 安装
打开 插件 → 添加插件,填入包名,点击 安装 → 立即启用:
@mskyurina/dsh-run-watchdog
需要固定版本时使用 @mskyurina/dsh-run-watchdog@<版本号>。在 插件 → dsh-run-watchdog 中配置。
也可安装 v0.1.3 安装包,或按下文从源码打包。仓库不再提交 dist,请使用发布包安装。
从源码构建
需要 Node.js ≥ 22.19,以及提供后台任务接口的 DSH bash / pwsh 工具。
npm ci
npm run check
npm pack
在 Desktop 的插件页面安装生成的 mskyurina-dsh-run-watchdog-0.1.3.tgz 并启用。也可在完全退出 Desktop 后使用其自带 CLI:
& "$env:LOCALAPPDATA/Programs/DeepSeek Harness/resources/runtime/cli/bin/dsh.cmd" plugin --profile desktop add "<包的绝对路径>/mskyurina-dsh-run-watchdog-0.1.3.tgz"
重新打开 Desktop,在 插件 → dsh-run-watchdog 中配置。
开发依赖锁定 DSH 0.2.1-alpha.3、Cordis 4.0.5-alpha.2。此前验证过 Desktop 0.2.0-rc.2 的内置运行时;升级宿主后应重跑集成测试。
配置
- DeepSeek:默认复用 DSH 已登录的账号;未登录时读取模型设置中的 API Key。在插件配置页选择监测模型。自定义服务地址或凭据引用仍使用 API Key。
- Jev:选择 Jev 后填写专用 API Key,保存到 DSH 凭据存储。
- 观察模式:默认模式,不执行任务提醒或停止;判断结果可通过
watch_status查询。监测本身失效仍会通知 Agent。配置recordPath可保存判断记录。 - 执行模式:异常投递给原会话,空闲的 Agent 会被唤醒。
保存后可点击“测试连接”。高级设置对新附加的监测生效。
| 配置 | 默认值 | 含义 |
|---|---|---|
firstCheckMs |
10000 | 首次检查等待时间 |
judgeTimeoutMs |
8000 | 单次模型请求超时 |
stopThreshold |
0.8 | Jev 自动停止概率阈值 |
allowAutoStop |
false | 是否允许任务申请自动停止 |
recordPath |
未设置 | 本地 JSONL 记录路径 |
模型请求包含任务目的、命令和最多 16000 字符的近期日志;本地记录也包含这些内容。密钥优先从 DSH 凭据存储读取,其次读取 apiKeyEnv 指定的环境变量。
工作方式
插件向主 Agent 提供使用说明。Agent 用原生工具启动后台任务,再调用 watch_job 附加监测;用户无需指定工具或填写参数。
watch_job 立即返回。多个任务并发监测,各自使用独立日志游标,不消耗 Agent 的输出。Agent 可继续用 job_output 读取日志。插件不启动或重启命令。
每轮由小模型分别选择动作(继续、提醒、建议停止、不确定)和下次检查间隔(10、30、60、120、300、600 秒)。提醒后仍按模型选择的间隔继续检查。同一异常持续出现时不重复提醒;模型判断恢复正常后,再次异常会重新提醒。
- Jev 只有在选择停止、停止分数达到
stopThreshold,且部署配置与本次任务都授权时才自动停止;缺少可读输出或日志来源报错时不会自动停止。该分数没有经过准确率校准。 - DeepSeek 的停止建议只会转为提醒。
- 不再将提醒和停止的概率相加,也不把“继续”拆成六种动作。
允许正常重定向输出。Agent 可在 watch_job 中传入 log_paths(最多八个绝对路径),同时增量读取任务输出和日志文件。文件暂不存在、读取失败、截断或轮转会明确反映在状态与证据中。安静运行不等于异常;没有可读输出也不等于运行正常。
watch_job 返回输出来源、监测模式、当前健康状态和首次检查时间。watch_status(jobId) 返回最近判断及输入证据、连续失败次数和下次检查时间。判断服务连续失败两次会通知 Agent,恢复时再通知一次;意外退出观察循环也会报告。Jev 返回选项及分数,不生成原因;DeepSeek 可提供简短解释。主 Agent 应结合日志向用户说明启动监测、发现异常或失去可见性。
正常结束使用 DSH 原生通知。提醒会取消同一会话中的 job_output(wait=true) 等待,包括提醒尚未送达时新发起的等待;不会因此停止后台任务或取消整个 Agent。其他阻塞工具不在此处理范围内。
任务完成或插件卸载时清理监测,卸载不终止任务。插件重启后不会自动恢复旧监测。最近 100 个结束监测的结果可在本进程内查询;模型请求失败时按退避间隔重试。
开发与测试
npm run check
执行构建、类型检查及离线回归,无需 API Key。覆盖决策阈值、日志分块与截断、状态不可变性、调度边界、提醒后持续检查、监测失效与恢复、文件轮转、并发监测、等待中断竞态、DSH 工具与真实子进程集成。
在线连接测试会调用所选服务:
npm run smoke -- jev
npm run smoke -- deepseek
WATCHDOG_MODEL 可覆盖测试模型。离线测试通过不代表所有真实任务的判断质量;演示也不代表 Agent 在每个任务中都能稳定选择监测工具。
| 文件 | 职责 |
|---|---|
src/output.ts |
日志状态与证据统计,纯函数 |
src/decision.ts |
模型输入、动作判断和比较规则 |
src/monitor-state.ts |
检查快照与时间调度,纯函数 |
src/monitor.ts |
读取日志、请求模型、执行监测循环 |
src/jobs.ts |
DSH 任务读取与独立游标 |
src/interrupt-wait.ts |
提醒到达时释放输出等待 |
src/index.ts |
工具注册、提醒投递和 Cordis 生命周期 |
src/providers.ts |
DeepSeek / Jev 请求适配 |
src/settings.ts、src/client.tsx |
凭据、连接测试与配置界面 |
docs/ 和 .integration/ 用于本地验证记录,不纳入版本控制;README 演示素材保存在 assets/。
可复用的在线评估位于 test/evaluation/,需要显式配置判断服务凭据后运行。临时宿主探针、诊断脚本和原始实测记录保存在被忽略的 .integration/,不属于正式源码。
CI 与发布
推送 main 或创建 PR 时,在 Windows 和 Linux 上执行完整检查并打包。npm pack 和 npm publish 会通过 prepack 构建 dist;Git 只保存源码,npm 包包含运行所需产物,安装时不需要构建。
发布新版本时,运行 npm version patch --no-git-tag-version(或指定版本),提交后推送 main。两平台检查通过后,工作流自动创建 v<版本号> 标签、发布 npm 包并创建 GitHub Release。同版本的后续提交不重复发布;失败后可重跑原工作流,补齐未完成步骤。已有标签不会移动。
采用与 agent-workspace 相同的 npm Trusted Publishing:在 npm 包的发布设置中授权 GitHub 用户 Hirate99、仓库 dsh-run-watchdog、工作流 ci.yml、Environment npm,允许直接发布。此授权按包配置,不能复用另一个包的授权;不需要保存 npm Token。首次发布后需在 npm 网站完成上述授权,后续版本即可由工作流发布。