dsh-plugin-manager
DeepSeek Harness 插件管理:在设置面板查看已安装插件,支持停用/启用与卸载。
安装
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:HTUP1/dsh-plugin-manager说明文档
阅读完整 README ↗dsh-plugin-manager
DeepSeek Harness 插件管理 —— 在设置面板中查看已安装插件,支持停用 / 启用 / 卸载,中英双语界面。
功能
- 📋 已安装插件一览:名称、版本、安装方式(pnpm 市场安装 / 手动安装)、启用状态一目了然
- ⏯️ 停用 / 启用:立即生效,并持久化到 profile 的 bundles 注册列表(重启后保持)
- 🗑️ 卸载:
- pnpm 插件:通过
dsh plugin remove彻底删除包文件 + 移除注册 - 手动安装插件:移除注册并停用,
node_modules中的文件保留 - CLI 删除失败时自动降级为「软卸载」(移除注册 + 停用),并展示 CLI 错误信息
- pnpm 插件:通过
- 🛡️ 自保护:插件市场(
dshmarket)与插件管理自身不能被本页面卸载(提示改用 dsh CLI) - 🌐 中英双语:跟随 DSH 界面语言自动切换
- ⚠️ 状态提示:区分「已停用但重启后会回来」「已注册但重启后才生效」等中间状态,不误导用户
界面位置
安装后在 DeepSeek Harness 的设置(Settings)面板左侧出现「插件管理」页(settings.section,order 45)。
架构
┌─────────────────────────────┐ RPC channel: /plugin-manager-cmd
│ Client (浏览器端) │ ──────► Host (dsh 进程内, trusted-host)
│ lib/client.js │ list / setEnabled / uninstall
│ React 组件 + 中英字典 │ ◄────── 直接读写 profiles\
\package.json
└─────────────────────────────┘ 通过 loader 热切换插件挂载
Host —— lib/index.js
- 以 trusted-host 权限注册 RPC 频道
/plugin-manager-cmd(connection.rpc.handle) - 直接读写 profile 的
package.json(dependencies +dsh.profile.bundles) - 通过
loader.entries()找到插件条目并调用entry.update({disabled}, false, true)实现运行中即时停用,无需重启 - pnpm 插件卸载时重新调用启动宿主进程的 dsh CLI(
dsh plugin remove --profile),自动识别bin.js入口;对插件名做TARGET_RE白名单校验,输出流截断防爆内存,15 分钟超时保护
Client —— lib/client.js
- 预构建的
window.__ModuleLoader__.load()模块,require('react')渲染插件列表 - 注册
settings.section「插件管理」页,中英文字典经ctx.locale.register/bind提供 - 每个插件一行:名称 / 版本 / 状态徽标 / 安装方式 / 自保护与自身标记 / 描述 / 停用·启用·卸载按钮(卸载需二次确认)
安装
本插件以 DSH 插件包形式安装到 profiles:
- 将本包放入
profiles\node_modules\dsh-plugin-manager - 在
profiles\web\package.json的dependencies与dsh.profile.bundles中登记dsh-plugin-manager - 重启 dsh web(或经市场安装)
插件需要 DSH 宿主提供
loader、connection、slots、locale服务与dsh-client-*客户端依赖。
安全设计
- 插件名参数经
TARGET_RE(^[A-Za-z0-9@:./_#+-]+$)白名单校验,拒绝路径穿越等恶意输入 - 卸载/停用前校验插件确实在
dependencies中 - 自身与插件市场受保护,避免自杀式卸载
- 所有 RPC 返回统一
{ ok, value | error }结构,异常不外泄堆栈