dsh-pause-resume:会话头一键暂停与恢复 DSH 运行中的工作

前言

在 DeepSeek Harness(DSH)里同时开着多个会话、Goal 或后台任务时,常见做法是逐个窗口去停回合,或在进程重启后手动找会话续写。这些做法分散、容易漏项,且崩溃后很难知道「上次到底跑到哪」。dsh-pause-resume 把暂停与恢复收进会话头同一个按钮:按一次写下计划并停掉当前进程里该停的一切,重启后再按一次按 README 描述的步骤把可恢复项接回来。

这是什么

dsh-pause-resume 由维护者 regrevia 发布,在 SkillHub 上归类为工作流插件。定位用 README 里的一句话概括:DeepSeek Harness 会话头上的一个按钮——停掉正在跑的内容、把小型计划写到磁盘,重启后同一按钮把该接的工作接回来。

插件以当前 DSH Host 进程权限运行;安装前请自行阅读 GitHub 源码 与 MIT 许可证。当前资料中的版本为 v0.6.11,要求 dsh >= 0.2.0-rc.1(见 package.json 的 engines 字段)。

核心功能

会话头按钮与四种状态

按钮图标即唯一状态指示,没有计数器、面板、徽章或 toast。README 约定:

  • ⏸ — 有工作正在运行,按下可停止。
  • ▶ — 已停止,或上次进程留下待恢复项,按下可恢复。
  • ↻ — 某回合自行结束(非手动暂停),按下可继续未完成部分。
  • ⏸(变暗)— 无需停止、恢复或继续。

需要人查看结果时,tooltip 会用一句话说明,图标含义不变。

暂停与恢复覆盖哪些工作

下面表格来自 README 的「What it restores」,概括暂停与恢复行为:

工作类型 暂停时 恢复时
有未完成回合的会话 取消回合并记录会话 挂载会话,再发一条可见的续写消息
已 armed 的 Goal 以当时 revision 暂停 调用 goals.resume 用同一 revision;Goal 驱动自行继续
仅承载该 Goal 的会话 记录,不额外停止 挂载后由恢复的 Goal 接管
运行中的后台 job 终止并记录 仅记录:job 是 live 进程不可回放,续写消息会点名并在仍需要时由回合重启
正常结束的会话 不改动 不改动,且从不写入计划
已结束 / 终端会话 不改动 不改动
日程(schedule) 不改动 不改动

日程不会被暂停:schedule 服务没有 disable,只有 delete;插件不会为暂停而删日程。暂停期间若日程触发仍会开回合,但若磁盘上已有待恢复计划,按钮仍显示 ▶,应先完成恢复。

恢复的三步逻辑

恢复并不声称「工作从未中断」,对每个条目 README 描述为三步:

  1. Mount:经 Harness resume 路径挂载已停会话,保留 agent preset;已挂载则跳过。
  2. Continue:仅当暂停时确实取消了回合时,通过 sessionController.prompt 发送一条普通用户消息续写;request id 由计划与会话派生,重复恢复具备幂等性,消息出现在 transcript 中。
  3. Re-arm Goal:用暂停时的 revision 重新 armed;若暂停期间 Goal 已被修改,则跳过该项(skipped)。

子 agent 会话无法由该流程单独挂载,需由父会话处理;对应行会作为 attention 报告一次,不会当作失败反复重试而长期占住计划。

崩溃恢复(非手动暂停)

手动按下会写 snapshot;崩溃则依赖心跳文件 running.json 记录当前有 open turn 的会话及写入进程 id。替换心跳前,上一进程记录会转成 pending.json 中的 crash plan,因此多次重启仍可能自动出现 ▶,无需再按暂停。

crash 记录弱于手动暂停:只能证明会话存在,不能证明重启后 turn 仍 open。恢复时会挂载并探测 live turn;仍 running 则 continue,idle 则不 prompt。无法读清状态的行记为 unknown,计划保留、按钮仍为 ▶,下次再试。子 agent、正常结束会话等规则与 README「Crash, not just a press」一节一致。

自行停止的回合(↻)

