前言¶
用 dsh web 跑長任務時,網絡抖動、上游超時、輸出 token 觸頂,都會讓當前回合突然停住。常見做法是盯着界面,等錯誤出現後手動輸入「繼續」再點發送。任務一多,這條鏈路很容易斷在人爲反應上。
下面介紹 dsh-auto-continue(npm 包名 dsh-client-auto-continue)。它在 DSH Web UI 裏監聽會話事件;當回合因非人爲原因結束時,按你配置的文本自動走與「發送」按鈕相同的 agent.followup 隊列,把中斷的任務接回去。自 0.8.0 起,引擎跑在宿主進程內,單實例值守,瀏覽器標籤全關也能掃描恢復,多標籤也不會重複發送。
這是什麼¶
dsh-auto-continue 是 DeepSeek Harness(DSH)的 Web UI 插件,由 HsiangNianian 維護,在 SkillHub 社區目錄歸類爲「工作流」。GitHub 倉庫約 37 stars、2 forks,當前發佈版本 0.8.1,MIT 許可證。
它解決的核心問題很直接:把「發現中斷 → 等待寬限 → 發送繼續」這條恢復鏈路自動化,並在錯誤分類、退避、冪等、循環檢測等邊界上提供可配置策略,避免盲目重試或重複執行工具。
核心功能¶
監聽哪些中斷¶
插件訂閱宿主進程內的會話事件流,對以下情況作出反應:
| 事件 | 含義 |
|---|---|
turn/end → error |
回合失敗(模型 / 網絡 / 超時等) |
turn/end → interrupted |
宿主崩潰重啓後遺留的中斷回合(由啓動掃描恢復) |
turn/end → max-tokens |
達到輸出 token 上限 |
host/agent-error |
無回合位置的 Agent 失敗(僅網絡/超時類消息自動續跑) |
以下情況不會自動繼續:用戶主動停止(aborted)、策略拒絕(blocked)、正在運行或已有排隊消息的會話、子代理會話,以及處於冷卻期或連續次數上限內的會話。即時流裏的 interrupted 也不走自動續跑路徑,孤兒回合由宿主啓動時的掃描接手。
智能恢復策略¶
上述能力均可在設置卡片中開關或調參:
- 錯誤分類 — 臨時性錯誤(網絡、超時、5xx、429 等)自動續跑;永久性錯誤(401/403,或命中認證、API Key、餘額/配額、模型不存在、上下文超限等關鍵詞)跳過並通知。關閉分類後則全部自動繼續。
- 自適應退避 — 連續失敗時等待遞增(冷卻 × 係數,默認 20s → 40s → 80s…),有上限,避免對故障上游持續重試。
- 模板化繼續文本 —
continueText支持{code}、{message}、{status}、{tool}、{turn}、{errorCount}、{sessionTitle}、{elapsed}佔位符;max-tokens場景可用單獨的continueTextMaxTokens模板。 - 冪等護欄 — 續跑前檢查上一步工具調用:結果未確認時提示先覈對狀態、勿重複執行;已確認成功時說明結果、勿重跑;工具失敗則不加護欄。
- 循環守衛 — 監視運行中的回合:相同消息連續重複、短時間內大量短句且無工具調用、同一工具同參數同結果反覆調用,會取消當前回合並用可配置文本重啓。
- 暫停與通知 — 全局「暫停自動繼續」立即停掉即時與掃描;通知帶「立即續跑」(無視冷卻、上限與暫停)和「暫停該會話 1 小時」按鈕。
- 統計面板 — 展示今日自動繼續、恢復成功、繼續後失敗、永久性跳過、達上限停止、循環打斷等計數,按錯誤碼分組,可一鍵清零。
工作流程¶
檢測到中斷後,引擎先等待寬限期(默認 3 秒)。若期間宿主自行開啓新回合(turn/start),自動繼續取消;否則經 agent.followup 發送配置文本,與手動點發送等價。
宿主啓動或重連時,還會掃描存活會話:最後一個回合在掃描時間窗內(默認 15 分鐘)以非人爲原因結束、且其後沒有新回合或用戶消息的,會被自動續跑。例如瀏覽器關閉期間宿主崩潰,agent-loop 恢復會話後引擎可接着接手。
安裝與啓用¶
DSH 插件安裝進 profile(dsh web 對應 web profile)。要求 DSH ≥ 0.1.0-rc.7;rc.6 及更早版本會因 settings.plugin.item 槽位不兼容而加載失敗,需先升級 DSH。
推薦從 npm 安裝:
dsh plugin --profile web add dsh-client-auto-continue
dsh web
也可直接從 GitHub 默認分支安裝(跟蹤 main,適合嚐鮮;穩定性首選 npm):
dsh plugin --profile web add github:HsiangNianian/dsh-auto-continue
dsh web
安裝後重啓 dsh web。驗證配置是否掛載:
dsh --profile web --dump-config | grep auto-continue
瀏覽器控制檯應出現 [auto-continue] 已啓動 日誌;每次檢測中斷與自動發送也會打日誌。
卸載:
dsh plugin --profile web remove dsh-client-auto-continue
dsh web
典型用法¶
圖形界面配置¶
打開 設置 → 插件,找到 dsh-client-auto-continue 配置卡片。修改是暫存式的,點「保存」後寫入 ~/.dsh/settings.yaml 的 auto-continue 段落,宿主會監聽文件變更並即時生效。
默認繼續文本就是 繼續,多數場景開箱可用。若希望續跑消息攜帶失敗上下文,可改 continueText,例如:
繼續 ({tool}: {code})
達到輸出 token 上限時,可單獨配置 continueTextMaxTokens,例如:
繼續輸出, 不要重複已生成的內容
直接編輯配置文件¶
也可跳過 GUI,編輯 ~/.dsh/settings.yaml:
auto-continue:
paused: false
continueText: '繼續'
continueTextMaxTokens: '繼續'
guardTools: true
graceMs: 3000
cooldownMs: 20000
maxConsecutive: 3
scanOnBoot: true
freshMs: 900000
classify: true
backoffFactor: 2
backoffMaxMs: 300000
loopGuard: true
notify: false
常用調參方向:把 cooldownMs 和 maxConsecutive 調高可降低頻繁續跑;開啓 notify 可在自動繼續、放棄或遇到永久性錯誤時彈出瀏覽器通知(首次會請求權限)。
適用場景與注意¶
適合誰: 長時間用 dsh web 跑 Agent 任務、且經常遇到網絡或上游臨時故障的開發者。對 max-tokens 截斷、宿主崩潰後遺留的中斷回合,也能減少手動盯屏。
使用前請注意:
- 插件引擎跑在 dsh 宿主進程內,自動發送的
sessions.prompt與手動點發送權限相同。安裝前應閱讀源碼並確認 MIT 許可證,理解它會以當前 dsh 進程權限代你發消息。 - 錯誤分類能擋掉認證、餘額等永久性失敗,但關閉分類後會對所有錯誤續跑;冪等護欄和循環守衛建議保持開啓,尤其在涉及
git push等可能部分成功的工具時。 - 全局暫停或會話級暫停生效時,只有通知裏的「立即續跑」會破例發送一次;需要人工介入的回合,用暫停比反覆自動繼續更合適。
- SkillHub(skillhub.cn)是 DSH 插件社區目錄,與 DeepSeek / 幻方無官方從屬關係;DSH 本身遵循「一切皆插件」的擴展思路,本插件是社區維護的工作流類擴展。
鏈接¶
- SkillHub 目錄頁:skillhub.cn/plugins/HsiangNianian/dsh-auto-continue
- GitHub 倉庫:github.com/HsiangNianian/dsh-auto-continue
- npm 包:dsh-client-auto-continue
經過上面的步驟,中斷恢復從「盯着界面手動續」變成可配置、可統計、可暫停的自動化流程;對依賴 dsh web 長時間跑任務的場景,能少掉不少無效等待。