# DSH 版本兼容性档案 > 2026-10-15 更新。基线:桌面端 **`0.2.0-rc.2`**(本机运行实例;0.2.0-rc.1 的逐符号核对 > 与 0.2.0-rc.2 的实测回归见下两节)。 > 方法:把 0.1.7-rc.2 与 0.2.0-rc.1 的相关子包从 npm 逐个下载,对 0.2.0 桌面 app.asar 内 > 实际打包的 289 个 `@deepseek-ai` 包做版本清点,插件实际依赖的每个 API 做符号定位 > (grep 源码行号,新旧双版本计数与行号对齐),不使用 changelog 文字推断。 > > 结论:**一份代码通吃 `0.1.3-alpha.2` → `0.2.0-rc.2`,不需要按 DSH 版本开分支。** > 唯一适配动作是元数据级:`dsh.client.inject` 与 peerDependencies 的包名/范围修正(见下)。 > peer 范围的 semver 预发布语义已在 0.3.20 复核并重写(见「0.2.0 与插件相关的元数据变化」第 2 条)。 ## DSH 版本时间线(npm 实际发布) | 版本 | 发布 | 备注 | | --- | --- | --- | | 0.1.3-alpha.2 | 2026-09-07 | 本档覆盖的最老版本 | | 0.1.5-alpha.1 / .2 | 2026-09-08 / 09 | | | 0.1.5-rc.1 / .2 | 2026-09-10 | 会话格式迁移器开始硬拒旧子代理日志 | | 0.1.6-alpha.1 / .2 | 2026-09-15 / 17 | | | 0.1.5-rc.3 | 2026-09-22 | 与 0.1.5-rc.2 同代补丁 | | 0.1.7-alpha.1 / .2 | 2026-09-22 | 引入 V4 会话格式、`developer/message` 事件 | | 0.1.7-rc.1 / .2 | 2026-09-23 / 24 | | | **0.2.0-rc.1** | 2026-09 下旬 | **`next` tag;本机桌面端 0.2.0-rc.1 实测通过** | `dist-tags`:`latest = 0.1.7-rc.2`、`next = 0.2.0-rc.1`、`alpha = 0.1.7-alpha.2`。 注意 `latest` 并非最新代码——这是 DSH 的发布策略,不是本插件的兼容性问题。 ## 0.2.0-rc.1 验证(npm 包源码行号 + 桌面 app.asar 实测) 对插件依赖 API 做 0.1.7-rc.2 → 0.2.0-rc.1 双版本 grep 对比(出现次数与行号完全一致): | 插件依赖 | API | 0.2.0-rc.1 验证 | | --- | --- | --- | | 主读取路径 | `sessionPersistence.requireStoredLog(id)` | ✓ persistence-jsonl:2467/2470/2492(同 0.1.7) | | 活会话零解析 | `Session.snapshotEvents()` | ✓ dsh-session:1376(同 0.1.7,含 `inheritedEventCount` 变体:1390) | | 事件流 | `ctx.on('session/event')`,回调 `(session, event)` | ✓ dsh-session:1466-1473 `collectSessionCallbacks` + `callbackArgs = [this, event]`,签名不变 | | fork-seed | `session/end-seed {inherited:true}` / `isSeeded` | ✓ end-seed/isSeeded 计数 31=31(新旧一致,切断语义未变) | | 列表降级 | `sessionQuery.listSessions()` | ✓ session-query:95/1070(行号一致) | | 会话读取降级 | `sessionQuery.readSession(id)` | ✓ session-query:1079(行号一致) | | 子代理过滤 | header `delegationDepth` / `parentSession` | ✓ dsh-session 计数 2=2 | | 路由注册 | `webServer.register(route)` | ✓ host-webserver:177(行号一致) | | 项目归属 | `workspaceRegistry` | ✓ dsh-workspace:374 `super(ctx, "workspaceRegistry")` | | 设置面板挂载 | `slots.inject('settings.section', …)` + `slots.register` | ✓ cordis-client-runner client.js:4709 slot 声明仍在,示例即 `settings.section` | | 磁盘布局 | `session-` 目录 + `session.v\d+.jsonl(\.zstd)?` | ✓ 0.2.0 桌面实测新会话全部 `session-` 目录、V4 日志命名未变 | 事件词汇表(`known-event-types.js`)在 0.2.0 新增 `team/*`、`tool/ptc-dispatch*`、 `schedule/change`、`goal/change`、`session-log-deepseek/delivery-accepted` 等类型;插件 `foldAppend` 的 default 分支忽略它们,零影响。`developer/message`(0.1.7 引入)继续被忽略。 ## 0.2.0-rc.2 实测回归(2026-10-15,剩余任务 G2) > 基线:本机运行中的桌面端 **`@deepseek-ai/dsh-desktop@0.2.0-rc.2`**(上一节记录的是 > 0.2.0-rc.1;版本号从运行实例的 `app.asar` 内 `package.json` 读出,`dsh`、`client-modules`、 > `client-connection`、`client-ui-settings`、`host-webserver`、`desktop-host` 六个包同为 > 0.2.0-rc.2,`@deepseek-ai/dsh-client-runtime` 确认**不再存在**)。 > 本轮插件版本 = 0.3.19 + 剩余任务 F/G 的改动(**客户端 0.3.19 的 esbuild 模块树重构之后** > 的产物),用 `dev_reload_package` 把新构建的 host + client 装进这个运行实例后测得。 **宿主半边(活实例,真实会话库)**:四条 `/dash-api/*` 全部正常。 | 端点 | 结果 | | --- | --- | | `usage?range=7d` | 200,49 会话 / 12.4 亿 token / 定价覆盖率 99% / 未匹配 0;冷启 428 ms,热请求 6–24 ms(SWR 快速路径) | | `detail?range=7d&limit=3`(及 `limit=200`) | 200,`total=57`、`gran=day` | | `calendar` | 200,61 天有数据 | | `export?range=30d` / `90d` | 200,179 行 / 33 KB,CSV 表头 8 列且首行数据 8 列 | | `usage?range=custom&from=0001-01-01&to=now` | **400 `bad_request`**(`trend range exceeds 50000 buckets`)——F1 修复后极端早的窗口不再被静默截到 1901 年 | **客户端半边(真实浏览器 + 真实请求)**:`scripts/oneoff/verify-client-live.mjs` 把 `lib/client.js` 按运行实例的加载契约装进 Chromium(playwright devDep),页面**同源代理**到 活宿主的 `/dash-api/*`,23 条断言全绿: - **运行实例里的契约复核**(不是文档推断):`window.__ModuleLoader__.load({id, factory})` 仍定义在 `dsh-client-modules/lib/client.js`(`bundle … loaded without registering "" via __ModuleLoader__.load` 这条校验也在);`cordis-client-runner/lib/client.js` 里 `slots.register(options, component) needs an options object with a \`name\`` 这条守卫仍在, 与插件 `slots.register({ name, id, order, label }, render)` 的调用形状一致。 - **槽注册**:`slots.inject('settings.section')` → `register({ name:'settings.section', id:'dashboard', order:30, label:'数据看板' })`;两个 `ctx.effect` 都返回 dispose 函数 (样式 + 设置页图标可清理)。 - **样式注入**:`