# 发布说明 v0.6.0(运行时稳健性与 JSON 互通) [← 返回 README](../README.zh.md) | 相关:[v0.4.3 发布说明](v0.4.3.md) · [设计提案](../design/proposal-runtime-robustness-and-json-interop.md) · [本区间 TypeScript 审查](../code-review/ts-review-v0.4.3-to-v0.6.0.zh.md) · [审查落地复查(7e0088d…804662f)](../code-review/ts-review-7e0088d-to-804662f.zh.md) **发布日期**:2026-09-13 | **区间**:`v0.4.3 → v0.6.0` **规模**:PR #9(提案 A/B/C 组,C3 除外)+ 审查落地与 Sonar 拆分; `pnpm test` 六套全绿 v0.6.0 落地 [运行时稳健性与 JSON 互通提案](../design/proposal-runtime-robustness-and-json-interop.md)。 一次跳过中间的 0.4.4 / 0.5.0 切分,是因为 **B1 按需挂载改变了装载语义** (无会话项目不再常驻 stdio 子进程)。VS Code `.vscode/mcp.json` 只读层(C3) 本轮明确不做。 --- ## 亮点速览 | 主题 | 一句话 | |---|---| | ⚠️ 按需挂载 | 项目层只给有会话 ∪ 进程 cwd 的项目装载;无会话宽限 5 分钟后卸载,记 `idle` | | 连接自愈 | 当前 fiber 世代曾有工具、持续 0 工具才重挂;恢复清零;连续 3 次失败才 `give-up` | | 诊断摘要 + `status` | `{ summary?, events }`;CLI 不连宿主即可看层行数、idle / 不健康 / 预算 | | `dsh-mcp import` | 批量导入 `mcpServers`;同名锁内 skip;`--dry-run` 预演影子冲突 | | 工具过滤 / 预算 | 条目 `tools.allow`/`deny`;超阈值只告警不裁剪 | | JSON 互通 | 传输值域镜像官方 client;SSE 可执行报错;Gemini `httpUrl`;对方格式诊断 | | `projectMcp` 查询面 | 不稳定 API:内存快照进 enqueue,不读盘、不驱动对账 | --- ## 用户可见变化 ### 装载与运行时 - **按需挂载**:扫描与生效名仍按全量已知项目计算;项目层只给「有活跃会话 ∪ 进程 cwd」的项目发起装载。最后一次会话离开且该项目不是 cwd 后,宽限 5 分钟 再卸载服务器,保留条目与文件监听,行记 `skipReason: "idle"` 并进入 `summary.idle`(不算不健康;已有 `env-missing` 等更具体原因不覆盖)。 用户层仍宿主级常驻。 - **连接自愈**:曾经在**当前 fiber 世代**暴露过工具、后来 `mcpToolCount === 0` 且持续超过退避窗口时 unmount 再 mount。单次 0 工具边沿(`list_changed` 闪空)不拆连接;新一代首连窗口交给官方 client 内部重连。`tools > 0` 清 `remountCount` / `givenUp`(连续失败,不是寿命配额;连续 3 次无恢复才 `give-up`)。`disabled: true` / `enabled: false` 不复活。 - **配置指纹**:`mtimeMs+size` 加上当前 profile 名与排序后的宿主全局名未变则 跳过文件重读,仍跑巡检 / deny / 预算 / 摘要。运行中改 `DSH_MCP_PROFILE` 或宿主 patch 名集会失配并重读。 - **工具预算**:超过 `DSH_MCP_TOOL_BUDGET_WARN`(缺省 200 工具 / 256KiB)每次 越过阈值告警一次并写入诊断摘要,回落到阈值下会清门控。**永不裁剪**。 deny 展开与预算共用 `schemaToolId`(`name` 优先于 `id`)。 - **工具过滤**:条目 `tools.allow` / `tools.deny`(完整 glob;deny 优先)。 JSON 亦映射 `includeTools` / `excludeTools`。只改过滤不拆连接。完整 `mcp__…` 模式按**生效名**匹配(项目行改名后写死原名不会命中)。非法 glob (例如 `[z-a]`)按条目告警一次。 ### JSON / CLI - 传输值域镜像官方 client(`stdio` | `streamable-http`)。 - MCP SSE 端点传输给出可执行报错,不静默回退。 - 接受 Gemini `httpUrl` 与原生 `transport`;裸 `url` 在本插件仍是 Streamable HTTP(与 Gemini 相反,已文档化)。无 `type`/`transport` 时同时有 `command` 与 `url`/`httpUrl` 的条目报错,不当 stdio 静默装载。 - 对方 `{version, servers}` 存储格式写诊断并声明共存。用户层 watcher 监听 `$DSH_HOME/dsh-mcp.json`,创建即可诊断;该文件若已是本插件 `mcpServers` 方言,提示搬到 `mcp.json`,仍不从此路径装载。 - 诊断文件 `{ summary?, events }`;`rows` 按配置目录计。`dsh-mcp status` 打印层行数与摘要。`--scope project|user|profile` 只打印对应层与诊断文件 (`profile` 只列 profile 层,可再配 `--profile`)。idle 打成「未装载(无会话)」。 - `dsh-mcp import --from ` 批量导入 `mcpServers`(缺省 project, `--dry-run` / `--overwrite`;同名 skip/overwrite 在锁内判定)。 - `dsh-mcp add` 没有 `--allow` / `--deny`;过滤请写文件或用 `import`。 `list` / `get` 会展示已有过滤(只显示模式文本)。 ### 插件查询面 其它插件可经不稳定服务 `ctx.projectMcp`(`snapshot` / `serverView` / `globalState` / `reload`)读装载状态。查询进 enqueue、只读上一轮对账内存, 不读盘、不驱动对账。**不承诺 API 稳定**。 --- ## 审查收口 两轮 TypeScript 审查的高/中优先级项均已落地后再切 tag: - [v0.4.3 至 v0.6.0](../code-review/ts-review-v0.4.3-to-v0.6.0.zh.md) (H1–H2 / M1–M8) - [7e0088d 至 804662f 复查](../code-review/ts-review-7e0088d-to-804662f.zh.md) 余项(健康配额恢复清零、查询面内存快照、同世代 0 工具去抖、idle 不算不健康、 `status --scope profile` 等)在 `dcdcdab` 及后续 commit 关闭。 PR #9 后续的 Sonar 认知复杂度拆分不改变行为。 --- ## 升级 - **行为变化**:长期开着许多项目、但只有一两个有会话时,未活跃项目的 MCP 子进程会在 5 分钟宽限后退出。需要某个无会话项目始终在线时,把 dsh 进程 cwd 放在该项目,或保持至少一条会话。 - 配置文件格式向后兼容;`type: "sse"` 仍会跳过,只是报错更可执行。 - 不读 `.vscode/mcp.json`(与 v0.4.3 相同)。 - 宿主对齐:与 dsh **0.1.5-rc.1 / rc.2** 同线(`@deepseek-ai/dsh-mcp-client ^0.1.5-rc.1`)。rc.2 相对 rc.1 仅为 UI 变更,运行时无差别。 ```powershell dsh plugin --profile

add dsh-project-mcp-manager@0.6.0 ``` ## 组件版本 - `dsh-project-mcp-manager` v0.6.0 | 依赖 `@deepseek-ai/dsh-mcp-client ^0.1.5-rc.1`、 `chokidar ^5`、`yaml ^2`、`zod ^4`(开发:`@deepseek-ai/cordis ^4.0.2`、`typescript ^7`) - 实测宿主:`@deepseek-ai/dsh@0.1.5-rc.2`(见 [适配记录](../design/adaptation-dsh-0.1.5-rc2.md)) **Full Changelog**:https://github.com/wldxiaobai/dsh-project-mcp-manager/compare/v0.4.3...v0.6.0