dsh-primer 0.4.5 → 0.4.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/README.en.md +6 -6
  2. package/README.es.md +6 -6
  3. package/README.hi.md +6 -6
  4. package/README.md +7 -7
  5. package/README.pt.md +6 -6
  6. package/SKILL.md +11 -9
  7. package/data/facts.json +35 -15
  8. package/data/seams/index.json +1526 -98
  9. package/data/standards.json +17 -11
  10. package/dist/dsh-plugin-dev.js +7 -7
  11. package/guide/links.md +2 -2
  12. package/guide/migration-0.2.md +105 -14
  13. package/guide/plugin-dev-guide.md +6 -6
  14. package/guide/quick-reference.es.md +4 -4
  15. package/guide/quick-reference.hi.md +4 -4
  16. package/guide/quick-reference.md +4 -4
  17. package/guide/quick-reference.pt.md +4 -4
  18. package/guide/quick-reference.zh-CN.md +4 -4
  19. package/guide/standards.md +1 -1
  20. package/guide/standards.zh-CN.md +1 -1
  21. package/guide/unfixed-issues.md +2 -2
  22. package/guide/version-matrix.md +65 -42
  23. package/package.json +13 -7
  24. package/references/official-docs/CLAUDE.md +1 -1
  25. package/references/official-docs/README.md +9 -4
  26. package/references/official-docs/SNAPSHOT.md +7 -5
  27. package/references/official-docs/docs/capability-seams.i18n.yaml +2 -2
  28. package/references/official-docs/docs/capability-seams.md +4 -0
  29. package/references/official-docs/docs/capability-seams.zh.md +4 -0
  30. package/references/official-docs/docs/config-catalog.md +26 -28
  31. package/references/official-docs/docs/config-catalog.zh.md +26 -28
  32. package/references/official-docs/docs/defensive-patterns/package-surface.i18n.yaml +2 -2
  33. package/references/official-docs/docs/defensive-patterns/package-surface.md +0 -1
  34. package/references/official-docs/docs/defensive-patterns/package-surface.zh.md +0 -1
  35. package/references/official-docs/docs/event-producer-consumer.md +1 -1
  36. package/references/official-docs/docs/event-producer-consumer.zh.md +1 -1
  37. package/references/official-docs/docs/module-graph.md +12 -17
  38. package/references/official-docs/docs/module-graph.zh.md +12 -17
  39. package/references/official-docs/docs/subsystems/computer-use.i18n.yaml +2 -2
  40. package/references/official-docs/docs/subsystems/computer-use.md +1 -1
  41. package/references/official-docs/docs/subsystems/computer-use.zh.md +1 -1
  42. package/references/official-docs/docs/subsystems/persistence.md +19 -0
  43. package/references/official-docs/docs/subsystems/persistence.zh.md +19 -0
  44. package/references/official-docs/docs/subsystems/ptc-runtime.i18n.yaml +4 -4
  45. package/references/official-docs/docs/subsystems/ptc-runtime.md +8 -48
  46. package/references/official-docs/docs/subsystems/ptc-runtime.zh.md +8 -48
  47. package/references/official-docs/docs/tool-catalog.i18n.yaml +2 -2
  48. package/references/official-docs/docs/tool-catalog.md +1 -1
  49. package/references/official-docs/docs/tool-catalog.zh.md +1 -1
  50. package/references/official-docs/docs/upgrade-guide/v0.2.2-rc.1/cua-native-platform/guide.i18n.yaml +4 -4
  51. package/references/official-docs/docs/upgrade-guide/v0.2.2-rc.1/cua-native-platform/guide.md +7 -7
  52. package/references/official-docs/docs/upgrade-guide/v0.2.2-rc.1/cua-native-platform/guide.zh.md +7 -7
  53. package/references/official-plugin-dev-skill.md +16 -12
  54. package/references/sources.md +2 -2
  55. package/scripts/check-docs-drift.mjs +121 -0
  56. package/scripts/check-docs-drift.ps1 +4 -1
  57. package/scripts/check-facts.mjs +81 -3
  58. package/scripts/sync-official-docs.ps1 +16 -5
  59. package/templates/js/README-es.md +1 -1
  60. package/templates/js/README-hi.md +1 -1
  61. package/templates/js/README-pt.md +1 -1
  62. package/templates/js/README-zh.md +1 -1
  63. package/templates/js/README.md +1 -1
  64. package/templates/ts/README-es.md +1 -1
  65. package/templates/ts/README-hi.md +1 -1
  66. package/templates/ts/README-pt.md +1 -1
  67. package/templates/ts/README-zh.md +1 -1
  68. package/templates/ts/README.md +1 -1
  69. package/references/official-docs/docs/upgrade-guide/v0.2.2-rc.1/package-export-cleanup/guide.i18n.yaml +0 -16
  70. package/references/official-docs/docs/upgrade-guide/v0.2.2-rc.1/package-export-cleanup/guide.md +0 -26
  71. package/references/official-docs/docs/upgrade-guide/v0.2.2-rc.1/package-export-cleanup/guide.zh.md +0 -26
  72. package/references/official-docs/docs/upgrade-guide/v0.2.2-rc.1/ptc-bootstrap-protocol/guide.i18n.yaml +0 -16
  73. package/references/official-docs/docs/upgrade-guide/v0.2.2-rc.1/ptc-bootstrap-protocol/guide.md +0 -25
  74. package/references/official-docs/docs/upgrade-guide/v0.2.2-rc.1/ptc-bootstrap-protocol/guide.zh.md +0 -25
  75. package/references/official-docs/docs/upgrade-guide/v0.2.2-rc.1/ptc-inspect-output/guide.i18n.yaml +0 -16
  76. package/references/official-docs/docs/upgrade-guide/v0.2.2-rc.1/ptc-inspect-output/guide.md +0 -48
  77. package/references/official-docs/docs/upgrade-guide/v0.2.2-rc.1/ptc-inspect-output/guide.zh.md +0 -48
  78. package/references/official-docs/docs/upgrade-guide/v0.2.2-rc.1/ptc-scoped-repl-default/guide.i18n.yaml +0 -16
  79. package/references/official-docs/docs/upgrade-guide/v0.2.2-rc.1/ptc-scoped-repl-default/guide.md +0 -45
  80. package/references/official-docs/docs/upgrade-guide/v0.2.2-rc.1/ptc-scoped-repl-default/guide.zh.md +0 -45
@@ -136,7 +136,7 @@ Chunk 协议:`block-start` → `text-delta*` → `block-end`(完整块)→
136
136
  3. **用最弱的够用机制**:`ctx.tools.restrict()`(只移除)< `ctx.tools.guard()`(只拒绝)< waterfall 改写(依赖顺序)< `system-prompt/assemble`(整段替换)。最终结果只看 `tools/result`;只有要变换结果才用 `tools/post-execute`。
137
137
  4. 模型可见 ⟺ 已记录:新模型可见输入必须新增会话事件(`SessionEventMap`)——**由宿主侧新增**,不是插件自己写(见第 10 条)。
138
138
  5. 不得硬编码可调参数(判断:cordis.yml 能否改);misconfig fail loud。要暴露给用户的实时字段用 `Volatile<T>` + `loader/volatile-update`(表单命名空间=profile 条目 id)。
