前言¶
在 DeepSeek Harness(DSH)裏跑工作流時,子 Agent 會話可能被中斷、報錯或未正常結束,日誌仍留在當前項目裏。常見做法是直接清理或忽略。但若想在不重放完整對話、不打開調試器的前提下,快速弄清「它最後卡在哪、說了什麼」,缺少一個輕量、只讀的入口。
dsh-seance 面向這一環節:從已終止的子 Agent 會話日誌裏提取一小撮碎片,聚合成一個只能依據這些碎片回答的臨時「幽靈」,在對話框裏最多問幾個問題,關閉即銷燬。它不是調試工具,不是可觀測性面板,也不是會話清理器。
這是什麼¶
- 插件名稱:
dsh-seance(GitHub:edwardyh/dsh-seance,維護者 edwardyh) - 分類:工作流
- 環境要求:DeepSeek Harness
>=0.2.2-rc.1(README 註明當前僅在0.2.2-rc.1驗證過) - 許可證:MIT
一句話定位:在刪除或歸檔之前,用只讀碎片做一次有限問答,而不是把子 Agent 重新拉起來執行工具。
核心功能¶
入口與執行流程¶
命令面板中唯一的命令爲 /dsh-seance.summon,顯示爲「招魂」,也可直接輸入該命令執行。
經過上面的步驟,插件會:
- 通過
ctx.sessionQuery.filterSessions查詢當前工作目錄下的會話,篩出live: false、parentSession != null且日誌仍可讀取的候選。 - 沒有候選時提示「沒有可招魂的殘留會話」。
- 有候選時,在臨時對話框列出:子 Agent 標題(或最後一條
user/message的截斷摘要)、結束原因;選擇後提取碎片、創建幽靈並開始有限對話;對話框關閉即銷燬幽靈。
命令註冊在客戶端命令面板(ctx.commandUi 的 action 類型),因此不會產生宿主 command/run、command/done 日誌,也不會把命令結果寫進會話。
碎片提取規則¶
只提取下列內容(明確不提取完整對話歷史、成功工具結果、可重放任務的完整指令等):
| 碎片 | 來源 |
|---|---|
| 失敗的工具調用 | tool/result 且 message.isError === true 或 data.error 存在 |
| 非正常結束 | turn/end 且 reason.kind 爲 interrupted、aborted、blocked、error、max-tokens、forked |
| 未完成步驟裏的最後片段 | 最後一個未閉合 step/start 之後到日誌末尾的 assistant/message / assistant/attempt 文本 |
| 它最後看到的話 | 最後一條 user/message 的 content(截斷;跳過框架注入行) |
| 位置 | 一行父子鏈信息(父會話 id 前綴 + 深度) |
硬預算:碎片總長約 800 token(按 4 字符 / token 折算約 3200 字符);超預算時優先保留靠後的事件,最後一條 user/message 單獨預留額度。
幽靈的創建與限制¶
幽靈不是可持久化的 Agent 會話。實現上直接調用 ctx.llm.stream(),messages 僅含碎片與當前問題;不傳 tools、toolHistory、sessionId;每次提問獨立,不攜帶父會話歷史或 AGENTS.md。
客戶端與宿主雙重限制:最多 3 個問題,第 4 個請求會被宿主拒絕。幽靈沒有工具、不能執行任務、不能寫入,對話結束即銷燬;被招魂的原始會話日誌只讀,插件不修改、不清理。
通信與 UI 依賴¶
宿主通過同源 POST /dsh-seance/api 與客戶端通信(x-dsh-seance: 1 + application/json);幽靈狀態只在內存中保存,不寫文件、不寫會話。依賴 Web GUI 的 shell.overlay 浮層與 @deepseek-ai/dsh-client-ui-commands;無側邊欄、無設置頁、無 headless/ACP 適配。
安裝與啓用¶
plugin_manager 是 Harness 會話內的 Agent 工具,不是 shell 命令。
通過 npm 安裝包體¶
npm install dsh-seance
npm install 只把包放進依賴;要在當前 profile 中啓用,仍需在 Harness 會話中通過插件管理器安裝本地包:
- 調用
plugin_manager install_bundle,target指向node_modules/dsh-seance的絕對路徑。
通過本地包目錄安裝(README 中的當前驗證方式)¶
在會話中調用:
plugin_manager install_bundle,target爲包目錄的絕對路徑(例如/absolute/path/to/dsh-seance)。
安裝後 /dsh-seance.summon 應出現在命令面板。
卸載¶
在 Harness 會話中調用:
plugin_manager remove_bundle,target爲dsh-seance。- 單獨停用/啓用:
plugin_manager set_plugin,target爲include:dsh-seance。
典型用法¶
- 確認 Harness 版本滿足
>=0.2.2-rc.1,並已安裝、激活插件。 - 在命令面板執行
/dsh-seance.summon(「招魂」)。 - 在列表中選擇要詢問的已終止子會話,在對話框裏針對碎片提問(最多 3 次)。
- 問完後關閉對話框;幽靈與在途請求一併清理。
宿主側驗證候選列表(需先安裝並激活,將 <port>、<當前會話 id> 換成實際值):
curl -s -X POST http://127.0.0.1:<port>/dsh-seance/api \
-H 'content-type: application/json' \
-H 'x-dsh-seance: 1' \
-d '{"op":"candidates","parentSessionId":"<當前會話 id>"}'
開發者可在包目錄運行單元測試:
npm test
適用場景與注意¶
適合誰:在同一 workspace 內處理子 Agent 異常結束、想在刪日誌前做一次只讀「復盤」的 DSH 用戶;需要完整 trace、工具重放或跨 workspace 招魂的場景不適用。
已知限制(摘自 README):幽靈是單次 ctx.llm.stream 補全,非獨立子 Agent;僅當前 cwd 下的子會話;依賴當前會話模型路由或默認模型,無獨立選模入口;回答非流式;命令與對話框文案以中文爲主;僅 Web GUI。
安全與權限:插件以當前 DSH 進程權限運行,可讀取當前工作目錄下符合條件的會話日誌。安裝前應查看 GitHub 倉庫 源碼與 MIT 許可證,確認與你的工作流策略一致。
DSH 生態強調「一切皆插件」;社區目錄 SkillHub 上的 dsh-seance 頁 爲獨立站點展示,與 DeepSeek / 幻方無官方從屬關係。
結尾¶
dsh-seance 的價值在於:刪除之前,用極小的碎片預算和三次提問,聽一聽已終止子 Agent 留下了什麼——不冒充調試器,也不改寫日誌。進一步瞭解請訪問 目錄頁 與 GitHub。