前言¶
DeepSeek Harness(DSH)的扩展能力通常以插件 bundle 的形式提供。对插件做安装、卸载、更新或启用/禁用后,如果每次都要重启实例,调试和切换配置会比较慢。
kyorakuyk/dsh-hotreload-plugin-manager 是一个树外 DSH 插件:它可以在运行中的实例上热安装、热卸载、更新、禁用/启用 profile 插件 bundle,并提供 Web 设置页标签页。下面介绍它的定位、安装方式和主要边界。
这是什么¶
这是一个由 kyorakuyk 维护的 MIT 许可证插件。
它的特点是:
- 零内核改动:纯树外 bundle。
- 双面包:一个 npm 包同时是 host 网关与浏览器设置标签页。
- 提供 Web 设置页标签页:设置 → 插件 → 插件管理。
- 提供
/plugin-manager/*HTTP API,用于列表、安装、卸载、更新和启用/禁用。
它解决的问题是:在运行中的 DSH 实例上,对 profile 插件 bundle 做生命周期管理,而不是每次都在外部改完配置后重启实例。
核心能力¶
下面介绍已确认的主要能力。
热安装 bundle¶
支持按 spec 安装插件 bundle。可接受的来源形式包括:
- npm 包名
- git URL
github:owner/repofile:/link:路径
热卸载 bundle¶
卸载时会移除行与 fiber、清理依赖,并移除陈旧 bundle 层条目。
禁用 / 启用 bundle¶
已安装 bundle 可以被禁用或启用。状态持久化且立即生效。
热更新 bundle¶
热更新会替换 bundle 的补丁行并实时重放配置。
需要注意:这里热更新的是组合与配置,不是模块代码。模块代码或 exports map 变更仍需要重启。
Web 设置页¶
安装并启用后,可以在 Web UI 中进入:
设置 → 插件 → 插件管理
在这个标签页中,可以按 spec 安装其他插件,并对已安装项执行更新、禁用/启用、卸载。
HTTP API¶
插件提供 /plugin-manager/* HTTP API。常见操作包括:
| 操作 | 方法与路径 | Body 字段 |
|---|---|---|
| 列表 | GET /plugin-manager/list |
无 |
| 安装 | POST /plugin-manager/install |
{ spec } |
| 卸载 | POST /plugin-manager/uninstall |
{ packageName } |
| 更新 | POST /plugin-manager/update |
{ packageName } |
| 启用 / 禁用 | POST /plugin-manager/setEnabled |
{ entryId, enabled } |
安装与启用¶
前置条件:
- Node ≥ 22
- pnpm ≥ 10
- 已安装 dsh
- 已初始化目标 profile
下面以 web profile 为例。
1、安装本插件¶
可以直接从 GitHub 安装:
dsh plugin --profile web add "github:kyorakuyk/dsh-hotreload-plugin-manager"
也可以使用完整 git URL:
dsh plugin --profile web add "https://github.com/kyorakuyk/dsh-hotreload-plugin-manager.git"
如果希望本地克隆后安装,可以先克隆仓库:
git clone https://github.com/kyorakuyk/dsh-hotreload-plugin-manager.git
然后使用本地路径安装:
dsh plugin --profile web add "file:$(pwd)/dsh-hotreload-plugin-manager"
如果以 npm 包形式发布,也可以使用 npm 包名 spec。示例中出现的包名是:
dsh plugin --profile web add "@kyorakuyk/dsh-plugin-manager"
这个 npm 包名与仓库名不一致,使用前需要确认实际发布目标。
2、重启 dsh web 实例¶
安装本插件后,必须重启 dsh web 实例:
dsh --profile web
3、浏览器硬刷新一次¶
浏览器需要硬刷新一次:
Ctrl+Shift+R
4、打开插件管理页¶
进入 Web UI 后打开:
设置 → 插件 → 插件管理
完成上面的步骤后,就可以在这个页面管理其他插件 bundle。
典型用法¶
安装其他 bundle¶
在插件管理页中,按 spec 填写安装对象。可填写的来源形式包括:
- npm 包名
- git URL
github:owner/repofile:/link:路径
例如,本地路径形式可以是:
file:$(pwd)/some-dsh-bundle
这里只是说明 spec 形式;具体安装哪个 bundle,取决于你要引入的插件。
管理已安装 bundle¶
安装后,可以对已安装项执行:
- 更新
- 禁用
- 启用
- 卸载
禁用/启用会改变条目状态,并且状态持久化。
通过 HTTP API 操作¶
如果不在 Web UI 中操作,也可以调用 /plugin-manager/* 接口。
例如,查询列表:
GET /plugin-manager/list
安装一个 bundle:
POST /plugin-manager/install
{ "spec": "<bundle-spec>" }
卸载一个 bundle:
POST /plugin-manager/uninstall
{ "packageName": "<package-name>" }
更新一个 bundle:
POST /plugin-manager/update
{ "packageName": "<package-name>" }
启用或禁用一个条目:
POST /plugin-manager/setEnabled
{ "entryId": "<entry-id>", "enabled": true }
限制与注意事项¶
热更新不是替换模块代码¶
热更新替换的是组合与配置,不是模块代码。
如果 bundle 的模块代码或 exports map 变更,需要重启后才生效。
不要与 dsh plugin CLI 混用¶
不要与 dsh plugin CLI 对同一 bundle 混用。每个 bundle 只使用一种安装与清理机制,避免同一个 bundle 被重复组合。
行 id 冲突会被拒绝¶
如果补丁行 id 与用户层或其他 bundle 冲突,该 bundle 会被拒绝安装。
无法解析包名的 git spec 会失败¶
使用 git spec 安装时,如果无法解析出包名,会明确失败。
普通库会被拒绝¶
没有 dsh.bundle.patch 的普通库会被拒绝,并自动 pnpm remove 回滚。
旧安装格式不支持¶
旧的 .dsh-plugin / config.yaml 安装格式不支持。
非闭包 peer 由 bundle 作者负责¶
如果 bundle import 的 peer 既不在 profile 中,也不在 DSH 安装闭包中,其可用性由 bundle 作者负责。
远程信任需要注意¶
/plugin-manager/* 路由对任何能触达服务器的人都开放。
如果将实例暴露到局域网,不能依赖 /api 信任围栏的保护。暴露前需要先确认网络边界和访问控制。
pnpm minimumReleaseAge¶
pnpm ≥ 11 的 minimumReleaseAge 默认会拒绝刚发布的包。
管理器执行 pnpm 时会附加:
--config.minimumReleaseAge=0
安装前应检查源码与许可证¶
这个插件会在当前 dsh 实例中管理 profile 插件 bundle,并以当前 dsh 进程权限运行。
在安装其他插件前,应先检查目标 bundle 的源码、许可证和依赖来源。
链接¶
- 社区目录:https://www.skillhub.cn/plugins/kyorakuyk/dsh-hotreload-plugin-manager
- GitHub:https://github.com/kyorakuyk/dsh-hotreload-plugin-manager
该目录页是社区目录,不是官方应用商店;它作为独立站点列出插件,与 DeepSeek / 幻方无官方从属关系。