前言¶
在 DeepSeek Harness(DSH)裏委派外部 ACP(Agent Client Protocol)子代理時,官方 @deepseek-ai/dsh-subagent-acp 的常見路徑是:每輪啓動新進程、執行一次、結束即銷燬。遠端會話即便在對方側已落盤(例如在 kiro-cli 上實測 session/load 可用),DSH 側也不會複用同一會話句柄繼續聊。若你的任務需要模型與同一個外部 ACP agent 跨多輪協作、進程異常退出後仍能接上上下文,就需要在「一次性委派」之上再疊一層持久化與會話重連邏輯。
下面介紹社區插件 dsh-acp-resume(維護者 Tureen,GitHub 倉庫 Tureen/dsh-acp-resume)。它是官方 ACP 後端的獨立兄弟包:保留與官方一致的一次性(one-shot)委派行爲,並額外提供持久會話池、五個模型工具,以及右側持久會話面板;進程死後可通過 session/load 按原會話號與工作目錄重連。分類上屬於 DSH 社區目錄中的「工作流」類插件。
插件以當前 DSH 進程權限運行子 agent 可執行文件;安裝前請自行查閱源碼與 MIT 許可證,並覈對 command 指向的二進制是否可信。
這是什麼¶
dsh-acp-resume 是 DeepSeek Harness 的可續聊 ACP 子代理後端。在架構上與官方包完全隔離並存:一側註冊名爲 acp-resume 的 one-shot provider(行爲對齊官方 subagent-acp),另一側把持久會話池與模型工具掛到 ctx.tools(不經 ctx.subagents)。
實現上使用標準 ACP 方法;README 寫明目前只在 kiro-cli 上做過實測。會話中途插話依賴 kiro 專屬擴展 _session/steer(對應工具 acp_chat_steer);換用其他 ACP agent 時可通過配置 command 指向其可執行文件,若對方不認 kiro 的 --agent-engine 旗標,可將 agentEngine 設爲 none。package.json 中版本爲 0.1.18;README 亦標註實現進度與已知限制(完整 kiro-cli 冒煙劇本尚未全部走完,部分行爲由 mock 服務器測試覆蓋)。
社區目錄頁:https://www.skillhub.cn/plugins/Tureen/dsh-acp-resume(獨立站點,與 DeepSeek / 幻方無官方從屬關係)。
核心功能¶
與會話生命週期相關的動機¶
相對官方「每輪新進程、結束即毀」的模式,本插件補上三層能力:
- 會話號與輪次落盤:外部 agent 的會話號寫在
$DSH_HOME/storages/acp-resume/registry.json;每會話的輪次記錄(消息與回答明文)在turns/<chatId>.jsonl,保留最近 200 條,供面板詳情查看,刪除會話時一併刪除。 - 進程空閒保活與超時釋放:會話進程在空閒超時後釋放,但會話記錄保留。
- 自動重連:下次對話時重新 spawn →
initialize→session/load(原會話號 + 原 cwd)→ 繼續;遠端拒絕 load 時降級爲新會話。若同一 chat 在內存中連續 3 輪error,下一次 send 會跳過 load 而新開會話,並以短語remote session failed repeatedly, started fresh告知(該計數僅內存保存,應用重啓後重新累計)。
模型工具(五個)¶
| 工具 | 用途 |
|---|---|
acp_chat_start |
建立持久會話,返回會話句柄 chatId |
acp_chat_send |
向指定會話發消息;進程死後自動重連恢復上下文。宿主裝有 jobs 服務時立即返回後臺任務 id,回答流式寫入該任務(不要對運行中任務 wait 硬等);無 jobs 服務時等待並返回最終回答 |
acp_chat_list |
列出活躍與持久化會話 |
acp_chat_close |
釋放會話進程(記錄保留,可再連;purge 同時刪記錄) |
acp_chat_steer |
給在途輪插話;agent 不支持 _session/steer 時報錯;要立即中止可用 job_kill / acp_chat_close |
此外提供持久會話面板(右側欄):按會話聚合狀態、輪數、摘要,支持釋放與刪除;點卡片可查看每輪問答、結局與重連事件(設計見倉庫內 PANEL-DESIGN.md)。
配置要點¶
掛載方式二選一:啓用 bundle 時在 profile 的 cordis.patch.yml 寫頂層同 id 覆蓋;不啓用 bundle 時用 - insert: 手動接線。勿 bundle 與 profile insert 雙掛,否則會 DUPLICATE_PROVIDER。
手動接線時 provider id 爲 subagent-acp-resume,常用字段包括:
command(必填):子 agent 可執行文件路徑args:默認[],kiro 配方爲[acp]agentEngine:默認v3;none表示不追加--agent-engineenableChatTools:默認true;false時只註冊 one-shot provideridleTimeoutMs:默認600000(空閒多久釋放進程)registryPath:默認空串即使用$DSH_HOME/storages/acp-resume/registry.json
自帶 bundle 對 kiro-cli 默認 permission: allow;手動 insert 且省略 permission 時默認爲保守的 reject。
安裝與啓用¶
環境要求(來自 README 與 package.json):
- DSH
>=0.2.2-rc.1 - Node
>= 24
主路徑:從 npm 安裝
dsh plugin --profile <name> add dsh-acp-resume
<name> 爲 profile 名(DSH App 默認 profile 目錄示例爲 ~/.dsh/profiles/desktop/)。安裝後包出現在該 profile 的 dsh.profile.bundles 中,重啓 DSH 生效。升級:dsh plugin --profile <name> add dsh-acp-resume@<版本>;卸載:dsh plugin --profile <name> remove dsh-acp-resume。
若安裝報 ERR_PNPM_TARBALL_EXTRACT 或校驗和錯誤,README 建議顯式釘版本:dsh plugin --profile <name> add dsh-acp-resume@<版本>。
實驗性 Discover 安裝:在插件頁「實驗性插件」下打開自定義插件索引,在「發現」頁籤添加索引源 https://tureen.github.io/dsh-acp-resume/index.json,在卡片上選擇安裝並確認版本與來源後重啓 DSH。
不支持 github: 方式安裝:倉庫不帶可開箱的 prepare,僅從 GitHub 裝到的多爲源碼,加載會失敗;請用 npm 或本地 pnpm pack 產出的 tgz。
典型用法¶
默認 kiro-cli(bundle 已啓用)¶
只要 kiro-cli 在 PATH 中,自帶 bundle 已使用 command: kiro-cli 與 args: [acp],一般無需額外覆蓋。
kiro-cli 不在 PATH 時,在 profile 頂層覆蓋路徑:
- id: subagent-acp-resume
name: 'dsh-acp-resume'
config:
command: /absolute/path/to/kiro-cli
args: [acp]
換用其他 ACP agent¶
覆蓋可執行文件與參數;不認 kiro 引擎旗標時關閉追加,權限可改爲逐次詢問:
- id: subagent-acp-resume
name: 'dsh-acp-resume'
config:
command: /absolute/path/to/other-acp-agent
args: [acp]
agentEngine: 'none'
permission: ask
模型側典型流程(名稱可由 toolPrefix 調整,默認前綴 acp_chat_):
- 調用
acp_chat_start拿到chatId - 用
acp_chat_send向該會話發送任務;長任務在裝有@deepseek-ai/dsh-jobs-local等 jobs 能力時走後臺,完成後用不帶wait的job_output讀取,避免對運行中 acp-chat 任務job_output wait:true頂滿宿主時限(默認allowChatJobWait: false會攔截對運行中任務的硬等) - 需要查看或清理時用
acp_chat_list、acp_chat_close;在 kiro 上且存在在途輪時,可用acp_chat_steer排隊插話
適用場景與注意¶
更適合誰
- 已在 DSH 中使用或計劃使用外部 ACP agent(尤其 kiro-cli),且希望同一會話多輪協作、進程退出後仍能 session/load 恢復的開發者。
- 需要把持久 ACP 會話暴露給主模型一組明確工具(start/send/list/close/steer),並在 UI 面板裏觀察會話狀態與歷史輪次的用戶。
務必留意的限制
- 真機 kiro-cli 端到端冒煙(建會話 → 多輪 → 殺進程 → 重連 → 空閒釋放 → 再連)README 寫明尚未全部走完;其他 ACP agent 未實測。
acp_chat_steer依賴 kiro 私有擴展,其他 agent 不支持時會明確報錯。- 後臺任務模式依賴宿主同時裝有 jobs 相關能力(README 截斷處提及
@deepseek-ai/dsh-jobs-local);否則acp_chat_send同步等待返回。 - 插件執行你配置的
command及子進程行爲,權限策略由permission控制;生產環境建議先讀 DESIGN.md、DECISIONS.md 與實現計劃 IMPLEMENTATION-PLAN.md。
結尾¶
dsh-acp-resume 在 DSH「一切皆插件」的生態裏,針對「官方 ACP 子代理一次性進程」的缺口,用持久會話池、session/load 重連和五個聊天工具,把外部 ACP agent 變成可續聊的後端;與官方包隔離並存,默認路徑面向 kiro-cli。若你的工作流裏有多輪委派、進程保活與重連需求,可先按上文安裝命令接入,再結合 profile 覆蓋調整 agent 路徑與權限。