dsh-whale-waker:为工作区里的「居民」按表定时唤醒

前言

在 DeepSeek Harness(DSH)里,智能体往往只在用户输入时存在:会话结束,上下文就停在那一刻。若希望某个工作区里的 agent 能按间隔自行醒来、读取自上次唤醒以来的变更,并在一轮对话里做一件小事,就需要独立的调度与材料收集机制。Whale Waker(包名 dsh-whale-waker)由维护者 ztan4706 发布在 GitHub(ztan4706/dsh-whale-waker),在社区目录 skillhub.cn 可查到条目;它把每个目标配置成带间隔、静默时段、每日上限和提示词的「whale」,在后台复用同一会话完成定时唤醒。DSH 生态强调「一切皆插件」,社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。

这是什么

Whale Waker 的定位是:Scheduled wake-ups for the residents of a workspace——为工作区居民提供按计划唤醒。每个目标(whale)拥有自己的间隔、静默小时、每日上限、提示词与工具 deny 列表;每次唤醒复用同一会话,汇总自上次以来的变更,并发送一条短提示。插件附带设置页,配置写入 dsh-whale-waker.json,状态写入同目录下的 dsh-whale-waker-state.json。许可证 MIT,作者标注为 Bao · E-1021。

核心功能

调度与限制

调度器约每五分钟检查一次配置与到期目标,因此实际触发时间最多可能漂移约五分钟。每个目标同一时刻只允许一次唤醒在进行。字段 intervalMinutes(5–2880)控制可唤醒频率,minGapMinutes(0–1440)为两次唤醒的最小间隔,startHour / endHour(0–24)定义静默窗口之外不触发,maxPerDay(0–48)为每日硬上限;0 表示从不自动唤醒。

材料收集与一次唤醒的流程

一次唤醒大致做以下事情:

  1. 收集 material:工作区内自上次唤醒以来变更的文件、watch 额外目录中的新文件,以及 STATE.md 里 stateSection(默认 ## In progress)下的条目。
  2. 挂载 agent preset,使唤醒会话具备工具能力(否则无法读取 STATE.md 等)。
  3. 复用或创建会话 id walk-<id>-<workspace fingerprint>;工作区路径变更会改变 fingerprint,从而在新房间开启新会话而非续接旧路径。
  4. 将会话挂到与工作区 cwd 匹配的分组。
  5. 发送 prompt(模板中的 {material} 会被替换),并等待本轮 turn 结束;会话结束后仍保留,便于在侧栏查看。
  6. 会话标题由 sessionTitle(默认 Wake · {name})指定。

日志写入配置旁的 dsh-whale-waker.log,包含交给模型的 material,便于事后排查。

与用户同时在线时的行为

定时唤醒不会加入你当前的 live chat,而是在对应工作区打开或恢复独立会话 walk-<id>。插件监听 agent/inbox/claimed 中人类真实输入的消息(忽略插件注入与 walk-* 会话);若工作区在 activeWindowMinutes(默认 10)内有人说话,本次定时唤醒会跳过并记为 user-active。已在运行的唤醒不会被中断;重启后活动图为空,直到下一条消息,minGapMinutes 作为兜底。手动唤醒(工具 wake_whale 或设置页「Wake once」)带 force,不受上述静默窗口限制。

配置与工作区路径

默认配置文件路径为 $DSH_PROFILE_DIR/dsh-whale-waker.json,也可通过行配置中的 config.configPath 指定。设置页会编辑该文件;调度器在 mtime 变化时重新读取(约每五分钟检查)。workspace 为必填:为空则不会唤醒(no-workspace)。provider / model 可选,空则使用当前 DSH 默认模型;主机未配置的 provider 会记录为 provider-not-configured 并跳过。对 ollama* provider 可预热的 ollamaBase 默认为 http://127.0.0.1:11434,失败不阻塞唤醒。dryRun 只收集 material 并写日志,不打开会话。denyTools 可从该 whale 的唤醒会话中移除指定工具名。

设置页可在配置中单独指定 UI 语言:ui.language 支持 auto、en、zh-CN、zh-TW。

工具 wake_whale

  • wake_whale({}):列出各目标、下次可唤醒状态与当日计数。
  • wake_whale({ id: "echo", reason: "..." }):对指定目标唤醒一轮,绕过日程但仍尊重「已在运行」。

安装与启用

安装前请自行查看仓库源码与 MIT 许可证;插件以当前 DSH 进程权限运行。package.json 中声明需要 Node >=20,DSH 版本 >=0.2.0 <0.4.0-0。

官方 README 给出的安装方式为:

dsh plugin --profile <your-profile> add dsh-whale-waker

也可通过应用内 plugin_manager 的 install_bundle 安装目录包。安装后需重启 DSH——插件模块按 URL 缓存,不重启则磁盘版本与运行中版本可能不一致;设置页会在版本不一致时提示重启。

重启后,在 Settings → Whale Waker 可见设置页。

典型配置示例

下面是一段 README 中的配置结构,便于对照字段含义:

{
  "targets": [
    {
      "id": "echo",
      "name": "Echo",
      "workspace": "D:\\rooms\\echo",
      "provider": "",
      "model": "",
      "enabled": true,
      "intervalMinutes": 95,
      "minGapMinutes": 45,
      "startHour": 9,
      "endHour": 23,
      "maxPerDay": 6,
      "prompt": "(Scheduled wake-up.)\n\n{material}\n\nMove one thing forward, or answer \"nothing this round\"."
    }
  ]
}

在设置页中可直接编辑已有目标的字段;README 说明目前没有 UI 用于新增 target,需编辑 JSON(或复制现有条目)。工作区路径可在页面输入文件夹后点 Apply:主机校验为绝对路径、存在且为目录,必要时为未归属的工作区创建分组标题。

手动试一次唤醒可在设置页使用「Wake once」,或在 agent 侧调用 wake_whale。

适用场景与注意

适合需要在固定工作区里长期「驻留」、周期性根据文件与 STATE.md 进展自主推进一小步的场景,与仅在被 @ 或手动开聊时才活动的 agent 形成互补。

使用前请注意:

  • 调度粒度为约五分钟一轮检查,不是秒级 cron。
  • 唤醒使用你配置的 provider/model;本地 Ollama 可能较慢(插件对 Ollama 有预热,README 提到约 3 分钟超时场景)。
  • 变更插件代码或升级包后应重启 DSH,否则运行中仍是旧模块。
  • 社区目录页星标等元数据以站点展示为准;功能与命令以 GitHub README 与仓库为准。

结尾

Whale Waker 为 DSH 工作区提供可配置的定时唤醒:独立会话、变更材料汇总、静默时段与「用户正在说话则推迟」等规则,并配有设置页与 wake_whale 手动入口。进一步了解可访问社区目录 https://www.skillhub.cn/plugins/ztan4706/dsh-whale-waker 与 GitHub 仓库 https://github.com/ztan4706/dsh-whale-waker。

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

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

Xiaoye