dsh-smart-restart:DSH 重啓後自動喚醒主 agent

前言

DSH 的插件生態遵循「一切皆插件」的思路。社區目錄是獨立站點,不等於官方應用商店。

對 DSH 使用者來說,一個具體問題出現在服務重啓後:主 agent 可能不知道服務剛剛重啓過,也不知道上一次會話爲什麼中斷。已有做法可能需要用戶再提示一次,例如說明服務已重啓。下面介紹的插件會在 boot 時自動發送通知,使中斷的工作可以被繼續處理。

這是什麼

  • 插件名:
edusrez/dsh-smart-restart
  • 維護者:
edusrez
  • 許可證:
MIT
  • 定位:這是一個 DSH host plugin,用於檢測 DeepSeek Harness service 是否重啓,並在 boot 時向主 agent 發送一次 Smart-restart 通知,使中斷的工作可以恢復。
  • 已覈實資料中的 package.json 版本字段:
0.5.1

已覈實資料未提供該版本的具體變更說明。

核心能力

重啓檢測

插件會保存上一次 boot 的狀態。狀態文件路徑如下:

<DSH_HOME>/<stateDir>/marker.json

該文件包含以下字段:

{lastBootAt, pid, dshVersion?}

boot 時,插件比較上一次 boot 的 pid 與當前 process.pid。如果兩者不同,說明新進程已經接管,即服務發生過重啓。downtime 按以下公式計算:

now - previous lastBootAt

計算結果會 clamp 到大於等於 0。

插件隨後會寫入新的 marker,供下一次 boot 比較。

boot 通知

每次 boot,插件通過 source-agnostic 的 agent/session-start hook 向主 agent 發送一次 Smart-restart 通知:

agent/session-start

該 hook 不依賴 publication source。對於延遲恢復的 pinned session,插件使用 bounded poll 來捕獲稍晚恢復的 session:

750ms tick
~15s cap

投遞優先級

通知投遞按以下優先級處理:

pending-notice.json
shutdown-notice.json
target

其中:

pending-notice.json

優先級最高。讀取一次後會被消費。

如果沒有 pending notice,則讀取:

shutdown-notice.json

該文件也讀取一次後消費。

如果 shutdown notice 不滿足 pin 條件,則回退到:

target

agent 主動重啓 DSH

v0.2.0 新增了一個工具:

smart_restart

主 agent 可以這樣調用:

smart_restart(reason?)

這一步由 agent 發起 DSH 重啓,並可選攜帶 reason。

工具會先校驗配置項:

restartUnit

校驗通過後,工具會同步寫入:

pending-notice.json

這一步在進程 spawn 之前完成,使通知能夠在服務被重啓後保留下來。

隨後,工具生成 detached setsid bash 進程,並延遲約 1s 執行:

systemctl restart <unit>

這一步用於在當前 DSH 進程被終止後仍觸發 systemd 重啓。

工具返回類似以下結構:

{ok: true, restarting: true, ...}

下一次 boot 時,插件讀取:

pending-notice.json

並將通知 pin 到發起該調用的會話。

普通重啓時的自動通知

v0.3.0 增加了對普通重啓場景的覆蓋。

當進程收到以下信號時:

SIGTERM
SIGINT

上一個進程會寫入:

shutdown-notice.json

該文件記錄最後活躍 session 以及時間戳。

boot 時,如果沒有:

pending-notice.json

插件會讀取:

shutdown-notice.json

如果記錄中的最後活躍 session 在以下配置項時間內保持活躍:

shutdownGraceMs

則插件會把通知 pin 到該 session。

否則,投遞迴退到:

target

因此,普通 systemctl restart 在 agent 活躍期間發生時,也可以在該 session boot 時收到通知,而不需要用戶額外提示。

canary pre-restart gate

v0.4.0 支持可選的 canary pre-restart gate。

啓用後,插件會先啓動一個臨時 DSH 實例,驗證啓動結果。如果臨時啓動失敗,重啓會被中止。

v0.5.0 支持從以下路徑自動檢測 systemd unit:

/proc/self/cgroup

這使得 smart_restart 工具和 canary 在 systemd-managed installs 中可以實現零配置。

安裝與依賴

已覈實資料未提供 Install 命令原文,因此本文不給出安裝命令。安裝前建議查看目錄頁或 GitHub 倉庫中的安裝說明。

插件聲明瞭以下 peerDependencies:

@deepseek-ai/cordis ^4.0.1
@deepseek-ai/dsh-agent ^0.1.0-rc.7 || ^0.1.1-rc.0
@deepseek-ai/dsh-llm ^0.1.0-rc.7 || ^0.1.1-rc.0
@deepseek-ai/dsh-session ^0.1.0-rc.7 || ^0.1.1-rc.0
@deepseek-ai/dsh-home-paths ^0.1.0-rc.7 || ^0.1.1-rc.0
@deepseek-ai/dsh-tools ^0.1.0-rc.7 || ^0.1.1-rc.0

插件是自包含單主機 bundle,不依賴外部服務。

典型用法

agent 發起重啓

  1. agent 調用:
smart_restart(reason?)
  1. 工具校驗:
restartUnit
  1. 工具同步寫入:
pending-notice.json
  1. 工具生成 detached setsid bash 進程,並延遲約 1s 執行:
systemctl restart <unit>
  1. 工具返回:
{ok: true, restarting: true, ...}
  1. 下一次 boot 時,插件讀取:
pending-notice.json
  1. 插件將通知 pin 到發起該調用的會話。

agent 活躍期間發生普通重啓

  1. 進程收到:
SIGTERM
SIGINT
  1. 上一個進程寫入:
shutdown-notice.json
  1. boot 時,插件在沒有 pending notice 的情況下讀取該文件。

  2. 如果記錄中的最後活躍 session 在:

shutdownGraceMs

內活躍,則通知 pin 到該 session。

  1. 否則,通知回退到:
target

適用場景與注意

適合以下場景:

  • DSH 實例會因服務重啓而中斷;
  • 希望主 agent 在 boot 後知道服務剛剛重啓;
  • 希望 agent 在重啓後繼續處理未完成任務;
  • 希望普通 systemctl restart 也能把通知送到對應 session;
  • 希望在重啓前使用 canary 做一次臨時啓動驗證。

注意以下幾點:

  • 插件作爲 DSH host plugin 運行,會以當前 dsh 進程權限訪問狀態文件並調用系統命令;
  • 安裝前應檢查源碼、依賴和許可證;
  • canary 會啓動臨時 DSH 實例,啓用前需要確認當前環境允許這樣做;
  • v0.5.0 的 systemd unit 自動檢測依賴:
/proc/self/cgroup

適用於 systemd-managed installs。
- 已覈實資料未提供官方安裝命令原文,不要憑倉庫名拼接安裝命令。

鏈接

  • 目錄頁:
https://www.skillhub.cn/plugins/edusrez/dsh-smart-restart
  • GitHub 倉庫:
https://github.com/edusrez/dsh-smart-restart
羽毛球分组比赛记分
小程序二维码

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

小夜