前言¶
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