DSH Idle Watchdog: Idle Session Urging and External Prompt API

前言

在 DSH web 里跑长任务时,会话常会无声停住:模型按计划收尾、工具调用失败、限流打断一轮,或 agent 留下「是否继续」而你人不在。手工刷新或切回每个会话成本高。若还要让 cron、CI webhook 或监控脚本往指定会话里塞一条消息,通常得自己接会话与恢复逻辑。DSH Idle Watchdog(dsh-idle-watchdog)是 maintainer lucagiftzek 发布的 web profile 插件,归类为联网工具,做两件事:对你勾选的空闲会话按规则自动 follow-up,以及提供带密钥的 HTTP 接口,向任意会话投递 prompt。

这是什么

DeepSeek Harness(DSH)社区插件,npm 包名 dsh-idle-watchdog,当前资料中版本为 1.2.0,MIT 许可证。面向 DSH web profile,依赖 Node 22.5 及以上,并要求 DSH 构建具备 agents、settings 与 webServer 服务;package.json 中声明 DSH 引擎 >=0.1.1-rc.1,配置存储说明覆盖 DSH 0.1.5 与 0.2.x 等版本差异。

核心功能

空闲催办(Idle nudges)

对你 opt-in 的会话进行监视。当静默超过设定的 idle 窗口、且该会话 agent 处于 idle(正在执行的 turn 不会被打断)时,watchdog 在同一会话里 POST 一条 follow-up prompt,单次 idle 周期内最多到 maxNudges 上限;你回复后会重置预算。冷会话(未加载)不会因 idle 被唤醒;只有 API 路径可按配置 resume。

可选行为(1.1 起,默认保持旧行为):skipWhenGoalActive(goal 轮次进行中不催)、onlyAfterError(仅在上次人类消息后出现 agent 报错时催)、按次倍增的 backoffFactor / backoffMaxMinutes、quietHours(仅延迟 idle 催办,不阻断外部 API)。达到上限时可发一条折叠通知(notifyOnCap),然后等待你介入。

外部 Prompt API

单一、需共享密钥的 HTTP 端点,供脚本、cron、webhook 或其它机器向指定会话写入消息;可按 chat id、id 前缀或精确标题匹配。配置允许时,可通过 DSH 自带 resume 路径唤醒未加载会话。

示例(来自 README):

POST /dsh-idle-watchdog/api/prompt
  { "chat": "nightly report", "message": "The sweep finished. Summarize failures and propose fixes." }
-> 202 { "ok": true, "chat": "session-4c1760...", "via": "title", "resumed": false }

密钥优先级:环境变量 DSH_IDLE_WATCHDOG_SECRET → 文件 ~/.dsh/idle-watchdog/api-secret(可用 DSH_IDLE_WATCHDOG_SECRET_FILE 改路径)→ 设置项 api.secret;未设置密钥时 API 失败关闭(fail closed)。默认 api.rateLimitPerMinute 为 30(按源 IP)。

安装与启用

下面介绍官方安装方式。插件声明 dsh.bundle,安装后会出现在 dsh.profile.bundles 中;服务端 half 仅在启动时挂载,需重启 dsh web。

从 npm 安装:

dsh plugin --profile web add dsh-idle-watchdog

或从 GitHub 安装:

dsh plugin --profile web add github:lucagiftzek/DSH-Idle-Watchdog

重启 dsh web 后,重新加载 Web UI。在 Settings → Idle Watchdog 中勾选要监视的会话并保存。浏览器端可热更新;服务端需重启。也可用本地 checkout 的 link: 路径安装(README 中有 dsh plugin --profile web add link:/absolute/path/to/DSH-Idle-Watchdog 说明)。

配置位置因 DSH 版本而异:0.1.5 及更早可在 ~/.dsh/settings.yaml 的 dsh-idle-watchdog 命名空间手改;0.1.7 / 0.2.x 及更新多在 ~/.dsh/profiles/web/cordis.patch.yml 的 idle-watchdog 行;无 settings 服务时落盘 ~/.dsh/idle-watchdog/settings.json。Settings 里的 Status 卡片与 /status 可查看下次催办时间与当前存储后端(settingsStore)。

常用默认值(可在 UI 或 YAML 调整):idleMinutes 20、maxNudges 3、tickSeconds 30、enabled true;主开关打开后仍须 per-chat opt-in。

典型用法

1、安装并重启 dsh web,在 Idle Watchdog 里为长任务会话开启监视,按需改 idleMinutes、maxNudges 与 defaultPrompt。

2、若希望夜间不打扰,开启 quietHours 并设置 IANA 时区(例如 Europe/Berlin)与起止 HH:MM。

3、为外部系统集成 API:在 Settings 保存 secret(写入 ~/.dsh/idle-watchdog/api-secret),脚本侧读取:

IW_SECRET=${DSH_IDLE_WATCHDOG_SECRET:-$(cat ~/.dsh/idle-watchdog/api-secret)}

再对运行中的 dsh web 主机调用 POST /dsh-idle-watchdog/api/prompt,body 含 chat 与 message。

4、需要 YAML 片段时,README 给出示例(含 backoffFactor、quietHours、chats 列表等),可与 UI 对照使用。

运行态与审计:~/.dsh/idle-watchdog/state.json 持久化状态;~/.dsh/idle-watchdog/activity.jsonl 为滚动审计(512 KiB)。

适用场景与注意

适合:长时间 autonomous 会话、希望 agent 在 plan 结束或错误后自动续跑;需要 webhook / 定时任务向 DSH 会话注入结果摘要或下一步指令,而不自建 session plumbing。

注意:插件在 dsh 进程权限下运行,安装前请自行审阅 GitHub 源码 与 MIT 许可证。API secret 需妥善保管;rate limit 与 fail-closed 设计意在降低误暴露风险,仍不应把端点暴露到不可信网络而无额外防护。DSH 插件生态遵循「一切皆插件」思路;社区目录站点与 DeepSeek / 幻方无官方从属关系,本文信息以仓库 README 与 npm 包元数据为准。

结尾

经过上面的步骤,Idle Watchdog 把「会话静默」和「机器写会话」两条线收进一个 web profile 插件:UI 里 opt-in 与调参,脚本里一条 authenticated POST。目录页:https://www.skillhub.cn/plugins/lucagiftzek/DSH-Idle-Watchdog;仓库:https://github.com/lucagiftzek/DSH-Idle-Watchdog。

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

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

Xiaoye