dsh-seance:在刪除子 Agent 會話之前,先聽一聽殘留日誌

前言

在 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,顯示爲「招魂」,也可直接輸入該命令執行。

經過上面的步驟,插件會:

  1. 通過 ctx.sessionQuery.filterSessions 查詢當前工作目錄下的會話,篩出 live: false、parentSession != null 且日誌仍可讀取的候選。
  2. 沒有候選時提示「沒有可招魂的殘留會話」。
  3. 有候選時,在臨時對話框列出:子 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。

典型用法

  1. 確認 Harness 版本滿足 >=0.2.2-rc.1,並已安裝、激活插件。
  2. 在命令面板執行 /dsh-seance.summon(「招魂」)。
  3. 在列表中選擇要詢問的已終止子會話,在對話框裏針對碎片提問(最多 3 次)。
  4. 問完後關閉對話框;幽靈與在途請求一併清理。

宿主側驗證候選列表(需先安裝並激活,將 <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。

羽毛球分组比赛记分
小程序二维码

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

小夜