dsh-auto-continue:DSH Web UI 中断后自动发送「继续」

前言

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/enderror 回合失败(模型 / 网络 / 超时等)
turn/endinterrupted 宿主崩溃重启后遗留的中断回合(由启动扫描恢复)
turn/endmax-tokens 达到输出 token 上限
host/agent-error 无回合位置的 Agent 失败(仅网络/超时类消息自动续跑)

以下情况不会自动继续:用户主动停止(aborted)、策略拒绝(blocked)、正在运行或已有排队消息的会话、子代理会话,以及处于冷却期或连续次数上限内的会话。实时流里的 interrupted 也不走自动续跑路径,孤儿回合由宿主启动时的扫描接手。

智能恢复策略

上述能力均可在设置卡片中开关或调参:

  1. 错误分类 — 临时性错误(网络、超时、5xx、429 等)自动续跑;永久性错误(401/403,或命中认证、API Key、余额/配额、模型不存在、上下文超限等关键词)跳过并通知。关闭分类后则全部自动继续。
  2. 自适应退避 — 连续失败时等待递增(冷却 × 系数,默认 20s → 40s → 80s…),有上限,避免对故障上游持续重试。
  3. 模板化继续文本continueText 支持 {code}{message}{status}{tool}{turn}{errorCount}{sessionTitle}{elapsed} 占位符;max-tokens 场景可用单独的 continueTextMaxTokens 模板。
  4. 幂等护栏 — 续跑前检查上一步工具调用:结果未确认时提示先核对状态、勿重复执行;已确认成功时说明结果、勿重跑;工具失败则不加护栏。
  5. 循环守卫 — 监视运行中的回合:相同消息连续重复、短时间内大量短句且无工具调用、同一工具同参数同结果反复调用,会取消当前回合并用可配置文本重启。
  6. 暂停与通知 — 全局「暂停自动继续」立即停掉实时与扫描;通知带「立即续跑」(无视冷却、上限与暂停)和「暂停该会话 1 小时」按钮。
  7. 统计面板 — 展示今日自动继续、恢复成功、继续后失败、永久性跳过、达上限停止、循环打断等计数,按错误码分组,可一键清零。

工作流程

检测到中断后,引擎先等待宽限期(默认 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.yamlauto-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

常用调参方向:把 cooldownMsmaxConsecutive 调高可降低频繁续跑;开启 notify 可在自动继续、放弃或遇到永久性错误时弹出浏览器通知(首次会请求权限)。

适用场景与注意

适合谁: 长时间用 dsh web 跑 Agent 任务、且经常遇到网络或上游临时故障的开发者。对 max-tokens 截断、宿主崩溃后遗留的中断回合,也能减少手动盯屏。

使用前请注意:

  1. 插件引擎跑在 dsh 宿主进程内,自动发送的 sessions.prompt 与手动点发送权限相同。安装前应阅读源码并确认 MIT 许可证,理解它会以当前 dsh 进程权限代你发消息。
  2. 错误分类能挡掉认证、余额等永久性失败,但关闭分类后会对所有错误续跑;幂等护栏和循环守卫建议保持开启,尤其在涉及 git push 等可能部分成功的工具时。
  3. 全局暂停或会话级暂停生效时,只有通知里的「立即续跑」会破例发送一次;需要人工介入的回合,用暂停比反复自动继续更合适。
  4. SkillHub(skillhub.cn)是 DSH 插件社区目录,与 DeepSeek / 幻方无官方从属关系;DSH 本身遵循「一切皆插件」的扩展思路,本插件是社区维护的工作流类扩展。

链接

经过上面的步骤,中断恢复从「盯着界面手动续」变成可配置、可统计、可暂停的自动化流程;对依赖 dsh web 长时间跑任务的场景,能少掉不少无效等待。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