前言¶
用 DeepSeek Harness(CLI 名 dsh)跑一轮稍长的 Agent 任务时,最常见的打断往往不是你主动点了停止,而是网络抖动、上游超时、5xx 或输出触到 token 上限。Web UI 里这一轮已经结束,会话日志停在失败处;要让模型接着干,习惯做法是自己再打一句「继续」发出去。任务一长,这件事就会反复出现。
DeepSeek Harness 的设计原则是「一切皆插件」:模型、工具、会话、UI 都可以在配置层替换,不必改核心源码。社区因此出现了一批独立插件目录,其中 deepseek-harness-plugin.com 是第三方收录站点,与 DeepSeek / 幻方没有官方从属关系,不能当成官方应用商店。本文介绍的 dsh-auto-continue 就列在该目录的「界面增强」分类里。
下面按目录详情页、GitHub 仓库 README、package.json 和 npm 页面交叉核对后整理:它是什么、会自动续哪些错误、怎么装、怎么配。
这是什么¶
dsh-auto-continue 是给 dsh web 用的 Web UI 插件,由 HsiangNianian 维护,许可证 MIT。npm 上的包名是 dsh-client-auto-continue,当前版本 0.6.0(2026-08-16 发布)。GitHub 仓库截至 2026-08-17 为 23 星;社区目录页同期仍显示 12 星,以仓库一手数据为准。
它要解决的问题很具体:当 Web GUI 里的请求因为非人为原因中断时,插件在浏览器里模拟用户输入「继续」并发送。这条消息会进入会话日志,对模型可见,效果和你自己点发送一样,中断的工作可以接着跑。
它不是 Agent 循环本身,也不改 Harness 核心。插件在浏览器端挂上额外的事件监听,再调用和「发送」按钮相同的 sessions.prompt。仓库 README 写明:它不碰文件、不碰凭据,也不访问 dsh 宿主以外的网络。
核心功能¶
仓库把恢复策略都做成可配置项,默认行为如下。
错误分类¶
打开分类(默认开启)后,插件只自动续临时性失败,例如网络错误、超时、5xx、429。下面这类会被当成永久性错误:跳过自动续跑,并可以发通知——
- HTTP 状态码 401 / 403
- code 或 message 命中认证、凭据 / API Key、余额 / 配额、模型不存在、上下文长度 / 超限等关键词
关掉分类后,符合触发条件的中断都会自动继续。认证失败、额度用尽这类问题,重试通常没有意义,默认把它们排除是合理的。
自适应退避¶
同一会话连续失败时,等待时间按「冷却 × 系数」递增。默认冷却 20 秒、系数 2,也就是 20s → 40s → 80s,上限默认 300000 ms(5 分钟)。失败尝试也计入冷却,避免对已经故障的上游连续打请求。
模板化「继续」文本¶
默认发送的就是「继续」。continueText 支持占位符,可以把失败上下文带进续跑消息,例如:
继续 ({tool}: {code})
可用占位符包括 {code}、{message}、{status}、{tool}(失败前最后一次工具调用)、{turn}、{errorCount}(连续失败次数,含本次)、{sessionTitle}、{elapsed}(距失败经过的时间,如 1m5s)。达到输出 token 上限时,使用另一套模板 continueTextMaxTokens,README 给的示例是「继续输出, 不要重复已生成的内容」。
幂等护栏¶
续跑前可以检查上一步工具调用,避免把「可能已经执行过」的操作再跑一遍:
- 结果未确认(回合在工具执行中途夭折,例如一次
git push不确定是否已经推上去):提示模型先确认状态,不要重复执行 - 工具已确认成功:说明已完成,请勿重复
- 工具失败:不加护栏,因为重试本来就是目的
两段护栏文本都可以改,支持 {tool} / {result} 占位符。
暂停、通知和统计¶
设置卡片里有全局「暂停自动继续」开关,打开后实时监听和启动扫描都立刻停掉。通知里还可以按会话暂停 1 小时,或点「立即续跑」(无视冷却和连续次数上限)。
卡片上还有今日统计:自动继续次数、恢复成功、继续后失败、永久性跳过、达上限停止,可按错误码看分布,并能一键清零。浏览器通知默认关闭,打开后会在自动继续成功、放弃或遇到永久性错误时提醒;首次使用时请求权限,拒绝后不再弹出。
监听哪些事件¶
插件在浏览器里额外打开两条 SSE:events.mux(会话事件)和 events.host(宿主事件)。宿主支持多消费者,不会挤掉内置运行时。它对下面几种结束状态作出反应:
| 事件 | 含义 |
|---|---|
turn/end → error |
回合失败(模型 / 网络 / 超时等) |
turn/end → interrupted |
宿主崩溃重启后留下的中断回合,由启动扫描恢复 |
turn/end → max-tokens |
达到输出 token 上限 |
host/agent-error |
没有回合位置的 Agent 失败;仅网络 / 超时类消息会自动续跑 |
下面这些情况不会自动继续:用户主动停止(aborted)、策略拒绝(blocked);实时流里的 interrupted(该标记只在宿主重载时由崩溃修复写入,孤儿回合走启动扫描,不走实时路径);宿主已经自行恢复的会话;正在运行或已有排队消息的会话;子代理会话;仍处于冷却期或已达到连续次数上限的会话。
检测到中断后,插件先等一段宽限期(默认 3 秒)。这段时间里如果宿主自己发起了新回合(turn/start),自动继续就会取消,然后再以 queue 模式调用 sessions.prompt。
页面加载或重连时,还会扫描最近更新的会话:最后一个回合在扫描时间窗内(默认 15 分钟)以非人为原因结束、之后又没有新的 turn/start 或用户消息,也会被续上。这能覆盖「浏览器关着、宿主却崩了」这类情况。多个标签页同时打开时,用 localStorage 互斥锁加上每会话冷却记录,保证只有一个标签页发送,避免两条「继续」叠在一起。
安装与启用¶
DSH 插件装进 profile。dsh web 对应的是 web profile。装完后需要再启动一次 dsh web。
社区目录页给出的安装命令原文如下,在 DeepSeek Harness 终端里执行即可:
dsh plugin add github:HsiangNianian/dsh-auto-continue
目录页同时提示:如需可复现安装,请固定 commit 哈希。当前 main 分支最新提交是 98181b0e5e0afd33ca89b314fc3957a2634602e4(将版本升到 0.6.0),写法是:
dsh plugin add github:HsiangNianian/dsh-auto-continue#98181b0e5e0afd33ca89b314fc3957a2634602e4
仓库 README 写得更完整:插件要进 web profile,并推荐优先走 npm(包名 dsh-client-auto-continue)。从 GitHub 默认分支安装会跟踪 main,适合跟最新改动;要相对稳定,用 npm。
# README 推荐:从 npm 安装
dsh plugin --profile web add dsh-client-auto-continue
dsh web
# 或直接从 GitHub 安装(构建产物已提交,不必本地 clone)
dsh plugin --profile web add github:HsiangNianian/dsh-auto-continue
dsh web
从仓库本地安装需要 Node.js ≥ 18,先 npm install 和 npm run build,再用 dsh plugin --profile web add link:$(pwd)。包自带 cordis.patch.yml,插件行会自动注册。
验证配置层是否挂上:
dsh --profile web --dump-config | grep auto-continue
浏览器控制台(Ctrl/Cmd+Shift+I)里应出现类似 [auto-continue] 已启动(文本="继续", …) 的日志。之后每次检测到中断和自动发送都会再打日志。
卸载(npm / 仓库安装):
dsh plugin --profile web remove dsh-client-auto-continue
dsh web
典型用法¶
装好并打开 dsh web 之后,插件按默认值工作:中断后等 3 秒,若宿主没有自行恢复,就发送「继续」;同一会话最多连续自动续 3 次;只续临时性错误。
需要改行为时,打开 设置 → 插件,找到 dsh-client-auto-continue 配置卡片。卡片改动是暂存式的,点「保存」才写入磁盘。也可以直接改 ~/.dsh/settings.yaml 里的 auto-continue 段,文件会被监听,保存后即时生效;已经打开的页面如果没反应,重启 dsh web。下面是 README 给出的默认配置,未填写的字段会回落到这些值:
auto-continue:
paused: false
continueText: '继续'
continueTextMaxTokens: '继续'
guardTools: true
guardPendingText: '(上一步工具「{tool}」可能未完成, 先确认状态再继续, 不要重复执行)'
guardDoneText: '(上一步工具「{tool}」已完成, 结果: {result}; 不要重复执行, 直接继续)'
graceMs: 3000
cooldownMs: 20000
maxConsecutive: 3
scanOnBoot: true
scanLimit: 8
freshMs: 900000
reconnectScanDelayMs: 5000
reconnectBackoffMs: 3000
verbose: true
classify: true
backoffFactor: 2
backoffMaxMs: 300000
notify: false
几个常用改法:
- 希望 token 超限后续写、且不要重复已生成内容,把
continueTextMaxTokens改成 README 示例那种提示。 - 希望续跑消息带上失败原因,把
continueText改成继续 ({tool}: {code})。 - 临时关掉自动续跑,把
paused设为true,或在设置卡片里打开「暂停自动继续」。 - 需要桌面提醒时打开
notify。
仓库 README 还提到一项 DSH 0.1.0-rc.6 的已知限制:Web UI 设置区目前只暴露 @deepseek-ai/dsh-host-apiproxy 包里硬编码白名单中的命名空间。在上游改成 settings.register() 驱动之前,如果卡片不出现,可以执行一次幂等补丁,让所有插件注册的命名空间都可见:
npx --yes --package dsh-client-auto-continue patch-expose
dsh web
自动续跑引擎本身不依赖这个补丁,只影响 GUI 设置区是否显示。补丁打不上时,直接改 ~/.dsh/settings.yaml 即可。重新安装 dsh 后需要再跑一次该脚本。
适用场景与注意事项¶
适合已经在用 dsh web、任务经常被网络或超时打断、又不想每次手动打「继续」的人。它只作用于 Web UI 会话,不会去续子代理,也不会在用户主动停止或策略拦截时强行重试。
使用前注意这几件事:
- 权限与来源。插件以当前 dsh 进程的权限运行,安装时可能执行代码。安装前应检查源代码仓库和许可证。本文核对过的许可证是 MIT,源码在 HsiangNianian/dsh-auto-continue。社区目录页也写了同一条警告。
- 它不会替你判断任务该不该继续。分类能挡住认证、余额、模型不存在这类永久性错误,但临时性失败被续上之后,模型仍可能重复或接错上下文。幂等护栏只是在续跑文本里提示,不是事务回滚。
- 连续上限。默认同一会话连续自动续 3 次就会停,直到你介入或出现一次成功回合。上游持续故障时,应先查网络和 API,而不是把
maxConsecutive调到很大。 - 设置卡片可能看不到。若你用的是 0.1.0-rc.6 附近的 dsh,先按上一节补丁处理,或改 yaml。
- 卸载后配置段落会留在
~/.dsh/settings.yaml,仓库说明这是无害的,要清理需手动删除。
小结¶
dsh-auto-continue 做的事情很窄:在 dsh web 里把「网络等原因把一轮打断、人再补一句继续」自动化,并配上错误分类、退避、护栏和启动扫描。它不替代你对任务对错的判断,只减少重复的手动发送。
目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-auto-continue/
GitHub:https://github.com/HsiangNianian/dsh-auto-continue
npm:https://www.npmjs.com/package/dsh-client-auto-continue