前言¶
在 DeepSeek Harness (DSH) 的任務執行過程中,如果中途需要插入一句插話,或者需要立刻停止當前步驟,通常只有兩個極端做法:要麼等待當前輪次跑完(慢),要麼按界面停止按鈕(直接砍掉當前步驟,留下半截狀態)。dsh-midtalk 插件通過兩條斜槓命令,將“插話”和“打斷”的邏輯拆分,讓你按一次回車決定下一步動作,並且在打斷時保留現場。
它是什麼¶
dsh-midtalk 是一個由 blueberrymaid 維護的工作流插件。它給 DSH 增加了 midtalk 功能,支持任務內插話與可選打斷,並自動生成結構化恢復卡。所有代碼均爲 Host 側(Cordis),零客戶端代碼、零構建、無第三方運行時依賴,不經 npm 分發。
核心能力¶
- 任務內插話:無損遞話,插入到下一個步驟邊界。
- 可選打斷:中止當前步並留下恢復卡。
- 結構化恢復卡:記錄打斷時的完整狀態,用於後續恢復。
- 硬規則約束:收到插話必須先輸出正文回覆,再決定是否調用工具。
安裝與啓用¶
方式 A:命令行安裝(推薦)¶
使用 dsh plugin 命令安裝。安裝後需要重啓 dsh web 才能生效。
dsh plugin --profile web add "github:blueberrymaid/dsh-midtalk"
方式 B:手動安裝(不依賴網絡或 pnpm)¶
- 放置文件:
將插件的目錄(至少包含index.js和lib/core.js)放入 Profile 的模塊目錄:
# 假設 Profile 名爲 web
$DSH_HOME/profiles/web/node_modules/dsh-midtalk/
- 掛載名冊:
在$DSH_HOME/profiles/web/cordis.patch.yml中添加一行 insert:
- insert:
- id: midtalk
name: dsh-midtalk
> **注意**:此文件在啓動時一次性讀取,修改前請備份。
- 重啓:
重啓dsh web並驗證。
驗證安裝¶
檢查 $DSH_HOME/midtalk/boot.json。文件內容應包含 stage: "registered" 且 commands 列表中包含 "say" 和 "cut"。
使用方法¶
插件提供兩條斜槓命令:
1. /say <你要說的話>¶
- 語義:無損插話。
- 行爲:插到下一個步驟邊界。不中斷當前步驟。
- 適用場景:默認使用。
2. /cut [你要說的話]¶
- 語義:有損打斷。
- 行爲:中止當前正在運行的步驟,生成恢復卡。
- 適用場景:卡在很長的步驟中,必須立刻停止。
兩條命令都會返回當前步驟的預估剩餘時長,僅作參考。
恢復卡¶
/cut 觸發後會生成結構化恢復卡,保存在 $DSH_HOME/midtalk/last-interrupt-<會話 id>.json。每個會話一張,原子寫入。
恢復卡包含以下關鍵信息:
- at / reason:觸發時間與原因。
- agentStatus / sessionId:打斷時的狀態與會話。
- interruptedAt:被打斷的具體位置。
- pendingToolCalls:正在派發/剛派發的工具調用意圖。
- lastReasoning / lastText:打斷前的推理與正文片段。
- frames:最近 12 個流幀。
恢復流程:
1. 讀取恢復卡,列出當前狀態。
2. 覈實 pendingToolCalls 中的工具調用是否已落地(文件、命令等)。
3. 用戶確認後,重做被打斷的那一步。
注意事項與邊界¶
- 兼容性:僅在與實測 DSH 版本(
0.1.5-rc.3)兼容的環境下驗證過。 - 隊列限制:待送話隊列上限爲 8,超出會靜默丟棄最早的請求(記錄在
$DSH_HOME/midtalk/wake.log)。 - 零依賴:純 Host 側實現,不註冊模型能力,不上報數據。
- 安裝方式:通過
cordis.patch.yml掛載,非 npm 包。
總結¶
dsh-midtalk 通過簡單的命令將 DSH 的工作流控制權交還給了用戶,提供了“無損插話”和“可控打斷”兩種模式。對於需要精細控制任務執行流、或在長任務中需要隨時介入的開發者來說,這是一項實用的工具。