139
- 6. 独立插件包:cordis 是 peerDependency(与宿主同身份:scoped `@deepseek-ai/cordis` 与 unscoped 混用会"双 Cordis 分裂");ESM;`dsh.bundle` 清单(`patch` **可为有序数组**);git 安装配 `prepare` + `allowBuilds`;发布带 `lib/` 或 tarball。**共享实例的 dsh 包只放 peer + dev,绝不放 dependencies**(profile 内副本会静默遮蔽运行时)。⚠️ **已更正:peer 范围会被安装期强制**——`dsh plugin add` 拿运行时版本比对声明的 `@deepseek-ai/dsh-*` 范围,不匹配即**拒绝安装**;只有 `engines.dsh` 是纯声明、零强制。范围只能表达"能不能装",**表达不了某个 API 在不在**——仍要配运行时探测(区间选择见 `version-matrix.md` §4)。
139
+ 6. 独立插件包:cordis 是 peerDependency(与宿主同身份:scoped `@deepseek-ai/cordis` 与 unscoped 混用会"双 Cordis 分裂");ESM;`dsh.bundle` 清单(`patch` **可为有序数组**);git 安装配 `prepare` + `allowBuilds`;发布带 `lib/` 或 tarball。**共享实例的 dsh 包只放 peer + dev,绝不放 dependencies**(profile 内副本会静默遮蔽运行时)。⚠️ **已更正:兼容性门禁在安装/启动期强制,且 `engines.dsh` 单独决定**——**有 `engines.dsh` 时该范围单独决定并忽略 `@deepseek-ai/dsh*` peers**,只有缺失时才回退到 peer 范围(`includePrerelease: true`,下界必须带预发布,如 `>=0.2.2-0`;`workspace:` 在 `engines.dsh` 中不合法)。范围只能表达"能不能装",**表达不了某个 API 在不在**——仍要配运行时探测(区间选择见 `version-matrix.md` §4,官方语义见 `docs/upgrade-guide/v0.2.1-alpha.3/plugin-engines-dsh/guide.md`)。
140
140
  7. 必须交展示元数据:`locale/*.json` 的 `meta.title`/`meta.description` + 导出的 `./icon`(SVG/PNG/JPEG/WebP,≤256 KiB,必须在包内)。子路径插件**不读**自己的 `package.json`。
141
141
  8. 文档双语成对;工具描述/提示词即行为;非平凡变更加 Agent Note;提交前跑最小检查集(dsh-pre-push-checks)。
142
142
  9. 跨边界 opaque id 用 branded(`Branded<B>` from `dsh-brand`),从不裸 `string`。
@@ -153,7 +153,7 @@ Chunk 协议:`block-start` → `text-delta*` → `block-end`(完整块)→
153
153
  - Windows junction 用 PowerShell `New-Item -ItemType Junction`;vitest 盘符大写 `C:/`。
154
154
  - `DSH_PERMISSION_MODE=danger-full-access` 高风险(Windows 无沙箱后端、禁用审批);`DSH_*` 放 `~/.dsh/.env` 会报错。
155
155
  - 会话文件多帧 zstd:用 `scanZstdFrames`/`createZstdFrameDecoder`(`@deepseek-ai/dsh-session-persistence-jsonl/src/zstd.ts`)。
156
- - npm:无作用域 `dsh` 是无关项目 node-dsh(shell)——官方包是 `@deepseek-ai/dsh`(`latest`=`next`=0.2.0-rc.2、`alpha`=0.2.1-alpha.2);`@deepseek-ai/dsh-tools`、`@deepseek-ai/dsh-base`、`@deepseek-ai/dsh-headless`、`@deepseek-ai/dsh-session-persistence-jsonl` 的 `latest` 仍是过期版本(0.0.1-rc.1),要钉 `next`(0.2.0-rc.2)或 `alpha`(0.2.1-alpha.1);`create-dsh-plugin` latest=0.2.3;`@deepseek-ai/cordis` latest=4.0.4,另有新标签 `dsh-0-2-1-alpha-1`=4.0.5-alpha.1;dsh-core/dsh-sdk 仍未发布(2026-10-06 复核)。
156
+ - npm:无作用域 `dsh` 是无关项目 node-dsh(shell)——官方包是 `@deepseek-ai/dsh`(`latest`=`0.2.2-rc.1`、`next`=`0.2.2-rc.3`、`alpha`=`0.2.2-alpha.3`);`@deepseek-ai/dsh-tools`、`@deepseek-ai/dsh-base`、`@deepseek-ai/dsh-headless`、`@deepseek-ai/dsh-session-persistence-jsonl` 的 `latest` 仍是过期版本(0.0.1-rc.1),要钉 `next`(`0.2.2-rc.3`)或 `alpha`(`0.2.2-alpha.3`);`create-dsh-plugin` latest=0.2.3;`@deepseek-ai/cordis` latest=4.1.0(DSH 0.2.2-rc.3 vendored 的 wrapper;上游基线 4.0.0-rc.11);dsh-core/dsh-sdk 仍未发布(2026-11-14 复核)。
157
157
  - 路径比较前两侧都 `resolve()`(Windows 反斜杠陷阱)。
158
158
 
159
159
  ## 文档链接
@@ -171,8 +171,8 @@ Chunk 协议:`block-start` → `text-delta*` → `block-end`(完整块)→
171
171
 
172
172
  ## 关键源索引
173
173
 
174
- - 本地官方文档全文:`references/official-docs/docs/**`(717 篇,含全部 356 个 `.zh.md`;镜像基线 `dsh-v0.2.2-rc.2`);**没上文档站**的那些页(session-format-status、`upgrade-guide/**`、`persistence-changes/**`、ui-radius、web-styling、module-graph)见 [links.md](links.md) §2.1
175
- - 迁移清单:[migration-0.2.md](migration-0.2.md) —— §0–§12 覆盖 `0.1.6-alpha.2` → `0.2.1-alpha.1` 的全部破坏性变更,**§13 把 `0.2.1-alpha.1` → `0.2.1-alpha.2` 整理成 19 个可引用 seam(`L1`–`L19`)**;每条都附官方 upgrade-guide 出处
174
+ - 本地官方文档全文:`references/official-docs/docs/**`(709 篇,含全部 352 个 `.zh.md`;镜像钉在发布 tag `dsh-v0.2.2-rc.3`,commit `38a6a5c9…`);**没上文档站**的那些页(session-format-status、`upgrade-guide/**`、`persistence-changes/**`、ui-radius、web-styling、module-graph)见 [links.md](links.md) §2.1
175
+ - 迁移清单:[migration-0.2.md](migration-0.2.md) —— §0–§12 覆盖 `0.1.6-alpha.2` → `0.2.1-alpha.1` 的全部破坏性变更,**§13 把 `0.2.1-alpha.1` → `0.2.1-alpha.2` 整理成 19 个可引用 seam(`L1`–`L19`)**,**§14 是 rc.3 包内 0.2.2 线的 46 个 seam(`K1`–`K46`)**,另单列下一版 13 条;每条都附官方 upgrade-guide 出处
176
176
  - 官方自带插件开发技能:[references/official-plugin-dev-skill.md](../references/official-plugin-dev-skill.md)
177
177
  - 仓库根约束:`references/official-docs/AGENTS.md`、`references/official-docs/packages/AGENTS.md`、`references/official-docs/vendor/README.md`;同步状态见 `references/official-docs/SNAPSHOT.md`
178
178
  - 站点爬取 HTML:`downloads/web/site/**`(中英双语全站)+ `downloads/manifest.tsv`(下载清单)
@@ -70,7 +70,7 @@ G0–G2 and G4 pass in static inspection, which supports `recognized`; `runtime`
70
70
 
71
71
  **What it does not claim.** Security, UI correctness, production readiness, full feature correctness, official endorsement, or that the plugin will work on an untested DSH line.
72
72
 
