DeepSeek Harness 插件

dsh-plugin-reloader

Hot-reload installed DeepSeek Harness plugins without restarting dsh web: watches plugin bundles, reloads changed plugins in place, and restarts on dependency changes(英文原文)

跳到安装方式

来源信息

GitHub 仓库
deepforce/dsh-plugin-reloader
最近更新
2026年8月15日
分类
插件开发工具
GitHub stars
1
载体类型
plugin
目录证据
上游声明已找到 dsh.bundle
证据路径
package.json#dsh.bundle
核对版本
0.1.0-rc.8
上游核对日期
2026-08-20

该证据由上游目录提供。本站没有安装、运行或安全审核这个插件。

安装

默认先复制一段 Prompt,让 Agent 读 GitHub 仓库和源码;需要自己装时再切到命令。

复制这段 Prompt,发给 DSH、Codex 或其他 Agent,让它先读 GitHub 仓库和源码。

请先不要安装或执行任何命令。阅读这个插件的 GitHub 仓库、README 和关键源码,然后用清楚、直接的方式回答以下问题,帮助我判断它是否适合我的需求:

1. 这个插件是什么,解决什么问题;
2. 适合哪些用户和典型使用场景;
3. 安装后如何使用,并给出一个最小使用示例;
4. 有哪些已知限制,以及隐私、安全、兼容性或维护风险;
5. 给出“推荐 / 有条件推荐 / 不推荐”的明确建议和理由。

请区分仓库明确说明、根据源码推断和未知信息。证据不足时请明确说明,不要猜测或照抄 README。

GitHub:https://github.com/deepforce/dsh-plugin-reloader
插件名:dsh-plugin-reloader
作者:deepforce

检查来源文件

安装前先看这个插件目录里的 README 和其他文件。

文件资源管理器4 个文件
README.zh.md来源说明 · 只读预览
README 语言

dsh-plugin-reloader

English | 中文

让已安装的 DeepSeek Harness 插件无需重启 dsh web 即可热更新。升级插件(如 dsh plugin add github:...)后,新代码就地生效;只有依赖树变化才需要重启进程(配合外部 supervisor 脚本自动拉起)。

它复用了 dsh 内置 HMR 为用户代码提供的同一套重载流水线——清模块缓存、重新导入插件入口、销毁旧 fiber、挂载新 fiber、失败自动回滚——只是去掉了「排除 node_modules」的限制(正是这个限制让内置 HMR 不碰已安装插件)。dsh 的 vendored loader 默认就暴露内部模块缓存,无需任何特殊 flag。

功能

  • 自动热重载 — 按 pollIntervalMs(默认 2 秒)轮询已安装插件的入口文件和 package.json,代码变化时就地热重载该插件。轮询(stat mtime+size)取代文件监听库:chokidar 的 fs-watch 在常驻的 dsh web 进程(Windows)里永远无法 ready,且轮询天然免疫 pnpm 的整目录替换(下一次轮询直接看到新文件)。插件升级是低频操作,每 2 秒 stat 几个文件开销可忽略。
  • /reload <插件> 命令 — 手动热重载一个已安装插件;不带参数时列出已加载插件,并标记不可重载者([official][service][self])。
  • /watch-status 命令 — 打印实时监听诊断:监听的 scope、事件计数、最近一次变化、重载计数、被跳过的重载、启动错误。升级插件后敲它,可确认自动重载已触发(eventsreloads 递增)。
  • 依赖变化自动重启 — 若某插件的 package.json 改变了 dependencies/peerDependencies,进程以退出码 42(可配置)退出,由 supervisor 重新拉起。
  • 可重载性守卫 — 官方 @deepseek-ai 插件与「提供其他插件依赖的服务」的插件默认不热重载:尝试会被跳过、记入日志并在 /watch-status 中计数。重载服务提供者会让所有注入该服务的插件连锁重启;重载官方插件则相当于在会话中途给 dsh 本体打补丁。可用 allowOfficial / allowServiceProviders 分别放开。
  • 失败回滚 — 重新导入或挂载失败时恢复模块缓存和旧插件,会话继续运行。

安装

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

先重启一次 dsh web 让插件加载。要让「依赖变化自动重启」生效,请用 supervisor 启动 dsh,而不是直接启动:

# Windows (cmd)
scripts\dsh-restart.cmd web

# Windows (PowerShell)
powershell -File scripts\dsh-restart.ps1 web

用法

升级已安装插件后:

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

监听器发现 lib/ 文件变化后会自动热重载——无需重启。想手动触发就在会话里敲 /reload @deepforce/dsh-balance;不带参数敲 /reload 列出候选插件。

如果升级还改变了插件的依赖树,进程会以 42 退出,supervisor 自动重新拉起 dsh web(注意:直接用 dsh web 启动时进程只是退出,不会自动重启,必须用 supervisor)。

配置

字段默认值含义
watchEnabledtrue是否监听已加载插件并在代码变化时热重载
watchRoots["@deepseek-ai", "@deepforce"]profile 的 node_modules 下要考虑的 scope 目录
debounceMs400触发重载前的变化合并窗口(毫秒)
pollIntervalMs2000变化检测的轮询间隔(毫秒)
restartExitCode42依赖树变化时的退出码(supervisor 据此重启)
allowOfficialfalse是否也热重载官方 @deepseek-ai 插件(不建议)
allowServiceProvidersfalse是否也热重载提供其他插件所依赖服务的插件(不建议)

覆盖示例:

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

兼容性

已在 DeepSeek Harness 0.1.0-rc.6(web profile,Windows 11,Node 24)上验证。它依赖 loader 的内部模块缓存(loader.internal),vendored loader 默认暴露;若未来 dsh 移除该接口,插件会降级为 /reload 报告「loader internal is unavailable」。

安全

  • 监听器只读文件,自身不执行任何东西。
  • 重载失败会回滚,不会留下半挂载的插件。
  • 依赖变化退出是有意为之,退出前会在日志中说明。

本地构建

pnpm install        # 依赖 pnpm-workspace.yaml 的 overrides 以绕过上游 npm 缺失包
pnpm run build      # tsc 输出 lib/index.js

许可证

MIT