lerwa2025-a11y/dsh-plugin-groups

dsh-plugin-groups

在 DSH「已安装插件」页新增「我的分组」标签页:自定义分组与拖拽排序、彩色文字标签、中文备注、分组锁定、真实启停开关,以及两个预设快照槽位。

未分類deepseek-harnessdshplugin-manager

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

方式三:本地目录安装

  1. 把这个仓库克隆到本地任意目录
  2. 在 DSH 的插件管理器中选择「从本地目录安装」,指向本目录
  3. 安装后在「设置 → 插件 → 我的分组」即可看到
说明:本仓库同时提供源码;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