dsh-resume-on-restart:檢測 DSH 重啓並通知主 agent

前言

在 DeepSeek Harness (DSH) 的插件化開發體系中,服務重啓是常見場景。重啓往往會導致當前會話中斷、正在進行的任務丟失。爲了解決這個問題,本文介紹一個工作流插件,它在檢測到 DSH 服務重啓後,會自動向主 agent 投遞一條信息性消息。這條消息包含中斷時長和上次活躍會話的摘要,交由 agent 自主決定是繼續之前的工作,還是啓動新的任務,而非命令式地強制恢復。

這是什麼

dsh-resume-on-restart 是一個 DSH 插件,由用戶 nickkkkkk123123 維護。它解決的核心問題是“DSH 重啓後的會話與工作丟失”。通過在重啓時投遞狀態摘要,讓 agent 在重啓後能夠基於上下文做出合理的決策。

核心功能

插件主要包含以下能力:

  1. 重啓檢測:通過讀取 marker 文件(記錄上次進程 pid 和啓動時間)來判斷當前 DSH 是否發生了重啓。
  2. 信息性消息:檢測到重啓後,投遞包含“檢測到重啓 + 中斷時長 + 上次活躍會話”的摘要消息。這屬於信息提示,不強制 agent 執行特定動作。
  3. 活動追蹤:在 DSH 運行期間,通過監聽 cordis 事件(如 agent/session-start、agent/pre-step)來記錄最近活躍的會話,供重啓後的消息使用。
  4. 兼容 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 啓動時的執行流程如下:

  1. 讀取 Marker:讀取 ~/.dsh/.resume-on-restart/marker.json,獲取上次的 pid 和 lastBootAt。
  2. 判定重啓:將當前進程的 pid 與 marker 中的 pid 進行比對,如果不一致則判定爲發生重啓。
  3. 更新 Marker:寫入新的 marker 文件,更新爲當前的 pid 和啓動時間。
  4. 投遞消息:若判定爲重啓,插件會輪詢等待主 agent 出現(最長等待 20 秒),隨後投遞信息性消息。消息格式通常如下:
[resume-on-restart] 檢測到 DSH 服務已重啓。
上次運行於 ...,本次於 ... 重啓完成。
中斷約 X 秒。
重啓前最近活躍的會話:<session-id>
如需繼續之前的工作,或啓動新任務,請自主決定下一步。

適用場景與注意

  • 適用場景:需要長時間運行 DSH Desktop 並希望從意外重啓中恢復工作流的用戶。
  • 權限注意:插件以當前 DSH 進程的權限運行,請確保安裝的來源可信。
  • 源碼檢查:在安裝任何社區插件前,建議查閱其源碼與許可證(本項目爲 MIT 許可證)。

結尾

這個插件通過輕量級的狀態追蹤和消息投遞機制,解決了 DSH 重啓後的上下文丟失問題。它不替代 agent 的邏輯,而是提供決策依據,符合 DSH “一切皆插件”的架構理念。

插件目錄:dsh-resume-on-restart
源碼倉庫:GitHub

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

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

小夜