dsh-pluginmanager:给 DSH Web 插件做分层、描述与卸载管理

前言

DSH 的插件体系里,一个 web profile 可能同时包含系统插件、界面插件、工具插件、自己添加的扩展包,以及当前会话临时创建的动态插件。原生插件列表更像一张长名单,不容易分辨哪些属于系统插件,哪些属于用户插件,也不方便查看说明和做卸载收尾。

dsh-pluginmanager 是一个面向 DSH web profile 的设置页插件。它把插件整理成原生扩展、用户扩展、运行中(临时)三层视图,并提供可编辑描述、补登记、停用/启用和卸载管理。下面介绍它的功能、安装方式和注意事项。

这是什么

dsh-pluginmanagerzdjmrq 维护,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.jsondsh.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.jsondsh.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.ymlpackage.json 的修改,写入前会有备份。

适用场景与注意

这个插件适合维护 DSH web profile、安装过较多扩展、需要区分系统插件和用户插件的人。

使用前建议注意:

  • 它会在当前 dsh 进程中运行,并能读写 profile 下的配置文件。
  • 卸载、停用操作会修改 cordis.patch.ymlpackage.json,每次写入前有备份;仍建议审阅源码后再使用。
  • 热加载的即时生效等于让目标插件在本进程内重启一次;正在使用的会话状态,例如运行中的终端,会断开。
  • 若运行中切换失败,操作已持久化,重启服务后仍会生效。
  • 原生扩展不提供卸载按钮。
  • 项目许可证为 MIT,并与 DeepSeek 无隶属关系。

链接

GitHub 仓库:https://github.com/zdjmrq/dsh-pluginmanager

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

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

小夜