前言¶
在 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。
核心功能¶
两种暂停范围¶
- 主机级(Pause all):覆盖主机上所有 Agent。
- 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 或版本不匹配会导致加载失败并报告路径。
典型用法¶
- 临时让整机不再发起新的模型 step:侧栏 Pause all,或发送
/pause-all 维护窗口。 - 只停当前对话及其子 Agent:编写区暂停图标,或
/pause-session 先看日志。 - 排查挂起情况:
/pause-status。 - 恢复:对应 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