提供商报错重试耗尽、或模型 hit max-tokens 等情况下,回合会在无人按暂停时结束。这类情况重启 alone 无法修复,插件用独立账本 continue.json,按钮显示 ↻ 而非 ▶。候选条件包括:最新 turn 以 error 或 max-tokens 结束且之后无新 turn;根会话、非 subagent;且结束原因不是 completed、aborted、interrupted、blocked。

按下后按可见行批量续写(README 写为 two at a time),最多 40 行;失败行留在账本中等待下次按 ↻。在新会话里发消息会「接管」并清除等待行。续写仅在按下后发生,不会在插件加载、定时器或上一批失败后自动触发。

渐进式恢复(默认关闭)

批量恢复多个长会话会同时打出多条上游模型请求。restoreProgressive 默认为 false,走普通恢复路径。在共享网关、自建代理容量有限或批量恢复触发限流/超时时,可打开渐进恢复:按 lineage 深度分波启动,并可选注册 llm/stream 中间件做请求池(容量、冷却等见配置表)。开关在按下恢复时读取;恢复进行中按暂停会立即中断当前批次并写回计划。

可选配置项(均可省略):

Key Default Meaning
restoreProgressive false 启用分阶段恢复
restoreCapacity 1 恢复开始时允许的模型并发
restoreMaxCapacity 2 健康门限可提高的上限
restoreCooldownMs 40000 连续失败后的冷却
restoreStartGapMs 3000 恢复启动间隔(加 jitter)

/state 在存在计划时会报告 restore 下的 progressive 与队列等字段;按钮仍只显示图标。

磁盘状态

状态目录为 $DSH_HOME/pause-resume/,包括 snapshot.json、pending.json、running.json、continue.json 等;写入采用 temp + fsync + rename,不放在插件包内。

安装与启用

README 给出的安装方式如下。也可在 Harness 插件管理器中用包名安装 bundle。

plugin_manager install_bundle dsh-pause-resume

SkillHub 目录页 提供「发送给 DeepSeek Harness 安装」入口(社区站点,与 DeepSeek / 幻方无官方从属关系)。SkillHub 与 package.json 均标注当前版本 v0.6.11。

配置项全部可选;插件不持有凭证。远程访问 Host 需显式配置 allowRemote,默认仅本地同源请求且需插件 header。

典型用法

  1. 在 DSH Web 会话头找到 pause-resume 按钮。有任务在跑时图标为 ⏸。
  2. 需要整体停下当前 Host 上可停的 turn、Goal 与 job 时,按 ⏸。插件先把计划落盘,再执行取消与暂停(README 保证:计划写失败则不会停任何东西)。
  3. 重启 DSH 或进程崩溃后,若图标为 ▶,按一次完成恢复;查看 transcript 中的续写消息与 tooltip 摘要。
  4. 若图标为 ↻,表示有回合自行以 error / max-tokens 等结束,按 ↻ 继续可见行;auth、quota 等不可重试错误会标为 blocking,仍会在列表中显示。
  5. 批量恢复遇网关限流时,在 Host 插件配置中设置 restoreProgressive: true 及相关容量项,再按 ▶ 恢复。

适用场景与注意

适合:需要在维护、升级或重启 Host 前一次性停掉多路 Agent 工作,并在重启后按同一计划恢复会话续写、Goal 与 job 记录;希望在崩溃后依靠 running.json / pending.json 自动出现恢复入口;需要单独处理「非暂停导致的 turn 中断」时用 ↻ 账本。

注意:

  • 后台 job 恢复时是记录 + 由续写回合按需重启,不是回放原进程。
  • Schedule 不会被暂停;暂停窗口内触发的 schedule 仍可能产生新回合。
  • Subagent 会话需通过父会话 attention,不能当作普通会话 mount。
  • 插件路由默认同源 + 插件 header;allowRemote 需主动开启。
  • 安装与启用前请审查源码与 MIT 许可证;插件能力受当前 DSH 版本与 Host 模型栈约束,README 对网关并发上限等边界有诚实说明。

结尾

dsh-pause-resume 把「停一切」和「接回来」收敛到会话头一个按钮,用手动计划、崩溃心跳与 continue.json 三条线区分暂停、崩溃与自行中断,恢复步骤在 transcript 中可见、可重试。目录与说明见 SkillHub:regrevia/dsh-pause-resume,源码与完整 README 见 GitHub:regrevia/dsh-pause-resume。

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

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

小夜