前言¶
DSH 的插件体系里,一个 web profile 可能同时包含系统插件、界面插件、工具插件、自己添加的扩展包,以及当前会话临时创建的动态插件。原生插件列表更像一张长名单,不容易分辨哪些属于系统插件,哪些属于用户插件,也不方便查看说明和做卸载收尾。
dsh-pluginmanager 是一个面向 DSH web profile 的设置页插件。它把插件整理成原生扩展、用户扩展、运行中(临时)三层视图,并提供可编辑描述、补登记、停用/启用和卸载管理。下面介绍它的功能、安装方式和注意事项。
这是什么¶
dsh-pluginmanager 由 zdjmrq 维护,npm 包名与 GitHub 仓库名均为 dsh-pluginmanager,许可证为 MIT。项目与 DeepSeek 无隶属关系,属于社区插件。
它主要解决三件事:
- 把 DSH 插件按职责分层,减少在长列表里逐个找包名。
- 给用户扩展提供停用、启用、彻底卸载、补登记和未登记依赖标签。
- 为插件提供可编辑描述、搜索过滤、数量徽章和双语展示。
核心功能¶
三层架构视图¶
插件被分成三类:
- 原生扩展:只读展示,按系统层、WebUI 层、工具层组织,不提供卸载按钮。
- 用户扩展:可停用/启用、彻底卸载、补登记,并显示未登记依赖标签。
- 运行中(临时):展示当前会话中的动态 Cordis 插件,只读。
用户扩展管理¶
用户扩展里的操作会区分“临时不可用”和“彻底清理”:
- 停用/启用:只摘除或恢复激活行,保留配置,便于反悔。
- 彻底卸载:清理激活行、依赖声明和
node_modules中的相关内容,并做二次确认。卸载过程会通过dsh plugin --profile web remove做依赖/bundles 收尾,再清理 patch 行与描述。 - 补登记:对手工放入
node_modules但未登记到dependencies的插件,将其纳入依赖管理,使插件市场可识别。
描述、检索与展示¶
插件管理器内置 90+ 个核心原生插件的中文名和一句话简介。所有插件都支持编辑描述,保存位置为:
~/.dsh/profiles/web/plugin-manager/descriptions.json
界面上支持按名称、显示名、描述、来源搜索过滤,也支持折叠、数量徽章、中文名与包名并排、中英双语展示。对于由当前 agent 预设控制的工具插件启停,页面会标出预设感知信息,避免误读。
热切换与补丁写入¶
启用、停用、卸载会先把变更持久化到 cordis.patch.yml,再热切换运行中的 Loader 条目。声明 dsh.client.platform: web 的插件在切换成功后会自动刷新页面。
补丁编辑采用文本块级操作 cordis.patch.yml,保留注释与 !!js 表达式,并在写入前自动备份。Browser 半边在 settings.plugins.tab slot 注册,使用 React + CSS 变量。
安装与启用¶
安装步骤¶
1、进入 web profile 目录:
cd ~/.dsh/profiles/web
2、作为 bundle 安装插件仓库:
pnpm add "git+https://github.com/zdjmrq/dsh-pluginmanager.git"
3、把包名追加到 package.json 的 dsh.profile.bundles 列表末尾。需要添加的包名是:
"dsh-pluginmanager"
4、重启 dsh web 服务,然后进入:
设置 → 插件 → 插件管理
避免重复激活¶
只选一种安装方式,不要将 bundle 方式与手工 cordis.patch.yml 插入行混用。该插件自带 cordis.patch.yml;如果另外在 profile 的 cordis.patch.yml 中写入同样的插入行,启动会报:
duplicate loader entry id: pluginmanager
并拒绝启动。
排查时检查这两个位置,同一插件只应出现在其中一处:
~/.dsh/profiles/web/package.json的dsh.profile.bundles~/.dsh/profiles/web/cordis.patch.yml
如果从旧版 patch 行方式升级,先删掉 patch 里对应那一行,再安装 bundle。本地开发调试如果使用 file: 依赖指向仓库目录,同样不要叠加 patch 行。
典型用法¶
查看插件分层¶
进入插件管理页后,先看顶层折叠项和数量徽章,再展开对应层。对于原生扩展,重点看系统层、WebUI 层、工具层的划分;对于用户扩展,重点看是否有未登记依赖标签。
编辑描述¶
找到目标插件,点编辑描述,写入备注。保存后会落到 ~/.dsh/profiles/web/plugin-manager/descriptions.json。
处理未登记插件¶
如果某个插件是手工拷进 node_modules 的,可能没有写进 dependencies。在用户扩展里使用补登记,把它纳入依赖管理。之后插件市场也能识别它。
停用或卸载¶
如果只想暂时关闭某个用户扩展,使用停用/启用,配置会保留。如果要移除插件,使用彻底卸载,并按二次确认继续。卸载会涉及 cordis.patch.yml 和 package.json 的修改,写入前会有备份。
适用场景与注意¶
这个插件适合维护 DSH web profile、安装过较多扩展、需要区分系统插件和用户插件的人。
使用前建议注意:
- 它会在当前 dsh 进程中运行,并能读写 profile 下的配置文件。
- 卸载、停用操作会修改
cordis.patch.yml和package.json,每次写入前有备份;仍建议审阅源码后再使用。 - 热加载的即时生效等于让目标插件在本进程内重启一次;正在使用的会话状态,例如运行中的终端,会断开。
- 若运行中切换失败,操作已持久化,重启服务后仍会生效。
- 原生扩展不提供卸载按钮。
- 项目许可证为 MIT,并与 DeepSeek 无隶属关系。
链接¶
GitHub 仓库:https://github.com/zdjmrq/dsh-pluginmanager