73
- **How to self-check.** Record `dsh --version`, the host commit, and the artifact mtime. Run `dsh-plugin-dev check --json` for the 16 local static checks (a subset of `dsh-plugin-doctor`'s 33 — see [family-toolchain.md](family-toolchain.md)), then the standards repo's entry checker (commands below). For bundles, also run `dsh --profile <name> --dump-config` and look for `patch: entry <id> not found`, then boot and read the row states. Write the claim as `DSH-ENTRY: runtime (dsh 0.2.2-alpha.3, commit <sha>, 2026-11-04); Node >=24.9`.
73
+ **How to self-check.** Record `dsh --version`, the host commit, and the artifact mtime. Run `dsh-plugin-dev check --json` for the 16 local static checks (a subset of `dsh-plugin-doctor`'s 33 — see [family-toolchain.md](family-toolchain.md)), then the standards repo's entry checker (commands below). For bundles, also run `dsh --profile <name> --dump-config` and look for `patch: entry <id> not found`, then boot and read the row states. Write the claim as `DSH-ENTRY: runtime (dsh 0.2.2-rc.3, commit <sha>, 2026-11-14); Node >=24.9`.
74
74
 
75
75
  ## DSH-FLOW: adoption experience
76
76
 
@@ -70,7 +70,7 @@ G0–G2 与 G4 在静态检查里通过,支持 `recognized`;`runtime` 需要
70
70
 
71
71
  **不声称什么。** 不声称安全、UI 正确、生产可用、功能完整、官方背书,也不声称在未测过的 DSH 线上可用。
72
72
 
73
- **怎么自检。** 记录 `dsh --version`、宿主 commit、产物 mtime。先跑 `dsh-plugin-dev check --json` 的 16 项本地静态检查(它是 `dsh-plugin-doctor` 33 项的子集,见 [family-toolchain.md](family-toolchain.md));再跑标准仓的 entry 检查器(命令见下)。bundle 还要跑 `dsh --profile <name> --dump-config`,确认没有 `patch: entry <id> not found`,然后真实 boot 并读行状态。声明写成 `DSH-ENTRY: runtime (dsh 0.2.1-rc.2, commit <sha>, 2026-11-01)`。
73
+ **怎么自检。** 记录 `dsh --version`、宿主 commit、产物 mtime。先跑 `dsh-plugin-dev check --json` 的 16 项本地静态检查(它是 `dsh-plugin-doctor` 33 项的子集,见 [family-toolchain.md](family-toolchain.md));再跑标准仓的 entry 检查器(命令见下)。bundle 还要跑 `dsh --profile <name> --dump-config`,确认没有 `patch: entry <id> not found`,然后真实 boot 并读行状态。声明写成 `DSH-ENTRY: runtime (dsh 0.2.2-rc.3, commit <sha>, 2026-11-14); Node >=24.9`。
74
74
 
75
75
  ## DSH-FLOW:采用体验
76
76
 
@@ -10,11 +10,11 @@
10
10
  > - **复核基线 3:`5badb15009ae1756c3afe0ae0cef1faafc290ccc`(`dsh-v0.2.1-alpha.1`,2026-10-03;+2300 余提交 / 8763 改动文件)——2026-10-06 全表重核,逐条复核覆盖 #1–#32 与 S1–S7**:
11
11
  >
12
12
  > ⚠️ **阅读本表前必读的基线口径**:本文件全部 `path:line` 与"已修复提交号"**钉在复核基线 3(`5badb15`,2026-10-03)**。
13
- > 本库的官方文档镜像已在 **2026-11-13 重同步到 `e8f7b93a344964de3dca1ace9e72b6e4d6de87cb`(`dsh-v0.2.2-rc.2`)**——
13
+ > 本库的官方文档镜像已在 **2026-11-14 按发布 tag 重同步到 `38a6a5c965aa99ab525161efb7cc5cf1fe62fced`(`dsh-v0.2.2-rc.3`)**——
14
14
  > 也就是说**镜像已远新于本表**。二者不是矛盾,是两个不同用途的基线:
15
15
  > 镜像求"与上游逐字节一致",本表求"每条结论有可复核的行号锚点"。
16
16
  > **在 `5badb15` 上复核行号**(`git -C <checkout> show 5badb15:<path>`),或用镜像里的路径但**预期行号可能已漂移**。
17
- > 下一轮全表重核的目标基线是 `e8f7b93`;在重核完成前,请把"未修复"读作"**截至 2026-10-03 未修复**"。
17
+ > 下一轮全表重核的目标基线是 `38a6a5c9`(rc.3);在重核完成前,请把"未修复"读作"**截至 2026-10-03 未修复**"。
18
18
  > - **转入已修复 4 项**:#2(协议平面压平为 Messages-only,旧 chat-completions 半边删除;**后继形态 #8836 仍在**)、#5(`code`→`ptc` 迁移)、#10(pi-ai ^0.87.1 带上 `x-opencode-session`)、#22(压缩阈值改为 `min(window×ratio, window−reserved−headroom)`)、#29(telemetry 读取拍平 + 迁移产物强校验)——共 5 项,其中 #5 的修复**早于上一基线**,说明旧条目本身就过时。
19
19
  > - **判为不可复现 1 项**:#4(read_image)移入 §2,保留记录但**不要再当 bug 传播**。
20
20
  > - **部分修复 3 项**:#1(同级已接受、更窄仍抛)、#13(windowsHide 半侧已消失,自愈半侧仍在)、#19(`./invariant` 子路径已随 invariants 整体移除而消失,残留 devDependency `dsh-attachment` 引用)、S5(SKILL.md 半侧早已修好,仅剩生成文件/文档措辞残留)——共 4 项。
@@ -3,9 +3,9 @@
3
3
  > **这份文件回答一个问题**:我的插件要跑在哪个 DSH 上,那个版本有什么、没有什么、
4
4
  > 哪一版开始行为变了。
5
5
  >
6
- > **测量时间**:2026-10-09(官方版本线)/2026-10-13(生态数字)。
7
- > **数据来源**:npm registry `@deepseek-ai/dsh`、GitHub REST API(tags/commits/releases)、
8
- > 官方 `docs/upgrade-guide/**`、官方 `docs/persistence-changes/**`。逐条可复现命令见 §7。
6
+ > **测量时间**:2026-11-14(官方版本线 = `0.2.2-rc.3`;镜像与计数同日重核)。
7
+ > **数据来源**:npm registry `@deepseek-ai/dsh` 的 dist-tags 与版本清单、GitHub REST API(tags/releases)、
8
+ > 官方 `docs/upgrade-guide/**`(镜像已钉发布 tag `dsh-v0.2.2-rc.3`)、官方 `docs/persistence-changes/**`。逐条可复现命令见 §7。
9
9
  >
10
10
  > **口径**:本文件只写**有出处**的数字。取不到的一律写 `未核`,不写推测值。
11
11
  > 官方说法与社区实测冲突时分别标注。
@@ -16,42 +16,44 @@
16
16
 
17
17
  这是插件作者**第一个**要做的判断。五个数可以不相等,而 peer 范围按线分叉:
18
18
 
19
- | # | 说法 | 值(2026-10-09) | 怎么查 | 性质 |
19
+ | # | 说法 | 值(2026-11-14) | 怎么查 | 性质 |
20
20
  |---|---|---|---|---|
21
- | 1 | npm `latest` | `0.2.0-rc.2` | `npm view @deepseek-ai/dsh dist-tags` | 默认装的就是这个 |
22
- | 2 | npm `next` | `0.2.0-rc.2` | 同上 | 与 latest 同值 |
23
- | 3 | npm `alpha` | `0.2.1-alpha.2` | 同上 | 最新发布 |
24
- | 4 | master 最新 tag | `dsh-v0.2.1-alpha.2` | GitHub `/tags` | 源码线的名字;**等于 master HEAD** |
25
- | 5 | **本机实际** | — | `dsh --version` | **唯一真正要紧的数** |
21
+ | 1 | npm `latest` | `0.2.2-rc.1` | `npm view @deepseek-ai/dsh dist-tags` | 默认装的就是这个;**它已不是最新** |
22
+ | 2 | npm `next` | `0.2.2-rc.3` | 同上 | 最新发布(本机 CLI 即此版本) |
23
+ | 3 | npm `alpha` | `0.2.2-alpha.3` | 同上 | alpha 通道最新 |
24
+ | 4 | 最新 tag | `dsh-v0.2.2-rc.3`(`38a6a5c9…`,2026-11-13) | GitHub `/tags`、`/releases` | 源码线的名字;master 已合并 rc.3 发布 |
25
+ | 5 | **本机实际** | `0.2.2-rc.3`(本库核验机) | `dsh --version` | **唯一真正要紧的数** |
26
26
 
27
27
  ### 1.1 没有"稳定版"这回事
28
28
 
29
- - **全部 31 个 npm 版本都带 `-alpha.N` / `-rc.N` 后缀;全部 26 个 GitHub Release 都是 `prerelease: true`。**
29
+ - **全部 44 个 npm 版本都带 `-alpha.N` / `-rc.N` 后缀;全部 39 个 GitHub Release 都是 `prerelease: true`。** 另有 40 个 tag,比 release 多 1 个——`dsh-v0.1.5-rc.3` 有 tag 无 release。
30
30
  - 所以 npm 的 `latest` 标签在这里**不代表稳定**——它只是"默认安装会拿到的那一个"。
31
- - 给作者的有效读法:**最新 = `0.2.1-alpha.2`(npm `alpha`);默认安装 = `0.2.0-rc.2`(npm `latest`/`next`)**。
31
+ - 给作者的有效读法(2026-11-14):**默认安装 = `0.2.2-rc.1`(npm `latest`);最新发布 = `0.2.2-rc.3`(npm `next`,也是最新 tag `dsh-v0.2.2-rc.3`);alpha 通道 = `0.2.2-alpha.3`**。注意 `latest` 与 `next` **已不再相等**:`latest` 落后 `next` 两个 prerelease(`rc.1` vs `rc.3`),0.2.1 时代两者同值。
32
32
  - 官方 `CONTRIBUTING.md` 明确**不接受外部 PR**,`AGENTS.md` 声明 API 处于 pre-stable。
33
33
  插件作者无法"等它稳定",只能**钉版本 + 声明区间**。
34
34
 
35
35
  ### 1.2 ★ 陷阱:子包的 `latest` 是冻住的
36
36
 
37
37
  主包 `@deepseek-ai/dsh` 每次发版都会重发全部子包到 `alpha`/`next`,但**每个子包的 `latest`
38
- 标签停在它第一次被设置的那个版本,永不前进**。裸装子包会装到远古版本:
38
+ 标签停在它第一次被设置的那个版本,永不前进**。裸装子包会装到远古版本(2026-11-14 实测):
39
39
 
40
40
  | 包 | `latest`(冻住的值) | `next` | `alpha` |
41
41
  |---|---|---|---|
42
- | `@deepseek-ai/dsh` | `0.2.0-rc.2` | `0.2.0-rc.2` | `0.2.1-alpha.2` |
43
- | `@deepseek-ai/dsh-base` | **`0.0.1-rc.1`** | `0.2.0-rc.2` | `0.2.1-alpha.2` |
44
- | `@deepseek-ai/dsh-session` | **`0.0.1-rc.1`** | `0.2.0-rc.2` | `0.2.1-alpha.2` |
45
- | `@deepseek-ai/dsh-tools` | **`0.0.1-rc.1`** | `0.2.0-rc.2` | `0.2.1-alpha.2` |
46
- | `@deepseek-ai/dsh-subagent` | **`0.0.1-rc.1`** | `0.2.0-rc.2` | `0.2.1-alpha.2` |
47
- | `@deepseek-ai/dsh-home-paths` | `0.0.1-rc.3` | `0.2.0-rc.2` | `0.2.1-alpha.2` |
48
- | `@deepseek-ai/dsh-client-ui-primitives` | **`0.0.1-rc.1`** | `0.2.0-rc.2` | `0.2.1-alpha.2` |
49
- | `@deepseek-ai/dsh-agent` | `0.1.0-rc.6` | `0.2.0-rc.2` | `0.2.1-alpha.2` |
50
- | `@deepseek-ai/dsh-typert-protocol` | `0.1.0-rc.6` | `0.2.0-rc.2` | `0.2.1-alpha.2` |
51
- | `@deepseek-ai/dsh-package-manifest` | `0.1.3-alpha.2` | `0.2.0-rc.2` | `0.2.1-alpha.2` |
52
- | `@deepseek-ai/dsh-plugin-manager` | `0.1.6-alpha.2` | `0.2.0-rc.2` | `0.2.1-alpha.2` |
53
- | `@deepseek-ai/dsh-experimental-ptc-runtime-python` | `0.1.6-alpha.1` | `0.2.0-rc.2` | `0.2.1-alpha.2` |
54
- | `@deepseek-ai/dsh-otel` | `0.2.0-rc.1` | `0.2.0-rc.2` | `0.2.1-alpha.2` |
42
+ | `@deepseek-ai/dsh` | `0.2.2-rc.1`(主包 latest 已前进,但仍**不是最新**) | `0.2.2-rc.3` | `0.2.2-alpha.3` |
43
+ | `@deepseek-ai/dsh-base` | **`0.0.1-rc.1`** | `0.2.2-rc.3` | `0.2.2-alpha.3` |
44
+ | `@deepseek-ai/dsh-session` | **`0.0.1-rc.1`** | `0.2.2-rc.3` | `0.2.2-alpha.3` |
45
+ | `@deepseek-ai/dsh-tools` | **`0.0.1-rc.1`** | `0.2.2-rc.3` | `0.2.2-alpha.3` |
46
+ | `@deepseek-ai/dsh-subagent` | **`0.0.1-rc.1`** | `0.2.2-rc.3` | `0.2.2-alpha.3` |
47
+ | `@deepseek-ai/dsh-home-paths` | `0.0.1-rc.3` | `0.2.2-rc.3` | `0.2.2-alpha.3` |
48
+ | `@deepseek-ai/dsh-client-ui-primitives` | **`0.0.1-rc.1`** | `0.2.2-rc.3` | `0.2.2-alpha.3` |
49
+ | `@deepseek-ai/dsh-agent` | `0.1.0-rc.6` | `0.2.2-rc.3` | `0.2.2-alpha.3` |
50
+ | `@deepseek-ai/dsh-typert-protocol` | `0.1.0-rc.6` | `0.2.2-rc.3` | `0.2.2-alpha.3` |
51
+ | `@deepseek-ai/dsh-package-manifest` | `0.1.3-alpha.2` | `0.2.2-rc.3` | `0.2.2-alpha.3` |
52
+ | `@deepseek-ai/dsh-plugin-manager` | `0.1.6-alpha.2` | `0.2.2-rc.3` | `0.2.2-alpha.3` |
53
+ | `@deepseek-ai/dsh-experimental-ptc-runtime-python` | `0.1.6-alpha.1` | `0.2.2-rc.3` | `0.2.2-alpha.3` |
54
+ | `@deepseek-ai/dsh-otel` | `0.2.0-rc.1` | `0.2.2-rc.3` | `0.2.2-alpha.3` |
55
+
56
+ **结论三条**(不变):1) 子包 `latest` 继续冻在远古版本,绝不裸装;2) 判断宿主代次只认 `dsh --version`;3) 共享实例的 dsh 包只放 peer + dev,区间按 §4 选。
55
57
 
