前言¶
DeepSeek Harness (DSH) 采用“一切皆插件”的架构,随着使用深入,官方内置插件与第三方社区插件的数量逐渐增多,混在一起管理变得不便。dsh-plugins-hub 在设置中为这两类插件提供独立的管理面板,支持从 npm、Git 等多种来源检查更新、一键更新、卸载及实时启停。
核心功能¶
- 分组管理:在“设置 → 插件”中,默认展开“第三方插件”,折叠“官方插件”。官方插件为只读清单,第三方插件支持查看详情与操作。
- 多来源支持:支持 npm、Git、本地链接等多种来源的插件管理。
- 安全机制:所有宿主路由仅接受本机回环请求,写操作需自定义头
x-dsh-plugins-hub。包名与 entry id 过白名单正则,使用execFile参数数组执行命令,避免命令注入。 - 受保护行保护:热重载链、Web服务链、设置面板及本插件自身不可被卸载或停用。官方内置插件只能停用,不可卸载。
安装与启用¶
安装插件需要通过命令行执行,安装后需重启 DSH Web 服务才能生效。
dsh plugin --profile web add dsh-plugins-hub
dsh web
安装完成后,进入 设置 → 插件 → 第三方插件 即可使用。
插件分组与判定¶
插件列表分为“第三方插件”和“官方插件”两组卡片。判定插件归属不看包名,而是看包实际落在哪里:
- 第三方:落在 profile 自己的
node_modules(含link:/file:依赖)。 - 官方:只经安装闭包
~/.dsh/profiles/node_modules解析到。 - 兜底:解析不到时,回退
@deepseek-ai/前缀启发式展示。
更新与生效时机¶
- 启用 / 停用:修改 profile 的
cordis.patch.yml。DSH 的配置热重载会在 1~3 秒内重组插件树,无需重启。 - 更新 / 卸载:等价于
dsh plugin --profile web add|remove,会同步dsh.profile.bundles。卸载非 bundle 插件会将insert行改为disabled: true。需要重启dsh web才会彻底生效。
支持的来源及其行为如下:
| 来源 | 检查更新 | 更新 | 卸载 | 启停 |
|---|---|---|---|---|
npm |
对比 registry 的 latest |
pnpm add <name>@latest |
✅ | ✅ |
git |
git ls-remote 对比 commit |
pnpm add <原 spec> |
✅ | ✅ |
link: / file: |
读取目录 git 状态 | 若工作区干净,git pull --ff-only |
✅ | ✅ |
| 官方内置 | — | — | ❌ | ✅(写入补丁层) |
安全机制¶
- 网络边界:所有宿主路由仅接受本机回环请求,校验 Host / Origin。写操作还要求自定义头
x-dsh-plugins-hub。 - 命令执行:不使用 shell 拼接命令,全部走
execFile参数数组。 - 受保护行:热重载链(
cordis-plugin-timer/cordis-plugin-hmr)、Web 服务链(dsh-host-webserver/dsh-web-app等)、设置面板及本插件自身,不能被停用或卸载。
架构说明¶
宿主半边不 import 任何 @deepseek-ai/* 包,全部按鸭子类型消费(loader.entries()、webServer.register),因此不需要 peer 依赖闭包,也能跨 DSH 版本继续加载。