前言¶
在 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