Releases: SeverusZh/dsh-skills-mcp-group-manager
Releases · SeverusZh/dsh-skills-mcp-group-manager
Release list
v0.3.0 — 修复关闭 MCP 时管理器卡死
🐛 修复:关闭 MCP 服务器导致整个 dsh 进程卡死
根因:applyMcpRestrictions() 同步重入死循环。tools.restrict() 会同步发出 tools/change(ScopedLayers.effect 在层变更后立即通知),而插件的 tools/change 监听器会重入 applyMcpRestrictions。由于 restrictDisposers 的 map 条目在 restrict() 返回后才写入,重入调用看不到当前限制,算出相同的 deny 集合后再次调用 restrict() —— 无限同步递归 → 栈溢出 → 整个 dsh 进程冻结(关闭工具在线的 MCP 服务器时触发)。
修复:
- 每 agent 重入保护(
applyingRestrictionsSet) - 先删后弃:disposer 调用前先删除 map 条目(disposer 清理也会同步 emit
tools/change)
验证:
- 新增
tests/restrict-reentrancy.test.mjs(2 个回归测试,旧代码下均复现Maximum call stack size exceeded) - 全套 47 个测试通过
- Cordis Plugin 探针在真实宿主进程内验证:旧代码 762 次递归 → RangeError;修复后 1 次 restrict 干净终止
- 线上实测:启用 github(44 工具在线)→ 禁用 → 干净完成,进程健康
v0.2.5 — 修复 manager_groups_list 输出泄漏 / Fix manager_groups_list output leak
🐛 修复 / Fix
manager_groups_list 一直报错:value.mcp is not a declared property。
- 根因:工具 execute 返回整个 state(含 mcp),但输出 schema 只声明了 groups。
- 修复:只返回 { groups }(MCP 数据由 manager_mcp_list 提供)。
- 新增回归断言:verify-boot 直接调用工具验证返回对象不含 mcp 字段。
✅ 验证 / Verified
- 45/45 测试全绿。
- verify-boot 真实启动全绿(含新的 no-mcp-leak 断言)。
📦 安装 / Install
v0.2.4 — 批量技能操作提速 / Fast bulk skill grouping
⚡ 优化 / Optimization
添加/移除技能不再逐个串行请求。
- 客户端一次 RPC 发送全部技能名(
{ id, skills: [...] }),宿主一次写入 + 一次目录失效。 - 之前 N 个技能 = N 次 HTTP 往返 + N 次磁盘写入,现在 = 1 次。
- 批量去重(含输入数组内部重复)。
✅ 验证 / Verified
- 45/45 测试全绿(新增批量状态操作测试)。
- verify-boot 真实启动全绿:批量添加(2 skills, 1 call, 去重)、批量移除、MCP 经 loader 挂载/卸载。
- Cordis 探针验证:客户端 bundle 正常、RPC 正常、无代码级其他问题。
📦 安装 / Install
cd ~/.dsh/profiles/web && pnpm update dsh-skills-mcp-group-manager --latest
sudo systemctl restart dsh-webv0.2.3 — 修复分组技能添加 bug / Fix group-skill add bug
🐛 修复 / Fix
分组添加技能时,分组 id 的字符被当成技能加入。
- 根因:GroupSection→GroupCard 的
onAddSkills包装器是单参数(names),但 GroupCard 以(group.id, names)双参数调用——包装器的names绑定到了分组 id,真正的技能名数组被丢弃,for (const name of names)逐字符迭代了分组 id。 - 修复:包装器改为双参数
(id, names) => onAddSkills(id, names)。 - 新增回归守护测试(防止单参数包装器回归)。
✅ 验证 / Verified
- 43/43 测试全绿。
📦 安装 / Install
cd ~/.dsh/profiles/web && pnpm update dsh-skills-mcp-group-manager --latest
sudo systemctl restart dsh-webv0.2.2 — 移除过时构建脚本 / Remove obsolete build script
🧹 更新 / Update
- 移除过时的
postinstall/scripts/setup-links.mjs(0.1.x 时代的依赖符号链接脚本)。 - 0.2.x 宿主零外部依赖,
dsh plugin add单命令即可,不再触发 pnpmallowBuilds拦截(消除ERR_PNPM_IGNORED_BUILDS)。 - 保留
postuninstall清理脚本(卸载时删除状态目录)。
📦 安装 / Install
dsh plugin --profile web add dsh-skills-mcp-group-managerv0.2.1 — 修复包名一致性 / Fix package-name consistency
🐛 修复 / Fixes
无法进入 DSH(改名后崩溃循环)的根因修复:
- 客户端 bundle 的注册 id 与 RPC 路径已统一为包名
dsh-skills-mcp-group-manager。 - 之前 bundle 仍以旧名
dsh-mcp-skill-manager注册,client-modules 模块图按包名解析失败 → 整个 Web 应用无法启动。 - 新增 3 个一致性守护测试(注册 id = 包名、RPC 路径一致、style 标签身份)。
✅ 验证 / Verified
- 42/42 测试全绿(含单命令安装的无外部依赖测试)。
- verify-boot 真实启动全绿:RPC 读写、22 skills、MCP 经 loader 动态挂载/卸载。
📦 安装 / Install
dsh plugin --profile web add dsh-skills-mcp-group-managerv0.2.0 — 单命令安装 / Single-Command Install
🚀 更新亮点 / Highlights
- ⚡ 单命令安装 / Single-command install — 宿主半插件零外部包依赖(仅 Node 内置模块),
dsh plugin add dsh-skills-mcp-group-manager一条命令即可完成安装,无需符号链接或构建步骤。 - 🖥️ 入口精简 / Streamlined entry — 移除侧边栏底部图标,仅保留会话头部右上角带 "Skills&MCPs" 标签的开关。
- 📖 README 美化 / Beautified README — 中英双语介绍 + 徽章。
✨ 功能 / Features
- 🎯 Skill 分组 — 创建/重命名/删除分组,分组可折叠;成员与挑选器均为列表 + 多选,支持搜索过滤后的全选/全不选与批量增删。
- 🧠 注入过滤 — 上下文只注入启用分组中出现的 Skill(并集去重,一次一个);未分组 Skill 默认不注入;切换分组实时刷新目录。
- 🔌 MCP 管理 — 枚举全部 MCP 服务器(profile 配置 + 用户新增),独立开关;用户新增的 MCP 动态挂载并持久化,重启自动恢复。
- 💾 持久化 —
~/.dsh/mcp-skill-manager/state.json(原子写),下次会话默认沿用上次分组设置。
📦 安装 / Install
dsh plugin --profile web add dsh-skills-mcp-group-manager🗑️ 卸载 / Uninstall
dsh plugin --profile web remove dsh-skills-mcp-group-managerv0.1.0 — DeepSeek Harness Skills & MCPs Group Manager
首个发布版本。
功能
- Skill 分组:创建/重命名/删除分组,分组可折叠;成员与挑选器均为列表 + 多选,支持搜索过滤后的全选/全不选与批量增删。
- 注入过滤:上下文只注入启用分组中出现的 Skill(并集去重,一次一个);未分组 Skill 默认不注入;切换分组实时刷新目录。
- MCP 管理:枚举全部 MCP 服务器(profile 配置 + 用户新增),独立开关;用户新增的 MCP 动态挂载并持久化,重启自动恢复。
- 持久化:
~/.dsh/mcp-skill-manager/state.json(原子写),下次会话默认沿用上次分组设置。 - UI:对话框左侧分组管理面板 + 会话头部开关(带 Skills&MCPs 标签)+ 侧边栏底部固定开关。
安装
dsh plugin --profile web add dsh-skills-mcp-group-manager
node <插件目录>/scripts/setup-links.mjs卸载(数据随插件一并删除)
dsh plugin --profile web remove dsh-skills-mcp-group-manager