前言¶
用 dsh web 跑长任务时,网络抖动、上游超时、输出 token 触顶,都会让当前回合突然停住。常见做法是盯着界面,等错误出现后手动输入「继续」再点发送。任务一多,这条链路很容易断在人为反应上。
下面介绍 dsh-auto-continue(npm 包名 dsh-client-auto-continue)。它在 DSH Web UI 里监听会话事件;当回合因非人为原因结束时,按你配置的文本自动走与「发送」按钮相同的 agent.followup 队列,把中断的任务接回去。自 0.8.0 起,引擎跑在宿主进程内,单实例值守,浏览器标签全关也能扫描恢复,多标签也不会重复发送。
这是什么¶
dsh-auto-continue 是 DeepSeek Harness(DSH)的 Web UI 插件,由 HsiangNianian 维护,在 SkillHub 社区目录归类为「工作流」。GitHub 仓库约 37 stars、2 forks,当前发布版本 0.8.1,MIT 许可证。
它解决的核心问题很直接:把「发现中断 → 等待宽限 → 发送继续」这条恢复链路自动化,并在错误分类、退避、幂等、循环检测等边界上提供可配置策略,避免盲目重试或重复执行工具。
核心功能¶
监听哪些中断¶
插件订阅宿主进程内的会话事件流,对以下情况作出反应:
| 事件 | 含义 |
|---|---|
turn/end → error |
回合失败(模型 / 网络 / 超时等) |
turn/end → interrupted |
宿主崩溃重启后遗留的中断回合(由启动扫描恢复) |
turn/end → max-tokens |
达到输出 token 上限 |
host/agent-error |
无回合位置的 Agent 失败(仅网络/超时类消息自动续跑) |
以下情况不会自动继续:用户主动停止(aborted)、策略拒绝(blocked)、正在运行或已有排队消息的会话、子代理会话,以及处于冷却期或连续次数上限内的会话。实时流里的 interrupted 也不走自动续跑路径,孤儿回合由宿主启动时的扫描接手。
智能恢复策略¶
上述能力均可在设置卡片中开关或调参:
- 错误分类 — 临时性错误(网络、超时、5xx、429 等)自动续跑;永久性错误(401/403,或命中认证、API Key、余额/配额、模型不存在、上下文超限等关键词)跳过并通知。关闭分类后则全部自动继续。
- 自适应退避 — 连续失败时等待递增(冷却 × 系数,默认 20s → 40s → 80s…),有上限,避免对故障上游持续重试。
- 模板化继续文本 —
continueText支持{code}、{message}、{status}、{tool}、{turn}、{errorCount}、{sessionTitle}、{elapsed}占位符;max-tokens场景可用单独的continueTextMaxTokens模板。 - 幂等护栏 — 续跑前检查上一步工具调用:结果未确认时提示先核对状态、勿重复执行;已确认成功时说明结果、勿重跑;工具失败则不加护栏。
- 循环守卫 — 监视运行中的回合:相同消息连续重复、短时间内大量短句且无工具调用、同一工具同参数同结果反复调用,会取消当前回合并用可配置文本重启。
- 暂停与通知 — 全局「暂停自动继续」立即停掉实时与扫描;通知带「立即续跑」(无视冷却、上限与暂停)和「暂停该会话 1 小时」按钮。
- 统计面板 — 展示今日自动继续、恢复成功、继续后失败、永久性跳过、达上限停止、循环打断等计数,按错误码分组,可一键清零。
工作流程¶
检测到中断后,引擎先等待宽限期(默认 3 秒)。若期间宿主自行开启新回合(turn/start),自动继续取消;否则经 agent.followup 发送配置文本,与手动点发送等价。
宿主启动或重连时,还会扫描存活会话:最后一个回合在扫描时间窗内(默认 15 分钟)以非人为原因结束、且其后没有新回合或用户消息的,会被自动续跑。例如浏览器关闭期间宿主崩溃,agent-loop 恢复会话后引擎可接着接手。
安装与启用¶
DSH 插件安装进 profile(dsh web 对应 web profile)。要求 DSH ≥ 0.1.0-rc.7;rc.6 及更早版本会因 settings.plugin.item 槽位不兼容而加载失败,需先升级 DSH。
推荐从 npm 安装:
dsh plugin --profile web add dsh-client-auto-continue
dsh web
也可直接从 GitHub 默认分支安装(跟踪 main,适合尝鲜;稳定性首选 npm):
dsh plugin --profile web add github:HsiangNianian/dsh-auto-continue
dsh web
安装后重启 dsh web。验证配置是否挂载:
dsh --profile web --dump-config | grep auto-continue
浏览器控制台应出现 [auto-continue] 已启动 日志;每次检测中断与自动发送也会打日志。
卸载:
dsh plugin --profile web remove dsh-client-auto-continue
dsh web
典型用法¶
图形界面配置¶
打开 设置 → 插件,找到 dsh-client-auto-continue 配置卡片。修改是暂存式的,点「保存」后写入 ~/.dsh/settings.yaml 的 auto-continue 段落,宿主会监听文件变更并即时生效。
默认继续文本就是 继续,多数场景开箱可用。若希望续跑消息携带失败上下文,可改 continueText,例如:
继续 ({tool}: {code})
达到输出 token 上限时,可单独配置 continueTextMaxTokens,例如:
继续输出, 不要重复已生成的内容
直接编辑配置文件¶
也可跳过 GUI,编辑 ~/.dsh/settings.yaml:
auto-continue:
paused: false
continueText: '继续'
continueTextMaxTokens: '继续'
guardTools: true
graceMs: 3000
cooldownMs: 20000
maxConsecutive: 3
scanOnBoot: true
freshMs: 900000
classify: true
backoffFactor: 2
backoffMaxMs: 300000
loopGuard: true
notify: false
常用调参方向:把 cooldownMs 和 maxConsecutive 调高可降低频繁续跑;开启 notify 可在自动继续、放弃或遇到永久性错误时弹出浏览器通知(首次会请求权限)。
适用场景与注意¶
适合谁: 长时间用 dsh web 跑 Agent 任务、且经常遇到网络或上游临时故障的开发者。对 max-tokens 截断、宿主崩溃后遗留的中断回合,也能减少手动盯屏。
使用前请注意:
- 插件引擎跑在 dsh 宿主进程内,自动发送的
sessions.prompt与手动点发送权限相同。安装前应阅读源码并确认 MIT 许可证,理解它会以当前 dsh 进程权限代你发消息。 - 错误分类能挡掉认证、余额等永久性失败,但关闭分类后会对所有错误续跑;幂等护栏和循环守卫建议保持开启,尤其在涉及
git push等可能部分成功的工具时。 - 全局暂停或会话级暂停生效时,只有通知里的「立即续跑」会破例发送一次;需要人工介入的回合,用暂停比反复自动继续更合适。
- SkillHub(skillhub.cn)是 DSH 插件社区目录,与 DeepSeek / 幻方无官方从属关系;DSH 本身遵循「一切皆插件」的扩展思路,本插件是社区维护的工作流类扩展。
链接¶
- SkillHub 目录页:skillhub.cn/plugins/HsiangNianian/dsh-auto-continue
- GitHub 仓库:github.com/HsiangNianian/dsh-auto-continue
- npm 包:dsh-client-auto-continue
经过上面的步骤,中断恢复从「盯着界面手动续」变成可配置、可统计、可暂停的自动化流程;对依赖 dsh web 长时间跑任务的场景,能少掉不少无效等待。