dsh-plugin-reloader:免重启热重载 DeepSeek Harness 插件

前言

DSH 的扩展能力主要靠插件承载。对于经常修改插件、升级插件包、调试插件行为的开发者来说,每次变更都要重启 dsh web 会比较麻烦。dsh-plugin-reloader 针对这个问题提供热重载:已安装插件的代码变化可以在当前进程中重新挂载;如果变化涉及依赖树,则退出进程,交给外部 supervisor 重启。

这里的社区目录是独立站点,不等同于 DeepSeek 或幻方的官方应用商店。

这是什么

dsh-plugin-reloaderdeepforce 维护的 DSH 插件,许可证为 MIT,package.json 版本为 0.2.0

它的定位很明确:在不重启 dsh web 的前提下,热重载已安装的 DeepSeek Harness 插件。它监视插件包相关文件,发现代码变化后原地重载;发现 dependenciespeerDependencies 变化时,则以可配置退出码结束进程,让 supervisor 重新启动。

核心功能

自动热重载

它通过轮询已安装插件的入口文件和 package.json 文件来检测变化。pollIntervalMs 默认值为 2000,即每 2 秒检查一次。检测到插件代码变化后,它会在当前进程中重新加载该插件。

手动重载与状态检查

在会话中可以输入:

/reload @deepforce/dsh-balance

手动重载一个已安装插件。

如果不带参数输入:

/reload

会列出已加载插件,并标记不可热重载的插件。标记包括 [official][service][self]

还可以使用:

/watch-status

查看当前 watch 状态,包括 watched scopes、事件数、最近观察到的变化、重载次数、跳过的重载以及启动错误。

依赖变化时重启进程

如果插件的 package.jsondependenciespeerDependencies 发生变化,进程会以退出码 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

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

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

小夜