前言¶
在 DeepSeek Harness(DSH)里跑长任务时,常见卡点并不在模型能力,而在会话生命周期:模型做完一轮就停住等人打字「继续」;上行抖动导致回合以 TRANSPORT 结束;Goal 因 agent/error 被 round driver 解除武装,或 resume/fork 后目标仍保持 disarmed。这三种情况里,工作往往仍可恢复,但需要有人盯着补一脚。
dsh-autocontinue 是社区维护的 DSH 工作流类插件(维护者 kenjoe41,当前版本 0.1.13,在 dsh 0.2.1-rc.2 上验证)。它在会话被 armed 之后,自动排队下一轮、对提供商/网络失败做指数退避重试,并在 Goal 停滞时尝试重新武装;进程重启后还能扫描未闭合的 turn 并恢复会话。下面介绍它的定位、能力与用法。
这是什么¶
一句话:dsh-autocontinue 在无人看管时保持同一会话继续工作——空闲时自动续跑、失败时带退避重试、Goal 失活时尝试复活,并在 dsh-update 或崩溃后做重启恢复。
| 能力 | 行为 |
|---|---|
| Continues | armed 会话里 agent 空闲时自动排队下一轮,不必等人输入 continue。 |
| Retries | 提供商或网络失败的回合默认无限重试,指数退避,上限稳定在 5 分钟间隔。 |
| Revives | 因失败 disarm、resume/fork 遗留 disarmed、或 paused 的 Goal 在策略允许时重新武装。 |
重要前提:在调用 /autocontinue on 或配置 enabled: true 之前,插件不会对会话做任何自动动作。
生态上,DSH 奉行「一切皆插件」;插件目录站 SkillHub 为社区收录,与 DeepSeek / 幻方无官方从属关系。源码与问题跟踪见 GitHub:kenjoe41/dsh-autocontinue,许可证为 MIT。
核心功能¶
同会话自动续跑(Continuation)¶
armed 后,当 agent 进入空闲,插件会排队一轮普通用户消息,标题形如 <autocontinue> Round n/…,要求模型继续推进、以工作区与工具结果为准,并在任务真正完成时用结束标记收尾。对话记录仍像正常多轮聊天。
循环在以下任一条件成立时停止:
- 模型在回复最后一行写出完成标记(默认
AUTOCONTINUE: DONE)。 - 你手动中止回合(Stop 会被人为中断尊重)。
- 达到
maxRounds上限。 - 执行
/autocontinue off解除武装。
失败重试与退避(Retry through outages)¶
默认面向不稳定上行:无限重试(maxRetries: 0),退避至恒定 5 分钟:
| 连续失败次数 | 重试前等待 |
|---|---|
| 1 | 15 s |
| 2 | 30 s |
| 3 | 60 s |
| 4 | 2 min |
| 5 | 4 min |
| 6+ | 5 min(除非设置 maxRetries) |
每次重试回合会写明具体失败,并指示模型重试失败动作而非从头重做已完成工作。重试计数只认 turn/end 且 reason.kind === 'error', deliberately 不计 agent/error,避免一次真实故障消耗两次额度。
Goal 复活(Goal revival)¶
reviveGoals: true(默认)时,插件通过 ctx.goals.resume(agent, ref) 重新武装失活的 Goal,由 goal round driver 继续计轮。不会复活 blocked 状态,也不会复活轮次预算已耗尽的 Goal。连续复活次数由 maxGoalRevives(默认 5)限制;Goal 真正开始新一轮后计数器会重置。每次复活会在聊天里公告。
重启恢复(Restart recovery)¶
dsh-update staged 安装重载或进程崩溃时,持久化日志可能停在 turn/start 而无 turn/end。启动后插件在 resumeWindowMs 窗口内扫描语料,对仍「未闭合 turn」的会话走与 Web GUI 相同的 resolveAgent 路径并排队 resume 回合:补齐 harness 的 interrupted 闭合、重组 preset/模型、让 goal round driver 接上;还可恢复关机时被取消的 inbox 消息、在提示中列出未结算的后台 job 与同 generation 的子 agent 会话,并对仍有轮次的 active goal 会话重新打开。
与 goal round driver 的关系:Goal 处于 active 且 armed 时,autocontinue 会 defer(queue skipped: an armed goal round driver owns the rounds),避免双份回合;driver 负责进度,本插件负责持久化与兜底。
安装与启用¶
插件以当前 dsh 进程权限运行,安装前请自行审阅源码与 MIT 许可证。peerDependencies 需与运行时 dsh -V 匹配,不匹配时插件管理器会拒绝安装并回滚 profile。
从 GitHub 安装(推荐)¶
dsh plugin --profile <profile> add github:kenjoe41/dsh-autocontinue
# 或固定 release
dsh plugin --profile <profile> add github:kenjoe41/dsh-autocontinue#v0.1.13
从 tarball 安装¶
README Quick start 中的示例(路径需换成你本机 pack 出的文件;版本号与 package.json 一致时为 0.1.13):
dsh plugin --profile web add /path/to/dsh-autocontinue-0.1.4.tgz
维护者本地打包示例:
pnpm pack --pack-destination /tmp
dsh plugin --profile <profile> add /tmp/dsh-autocontinue-<version>.tgz
注意:README 强调宜用 tarball 或带 shims 的 link,裸 link: 目录可能导致 @deepseek-ai/dsh-llm 解析失败。链接本仓库目录时:
dsh plugin --profile <profile> add /path/to/dsh-autocontinue
编辑在下次 reload 生效,无需重新 pack。
在会话里武装¶
/autocontinue on
Goal 会话默认自武装(goalSessions: true)。由 cron、headless、「被叫起」的 profile 可在 patch 里设 enabled: true,对该 profile 下每个会话生效。
典型用法¶
交互式会话¶
- 按上一节把插件装进目标 profile 并重载。
- 在需要长跑的会话中执行
/autocontinue on。 - 用
/autocontinue status查看 armed 状态、轮次、连续失败、等待中的退避、Goal 阶段与 revival 计数。 - 任务结束或要人工接管时执行
/autocontinue off;需要清零计数器时用/autocontinue reset。
无头 / cron profile¶
在 <profile>/cordis.patch.yml 中替换整块 config(patch 会整体替换 config,需写明要保留的键):
- id: autocontinue
config:
enabled: true
goalSessions: true
reviveGoals: true
maxGoalRevives: 5
maxRounds: 0
maxRetries: 0
idleDelayMs: 0
retryBaseDelayMs: 15000
retryMaxDelayMs: 300000
doneMarker: 'AUTOCONTINUE: DONE'
notices: true
idleDelayMs 对一次性 launcher 应保持 0:否则 agent 空闲且 inbox 为空时进程可能在 grace 定时器触发前就销毁插件树。
聊天里的可见性¶
默认 notices: true 时,武装、重试、复活会在 transcript 中以 [autocontinue] … 行出现;设 notices: false 可静音。调试可将 debug: true,决策轨迹写入 debugFile(默认 /tmp/dsh-autocontinue.log)。
配置要点¶
常用键(完整表见 README「Configuration」):
| 键 | 默认 | 含义摘要 |
|---|---|---|
enabled |
false |
对该 profile 下所有会话自动 armed。 |
goalSessions |
true |
有 Goal 的会话自动 armed。 |
maxRounds / maxRetries |
0 |
0 表示不限续跑轮次 / 不限失败重试。 |
resumeUnfinished |
true |
启动时恢复未闭合 turn 的会话。 |
resumeWindowMs |
86400000 |
只考虑此时间内修改过的日志。 |
resumeMax |
5 |
每次启动最多恢复几个会话。 |
适用场景与注意¶
适合:长时间无人值守的编码或 Goal 任务、网络不稳环境、需要 dsh-update 或崩溃后自动接上未完成的 turn、headless/cron 拉起的会话。
务必注意:
- 插件与 DSH 同权限,能驱动 agent 发回合、调用 Goal API;仅安装你信任的版本并阅读源码。
- 不会覆盖 Goal 的
blocked判定,也不会突破 Goal 轮次预算。 - 人工 Stop 会停止自动续跑;完成标记须与
doneMarker完全一致(默认AUTOCONTINUE: DONE)。 - 安装方式影响依赖解析;遵循 README「Hard-won notes」中的 tarball/link 建议,可减少 silent import 失败。
结尾¶
dsh-autocontinue 把「等人 continue、等网络恢复、等有人重新 arm Goal、等浏览器打开才能续跑」这几类可恢复停滞收进同一套工作流插件。需要时从社区目录或 GitHub 安装,在会话或 profile 里 armed,再配合 /autocontinue status 与可选的 debug 日志观察行为即可。
- 目录页:https://www.skillhub.cn/plugins/kenjoe41/dsh-autocontinue
- 仓库:https://github.com/kenjoe41/dsh-autocontinue