dsh-continuechat:從斷點手動續跑被中斷的 DSH 對話

前言

在 DeepSeek Harness(DSH)裏跑智能體時,一輪對話未必總能正常收尾:你可能誤點停止,網絡或模型請求失敗,或者回復被輸出 token 上限截斷。Harness 往往只留下「已停止」一類標記,接下來要麼自己再打一遍「continue」,要麼重新交代上下文,容易重複勞動,也偏離「從斷點接着幹」的意圖。

社區插件 dsh-continuechat(維護者 CaiBai-Fish,GitHub:CaiBai-Fish/dsh-continuechat)補的是這一步:提供 /continue 命令,並在被中斷的那條助手回覆下方的操作行裏增加 Continue 按鈕,讓會話從停下的位置續跑,而不是從頭重來。在 SkillHub 社區目錄中,它歸類爲「工作流」。

這是什麼

dsh-continuechat 的定位是:在 DSH 會話中手動恢復被提前結束的一輪對話。當前 package 版本爲 0.1.1,許可證 MIT,運行環境要求 Node.js >= 22。插件不提供自動續跑;需要無人值守的連續執行時,README 指向使用 goal 工具等其他能力。

核心功能

命令 /continue

在聊天裏執行:

/continue
/continue also fix the remaining three files

命令名後面的文字會作爲續跑提示裏的「Additional instruction from the user」附加說明。Harness 會在命令平面渲染結果(例如「已請求繼續對話(中斷原因:手動停止)。」),該結果不會作爲模型消息進入對話。

輸入 / 後也可從命令菜單選擇 continue(描述爲 “Continue the interrupted conversation from where it stopped”),用方向鍵和 Enter 即可,不必先敲完整命令。

操作行 Continue 按鈕

被截斷的那一輪,在最後一條助手消息下方的操作行(與複製、贊/踩、分支同一行)會出現 Continue:

  • 僅在中斷真實發生時出現;正常完成、被 blocked 拒絕、或僅爲 fork 收尾的輪次不顯示。
  • 只有結束該輪的那條助手消息帶按鈕;Agent 重新運行後按鈕會消失。
  • 點擊等價於執行一次 /continue;失敗時操作旁會顯示短錯誤,懸停可看全文。

是否顯示按鈕,取決於會話持久事件窗口裏最新的 turn/end 是否屬於可續跑原因,且該輪是否已有持久化的助手消息。若在產出任何助手輸出之前就中斷(請求直接失敗、進程在流式開始前退出),界面上沒有可掛載按鈕的消息,此時應使用 /continue 命令。

續跑時發給模型的內容

插件不會只發一句裸的 “continue”,而是排隊一條結構化的用戶消息,包在 <continue-conversation> 中,說明上一輪爲何結束、要求在同一 session 從斷點繼續、勿重複已有輸出,並附上 Harness 記錄的中斷失敗信息;你在命令後輸入的附加說明也會寫入。觸發消息的 source.kind 爲 continue-chat,在 Chat 裏作爲注入上下文節點處理,普通文本不會出現在可見氣泡裏。

續跑完成後,新回答會作爲新的助手消息出現(DSH 事件溯源日誌不允許把續寫合併進原 assistant 消息);插件會通過 system/message 替換等方式收起觸發用的續跑提示,界面上被中斷的回覆後面直接跟新內容。

哪些中斷可以續跑

插件訂閱 session/event,根據 turn/end 的 reason.kind 判斷是否可續跑:

reason.kind 含義 可續跑
aborted 運行被取消(含用戶手動停止等) 是
error 模型請求失敗 是
max-tokens 輸出 token 上限截斷 是
interrupted 宿主進程中斷後的崩潰恢復 是
completed 正常結束 否
blocked 進入前被 agent/pre-step 拒絕 否
forked fork 種子關閉繼承前綴 否

之後若出現新的 user/message,會清空中斷記錄(用戶接管或已續跑)。

安裝與啓用

README 給出的安裝方式(需指向插件目錄的絕對路徑):

dsh plugin --profile desktop add <absolute path to this directory>

package.json 中 dsh.bundle.patch 指向 cordis.patch.yml,用於把 continue-chat 寫入 profile;dsh.client.platform = "web" 時由宿主提供 lib/client.js 作爲瀏覽器端 bundle。

卸載:

dsh plugin --profile desktop remove dsh-continuechat

也可在 SkillHub 目錄頁查看該插件的收錄信息與安裝說明:https://www.skillhub.cn/plugins/CaiBai-Fish/dsh-continuechat。SkillHub 是社區插件目錄,與 DeepSeek / 幻方無官方從屬關係;DSH 生態強調「一切皆插件」,具體裝哪些插件由你自行選擇。

安裝前建議閱讀倉庫源碼與 MIT 許可證。插件在當前 DSH 進程權限下運行,與宿主共享會話與工具能力,只安裝你信任的來源。

典型用法

  1. 讓 Agent 跑一輪任務,因手動停止、請求失敗或 token 截斷而中斷。
  2. 若該輪已有助手輸出:在最後一條助手消息操作行點擊 Continue;或在任意時刻執行 /continue,必要時在命令後加補充指令(例如 /continue also fix the remaining three files)。
  3. 若中斷時尚未產生助手消息:只能使用 /continue,不要期待操作行按鈕。
  4. Agent 仍在運行時不要續跑;應先停止當前輪,再執行 /continue(對運行中的 Agent 執行會報錯)。

對比 README 中的場景:誤點停止時不必自己重打 continue;網絡失敗時插件會把 Harness 記錄的失敗信息交給模型;token 截斷時有一鍵或一條命令的入口,而不只是提示你「發送 continue」卻沒有統一入口。

適用場景與注意

適合誰: 經常在 DSH Web 桌面 profile 里長對話、改代碼、調工具,且會遇到人爲停止、Provider 錯誤或輸出被截斷的開發者。

刻意不做的事(README 原文要點):

  • 不會自動續跑;所有觸發都來自命令、按鈕或你自己輸入。
  • 不會在正常結束的對話下顯示 Continue。
  • 不會把新回答合併進舊助手消息。
  • 不會在 Agent 運行中插入續跑。
  • 不會重寫歷史;續跑只是追加一條新的用戶消息。
  • DSH 重啓後首次 /continue 可能提示「未記錄中斷原因」(插件只觀察當前進程內追加的事件),續跑仍可進行,但缺少具體中斷原因細節。

宿主側僅依賴 node:crypto,無 runtime peerDependencies;客戶端 bundle 僅要求平臺 seed 中的 react。

結尾

dsh-continuechat 把「中斷後的下一步」收成 /continue 與操作行 Continue,並用結構化提示和 Harness 失敗記錄幫助模型從斷點接着做,而不是重開任務。需要查閱分類與收錄信息時打開 SkillHub 目錄頁;需要用法細節、架構說明與開發測試命令時見 GitHub 倉庫:

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

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

小夜