前言¶
DeepSeek Harness(DSH)会把会话持久化到磁盘,但正在运行的那一轮对话不会自动保存。如果主机重启,那轮对话就停在半路:DSH 会追加一个 turn/end { reason: { kind: 'interrupted' } },把本轮关闭,然后等待你的下一条消息。重启时如果恰好有任务在跑,Agent 就会停顿下来,需要手动发送「继续」。
dsh-boot-resume 在宿主机启动后,扫描所有工作区的会话,找到未完成的轮次,自动恢复并补发一条消息(默认为「继续」),避免你手动补发。
这是什么¶
- 插件名称:dsh-boot-resume
- 维护者:monkey-sking
- 分类:记忆
- 核心价值:检测并自动继续因重启而中断的会话轮次
它做了什么¶
宿主机启动后,经过一段延迟(默认 8 秒),插件按以下步骤执行一次检查:
- 列出每个工作区的所有会话。
- 对每个会话读取尾部事件,寻找未完成的轮次:
- 最后一个事件是turn/start但没有对应的turn/end(进程在轮次中途挂掉);
- 最后一个turn/end的reason.kind为'interrupted'(重启时写入的标记)。 - 对每个匹配的会话调用
agents.resume()恢复 Agent 实例,并调用agent.followup()发送一条消息(默认为「继续」)。
插件只操作会话与 Agent,不改动 DSH 的核心架构或其它插件。
它不会做什么¶
| 条件 | 原因 |
|---|---|
reason.kind === 'user' |
你主动停止,恢复会与你意图冲突 |
reason.kind === 'completed' |
本轮正常结束 |
轮次年龄超过 maxAgeHours |
可能是有意放弃的旧会话 |
同一个会话如果已有 Agent 实例处于 running 状态,也会跳过,避免与 UI 先打开会话的流程冲突。
防止无限循环¶
如果恢复的轮次再次导致宿主机崩溃,重启时可能会再次恢复同一轮次。插件通过以下限制防止死循环:
cooldownMinutes:同一次会话在冷却期内最多恢复一次;maxPerDay:同一次会话每天最多恢复 N 次;maxResumePerBoot:单次启动最多恢复 N 个会话;staggerMs:恢复之间保持最小间隔。
安装与启用¶
进入对应 profile 的目录:
cd "$DSH_HOME/profiles/<profile>"
使用本地路径添加插件:
pnpm add link:/path/to/dsh-boot-resume
在 profile 的 package.json 中添加包名到 dsh.profile.bundles,然后重启宿主机。
配置¶
所有配置项都是可选,默认值如下:
- insert:
- id: auto-continue
name: dsh-boot-resume
inject: [agents]
config:
enabled: true
delayMs: 8000 # 启动后等待多久开始检查
message: 继续 # 补发的消息内容
maxAgeHours: 12 # 忽略超过该时长的会话
cooldownMinutes: 30 # 同一会话两次恢复之间的冷却
maxPerDay: 3 # 同一会话每天最多恢复次数
maxCandidates: 8 # 检查时最多查看的会话数
maxResumePerBoot: 5 # 单次启动最多恢复的会话数
staggerMs: 1500 # 恢复之间的最小间隔(毫秒)
可观测性¶
每次宿主机启动都会在 $DSH_HOME/auto-continue/auto-continue.log 中写入一条日志:
[2026-10-21T02:50:55.275Z] 发现未完成轮次 session-9ba505ca…(turn=47, 判定=open, 最后事件 …)
[2026-10-21T02:50:55.383Z] session-9ba505ca…: 已投递「继续」
[2026-10-21T02:51:00.290Z] 启动检查完成:续跑 3 个会话
state.json 文件保存在同一目录,记录每个会话的冷却历史,删除该文件可清空历史。
要求¶
- DSH 宿主机版本
>= 0.2.0-rc.2 - 需要宿主机提供
agents服务,以及sessionPersistence和agentDefaultModel服务(若存在)
适用场景与注意¶
- 适合需要长时间运行、可能因意外重启中断的会话场景。
- 插件以宿主机权限运行,安装前建议查看源码与许可证。
- 配置
maxAgeHours与cooldownMinutes可避免误恢复旧的或被你主动放弃的会话。
总结¶
dsh-boot-resume 在宿主机启动时,自动识别未完成的会话轮次并补发消息,减少手动干预。它只针对重启中断的场景,不干扰正常的会话流程。更多细节与源码,可访问插件目录页或 GitHub 仓库。