dsh-midtalk: 任務內插話 + 可選打斷 + 結構化恢復卡

前言

在 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)

  1. 放置文件:
    將插件的目錄(至少包含 index.js 和 lib/core.js)放入 Profile 的模塊目錄:
    # 假設 Profile 名爲 web
    $DSH_HOME/profiles/web/node_modules/dsh-midtalk/
  1. 掛載名冊:
    在 $DSH_HOME/profiles/web/cordis.patch.yml 中添加一行 insert:
    - insert:
      - id: midtalk
        name: dsh-midtalk
> **注意**:此文件在啓動時一次性讀取,修改前請備份。
  1. 重啓:
    重啓 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 的工作流控制權交還給了用戶,提供了“無損插話”和“可控打斷”兩種模式。對於需要精細控制任務執行流、或在長任務中需要隨時介入的開發者來說,這是一項實用的工具。

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

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

小夜