56
58
  **结论三条**:
57
59
 
@@ -72,10 +74,15 @@
72
74
  | 断层 | 引入版本(目录名) | 落到哪一版 | 影响面 |
73
75
  |---|---|---|---|
74
76
  | **即插即拔基础设施** | `0.1.6-alpha.2` | 同版 | `dsh-hmr` / `dsh-plugin-manager` / `ui-plugin-manager` 三包一次性出现;新增 `ctx.hmr` / `ctx.pluginManager` / `ctx.profileContext` |
75
- | **peer 从"声明"变"运行时门禁"** | `0.1.7-rc.1` | 同版 | `plugin-compatibility.ts` 三文件首次出现;不匹配的行被直接 `disabled`,模块永不导入 |
77
+ | **peer/`engines.dsh` 兼容性门禁** | `0.1.7-rc.1`(peer)→ `0.2.1-alpha.4`(engines 优先) | 同版 | 不匹配的行被直接 `disabled`,模块永不导入;**有 `engines.dsh` 时它单独决定并忽略 peers**,无它才回退 peers(见 §4) |
76
78
  | **会话格式 V4 + 本世代破坏性变更** | `0.1.7-alpha.1` | 同版 | `SESSION_FORMAT_VERSION` 3→4、settings 重写、`readBytes`、Messages-only 适配器 |
77
79
  | **0.2.0 世代清理** | `0.2.0-rc.2` | 下一版 | 移除 runtime invariants、schedule bundle 退役、子路径插件不再读 `package.json`、新增 `no-response` 错误码 |
78
- | **0.2.1-alpha.2 大批变更** | `0.2.1-alpha.1` | `0.2.1-alpha.2` | **19 条**破坏性变更(见 §3) |
80
+ | **0.2.1-alpha.2 大批变更** | `0.2.1-alpha.1` | `0.2.1-alpha.2` | **19 条**破坏性变更(见 §3,`L1`–`L19`) |
81
+ | **0.2.2-alpha.2 批次** | `0.2.2-alpha.2` | `0.2.2-alpha.3` | **22 条**(`K1`–`K22`:context menu 类型、CSS 锚定菜单、loader entry tree、projection/LLM/schedule/search 等) |
82
+ | **0.2.2-alpha.3 批次** | `0.2.2-alpha.3` | `0.2.2-rc.1` | **5 条**(`K23`–`K27`:`office-kit` 替换 `office-to-pdf`、Office 工具化、subagent 按名寻址等) |
83
+ | **0.2.2-rc.1 批次** | `0.2.2-rc.1` | `0.2.2-rc.2` | **19 条**(`K28`–`K46`:`dsh-doc-skill`、`plugin-update-method`、`session-append-overloads`、`window-drag-regions`、`attachment-error-codes` 等) |
84
+
85
+ **rc.3 自身没有新增迁移指南**:rc.3 tag 的 `docs/upgrade-guide` 到 `v0.2.2-rc.1` 为止,上面三批合计 46 条就是 rc.3 发布包覆盖的全部 0.2.2 线变更(逐条 ID/症状/修法见 [migration-0.2.md](migration-0.2.md) §14)。rc.3 的发布内容只有**加性**实验能力(见 §6.1)。`v0.2.2-rc.2` 的 13 条指南只存在于 rc.3 **之后**的 master,**属于下一版,不要算进 rc.3**。
79
86
 
