Skip to content

Releases: lilyblessing/dsh-mcp-skill-panel

dsh-mcp-skill-panel 0.6.0

Choose a tag to compare

@lilyblessing lilyblessing released this 16 Sep 15:26
3c06025

dsh-mcp-skill-panel 0.6.0

版本与兼容性:本版是上一个公开发布版 v0.5.3 之后的首个公开发布,合并了自 v0.5.3 以来的全部改动。适配 DSH 0.1.5-rc2:本版在 DSH 0.1.5-rc2 上开发与验证;若你仍停留在 0.1.0-rc8 等更早版本,请先升级 DSH,再升级本插件。

⚠️ 破坏性变更

  1. 控制工具更名(PR #16,@ptyll):中间层控制工具由 mcp_search / mcp_call 更名为 dsh_mcp_search / dsh_mcp_call,旧名不再注册。原因是订阅网关把 mcp_ 前缀当作 connector 保留名、使整个请求 400;本仓没有该调用通道、无法本地复现,按贡献者提供的 A/B/A 对照取证采信。原来:两个旧名可用。现在:只注册新名。你要做什么:更新提示词、自定义指令或脚本中的旧工具名。
  2. arguments 必须是 JSON 对象(PR #16,@ptyll):dsh_mcp_call 的 arguments 由 json 收紧为 object。原来字符串形态会被透明解析;现在被前置参数校验直接拒绝(must be an object),工具描述中「误传字符串会自动解析」一句同步删除。你要做什么:一律传对象本身,不要再传 JSON 字符串。
  3. POST /mcp/applyPending 需显式确认:请求体必须带 {"confirm": true},缺失即 400 并附费用说明。原来一次裸 POST 即可作废 next-session 的「零缓存失效」承诺;现在面板按钮也改为先弹确认对话框。你要做什么:改用面板按钮,或在自有脚本中补上 confirm。

🔁 升级提示

更新插件后必须重启 DSH(如 dsh web)才会生效:客户端 bundle 只在启动时合成;只更新插件不重启,新前端会向尚未注册的端点发请求并显示降级提示。

新增功能

  • 工具级批量启停(PR #17,@ptyll):POST /mcp/toolBulk 一次读-改-写落整批,可按筛选条件或全量启停某个 server 的工具。toolNames 为三态契约:省略 = 该 server 当前目录全部工具;显式数组 = 精确集合([] 为合法空操作,不写盘);非数组、或非空却 0 命中 = 400。响应回传 ignoredToolNames,让目录漂移可见。
  • 有效统计(PR #17,@ptyll):工具数与 token 数并列给出「目录总数」与「工具级启用数」,与装配过滤同源谓词复算。口径边界:只扣工具级禁用,不扣 server 级隐藏与项目工作区过滤。
  • 工具预算 toolBudget(PR #17,@ptyll):设定工具数红线,比较对象是全部工具(含 read/edit/bash/skill 等非 MCP 工具),超线卡片告警;数据源优先请求面真实装配数据,取不到时回落注册表并在卡片上标注来源。
  • AI 中间层按模型分流 autoManageByRoute(PR #17,@ptyll):按 provider 或 provider/model 分别启用中间层,查表序 provider/model → provider → autoManage 总开关;覆盖项为真时即使总开关关闭也会挂载中间层。
  • middleLayerHides(PR #17,@ptyll):隐藏范围可选 'disabled'(默认,只隐藏停用的 server)或 'all'(连已启用的 server 也从模型装配面隐藏,统一经中间层取用);只改本次装配的可见性,工具注册表与 dsh_mcp_call 执行通道不受影响。
  • GET /models 目录端点 + 可折叠 provider/模型目录:覆盖卡此前只能列当前路由与已存在的覆盖键,而面板绑定宿主侧首个会话,多会话并存时往往不是用户正在用的那个;目录让任意 provider/模型都能预置规则、不必先切到它。
  • 行级「更多配置」:可在面板编辑 cwd / env / args / command 等挂载参数,支持热应用与启动物化;适合按 cwd 认项目的 MCP server。
  • dsh_mcp_search 分层检索:先给精简能力面、再按需展开完整 schema,减少上下文膨胀,同时告诉模型该调哪个工具。

体验优化

  • DSH 兼容性改造:适配 DSH 0.1.2-rc.1 起的 preset 挂载模型 —— 经 preset standing 句柄通路恢复「全部关闭 + 模型按需临时拉起 + 用完自动回收」,并新增网关常驻隔离挂载(open 的 server 由网关自托管拉起,子视野隔离模型面 mcp__*)。
  • 每回合可见性过滤:在装配期按 server 状态过滤 mcp__*,工具注册表与执行通道不受影响。
  • AI 临时启用可辨识:模型临时拉起的行与用户自己打开的行此前外观相同,现以独立徽标区分。
  • 读数诚实化:行「已启用 + 子进程在跑 + 注册 0 个工具」时如实标红,不再用目录快照把故障渲染成健康;模型可见性徽标改为直投 / 经中间层取用 / 对模型隐藏三态。
  • 覆盖卡按「运行期 ∪ 持久化」渲染:中间层挂载失败致运行期覆盖表被清空时,已保存但未生效的键仍可见、可删,并标注「已保存,未生效」。
  • 面板列表完整可见:preset 补行始终执行并按 serverName 去重。
  • 「更多配置」抽屉跟随亮色主题。
  • 依赖安装脚本支持 POSIX 环境(PR #17,@ptyll)。

问题修复

  • 预设组合文件被写坏(P0 事故修复):物化写盘改为连同值区间一起重写,不再产生 env 孤儿行破坏组合文件结构。
  • 配置意图永不落地:启动物化曾把配置意图误判为「文件被外部改过」而整行跳过、且零提示;现改为继续走配置物化,lastApplied 改以文件事实为准。
  • 冷启动 MODULE_NOT_FOUND:修正部署目录的依赖解析基准。
  • DSH rc.1 下的空面板:preset 行不再出现在 loader 条目中导致面板列表为空,现以 standing 快照补行。
  • 停用 server 仍可被检索:能力表采集改走统一快照口径并覆盖 preset 行。
  • dsh_mcp_search 摘要分支工具数误用分页页大小,改用工具总数。
  • 重复行与回收竞态:mcp/add 去重覆盖 standing 行,prune 的存活集合也纳入 standing 行。
  • 中间层关闭链路:改为「关意图即拆、同轮不重建」,避免关闭后又被重建。
  • 关前补采拖慢关闭:补采加等待上限与前置守卫,不再被实例启动拖住。
  • 工具预算超线徽标配色:原引用了宿主不存在的主题令牌,背景会透明;已改用实际存在的令牌。

其他变更

  • 安全加固:全部写端点要求进程级令牌;GET/POST 回传对 env / headers 等敏感字段脱敏;占位符回写不再抹掉真值;applyPending 显式确认(见破坏性变更第 3 条)。
  • DSH 版本跟进:随 0.1.2-rc.1 调整类型导入与 peer 声明;本版在 0.1.5-rc2 上完成开发与验证。
  • 工程与发布:静态闸门串起类型检查、构建(两次产物字节一致)、契约校验与三套自测;自测基准改指真实闭包,显示逻辑拆为零依赖产物以便独立自测。

Full Changelog: v0.5.3...v0.6.0

Contributors

  • @ptyll — 控制工具更名与入参收紧、工具级批量启停、有效统计与工具预算、按模型分流与隐藏范围、POSIX 安装脚本
  • @lilyblessing — 仓库维护者

发布页:https://github.com/lilyblessing/dsh-mcp-skill-panel/releases/tag/v0.6.0


dsh-mcp-skill-panel 0.6.0

Version & compatibility: the first public release since v0.5.3, folding in everything changed since. Targets DSH 0.1.5-rc2 — developed and verified on it; if you are still on 0.1.0-rc8 or older, upgrade DSH first, then this plugin.

⚠️ Breaking Changes

  1. Control tools renamed (PR #16, @ptyll): mcp_search / mcp_call → dsh_mcp_search / dsh_mcp_call; old names are no longer registered. A subscription gateway reserves the mcp_ prefix as a connector name and fails the whole request with 400; we could not reproduce it locally and relied on the contributor's A/B/A evidence. Do: update tool names in prompts and scripts.
  2. arguments must be a JSON object (PR #16, @ptyll): declared object instead of json; string forms were parsed transparently before and are now rejected up front. Do: pass the object itself.
  3. POST /mcp/applyPending needs explicit confirmation: the body must carry {"confirm": true}, else 400; the panel button asks first too. Do: use the button or add confirm.

🔁 Upgrade Notice

Restart DSH (e.g. dsh web) after updating. Client bundles are composed at startup; without a restart the new frontend calls unregistered endpoints and shows a degradation notice.

New Features

  • Bulk tool toggling (PR #17, @ptyll): POST /mcp/toolBulk does one read-modify-write per batch. toolNames is three-state: omitted = all tools in the current catalog; array = exact set ([] is a legal no-op); non-array or 0 matches = 400. ignoredToolNames makes catalog drift visible.
  • Effective stats (PR #17, @ptyll): catalog total plus tool-level enabled count, same predicate as the assembly filter.
  • Tool budget toolBudget (PR #17, @ptyll): a red line over all tools (read/edit/bash/skill included); prefers request-face data, falls back to the registry, source labelled.
  • Per-route middle layer autoManageByRoute (PR #17, @ptyll): per provider or provider/model, resolved provider/model → provider → master switch; an override mounts the middle layer even with the master switch off.
  • middleLayerHides (PR #17, @ptyll): 'disabled' (default) or 'all' (hide enabled servers from the assembly too, routing everything through the middle layer).
  • GET /models + collapsible provider/model catalog: any provider/model can now be pre-seeded without switching to it first.
  • Per-row "More config…": edit cwd / env / args / command with live apply and startup materialization.
  • dsh_mcp_search layered retrieval: compact capability view first, full schemas on demand.

Improvements

  • DSH compatibility: adapted to the preset mounting model from DSH 0.1.2-rc.1 — the preset standing handle path restores "all servers off + pull-up on demand + reaping", plus a resident isolated gateway mount (a child scope isolates model-facing mcp__*).
  • Per-turn visibility filtering of mcp__* by server state; registry and execution path unaffected.
  • "AI (temp)" distinguishable from rows you enabled yourself.
  • Honest readings: enabled + running + 0 registered tools is flagged, not shown healthy from a snapshot; the visibility badge is three-state (direct / via middle layer / hidden).
  • Runtime ∪ persisted override keys: keys saved but inactive after a failed mount stay visible, deletable and marked "saved, not active".
  • Full row list: preset backfill always runs and de-duplicates by serverName.
  • The "More config…" drawer follows the light theme.
  • POSIX support in the setup script (PR #17, @ptyll).

Bug Fixes

  • Preset composition file corruption (P0): materialization now rewrites the value range too, so a stray env line cannot break the file.
  • Config intents never landing: materialization mistook an intent for an external edit and skipped the row silently; lastApplied now reads the file's actual state.
  • Cold-start MODULE_NOT_FOUND: fixed the dependency-resolution base.
  • Empty panel on DSH rc.1: standing snapshots backfill preset rows absent from loader entries.
  • Stopped servers stay searchable: capability collection covers preset rows.
  • dsh_mcp_search summary branch used the page size instead of the total tool count.
  • Duplicate rows and reaping races: mcp/add de-dup and prune cover standing rows.
  • Middle-layer close path: tears down on intent in the same turn instead of rebuilding it.
  • Pre-close collection stalling shutdown: now bounded by a wait limit and a guard.
  • Over-budget badge colours referenced a non-existent host theme token; fixed.

Chores

  • Security hardening: per-process token on write endpoints; sensitive-field redaction; placeholders no longer overwrite real values.
  • DSH version tracking: type imports and peers aligned with 0.1.2-rc.1; verified on 0.1.5-rc2.
  • Engineering & release: one gate chains typecheck, build (two builds byte-identical), contract checks and three self-test suites.

Full Changelog: v0.5.3...v0.6.0

Contributors

  • @ptyll — control-tool rename and argument tightening, bulk tool toggling, effective stats and tool budget, per-route middle layer and hidden range, POSIX setup script
  • @lilyblessing — repository maintainer

Release page: https://github.com/lilyblessing/dsh-mcp-skill-panel/releases/tag/v0.6.0

v0.5.3

Choose a tag to compare

@lilyblessing lilyblessing released this 27 Aug 18:03
20f2103

v0.5.3 — MCP/Skill 面板发布批次(2026-08-27)

✨ 新功能(承接 PR #5)

  • MCP 快速迁移添加:面板粘贴其他 harness 的 mcpServers JSON(Claude Code / Codex 等)→ 转换预览 → 一键添加为全局(写入 profile patch)或项目(.dsh/mcps/mcp.json);type/transport 自动推断、${VAR} 环境变量自动插值(全局走 !!js 模板、项目挂载时解析)
  • 项目级工作空间 MCP:读取 <工作空间>/.dsh/mcps/**/mcp.json(根目录先读、子目录按 serverName 覆盖)→ 仅该项目工作空间的会话可见(按会话 cwd 过滤);文件改动热更新;面板行带 workspace 标记
  • 工具级禁用:在 server 级启停之上按工具精确控制——mcp_search 检索过滤、mcp_call 直接拒绝并提示;按工作区作用域隔离(A 区禁用不影响 B 区)
  • 创建技能:名称/描述/指令三栏,全局(~/.dsh/skills)或项目根(向上找 .git);可上传 SKILL.md 自动解析 frontmatter 预填

🐛 修复

  • obsidian 设置重启丢失事故:setRowFlag 支持 disabled: false → true 反转(此前物化 no-op 却乐观更新状态)+ 外部修改判定不再删除 state 条目(对齐 lastApplied、保留用户意图)——持久化闭环从此可靠
  • 面板「生效时机」恒显「立即生效」:/config GET 恢复只读开放(鉴权守卫只锁写操作)
  • 面板 live server 显示「无工具」(filesystem 等):HTTP 路径的 scope key 解析改为进程级共享缓存(apply 早期解析一次,快照/面板全路径复用)——聚合、工具列表、状态徽标全部恢复
  • 工具级禁用 UI 对任意 server 可用:schemas 视图缺失时以 catalog 快照兜底构建工具列表
  • 状态徽标:active/idle 以真实注册工具判定,不再用 catalog 回填值掩盖故障现场

⚡ 性能

  • 装配过滤空表快速通道:无工具禁用/无项目 MCP 时每回合开销 42ns(此前 7450ns,约 177x)
  • 面板聚合/工具列表复用 60s 共享缓存,无新增热路径

🔧 工程与 CI

  • CI 适配分支保护(protect-main ruleset):PR 一律全量跑 build(不再 paths 过滤);lib 自动回写改用 dsh-ci-bot App 凭据(实测 Bypassed rule violations);upload artifact 补 lib/mcp-convert.js
  • 发布前流程:独立审查(非 lite,BLOCK 无)+ 全链路回归 + 运行态 E2E 全绿
  • selftest 增补回归护栏:setRowFlag 反转 / mergeSchemas 去重 / computeStatus 表驱动

📦 安装

dsh plugin --profile web add "github:lilyblessing/dsh-mcp-skill-panel#main"

说明:x-panel-token 守卫的定位是防跨源盲写(DNS-rebinding 等);GET 只读端点(state/config/debug/token)保持开放。

v0.5.2

Choose a tag to compare

@lilyblessing lilyblessing released this 24 Aug 14:21

mcp_call 调用链修复(参数双编码归一化 / 错误呈现 JSON / agent-object scope 钥匙)+ 2026-08-24 审计 P0-P2(reaper×call 竞态、双缓存统一、toggleSkill 退避、pending 分组读盘、preset 原子写、/config 鉴权回归修复)。详见 README 变更日志与观测站文档

v0.5.1

Choose a tag to compare

@lilyblessing lilyblessing released this 23 Aug 12:07

v0.5.1 — mcp_call 前缀防御

修复 mcp_call 双重前缀缺陷(PR #4):

  • tool 参数误传注册全名 / 双重前缀自动归一化(新增 normalizeToolName,循环剥离 mcp__<server>__ 前缀)
  • 其他 server 的注册全名立即快速失败并提示裸名(不再白等 toolCallTimeoutMs 60s/300s)
  • mcp_call schema 描述注明裸名约定
  • scripts/selftest-mcp.mjs 新增 4 条回归断言(15/15 通过)
  • 宿主端到端验证通过(web profile 安装 + 重启实测)

发布:npm Trusted Publishing 自动发布(OIDC,provenance 自动附加)。

v0.5.0 — Prompt Cache P0/P1

Choose a tag to compare

@lilyblessing lilyblessing released this 21 Aug 10:45

v0.5.0 — Prompt Cache 优化(issue #1)

P0 — 中途开关必现警告:每次开关显示 inline 警示条(大包 >50 tools / >10k tokens 红色 severe 变体),提示当前会话 prompt cache 将失效(miss 费率约为 hit 的 5~12.5 倍),12s 自动消失可手动关闭。

P1 — 生效时机 immediate / next-session:next-session 只记录意图(state.json + pending 队列),新会话 agent/session-start 首次请求前或 DSH 重启物化时统一应用,当前会话零缓存失效零额外费用;面板提供「立即应用待生效变更」强制出口(含费用提示)。

P1 — toggleBatch 合并:400ms 窗口内多次开关合并为单次请求 + 单次 invalidateMcp;单项失败不再阻断整批。

修复:

  • applyPendingMcp 增加 state.json 残留兜底(重启/热重载后 desired 与 live 不一致自动补齐;外部修改行尊重现状并清除残留)
  • syncPresetFiles 物化后 lastApplied 同步(防二次启动误判外部修改放弃管理)
  • 警示条同色系可读性问题(label-primary 文本 + 染色背景 + 语义左边框)

测试:新增 selftest-pending(5 场景 P1 链路黑盒测试,CI 纳入);全套 typecheck/build/verify/selftest 通过。

其他:封面图更新为最新 UI;npm 随 GitHub Release 自动发布(Trusted Publishing OIDC,provenance 自动附加)。

v0.4.9

Choose a tag to compare

@lilyblessing lilyblessing released this 20 Aug 14:29

v0.4.9 — DSH rc.8 对齐 + npm 自动发布- 依赖对齐 rc.8 系:10 个 @deepseek-ai/* devDeps 0.1.0-rc.6 → 0.1.0-rc.8,peers 收紧(cordis ^4.0.1 / schemastery ^3.18.1 / dsh-scope ^0.1.0-rc.8);rc.8 全链路(typecheck/build/verify/selftest)实测通过- 通过 npm Trusted Publishing(OIDC,免 token)自动发布