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