80
87
  > ⚠ **两个断层不属于同一层面,别混**:`0.1.6-alpha.2` 解决"能不能热插拔",
81
88
  > `0.1.7-rc.1` 才解决"版本不匹配时会不会被拦"。`0.1.6-alpha.2` 上的
@@ -91,7 +98,8 @@
91
98
  ## 3. `0.2.1-alpha.1 → 0.2.1-alpha.2`:19 条破坏性变更
92
99
 
93
100
  如果你在 `0.2.0-rc.2` 或更早的线上,**这 19 条与你无关**;如果你跟的是 master/alpha 线,
94
- **逐条核对**。官方 release notes 也列了这 5 条为 "other changes":Python PTC 沙箱、
101
+ **逐条核对**。本章是 0.2.1 线;rc.3(`0.2.2-rc.2` 及更新)用户还要看
102
+ [migration-0.2.md](migration-0.2.md) §14 的 46 条 0.2.2 线 seam(`K1`–`K46`)。官方 release notes 也列了这 5 条为 "other changes":Python PTC 沙箱、
95
103
  `both` 模式移除、`dshHome` 移除、子代理执行统一、Agent Team 直投收件箱。
96
104
 
97
105
  | # | 变更 | 破坏了什么 | 你要做什么 |
@@ -128,23 +136,30 @@ Python 环境)。它放在旧目录属于例外——上游自己的规则是"
128
136
 
129
137
  ## 4. 我该声明什么 peer 区间
130
138
 
131
- 两条硬事实:
139
+ 三条硬事实(rc.3 语义):
132
140
 
133
- 1. **peer 是运行时门禁,不是声明。** 从 `0.1.7-rc.1` 起,`app-boot/src/plugin-compatibility.ts`
134
- 在插件被 import **之前**校验 `peerDependencies` 里的 `@deepseek-ai/dsh` / `@deepseek-ai/dsh-*`;
141
+ 1. **`engines.dsh` 是运行时门禁,且单独决定。** 从 `0.2.1-alpha.4` 起,`app-boot/src/plugin-compatibility.ts`
142
+ 在插件被 import **之前**先读清单:**只要有 `engines.dsh`,就用该范围单独决定结果,并忽略 `@deepseek-ai/dsh*` 的 `peerDependencies`**;
135
143
  不匹配的行被**直接置为 `disabled`**,模块永不导入。
136
- 2. **门禁语义是 `includePrerelease: true`**(`plugin-compatibility.ts:77`),比裸 semver **宽松**。
137
- `engines.dsh` 与 `dsh.manifestVersion` 则是**纯声明、零强制**——写了不生效。
144
+ 2. **只有缺失 `engines.dsh` 时才回退到 peers。** 这时才校验 `peerDependencies` 里的 `@deepseek-ai/dsh` / `@deepseek-ai/dsh-*`(同一套 disabled 行为)。
145
+ 声明了 `engines.dsh` 的包,peers 不再放宽或收窄它——所以 `engines.dsh` 必须覆盖**全部**支持版本。`workspace:` 只在 peer 中有效,出现在 `engines.dsh` 里即判不兼容。
146
+ 3. **门禁语义是 `includePrerelease: true`**(`plugin-compatibility.ts:52`),比裸 semver **宽松**。
147
+ 所以 0.2.2 线要写 `>=0.2.2-0 <0.3.0` 这类带预发布下界的范围;`dsh.manifestVersion` 仍是纯声明,不参与门禁。
148
+ 官方原文:`references/official-docs/docs/upgrade-guide/v0.2.1-alpha.3/plugin-engines-dsh/guide.md`。
138
149
 
139
150
  ### 4.1 家族内当前使用的规范区间
140
151
 
141
152
  ```
142
- >=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0 || >=0.1.7-0 <0.2.0 || >=0.2.0-0 <0.3.0 || >=0.2.1-0 <0.3.0
153
+ >=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0 || >=0.1.7-0 <0.2.0 || >=0.2.0-0 <0.3.0 || >=0.2.1-0 <0.3.0 || >=0.2.2-0 <0.3.0
143
154
  ```
144
155
 
145
- 这是 `dsh-plugin-kit` 的 `data/peer-range.json`(`canonicalRange`,2026-09-26 更新)所记录的
146
- 规范值,六个子句按线枚举。**本仓库 `src/cli/templates.ts` 生成的区间与它逐字节一致**,
147
- 是仓库内唯一副本。
156
+ 这是 `dsh-plugin-kit` 的 `data/peer-range.json`(`canonicalRange`)所记录的规范区间;本库上次核该文件是
157
+ 2026-09-26 的六子句版本,本节按 0.2.2 线新增第七子句 `>=0.2.2-0 <0.3.0`(0.2.2 的预发布要求下界带 `-0`,
158
+ 否则严格 semver 下 `0.2.2-rc.3` 不落进范围)。**本仓库 `src/cli/templates.ts` 的 `DSH_PEER_RANGE` 与本节逐字节一致**,
159
+ `package.json` 的 `engines.dsh` 与 `peerDependencies` 也同步含该子句。
160
+
161
+ > ⚠️ **0.2.2 线优先把范围写进 `engines.dsh`**:写了它,peers 就完全不参与判定;`engines.dsh` 里不能用 `workspace:`。
162
+ > 只有不发 `engines.dsh` 的包才靠 peers 兜底。
148
163
 
149
164
  ### 4.2 选区间的判断法
150
165
 
@@ -155,6 +170,7 @@ Python 环境)。它放在旧目录属于例外——上游自己的规则是"
155
170
  | 依赖 peer 门禁本身、或 0.1.7 的 API | `>=0.1.7-0` |
156
171
  | 用了 0.2.0 世代接口(settings 重写后) | `>=0.2.0-0` |
157
172
  | 用了 §3 里任何一条新形态(如 `webStartup`、`BundleInfo.official`) | `>=0.2.1-0` |
173
+ | 用了 0.2.2 线(`engines.dsh` 门禁语义、`BundleInfo.update`、`dsh-doc`、Office kit、`Session.append` 双 overload、`window-drag-regions` 等,见 migration §14) | `>=0.2.2-0` |
158
174
 
159
175
  **不要**写开区间上界(如 `>=0.1.2-rc.1 <0.3.0`):它跨过了整代破坏性变更,
160
176
  门禁放行但运行时会炸。**上界必须按世代切**(`<0.2.0` / `<0.3.0`)。
@@ -247,9 +263,11 @@ Python 环境)。它放在旧目录属于例外——上游自己的规则是"
247
263
  | `@deepseek-ai/dsh-experimental-schedule-bundle` | `0.2.0-rc.2` 退役 | `upgrade-guide/v0.2.0-rc.2/schedule-bundle-retired` |
248
264
  | 子路径插件读自己的 `package.json` 取展示文案 | ≤`0.2.0-rc.2` → `0.2.1-alpha.1` **不再读** | `upgrade-guide/v0.2.0-rc.2/subpath-plugin-display-manifest` |
249
265
  | `repository-plugin`(`.dsh-plugin`) | 2026-08-09 推出 → **08-11 移除** | 社区实测(`vlln/plugin-registry` 档案,**该仓 2026-10-03 已归档**) |
