前言¶
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 發起重啓¶
- agent 調用:
smart_restart(reason?)
- 工具校驗:
restartUnit
- 工具同步寫入:
pending-notice.json
- 工具生成 detached setsid bash 進程,並延遲約 1s 執行:
systemctl restart <unit>
- 工具返回:
{ok: true, restarting: true, ...}
- 下一次 boot 時,插件讀取:
pending-notice.json
- 插件將通知 pin 到發起該調用的會話。
agent 活躍期間發生普通重啓¶
- 進程收到:
SIGTERM
SIGINT
- 上一個進程寫入:
shutdown-notice.json
-
boot 時,插件在沒有 pending notice 的情況下讀取該文件。
-
如果記錄中的最後活躍 session 在:
shutdownGraceMs
內活躍,則通知 pin 到該 session。
- 否則,通知回退到:
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