前言¶
在 DeepSeek Harness (DSH) 的插件化開發體系中,服務重啓是常見場景。重啓往往會導致當前會話中斷、正在進行的任務丟失。爲了解決這個問題,本文介紹一個工作流插件,它在檢測到 DSH 服務重啓後,會自動向主 agent 投遞一條信息性消息。這條消息包含中斷時長和上次活躍會話的摘要,交由 agent 自主決定是繼續之前的工作,還是啓動新的任務,而非命令式地強制恢復。
這是什麼¶
dsh-resume-on-restart 是一個 DSH 插件,由用戶 nickkkkkk123123 維護。它解決的核心問題是“DSH 重啓後的會話與工作丟失”。通過在重啓時投遞狀態摘要,讓 agent 在重啓後能夠基於上下文做出合理的決策。
核心功能¶
插件主要包含以下能力:
- 重啓檢測:通過讀取 marker 文件(記錄上次進程 pid 和啓動時間)來判斷當前 DSH 是否發生了重啓。
- 信息性消息:檢測到重啓後,投遞包含“檢測到重啓 + 中斷時長 + 上次活躍會話”的摘要消息。這屬於信息提示,不強制 agent 執行特定動作。
- 活動追蹤:在 DSH 運行期間,通過監聽 cordis 事件(如
agent/session-start、agent/pre-step)來記錄最近活躍的會話,供重啓後的消息使用。 - 兼容 DSH Desktop:插件僅依賴 cordis 上下文 (
agents服務),不導入任何@deepseek-ai/dsh-*內部包,因此可以在 DSH Desktop 的打包環境(如 app.asar)中正常運行。
安裝與啓用¶
安裝前請確保已安裝 DeepSeek Harness CLI。安裝時需指定本地路徑。
# 將插件安裝到桌面 profile(DSH Desktop 默認使用 desktop profile)
dsh plugin --profile desktop add <本目錄路徑>
# 安裝完成後,重啓 DSH Desktop 即可生效
配置說明¶
插件的配置通過 cordis.patch.yml 文件管理。以下是關鍵配置項及其默認值:
| 配置項 | 默認值 | 說明 |
|---|---|---|
enabled |
true |
插件總開關。 |
stateDir |
.resume-on-restart |
marker 文件和狀態文件的存放目錄(相對於 DSH_HOME)。 |
target |
primary |
消息投遞的目標,默認爲主 agent (primary),也可指定爲特定的會話 ID。 |
wakeup |
true |
是否在投遞消息後真正喚醒目標 agent。設爲 false 則僅注入消息。 |
notice |
'' |
附加在消息末尾的自定義提示文本。 |
shutdownGraceMs |
600000 |
關閉前的寬限窗口(毫秒),在此期間被標記爲活躍的會話會被視爲任務相關。 |
ignoredSessionPrefixes |
['head-'] |
需要忽略的會話 ID 前綴(例如多代理架構中的根會話)。 |
運行邏輯¶
DSH 啓動時的執行流程如下:
- 讀取 Marker:讀取
~/.dsh/.resume-on-restart/marker.json,獲取上次的pid和lastBootAt。 - 判定重啓:將當前進程的
pid與 marker 中的pid進行比對,如果不一致則判定爲發生重啓。 - 更新 Marker:寫入新的 marker 文件,更新爲當前的
pid和啓動時間。 - 投遞消息:若判定爲重啓,插件會輪詢等待主 agent 出現(最長等待 20 秒),隨後投遞信息性消息。消息格式通常如下:
[resume-on-restart] 檢測到 DSH 服務已重啓。
上次運行於 ...,本次於 ... 重啓完成。
中斷約 X 秒。
重啓前最近活躍的會話:<session-id>
如需繼續之前的工作,或啓動新任務,請自主決定下一步。
適用場景與注意¶
- 適用場景:需要長時間運行 DSH Desktop 並希望從意外重啓中恢復工作流的用戶。
- 權限注意:插件以當前 DSH 進程的權限運行,請確保安裝的來源可信。
- 源碼檢查:在安裝任何社區插件前,建議查閱其源碼與許可證(本項目爲 MIT 許可證)。
結尾¶
這個插件通過輕量級的狀態追蹤和消息投遞機制,解決了 DSH 重啓後的上下文丟失問題。它不替代 agent 的邏輯,而是提供決策依據,符合 DSH “一切皆插件”的架構理念。
插件目錄:dsh-resume-on-restart
源碼倉庫:GitHub