dsh-plugin-reloader:免重啓熱重載 DeepSeek Harness 插件

前言

DSH 的擴展能力主要靠插件承載。對於經常修改插件、升級插件包、調試插件行爲的開發者來說,每次變更都要重啓 dsh web 會比較麻煩。dsh-plugin-reloader 針對這個問題提供熱重載:已安裝插件的代碼變化可以在當前進程中重新掛載;如果變化涉及依賴樹,則退出進程,交給外部 supervisor 重啓。

這裏的社區目錄是獨立站點,不等同於 DeepSeek 或幻方的官方應用商店。

這是什麼

dsh-plugin-reloader 是 deepforce 維護的 DSH 插件,許可證爲 MIT,package.json 版本爲 0.2.0。

它的定位很明確:在不重啓 dsh web 的前提下,熱重載已安裝的 DeepSeek Harness 插件。它監視插件包相關文件,發現代碼變化後原地重載;發現 dependencies 或 peerDependencies 變化時,則以可配置退出碼結束進程,讓 supervisor 重新啓動。

核心功能

自動熱重載

它通過輪詢已安裝插件的入口文件和 package.json 文件來檢測變化。pollIntervalMs 默認值爲 2000,即每 2 秒檢查一次。檢測到插件代碼變化後,它會在當前進程中重新加載該插件。

手動重載與狀態檢查

在會話中可以輸入:

/reload @deepforce/dsh-balance

手動重載一個已安裝插件。

如果不帶參數輸入:

/reload

會列出已加載插件,並標記不可熱重載的插件。標記包括 [official]、[service]、[self]。

還可以使用:

/watch-status

查看當前 watch 狀態,包括 watched scopes、事件數、最近觀察到的變化、重載次數、跳過的重載以及啓動錯誤。

依賴變化時重啓進程

如果插件的 package.json 中 dependencies 或 peerDependencies 發生變化,進程會以退出碼 42 退出。這個退出碼可以配置。退出前會在日誌中說明原因,外部 supervisor 可以根據退出碼重新啓動 dsh web。

保護規則與失敗回滾

官方 @deepseek-ai 插件,以及其他插件依賴其服務的插件,默認不會被熱重載。這樣可以避免重載服務提供方後,把依賴它服務的其他插件一起帶入重啓。

如果一次 re-import 或 mount 失敗,插件會恢復模塊緩存和之前的插件版本,會話繼續運行,而不是留下半掛載的狀態。

安裝與啓用

安裝命令:

dsh plugin --profile web add github:deepforce/dsh-plugin-reloader

安裝完成後,需要讓插件在 dsh web 中生效。如果後續要依賴“依賴變化自動重啓”能力,需要把 dsh web 放在外部 supervisor 下運行,而不是直接啓動。

典型用法

升級一個已安裝插件:

dsh plugin --profile web add github:deepforce/dsh-balance   # upgrade

watcher 會注意到變化的 lib/ 文件,並在當前進程中熱重載該插件。

如果想手動強制重載:

/reload @deepforce/dsh-balance

也可以不帶參數查看候選項:

/reload

如果這次升級同時改變了插件依賴樹,進程會退出 42,由 supervisor 自動重新啓動 dsh web。

Windows 下可以通過 supervisor 腳本啓動:

scripts\dsh-restart.cmd web

或使用 PowerShell:

powershell -File scripts\dsh-restart.ps1 web

如果需要調整重載參數,可以寫 overlay 配置,例如:

# reloader.cordis.yml
- patch:
    - id: plugin-reloader
      config:
        debounceMs: 600
        restartExitCode: 50

適用場景與注意

適合經常修改、調試或升級 DSH 插件,並希望減少 dsh web 重啓次數的開發者。

使用前需要注意:

  • 插件以當前 dsh 進程權限運行,安裝前應檢查源碼與許可證。本插件許可證爲 MIT。
  • 它依賴 loader 的內部模塊緩存 loader.internal,vendored loader 默認暴露該接口。如果未來 dsh 移除這個接口,插件會降級爲 /reload 報告 loader internal is unavailable。
  • watcher 只讀取文件,不自行執行任何代碼。
  • 依賴變化導致的進程退出是有意行爲,退出前會在日誌中說明。
  • 已測試版本信息:DeepSeek Harness 0.1.0-rc.6,web profile,Windows 11,Node 24。

結尾

dsh-plugin-reloader 把插件升級後的處理拆成兩條路徑:普通代碼變化原地熱重載,依賴樹變化交給 supervisor 重啓。對於 DSH 插件開發和調試來說,這能讓會話保持連續,也減少反覆啓動 dsh web 的成本。

GitHub:https://github.com/deepforce/dsh-plugin-reloader
目錄頁線索:https://www.skillhub.cn/plugins/deepforce/dsh-plugin-reloader

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

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

小夜