dsh-plugin-groups:插件页「已安装」列表的分类 Tab 与补丁嵌套

前言

DeepSeek Harness(DSH)采用「一切皆插件」的架构,装得多了之后,设置里「插件」页的「已安装」往往是一长列卡片,按安装顺序堆在一起。要找界面类、工作流类或某个补丁插件,只能肉眼扫标题;补丁类插件和它所修补的父插件也常常是两条独立卡片,关系不直观。下面介绍社区插件 dsh-plugin-groups(维护者 p56568833,分类:客户端):它在官方插件管理 UI 之上加一行分类 Tab,并把「只用来 patch 另一个包」的插件缩进显示在父插件下方,纯展示层改动,不读写配置、不写文件、不发网络请求。

这是什么

dsh-plugin-groups 是面向 DSH 桌面端与 Web 端的客户端插件(npm 包名 dsh-plugin-groups,当前资料中版本 0.1.0,MIT 许可证)。它不改变 DSH 或其它插件的行为,只在插件页的 Installed 列表上增加 Tab 筛选与补丁嵌套展示;禁用或卸载后,页面与未安装前一致。

核心功能

分类 Tab

在「已安装」列表上方增加一行 Tab,资料中列出的分类包括:All、Appearance & UI、Usage & account、Models & subscriptions、Memory & context、Tools & abilities、Tasks & workflow、Market & install。点某个 Tab 只显示该分类下的插件;选中项按浏览器保存在本地,安装/卸载后 Tab 上的数量会随之更新。无法匹配任何规则的插件归入 Other,且始终排在最后。Tab 文案随插件页语言(例如页标题为中文时 Tab 为中文,否则为英文)。

补丁嵌套在父插件下

若某插件存在仅为 patch 另一个包而安装,它会显示在被 patch 的父插件卡片正下方:缩进、用细线 └ 连接,并标 Patch;父插件会显示 N patches。补丁跟随父插件所属分类。若父插件未安装,补丁仍按普通卡片单独展示。

视觉与官方一致

Tab 行样式对齐官方设置页 Tab(间距、字号、下划线、焦点环等),并只使用 DSH 设计 token,以便随浅色/深色及第三方皮肤变化。

纯显示、无侵入

无 slot、无配置界面、不写文件、无网络。不修改其它插件或 DSH 本体逻辑。

安装与启用

安装命令以仓库 README 为准。桌面与 Web 需分别指定 profile;安装后需完全退出并重开 DeepSeek Harness,或重启 dsh web 并刷新页面。

# desktop app
dsh plugin --profile desktop add github:p56568833/dsh-plugin-groups
# web
dsh plugin --profile web add github:p56568833/dsh-plugin-groups

卸载可在插件页操作,或使用:

dsh plugin --profile desktop remove dsh-plugin-groups

(Web 端卸载方式以你当前 DSH 文档为准;README 示例针对 desktop profile。)

典型用法与自定义

日常用法

  1. 按上面步骤安装并重启客户端或 Web。
  2. 打开设置 → 插件,在「已安装」列表上方使用分类 Tab 筛选。
  3. 若你使用了作者示例中的 patch 关系(且父、子插件均已安装),会在父插件下看到嵌套的补丁行;否则仅享受 Tab 分类。

改分类与 patch 映射

自定义逻辑集中在 client.js 文件顶部两张表:

表名 作用
CATEGORIES Tab 顺序即数组顺序。packages 为精确 npm 包名(优先匹配);keywords 为包名上的正则,便于以后新装的插件自动归类。匹配依据是包名,不是界面上的显示标题(标题会随翻译插件或语言变化)。
PARENTS patch 包名 → 父包名。为你使用的每个 patch 插件增加一行。仓库自带条目是作者环境中的示例,仅在对应插件都安装时才会出现,例如:dsh-skin-fixes、dsh-cn-greeting → dsh-claude-style;dsh-story-progress → dsh-story-turing;dsh-market-sidebar → dshmarket。

实现要点(便于排查)

插件针对官方 @deepseek-ai/dsh-client-ui-plugin-manager 的 DOM 约定工作,例如 [data-plugin-panel]、[data-plugin-group="bundles"] ul、li[data-plugin-package="<npm name>"]。Tab 行作为列表第一个子元素插入(order: -1);筛选通过对卡片设 display: none;嵌套只调整 flex order 与 data-dsh-pg-* 标记,不移动 DOM 节点。MutationObserver 在 React 重绘后重新应用,并忽略自身变更。若 DSH 升级后 hook 消失,插件会停止生效并在控制台打一条 warning。

诊断可在 <html> 上查看:data-dsh-plugin-groups 取值为 idle / flat / active:N / broken / renamed;data-dsh-plugin-groups-tab 为当前 Tab。选中 Tab 保存在 localStorage["dsh-plugin-groups/tab.v1"]。

仓库提供本地校验:

node verify.mjs

在假 DOM 上跑 Tab 与嵌套行为;在 macOS 且已安装桌面应用时,还会从 app.asar 读取官方 plugin-manager 源码以断言 DOM hook 仍存在。

适用场景与注意

适合谁: 经常安装大量 DSH 插件、希望在「已安装」里按类别浏览,或希望 patch 插件与父插件视觉上成组的开发者与用户。

权限与安全: 插件以当前 DSH 进程权限在客户端运行。虽 README 说明其不触网、不改其它插件,安装前仍建议阅读 GitHub 仓库 源码与 MIT 许可证,自行判断是否满足你的环境要求。

生态说明: 社区插件目录(如 SkillHub 上的条目)是独立站点,与 DeepSeek / 幻方无官方从属关系;本文介绍的是社区维护的 UI 增强,不是 DSH 内置功能。

结尾

dsh-plugin-groups 解决的是「已安装插件列表难浏览、patch 关系不直观」的问题:一行分类 Tab、补丁嵌在父插件下、卸载即恢复原版列表。更多信息见 SkillHub 目录页 与 GitHub:p56568833/dsh-plugin-groups。

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

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

小夜