Repository navigation
Releases: lilyblessing/dsh-mcp-skill-panel
Release list
dsh-mcp-skill-panel 0.6.0
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,再升级本插件。
⚠️ 破坏性变更
- 控制工具更名(PR #16,@ptyll):中间层控制工具由
mcp_search/mcp_call更名为dsh_mcp_search/dsh_mcp_call,旧名不再注册。原因是订阅网关把mcp_前缀当作 connector 保留名、使整个请求 400;本仓没有该调用通道、无法本地复现,按贡献者提供的 A/B/A 对照取证采信。原来:两个旧名可用。现在:只注册新名。你要做什么:更新提示词、自定义指令或脚本中的旧工具名。 arguments必须是 JSON 对象(PR #16,@ptyll):dsh_mcp_call的arguments由json收紧为object。原来字符串形态会被透明解析;现在被前置参数校验直接拒绝(must be an object),工具描述中「误传字符串会自动解析」一句同步删除。你要做什么:一律传对象本身,不要再传 JSON 字符串。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
- 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 themcp_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. argumentsmust be a JSON object (PR #16, @ptyll): declaredobjectinstead ofjson; string forms were parsed transparently before and are now rejected up front. Do: pass the object itself.POST /mcp/applyPendingneeds explicit confirmation: the body must carry{"confirm": true}, else 400; the panel button asks first too. Do: use the button or addconfirm.
🔁 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/toolBulkdoes one read-modify-write per batch.toolNamesis three-state: omitted = all tools in the current catalog; array = exact set ([]is a legal no-op); non-array or 0 matches = 400.ignoredToolNamesmakes 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): perproviderorprovider/model, resolvedprovider/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/commandwith live apply and startup materialization. dsh_mcp_searchlayered 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-facingmcp__*). - 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
envline cannot break the file. - Config intents never landing: materialization mistook an intent for an external edit and skipped the row silently;
lastAppliednow 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_searchsummary branch used the page size instead of the total tool count.- Duplicate rows and reaping races:
mcp/addde-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 on0.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
v0.5.3 — MCP/Skill 面板发布批次(2026-08-27)
✨ 新功能(承接 PR #5)
- MCP 快速迁移添加:面板粘贴其他 harness 的
mcpServersJSON(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、保留用户意图)——持久化闭环从此可靠 - 面板「生效时机」恒显「立即生效」:
/configGET 恢复只读开放(鉴权守卫只锁写操作) - 面板 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
mcp_call 调用链修复(参数双编码归一化 / 错误呈现 JSON / agent-object scope 钥匙)+ 2026-08-24 审计 P0-P2(reaper×call 竞态、双缓存统一、toggleSkill 退避、pending 分组读盘、preset 原子写、/config 鉴权回归修复)。详见 README 变更日志与观测站文档
v0.5.1
v0.5.1 — mcp_call 前缀防御
修复 mcp_call 双重前缀缺陷(PR #4):
tool参数误传注册全名 / 双重前缀自动归一化(新增normalizeToolName,循环剥离mcp__<server>__前缀)- 其他 server 的注册全名立即快速失败并提示裸名(不再白等
toolCallTimeoutMs60s/300s) mcp_callschema 描述注明裸名约定scripts/selftest-mcp.mjs新增 4 条回归断言(15/15 通过)- 宿主端到端验证通过(web profile 安装 + 重启实测)
发布:npm Trusted Publishing 自动发布(OIDC,provenance 自动附加)。
v0.5.0 — Prompt Cache P0/P1
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 自动附加)。