266
+ | slot `sidebar.session.action`(hoc)+ `workspace.picker` SlotFactory / `workspace.picker.directoryFlow` | `0.2.2-rc.3` | rc.3 树:`ui-sidebar/.../contract/slots.ts`、`ui-workspace/.../contract/slots.ts`;**加性**,无迁移指南 |
267
+ | 服务 seam `ctx.deepseekChatImport`(配置 `maxSessions`/`maxUploadBytes`/`maxEntryBytes`/`maxTitleBytes`)+ 实验 bundle `@deepseek-ai/dsh-deepseek-chat-import` | `0.2.2-rc.3` | `docs/capability-seams.md`、`docs/config-catalog.md`;**加性**,默认未装,无迁移指南 |
250
268
 
251
269
  > 22 面全表连同每面的**工具名、API 名、配置键与逐条出处行号**,来自一次
252
- > read-only 清点。**清点时 checkout 在 `dsh-v0.2.1-alpha.1` / `5badb15`;本库镜像现已同步到 `dsh-v0.2.1-alpha.2` / `d743267`**,
270
+ > read-only 清点。**清点时 checkout 在 `dsh-v0.2.1-alpha.1` / `5badb15`;本库镜像现已同步到发布 tag `dsh-v0.2.2-rc.3` / `38a6a5c9`**,
253
271
  > 本文只摘"引入版本"一列;**要完整清单请按上文口径重跑**,或读官方
254
272
  > `docs/subsystems/*.md` + `docs/capability-seams.md` + `docs/tool-catalog.md`。
255
273
 
@@ -260,13 +278,18 @@ Python 环境)。它放在旧目录属于例外——上游自己的规则是"
260
278
  ```powershell
261
279
  # 五个"最新"里的前四个
262
280
  npm view @deepseek-ai/dsh dist-tags
263
- # { latest: '0.2.0-rc.2', next: '0.2.0-rc.2', alpha: '0.2.1-alpha.2' }
281
+ # { latest: '0.2.2-rc.1', next: '0.2.2-rc.3', alpha: '0.2.2-alpha.3' }
264
282
 
265
283
  # 子包 latest 是否冻结(换包名即可)
266
284
  npm view @deepseek-ai/dsh-tools dist-tags
267
- # { latest: '0.0.1-rc.1', next: '0.2.0-rc.2', alpha: '0.2.1-alpha.2' }
285
+ # { latest: '0.0.1-rc.1', next: '0.2.2-rc.3', alpha: '0.2.2-alpha.3' }
286
+
287
+ # 版本/Release 计数(2026-11-14:44 / 39)
288
+ npm view @deepseek-ai/dsh versions --json | ConvertFrom-Json | Measure-Object | Select-Object Count
289
+ Invoke-RestMethod -Headers @{'User-Agent'='x'} `
290
+ 'https://api.github.com/repos/deepseek-ai/deepseek-harness/releases?per_page=100' | Measure-Object | Select-Object Count
268
291
 
269
- # master 最新 tag 与 HEAD
292
+ # 最新 tag 与 HEAD
270
293
  Invoke-RestMethod -Headers @{'User-Agent'='x'} `
271
294
  https://api.github.com/repos/deepseek-ai/deepseek-harness/tags | Select-Object -First 3 name
272
295
 
@@ -278,7 +301,7 @@ Invoke-RestMethod -Headers @{'User-Agent'='x'} `
278
301
  dsh --version
