Skip to content

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。

演示

Desktop 中的训练异常提醒

训练出现 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 网站完成上述授权,后续版本即可由工作流发布。