前言¶
在 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 表示从不自动唤醒。
材料收集与一次唤醒的流程¶
一次唤醒大致做以下事情:
- 收集 material:工作区内自上次唤醒以来变更的文件、
watch额外目录中的新文件,以及STATE.md里stateSection(默认## In progress)下的条目。 - 挂载 agent preset,使唤醒会话具备工具能力(否则无法读取
STATE.md等)。 - 复用或创建会话 id
walk-<id>-<workspace fingerprint>;工作区路径变更会改变 fingerprint,从而在新房间开启新会话而非续接旧路径。 - 将会话挂到与工作区 cwd 匹配的分组。
- 发送
prompt(模板中的{material}会被替换),并等待本轮 turn 结束;会话结束后仍保留,便于在侧栏查看。 - 会话标题由
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。