dsh-plugins-hub:DeepSeek Harness 插件分组管理与更新工具

前言

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 版本继续加载。

参考资源

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

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

小夜