279
302
  ```
280
303
 
281
- **维护节奏**:官方 3 周内发过 9 个 prerelease。每次官方发版后按
304
+ **维护节奏**:0.2.2 线在 17 天内发了 5 个 prerelease(2026-10-27 `alpha.2` → 11-03 `alpha.3` → 11-04 `rc.1` → 11-12 `rc.2` → 11-13 `rc.3`,npm 发布时刻)。每次官方发版后按
282
305
  `docs/upgrade-guide/**`(**无 index、无入链,必须主动看**)+ `docs/persistence-changes/**`
283
306
  + GitHub Releases 三处增量更新本文件与 `guide/migration-0.2.md`。
284
307
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-primer",
3
- "version": "0.4.5",
3
+ "version": "0.4.7",
4
4
  "description": "DSH plugin development as an on-demand agent skill: official docs mirror, version-compatibility matrix, migration seams, measured pitfalls, plus a scaffolder, checker and pack verifier CLI.",
5
5
  "type": "module",
6
6
  "main": "index.js",
@@ -78,21 +78,22 @@
78
78
  "verify:artifacts": "node scripts/verify-artifacts.mjs",
79
79
  "verify:self-contained": "pnpm run build && node dist/dsh-plugin-dev.js verify",
80
80
  "prepare": "tsdown",
81
- "prepack": "tsdown"
81
+ "prepack": "tsdown",
82
+ "check:drift": "node scripts/check-docs-drift.mjs"
82
83
  },
83
84
  "dependencies": {},
84
85
  "devDependencies": {
85
- "@deepseek-ai/dsh-attachment": "0.2.1-rc.2",
86
+ "@deepseek-ai/dsh-attachment": "0.2.2-rc.3",
86
87
  "@types/node": "^22.20.1",
87
88
  "@types/semver": "^7.8.0",
88
89
  "semver": "^7.8.5",
89
90
  "tsdown": "^0.23.1",
90
91
  "typescript": "^5.9.3",
91
92
  "vitest": "^3.2.7",
92
- "@deepseek-ai/dsh-working-directory": "0.2.1-rc.2"
93
+ "@deepseek-ai/dsh-working-directory": "0.2.2-rc.3"
93
94
  },
94
95
  "peerDependencies": {
95
- "@deepseek-ai/dsh": ">=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0 || >=0.1.7-0 <0.2.0 || >=0.2.0-0 <0.3.0 || >=0.2.1-0 <0.3.0"
96
+ "@deepseek-ai/dsh": ">=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0 || >=0.1.7-0 <0.2.0 || >=0.2.0-0 <0.3.0 || >=0.2.1-0 <0.3.0 || >=0.2.2-0 <0.3.0"
96
97
  },
97
98
  "peerDependenciesMeta": {
98
99
  "@deepseek-ai/dsh": {
@@ -121,7 +122,7 @@
121
122
  },
122
123
  "engines": {
123
124
  "node": ">=24.9.0",
124
- "dsh": ">=0.2.1-0 <0.3.0"
125
+ "dsh": ">=0.2.1-0 <0.3.0 || >=0.2.2-0 <0.3.0"
125
126
  },
126
127
  "packageManager": "pnpm@11.7.0",
127
128
  "dshWorkshop": {
@@ -154,7 +155,12 @@
154
155
  "0.2.0-rc.2",
155
156
  "0.2.1-alpha.1",
156
157
  "0.2.1-alpha.2",
157
- "0.2.1-rc.2"
158
+ "0.2.1-rc.2",
159
+ "0.2.2-alpha.2",
160
+ "0.2.2-alpha.3",
161
+ "0.2.2-rc.1",
162
+ "0.2.2-rc.2",
163
+ "0.2.2-rc.3"
158
164
  ]
159
165
  },
160
166
  "capability": {
@@ -1 +1 @@
1
- AGENTS.md
1
+ AGENTS.md
@@ -5,7 +5,7 @@
5
5
 
6
6
  | 内容 | 位置 | 来源(仓库内路径) |
7
7
  |---|---|---|
8
- | 官方 `docs/` 全文(717 篇 md,含 356 个 `.zh.md` 双语对) | [`docs/`](docs/) | `docs/` |
8
+ | 官方 `docs/` 全文(709 篇 md,含 352 个 `.zh.md` 双语对) | [`docs/`](docs/) | `docs/` |
9
9
  | 仓库根开发红线 | [`AGENTS.md`](AGENTS.md) | `AGENTS.md` |
10
10
  | CLAUDE 入口(上游为 symlink,此处为其目标文本) | [`CLAUDE.md`](CLAUDE.md) | `CLAUDE.md` → `AGENTS.md` |
11
11
  | 基准测试说明 | [`BENCHMARK.md`](BENCHMARK.md) | `BENCHMARK.md` |
@@ -25,11 +25,16 @@
25
25
  ## 同步与校验
26
26
 
27
27
  ```sh
28
- # 同步(源固定为 checkout 的 origin/master,未跟踪/未推送内容不会进来)
29
- pwsh -File scripts/sync-official-docs.ps1 [-Checkout <deepseek-harness-checkout>]
28
+ # 同步(默认取 checkout 的 origin/master;用 -Ref 钉一个发布 tag 得到可复现快照;未跟踪/未推送内容不会进来)
29
+ pwsh -File scripts/sync-official-docs.ps1 [-Checkout <deepseek-harness-checkout>] [-Ref <tag|sha>]
30
30
 
31
- # 漂移校验(KB 与 checkout 的 git 已跟踪文件逐一哈希对比)
31
+ # 漂移校验(有 checkout 时逐文件哈希对比)
32
32
  pwsh -File scripts/verify-kit.ps1 -Checkout <checkout>
33
+
34
+ # 新鲜度校验(无 checkout;比较"最新 release tag"与 SNAPSHOT 的 Source ref)
35
+ node scripts/check-docs-drift.mjs
33
36
  ```
34
37
 
35
38
  同步范围只包含 git 已跟踪文件;checkout 里的本地草稿(未跟踪)与未推送提交的改动不会进入本目录。同步后 README 里的"最后核验"日期与提交号请引用 `SNAPSHOT.md`。
39
+
40
+ **当前快照钉的是发布 tag,不是 master HEAD**:`references/official-docs` 对齐 `dsh-v0.2.2-rc.3`(`38a6a5c9…`,709 篇 md / 352 对中英),用 `-Ref dsh-v0.2.2-rc.3` 可复现。只在 tag 之后 master 才出现的文档(例如 `docs/upgrade-guide/v0.2.2-rc.2/**` 的 13 条指南)**不属于本快照**,属于下一版内容,别把它们算进 rc.3。
@@ -6,11 +6,13 @@
6
6
  | Item | Value |
7
7
  |---|---|
8
8
  | Source checkout | `D:\deepseek-harness` |
9
- | Source ref | `origin/master` |
10
- | Source commit | `e8f7b93a344964de3dca1ace9e72b6e4d6de87cb` |
11
- | Synced at (UTC) | 2026-11-13T04:36:21Z |
9
+ | Source ref | `dsh-v0.2.2-rc.3` |
10
+ | Source commit | `38a6a5c965aa99ab525161efb7cc5cf1fe62fced` |
11
+ | Synced at (UTC) | 2026-11-14T04:50:35Z |
12
12
  | Scope | tracked files at the ref: `docs/`, root `AGENTS.md`, `BENCHMARK.md`, `CLAUDE.md` (symlink target text), `CONTRIBUTING.md`/`.zh.md`/`.i18n.yaml`, `README.zh.md`/`.i18n.yaml` (the upstream English `README.md` is not in this dir; its snapshot lives in `downloads/github/harness/README.md`), `THIRD_PARTY_NOTICES.md`, `LICENSE`, `packages/AGENTS.md`, `packages/README.md`, `vendor/README.md`, `website/docs.ts` |
13
- | File counts | docs/: 717 md files (356 .zh.md pairs) |
14
- | Pruned this run | 0 out-of-scope/upstream-deleted entries |
13
+ | File counts | docs/: 709 md files (352 .zh.md pairs) |
14
+ | Pruned this run | 12 out-of-scope/upstream-deleted entries |
15
+
16
+ > Pinned to `dsh-v0.2.2-rc.3` (commit `38a6a5c965aa99ab525161efb7cc5cf1fe62fced`), not the checkout's master HEAD. Docs that exist only after this ref are not part of the snapshot.
15
17
 
16
18
  Drift check: `pwsh -File scripts/verify-kit.ps1 -Checkout <checkout>` (tracked files only).
@@ -6,5 +6,5 @@
6
6
  en: 41d772192075e133
7
7
  zh: 5ef3da69b4de1d8a
8
8
  /capability-seams-and-core-services:
9
- en: b76743a3ff14d2f4
10
- zh: 82431aa3ded14a89
9
+ en: 09800bc57617d407
10
+ zh: 5297659e75f4c3f5
@@ -14,6 +14,8 @@ flowchart LR
14
14
  pkg_plugin_recommendations["plugin-recommendations"]
15
15
  svc_pluginRecommendations["ctx.pluginRecommendations<br/>Explicit-need plugin recommendations"]
16
16
  pkg_client_ui_plugin_recommendations["client-ui-plugin-recommendations"]
17
+ pkg_deepseek_chat_import["deepseek-chat-import"]
18
+ svc_deepseekChatImport["ctx.deepseekChatImport<br/>DeepSeek chat export import"]
17
19
  pkg_headless["headless"]
18
20
  svc_headlessStartup["ctx.headlessStartup<br/>Headless invocation options"]
19
21
  pkg_experimental_client_ui_cot_translation["experimental-client-ui-cot-translation"]
@@ -358,6 +360,7 @@ flowchart LR
358
360
  pkg_credentials_local --> svc_credentials
359
361
  pkg_cua --> svc_cuaAccess
360
362
  pkg_deepseek_account --> svc_deepseekAccount
363
+ pkg_deepseek_chat_import --> svc_deepseekChatImport
361
364
  pkg_deepseek_llm_api_extensions --> svc_deepseekLlmApiExtensions
362
365
  pkg_experimental_api_speech_to_text --> svc_speechController
363
366
  pkg_experimental_browser_use_chrome_devtools_mcp --> svc_browserUse
@@ -653,6 +656,7 @@ flowchart LR
653
656
  | --- | --- | --- | --- | --- | --- | --- |
654
657
  | `ctx.actionCards` | `service` | [`action-cards`](../packages/experimental/action-cards) | - | [`creation-recommendations`](../packages/experimental/creation-recommendations), [`client-ui-action-cards`](../packages/experimental/client-ui-action-cards) | - | Owns the card tool, card state, user actions and status notices; card kinds register their actions and handlers. |
655
658
  | `ctx.pluginRecommendations` | `service` | [`plugin-recommendations`](../packages/experimental/plugin-recommendations) | - | [`client-ui-plugin-recommendations`](../packages/experimental/client-ui-plugin-recommendations) | - | Reads the current catalog text of an official plugin card and enables the plugin through the profile plugin manager after a click. |
659
+ | `ctx.deepseekChatImport` | `service` | [`deepseek-chat-import`](../packages/experimental/deepseek-chat-import) | - | - | - | Serves the owner-only upload route that imports each conversation of a DeepSeek chat export as a Session, and the upload limits the browser checks first. |
656
660
  | `ctx.headlessStartup` | `core` | [`headless`](../packages/bundle/headless) | - | [`headless`](../packages/bundle/headless) | - | Supplies parsed task and run options to the headless runner and its sandbox-policy configuration. |
657
661
  | `ctx.cotTranslation` | `service` | [`experimental-client-ui-cot-translation`](../packages/experimental/client-ui-cot-translation) | - | - | - | Serves reasoning translations, reuses saved results, and joins ordinary Session activation for uncached inactive Sessions. |
658
662
  | `ctx.translator` | `service` | [`experimental-translator`](../packages/experimental/translator) | - | [`experimental-client-ui-cot-translation`](../packages/experimental/client-ui-cot-translation) | - | Resolves Google or Bing requests and retains shared experimental records through the active Session writer. |
@@ -16,6 +16,8 @@ flowchart LR
16
16
  pkg_plugin_recommendations["plugin-recommendations"]
17
17
  svc_pluginRecommendations["ctx.pluginRecommendations<br/>Explicit-need plugin recommendations"]
18
18
  pkg_client_ui_plugin_recommendations["client-ui-plugin-recommendations"]
19
+ pkg_deepseek_chat_import["deepseek-chat-import"]
20
+ svc_deepseekChatImport["ctx.deepseekChatImport<br/>DeepSeek chat export import"]
19
21
  pkg_headless["headless"]
20
22
  svc_headlessStartup["ctx.headlessStartup<br/>Headless invocation options"]
21
23
  pkg_experimental_client_ui_cot_translation["experimental-client-ui-cot-translation"]
@@ -360,6 +362,7 @@ flowchart LR
360
362
  pkg_credentials_local --> svc_credentials
361
363
  pkg_cua --> svc_cuaAccess
362
364
  pkg_deepseek_account --> svc_deepseekAccount
365
+ pkg_deepseek_chat_import --> svc_deepseekChatImport
363
366
  pkg_deepseek_llm_api_extensions --> svc_deepseekLlmApiExtensions
364
367
  pkg_experimental_api_speech_to_text --> svc_speechController
365
368
  pkg_experimental_browser_use_chrome_devtools_mcp --> svc_browserUse
@@ -655,6 +658,7 @@ flowchart LR
655
658
  | --- | --- | --- | --- | --- | --- | --- |
656
659
  | `ctx.actionCards` | `service` | [`action-cards`](../packages/experimental/action-cards) | - | [`creation-recommendations`](../packages/experimental/creation-recommendations), [`client-ui-action-cards`](../packages/experimental/client-ui-action-cards) | - | 负责卡片工具、卡片状态、用户操作和状态通知;各卡片种类注册自己的动作和处理器。 |
657
660
  | `ctx.pluginRecommendations` | `service` | [`plugin-recommendations`](../packages/experimental/plugin-recommendations) | - | [`client-ui-plugin-recommendations`](../packages/experimental/client-ui-plugin-recommendations) | - | 读取官方插件卡片的当前目录文本,并在用户点击后通过配置插件管理器启用该插件。 |
661
+ | `ctx.deepseekChatImport` | `service` | [`deepseek-chat-import`](../packages/experimental/deepseek-chat-import) | - | - | - | 提供仅 owner 可用的上传路由,把 DeepSeek 会话导出的每个对话导入为一个会话,并提供浏览器先行检查的上传上限。 |
658
662
  | `ctx.headlessStartup` | `core` | [`headless`](../packages/bundle/headless) | - | [`headless`](../packages/bundle/headless) | - | 将解析后的任务和运行选项提供给无界面运行器及其 sandbox-policy 配置。 |
659
663
  | `ctx.cotTranslation` | `service` | [`experimental-client-ui-cot-translation`](../packages/experimental/client-ui-cot-translation) | - | - | - | 为展开的思考内容提供有界的 Session 翻译请求,不改变模型可见历史。 |
660
664
  | `ctx.translator` | `service` | [`experimental-translator`](../packages/experimental/translator) | - | [`experimental-client-ui-cot-translation`](../packages/experimental/client-ui-cot-translation) | - | 解析 Google 或 Bing 请求,并可选保留统一的实验性 Session 记录。 |
@@ -886,26 +886,6 @@ export interface Config {
886
886
  ```
887
887
  <!-- END GENERATED config-catalog:@deepseek-ai/dsh-credentials-local -->
888
888
 
889
- <!-- BEGIN GENERATED config-catalog:@deepseek-ai/dsh-cua-windows -->
890
- <a id="deepseek-aidsh-cua-windows"></a>
891
-
892
- ## `@deepseek-ai/dsh-cua-windows`
893
-
894
- - `inject`: `computerUse` · `tools` · `systemPrompt` · `subprocess` · `agents`
895
- - `refs`: [`CuaConfig`](../packages/experimental/cua/src/index.ts)
896
- - `source`: [`packages/experimental/cua-windows/src/index.ts:32`](../packages/experimental/cua-windows/src/index.ts)
897
-
898
- ```ts config-catalog
899
- /** Windows native waiting policy, alongside shared CUA resource limits. */
900
- export interface Config extends CuaConfig {
901
- /** Windows PowerShell executable used to query WSL interoperation and the Windows architecture. */
902
- windowsPowerShellPath: string
903
- /** Milliseconds between application-readiness and clipboard-release observations. */
904
- pollIntervalMs: number
905
- }
906
- ```
907
- <!-- END GENERATED config-catalog:@deepseek-ai/dsh-cua-windows -->
908
-
909
889
  <!-- BEGIN GENERATED config-catalog:@deepseek-ai/dsh-deepseek-account -->
910
890
  <a id="deepseek-aidsh-deepseek-account"></a>
911
891
 
@@ -951,6 +931,29 @@ export interface Config {
951
931
  ```
