dsh-plugin-groups · 插件分组视图
给 DeepSeek Harness(DSH)的「已安装插件」页加一个 「我的分组」标签页,让你按自己的方式整理插件。
本插件仅调用 DSH 官方的插件管理接口实现。
能做什么
- 分组:把插件拖进自定义分组,组之间也可拖拽排序
- 搜索:按插件名、分组名、标签、备注实时过滤,分组名命中时整组展开
- 一键批量开关:整组「全部启用 / 全部停用」,逐条按序执行,带进度
- 预设快照:两个槽位,一键保存/恢复整套配置(开关、组件、分组、备注、标签),带进度条
- 组件健康检测:插件开着但内部零件没跑齐时会标出来(
组件 2/3) - 彩色文字标签:给插件贴「工具型 / 界面型 / 桥接型」这类文字标签,9 种颜色
- 中文备注:写一句备注,覆盖插件的英文原始简介
- 真实开关:显示每个插件的真实启用/停用状态,并在本页直接切换
- 分组锁定:锁定后整组固定,不能拖动、改名、删除、启停(「详情」仍可打开)
- 自动隐藏内核插件:只列用户可管理的插件,DSH 内核那些不可开关的不出现
界面一览
+ 新建分组 ↻ 刷新 ⌕ 搜插件、分组、标签、备注 │ ▾ 全部展开 🗂存为预设 ⚡恢复预设
▾ 工具型插件(组名) 3/5 ⚡全部启用 ⛔全部停用 +添加插件 🔓 🗑
● dsh-click [工具型] [吃token] ↗详情 🏷标签 ✎备注 ↩移出 [已启用]
● modsearch [工具型] ↗详情 🏷标签 ✎备注 ↩移出 [已禁用]
恢复预设时,工具栏下方会出现一条进度条,按真实的开关调用逐格推进
(正在恢复预设 1:启用「dsh-notes」 34%),跑完自动消失。
更新记录
v0.3.2
- 去掉面板上的版本号:工具栏末尾不再显示
v0.3.1。装在哪个版本在官方插件页能看,
工作面板里挂个版本号只是噪音 - 预设恢复补上进度条:一次恢复可能要开关几十个插件(每个插件一次官方接口调用),
工具栏下方显示百分比进度条 + 当前在处理哪个插件,逐条推进,不会让界面看起来卡死。
按钮文字同时从「应用预设」改成「恢复预设」 - 恢复前把代价说清楚:确认框会列出「启用 N 个、停用 N 个插件、N 个组件」,
以及会不会覆盖现有分组 - 「不需要改动」判断更准:开关、分组、备注、标签全都没差异时才提示,
不再出现「改了 0 处开关」这种自相矛盾的结果 - 分组重建逻辑拆成纯函数
rebaseGroup/presenceOf,不依赖 React,可脱机验证 - 修复:锁定分组导致预设存不进开关(重要)
- 症状:把分组全部锁定后存预设,恢复时插件开关毫无反应
- 原因:快照的范围筛选错误地排除了「锁定分组的成员」,全锁的用户存出来是一份空开关表
- 定位思路纠正:分组锁定防的是人为误点,不是禁止预设记录状态。
同页面的单行开关、批量按钮在锁定组里是灰的(防误触),
但预设快照不是点击动作,它是你主动要求「回到那一刻」 - 现在:锁定成员照常记录、照常恢复;手动按钮仍受锁定保护
- 预设的记录范围不变:开关、组件、分组、备注、标签全都存,恢复时全部还原。
存预设时开着的插件,恢复后就一定是开着的——这是预设的本来意义
v0.3.1
- 修复
package.json的 BOM:v0.3.0 因文件头带 BOM,DSH 安装校验时JSON.parse报错,装完会被回滚
v0.3.0
- 新增搜索:顶部工具栏一个搜索框,实时过滤插件和分组
- 可搜:插件名(中文标题 + 包名)、分组名、标签、备注、插件简介
- 分组名命中时整组显示,而不是只显示组内碰巧匹配的插件
- 所在的组会自动展开;清空后恢复原来的展开/收起状态
- 计数始终显示整组真实数量——搜索是看的角度,不改数据
Esc或右侧×清空- 工具栏版本号改为读
package.json:原来显示的是客户端构建戳,看不出装的是哪个版本
v0.2.3
- 分组一键批量开关:每个分组标题旁新增「全部启用 / 全部停用」
- 逐条按序调用官方接口,带
done/total进度 - 遵守锁定的分组、无法切换的插件、已在目标状态的插件都会被跳过
- 按钮会根据「还有几个要改」自己禁用,两个方向不会同时可点
v0.2.2
- 修复应用预设后锁定分组成员被踢进「未分组」的 bug(新增
present字段区分「存在」与「可开关」)
v0.2.1
- 数据改存
DSH_HOME/dsh-plugin-groups/,更新插件不再丢分组
v0.2.0
- 预设快照:两个固定槽位,一键保存/还原整套配置
- 组件健康检测:插件开着但内部零件没跑齐时会标出来
- 分组标题圆点:表示组内组件的健康度,独立于插件级计数
- 第三方数量统计:工具栏统计条显示非官方插件数
安装
方式一:从 npm 安装(推荐)
在 DSH 的插件管理器里搜索 dsh-plugin-groups 安装即可,或命令行:
npm install dsh-plugin-groups
方式二:从 GitHub 安装
npm install github:lerwa2025-a11y/dsh-plugin-groups
方式三:本地目录安装
- 把这个仓库克隆到本地任意目录
- 在 DSH 的插件管理器中选择「从本地目录安装」,指向本目录
- 安装后在「设置 → 插件 → 我的分组」即可看到
> 说明:本仓库同时提供源码;npm 上的包名是 dsh-plugin-groups。
数据存哪
插件把你的分组、标签、备注存在 DSH 的 profile 目录下一份 JSON 文件(plugin-groups.json),而不是浏览器缓存,所以换电脑、清缓存都不丢。
数据在 DSH_HOME/dsh-plugin-groups/,不在插件包内——升级或卸载插件都不会丢掉它。想连数据一起清,手动删这个文件夹。
技术要点(给想改的人)
- 纯原生实现,无构建工具,无 npm 依赖
- Client 半(
client.js)提供全部界面;Host 半(index.js)只提供一个小 HTTP 路由落盘
(路由仍顺带返回包版本号,但 v0.3.2 起界面已不显示它,只为兼容老 Host 保留) - 预设恢复三趟活,顺序不能换:① 插件开关(每个一次
setBundleEnabled)② 组件开关
(只对预设里要开的插件做,setPluginEnabled)③ 分组结构 + 备注 + 标签(纯本地数据)。
恢复流程必须串行调用官方接口——官方 API 每次调用写一次 patch 文件,并发写会做出半套预设 - 可开关范围有边界:只有「本插件自己、内核插件、无地址行」不参与开关恢复,
但它们的存在性由present字段单独记录,否则分组重建时会被误判为"不存在"而踢进未分组 - 「分组锁定」不进
presetScope:锁定是 UI 层防误触(灰掉单行开关和批量按钮),
presetScope回答的是「这个插件能不能通过官方接口开关」,两件事不能混。
混过一次的后果:全锁用户存出空开关表,恢复无力 - 分组重建逻辑是纯函数(
rebaseGroup/presenceOf),可以不开浏览器写脚本验证 - 插件状态通过官方
ctx.remote.pluginManager读写,与官方页面完全一致 - 内置错误边界:界面出错时显示错误信息而非白屏
- 数据只走官方接口 + 本地 JSON,不联网、不上传
许可证
MIT © lerwa2025-a11y