dsh-session-pause:在 DeepSeek Harness 中一键暂停与恢复模型活动

前言

在 DeepSeek Harness(DSH)里跑 Agent、子智能体或 Goal 时,模型调用、工具执行和定时任务可能同时进行。若只想暂时停住整台主机上的活动,或只停当前 Session 及其子 Session,常见做法是手动停进程或发消息打断——前者成本高,后者容易破坏进行中的轮次。下面介绍的 dsh-session-pause 是社区维护的工作流类插件,用 Web 按钮或斜杠命令在主机级或 Session 级暂停模型相关活动,恢复后从停住的位置继续,不取消已挂起的 Agent,也无需额外发送「继续」类消息。

这是什么

dsh-session-pause(GitHub:chilingling/dsh-session-pause)由维护者 chilingling 发布,分类为工作流。一句话定位:在 DSH 中支持主机范围或单个 Session(含其启动的子 Agent、Goal 轮次,以及由调度或 job 通知唤醒的 turn)暂停模型活动,并在恢复时从暂停点继续。

插件通过 bundle 的 cordis.patch.yml 挂载,默认将暂停状态写入 $DSH_HOME/session-pause.json。设计说明见仓库内 docs/design.md。

核心功能

两种暂停范围

  1. 主机级(Pause all):覆盖主机上所有 Agent。
  2. Session 级:覆盖当前 Session 及其作为 subagent 启动的 Session(在对应 Agent 仍存活的前提下)。

两类暂停独立:执行 Resume all 不会解除仍被单独暂停的 Session;恢复某个 Session 也不会解除主机级暂停。

暂停时实际拦在哪里

暂停覆盖某次操作时,会在三个扩展点等待恢复;若该操作被取消,等待会立即结束,停止按钮仍可用:

  • agent/pre-step:Agent 下一步之前等待,状态仍为 running。
  • llm/stream:模型调用到达 provider 之前等待(含 compaction、Session 标题等非 Agent step 的调用);未绑定 Session 的调用仅受主机级暂停影响。
  • agent/request-error:暂停期间失败的模型请求(如断网截断流)在恢复后重试,不 backoff,且不计入 dsh-llm-retry。

已在跑的模型流和工具会正常结束。暂停期间到达的消息、steering、调度投递和 job 通知会进入各 Agent 收件箱,恢复后再处理。

Web 客户端

  • 侧栏底部(Settings 上方,折叠时仅图标):Pause all / 暂停后变为 Resume all。
  • 主机暂停时,Session 标题下方出现状态 pill:开始时间、等待中的操作数、原因、Resume;失败的主机级暂停/恢复请求也会在此展示。
  • 编写区工具栏、模型选择器前:暂停当前 Session 的图标;暂停后变为播放图标以恢复。
  • 编写区上方条带:This session is paused,含时间、等待数、原因、Resume。

各界面通过 sessionPause/follow Remote 流与主机同步;命令、其他标签页或刷新前的暂停会即时一致。文案支持 zh 与 en。

斜杠命令

命令 作用
/pause-all [reason] 暂停整台主机;再次暂停保留原开始时间与原因
/resume-all 恢复所有被挂起的操作
/pause-session [reason] 暂停接收命令的 Session 及其启动的子 Agent
/resume-session 恢复接收命令的 Session
/pause-status 展示主机级暂停、各 Session 暂停及被挂起的操作

/pause-all、/resume-all、/pause-status 无论在哪条 Session 执行都作用于整机;命令输出为英文。

供其他插件调用的服务

其他插件可使用 ctx.sessionPause:pause({ source, reason? })、resume()、pauseSession(sessionId, { source, reason? })、resumeSession(sessionId)、status()、follow(signal)、waitForResume(signal, operation),以及事件 session-pause/changed。除 waitForResume 外,这些方法也作为 sessionPause 命名空间的 Remote 方法暴露(描述符在 src/host/remote.ts,需与服务方法同步变更)。

安装与启用

从 GitHub Release 安装(资料原文命令):

dsh plugin --profile web add github:chilingling/dsh-session-pause#v0.4.0

版本 0.4.0 需要 DeepSeek Harness 0.2.2-alpha.2 或更新的 0.2 系列。若使用 0.2.1,应安装 #v0.3.0。

安装时 pnpm 会通过 prepare 脚本构建插件,并在未授权时阻塞。首次失败时,将 pnpm 打印的 key 加入 profile 的 pnpm-workspace.yaml 的 allowBuilds 后重试;Web Plugins 页也可点 Allow these scripts and retry。

本地 checkout 开发(需已有 deepseek-harness 环境):

pnpm install && pnpm build
pnpm dsh plugin --profile web add /path/to/dsh-session-pause

修改代码后需重新 build 并重启 profile。

配置

字段 含义
stateFile 跨主机重启持久化暂停状态的 JSON 文件;省略则仅在当前进程内保持

插件写入状态文件版本 2,仍可读版本 1(仅主机级暂停)。非 JSON 或版本不匹配会导致加载失败并报告路径。

典型用法

  1. 临时让整机不再发起新的模型 step:侧栏 Pause all,或发送 /pause-all 维护窗口。
  2. 只停当前对话及其子 Agent:编写区暂停图标,或 /pause-session 先看日志。
  3. 排查挂起情况:/pause-status。
  4. 恢复:对应 Resume、Resume all,或 /resume-session、/resume-all。

注意:在新 Session 首条消息创建之前输入的斜杠命令会作为普通消息排队,不会执行;此时应使用侧栏按钮。

适用场景与注意

适合:需要在不杀进程的前提下冻结 DSH 上的模型活动;多标签页协作时统一暂停状态;Goal、子 Agent、调度唤醒的 turn 一并挂起后再继续。

已知限制(来自 README):

  • 主机在 Agent 等待 step 前退出时,该 step 已 claim 的消息会丢失;重启后 open turn 会被标为 interrupted,Goal 需 /goal resume。
  • 被挂起的 Agent 在会话与 Session 列表中仍显示为 running;以状态 pill 与编写区条带为准。
  • Session 暂停会留在状态文件中直至显式恢复,即使 Session 已删除;/pause-status 仍会列出。
  • 外部 subagent 提供方(ACP、Codex、Claude Code)在其他产品中运行,不会被本插件挂起。

插件与 DSH 主机在同一进程权限下运行,安装前请自行审阅源码与许可证(仓库以 README 为准)。DSH 生态强调「一切皆插件」;社区目录 skillhub.cn 为独立站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-session-pause 把主机级与 Session 级的模型活动暂停做成可持久、可同步的一键操作,并与 Agent step、LLM 流和错误重试链路对齐。需要安装命令与行为细节时,以仓库 README 为准。

  • 目录页:https://www.skillhub.cn/plugins/chilingling/dsh-session-pause
  • GitHub:https://github.com/chilingling/dsh-session-pause
羽毛球分组比赛记分
小程序二维码

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

小夜