952
932
  <!-- END GENERATED config-catalog:@deepseek-ai/dsh-deepseek-account -->
953
933
 
934
+ <!-- BEGIN GENERATED config-catalog:@deepseek-ai/dsh-deepseek-chat-import -->
935
+ <a id="deepseek-aidsh-deepseek-chat-import"></a>
936
+
937
+ ## `@deepseek-ai/dsh-deepseek-chat-import`
938
+
939
+ - `inject`: `typert` · `connection` · `sessionPersistence` · `workspaceRegistry`
940
+ - `source`: [`packages/experimental/deepseek-chat-import/src/index.ts:36`](../packages/experimental/deepseek-chat-import/src/index.ts)
941
+
942
+ ```ts config-catalog
943
+ /** Deployment limits of the importer. */
944
+ export interface Config {
945
+ /** Most Sessions one import writes, choosing the conversations the export index lists as most recently updated. */
946
+ maxSessions: number
947
+ /** Largest export archive, in bytes, one upload may carry; the whole archive is held in memory while it is imported. */
948
+ maxUploadBytes: number
949
+ /** Largest declared uncompressed size, in bytes, of one archive entry; larger entries are not decompressed. */
950
+ maxEntryBytes: number
951
+ /** Largest UTF-8 size, in bytes, of an imported title, matching the session-title service's limit of the composition. */
952
+ maxTitleBytes: number
953
+ }
954
+ ```
955
+ <!-- END GENERATED config-catalog:@deepseek-ai/dsh-deepseek-chat-import -->
956
+
954
957
  <!-- BEGIN GENERATED config-catalog:@deepseek-ai/dsh-experimental-api-speech-to-text -->
955
958
  <a id="deepseek-aidsh-experimental-api-speech-to-text"></a>
956
959
 
@@ -1626,7 +1629,7 @@ export interface Config {
1626
1629
  ## `@deepseek-ai/dsh-file-reference-local`
1627
1630
 
1628
1631
  - `inject`: `agents` · `workingDirectory`
1629
- - `source`: [`packages/context/file-reference-local/src/index.ts:27`](../packages/context/file-reference-local/src/index.ts)
1632
+ - `source`: [`packages/context/file-reference-local/src/index.ts:35`](../packages/context/file-reference-local/src/index.ts)
1630
1633
 
1631
1634
  ```ts config-catalog
1632
1635
  /** Local file-reference discovery configuration. */
@@ -2425,7 +2428,7 @@ export type Config = Readonly<Record<string, never>>
2425
2428
  ## `@deepseek-ai/dsh-lsp-stdio`
2426
2429
 
2427
2430
  - `inject`: `fs` · `lsp` · `subprocess`
2428
- - `source`: [`packages/lsp/lsp-stdio/src/index.ts:70`](../packages/lsp/lsp-stdio/src/index.ts)
2431
+ - `source`: [`packages/lsp/lsp-stdio/src/index.ts:83`](../packages/lsp/lsp-stdio/src/index.ts)
2429
2432
 
2430
2433
  ```ts config-catalog
2431
2434
  /** Plugin configuration: provider id → local language-server configuration. */
@@ -2878,7 +2881,7 @@ export interface Config {
2878
2881
  ## `@deepseek-ai/dsh-ptc-runtime-node`
2879
2882
 
2880
2883
  - `inject`: `fs` · `subprocess` · `sandbox` · `sandboxPolicy`
2881
- - `source`: [`packages/ptc-runtime/ptc-runtime-node/src/config.ts:8`](../packages/ptc-runtime/ptc-runtime-node/src/config.ts)
2884
+ - `source`: [`packages/ptc-runtime/ptc-runtime-node/src/config.ts:7`](../packages/ptc-runtime/ptc-runtime-node/src/config.ts)
2882
2885
 
2883
2886
  ```ts config-catalog
2884
2887
  /** Deployment-varying runtime bounds and launch choices. */
@@ -2889,11 +2892,6 @@ export interface Config {
2889
2892
  executionMode?: 'per-call' | 'persistent-in-memory' | 'vm-script'
2890
2893
  /** Retain a Script process and context per stateOwner; only supported with executionMode: vm-script. */
2891
2894
  scriptPersistence?: boolean
2892
- /**
2893
- * Run persistent-in-memory programs as scoped REPL statements whose later calls receive copies of earlier top-level bindings;
2894
- * omitted, it is `SCOPED_REPL_BY_DEFAULT` from configuration.ts, currently true, with persistent-in-memory and false otherwise.
2895
- */
2896
- replScoped?: boolean
2897
2895
  /** Default elapsed deadline, including nested tool and approval waits. */
2898
2896
  timeoutMs?: number
2899
2897
  /** Maximum numeric elapsed budget accepted by resolve. */