dsh-plugin-guide 0.3.3 → 0.3.4

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 (102) hide show
  1. package/README.es.md +5 -1
  2. package/README.hi.md +5 -1
  3. package/README.md +5 -1
  4. package/README.pt.md +5 -1
  5. package/README.zh.md +5 -1
  6. package/dist/dsh-plugin-dev.js +3 -3
  7. package/guide/plugin-dev-guide.md +2 -2
  8. package/guide/quick-reference.es.md +2 -2
  9. package/guide/quick-reference.hi.md +1 -1
  10. package/guide/quick-reference.md +2 -2
  11. package/guide/quick-reference.pt.md +2 -2
  12. package/guide/quick-reference.zh-CN.md +2 -2
  13. package/package.json +3 -3
  14. package/references/official-docs/AGENTS.md +2 -2
  15. package/references/official-docs/SNAPSHOT.md +3 -3
  16. package/references/official-docs/THIRD_PARTY_NOTICES.md +4 -6
  17. package/references/official-docs/docs/agent-lifecycle.i18n.yaml +2 -2
  18. package/references/official-docs/docs/agent-lifecycle.md +5 -3
  19. package/references/official-docs/docs/agent-lifecycle.zh.md +5 -3
  20. package/references/official-docs/docs/architecture.i18n.yaml +2 -2
  21. package/references/official-docs/docs/architecture.md +7 -3
  22. package/references/official-docs/docs/architecture.zh.md +7 -3
  23. package/references/official-docs/docs/capability-seams.i18n.yaml +2 -2
  24. package/references/official-docs/docs/capability-seams.md +5 -0
  25. package/references/official-docs/docs/capability-seams.zh.md +5 -0
  26. package/references/official-docs/docs/config-catalog.i18n.yaml +2 -2
  27. package/references/official-docs/docs/config-catalog.md +15 -21
  28. package/references/official-docs/docs/config-catalog.zh.md +15 -21
  29. package/references/official-docs/docs/cookbook/extension-cookbook.i18n.yaml +2 -2
  30. package/references/official-docs/docs/cookbook/extension-cookbook.md +12 -10
  31. package/references/official-docs/docs/cookbook/extension-cookbook.zh.md +12 -10
  32. package/references/official-docs/docs/deepseek-llm-api-wire-extensions.i18n.yaml +2 -2
  33. package/references/official-docs/docs/deepseek-llm-api-wire-extensions.md +16 -12
  34. package/references/official-docs/docs/deepseek-llm-api-wire-extensions.zh.md +16 -12
  35. package/references/official-docs/docs/event-producer-consumer.i18n.yaml +2 -2
  36. package/references/official-docs/docs/event-producer-consumer.md +28 -27
  37. package/references/official-docs/docs/event-producer-consumer.zh.md +32 -31
  38. package/references/official-docs/docs/module-graph.i18n.yaml +2 -2
  39. package/references/official-docs/docs/module-graph.md +36 -14
  40. package/references/official-docs/docs/module-graph.zh.md +36 -14
  41. package/references/official-docs/docs/persistence-catalog.i18n.yaml +2 -2
  42. package/references/official-docs/docs/persistence-catalog.md +49 -39
  43. package/references/official-docs/docs/persistence-catalog.zh.md +39 -29
  44. package/references/official-docs/docs/subsystems/attachment.i18n.yaml +2 -2
  45. package/references/official-docs/docs/subsystems/attachment.md +157 -4
  46. package/references/official-docs/docs/subsystems/attachment.zh.md +157 -4
  47. package/references/official-docs/docs/subsystems/commands.i18n.yaml +2 -2
  48. package/references/official-docs/docs/subsystems/commands.md +24 -15
  49. package/references/official-docs/docs/subsystems/commands.zh.md +24 -15
  50. package/references/official-docs/docs/subsystems/conversation.i18n.yaml +2 -2
  51. package/references/official-docs/docs/subsystems/conversation.md +4 -4
  52. package/references/official-docs/docs/subsystems/conversation.zh.md +4 -4
  53. package/references/official-docs/docs/subsystems/core.i18n.yaml +2 -2
  54. package/references/official-docs/docs/subsystems/core.md +62 -1
  55. package/references/official-docs/docs/subsystems/core.zh.md +62 -1
  56. package/references/official-docs/docs/subsystems/llm-streaming.i18n.yaml +2 -2
  57. package/references/official-docs/docs/subsystems/llm-streaming.md +23 -2
  58. package/references/official-docs/docs/subsystems/llm-streaming.zh.md +23 -2
  59. package/references/official-docs/docs/subsystems/persistence.i18n.yaml +2 -2
  60. package/references/official-docs/docs/subsystems/persistence.md +10 -10
  61. package/references/official-docs/docs/subsystems/persistence.zh.md +10 -10
  62. package/references/official-docs/docs/subsystems/session-projection.i18n.yaml +2 -2
  63. package/references/official-docs/docs/subsystems/session-projection.md +19 -0
  64. package/references/official-docs/docs/subsystems/session-projection.zh.md +19 -0
  65. package/references/official-docs/docs/subsystems/session-reference.i18n.yaml +2 -2
  66. package/references/official-docs/docs/subsystems/session-reference.md +25 -1
  67. package/references/official-docs/docs/subsystems/session-reference.zh.md +25 -1
  68. package/references/official-docs/docs/subsystems/session-telemetry.i18n.yaml +2 -2
  69. package/references/official-docs/docs/subsystems/session-telemetry.md +6 -5
  70. package/references/official-docs/docs/subsystems/session-telemetry.zh.md +6 -5
  71. package/references/official-docs/docs/subsystems/session.i18n.yaml +2 -2
  72. package/references/official-docs/docs/subsystems/session.md +52 -40
  73. package/references/official-docs/docs/subsystems/session.zh.md +52 -40
  74. package/references/official-docs/docs/subsystems/web-client.i18n.yaml +2 -2
  75. package/references/official-docs/docs/subsystems/web-client.md +1 -1
  76. package/references/official-docs/docs/subsystems/web-client.zh.md +1 -1
  77. package/references/official-docs/docs/subsystems/workspace.i18n.yaml +2 -2
  78. package/references/official-docs/docs/subsystems/workspace.md +8 -8
  79. package/references/official-docs/docs/subsystems/workspace.zh.md +8 -8
  80. package/references/official-docs/docs/testing.i18n.yaml +2 -2
  81. package/references/official-docs/docs/testing.md +2 -2
  82. package/references/official-docs/docs/testing.zh.md +2 -2
  83. package/references/official-docs/docs/user/guide/network-proxy.i18n.yaml +6 -0
  84. package/references/official-docs/docs/user/guide/network-proxy.md +85 -0
  85. package/references/official-docs/docs/user/guide/network-proxy.zh.md +85 -0
  86. package/references/official-docs/docs/user/guide/providers.i18n.yaml +2 -2
  87. package/references/official-docs/docs/user/guide/providers.md +70 -17
  88. package/references/official-docs/docs/user/guide/providers.zh.md +70 -17
  89. package/references/official-docs/docs/web-styling.i18n.yaml +2 -2
  90. package/references/official-docs/docs/web-styling.md +1 -0
  91. package/references/official-docs/docs/web-styling.zh.md +1 -0
  92. package/references/official-docs/website-docs.ts +8 -0
  93. package/templates/js/README.es.md +1 -1
  94. package/templates/js/README.hi.md +1 -1
  95. package/templates/js/README.md +1 -1
  96. package/templates/js/README.pt.md +1 -1
  97. package/templates/js/README.zh.md +1 -1
  98. package/templates/ts/README.es.md +1 -1
  99. package/templates/ts/README.hi.md +1 -1
  100. package/templates/ts/README.md +1 -1
  101. package/templates/ts/README.pt.md +1 -1
  102. package/templates/ts/README.zh.md +1 -1
package/README.es.md CHANGED
@@ -25,7 +25,7 @@
25
25
 
26
26
  | Surface | Status |
27
27
  |---|---|
28
- | Harness | DeepSeek Harness `0.1.2-alpha.5` (adaptado el 2026-09-02): el sobre de sesión conserva su campo ignorable solo para compatibilidad de lectura de logs almacenados - Session.append aún no puede estamparlo, por lo que el comportamiento de la puerta no cambia. |
28
+ | Harness | DeepSeek Harness `0.1.2-rc.1` (adaptado el 2026-09-04): el sobre de sesión conserva su campo ignorable solo para compatibilidad de lectura de logs almacenados - Session.append aún no puede estamparlo, por lo que el comportamiento de la puerta no cambia. |
29
29
  | Node | `^22.19.0 || >=24.0.0` (runtime de DeepSeek Harness) |
30
30
  | Platforms | Todas (bundle ESM plano; sin código nativo, sin red) |
31
31
  | Model | Cualquiera (sin interacción con el modelo) |
@@ -246,3 +246,7 @@ Mantenido por la comunidad, **no** es un producto oficial de DeepSeek. DeepSeek
246
246
  ## License
247
247
 
248
248
  [Apache License 2.0](LICENSE) © 2026 dsh-plugin-guide contributors — nuestro propio texto (`SKILL.md`, `guide/`, `references/`, `scripts/`, este README) es Apache-2.0; el contenido de terceros empaquetado se documenta en [NOTICE.md](NOTICE.md).
249
+
250
+ ### Instalar desde el mercado de DSH Desktop
251
+
252
+ Todos los plugins de PerryLink pueden explorarse en el mercado integrado de DSH Desktop: **Market → Sources → add source → pegar** `https://perrylink-dsh-catalog.perrylink.workers.dev/catalog-source.json` **→ seleccionarlo**. La instalación sigue pasando por la verificación de identidad npm del mercado y tu confirmación.
package/README.hi.md CHANGED
@@ -25,7 +25,7 @@
25
25
 
26
26
  | Surface | Status |
27
27
  |---|---|
28
- | Harness | DeepSeek Harness `0.1.2-alpha.5` (2026-09-02 को अनुकूलित): सत्र लिफ़ाफ़ा अपना ignorable फ़ील्ड केवल संग्रहीत-लॉग पठन संगतता के लिए रखता है - Session.append अभी भी इसे स्टैम्प नहीं कर सकता, इसलिए गेट व्यवहार अपरिवर्तित है। |
28
+ | Harness | DeepSeek Harness `0.1.2-rc.1` (2026-09-04 को अनुकूलित): सत्र लिफ़ाफ़ा अपना ignorable फ़ील्ड केवल संग्रहीत-लॉग पठन संगतता के लिए रखता है - Session.append अभी भी इसे स्टैम्प नहीं कर सकता, इसलिए गेट व्यवहार अपरिवर्तित है। |
29
29
  | Node | `^22.19.0 || >=24.0.0` (DeepSeek Harness रनटाइम) |
30
30
  | Platforms | सभी (सादा ESM बंडल; कोई नेटिव कोड नहीं, कोई नेटवर्क नहीं) |
31
31
  | Model | कोई भी (कोई मॉडल अंतःक्रिया नहीं) |
@@ -246,3 +246,7 @@ pwsh -File scripts/verify-kit.ps1 # महत्वपूर्ण पथ +
246
246
  ## License
247
247
 
248
248
  [Apache License 2.0](LICENSE) © 2026 dsh-plugin-guide contributors — हमारा अपना पाठ (`SKILL.md`, `guide/`, `references/`, `scripts/`, यह README) Apache-2.0 है; पैक की गई तृतीय-पक्ष सामग्री [NOTICE.md](NOTICE.md) में दस्तावेज़ित है।
249
+
250
+ ### DSH Desktop मार्केट से इंस्टॉल करें
251
+
252
+ सभी PerryLink प्लगइन DSH Desktop के बिल्ट-इन मार्केट में देखे जा सकते हैं: **Market → Sources → add source → पेस्ट करें** `https://perrylink-dsh-catalog.perrylink.workers.dev/catalog-source.json` **→ चुनें**। इंस्टॉलेशन मार्केट के npm-identity सत्यापन और आपकी पुष्टि से ही होता है।
package/README.md CHANGED
@@ -28,7 +28,7 @@
28
28
 
29
29
  | Surface | Status |
30
30
  |---|---|
31
- | Harness | DeepSeek Harness `0.1.2-alpha.5` (adapted 2026-09-02): the session envelope keeps its ignorable field for stored-log read compatibility only - Session.append still cannot stamp it, so audit-gate behavior is unchanged. |
31
+ | Harness | DeepSeek Harness `0.1.2-rc.1` (adapted 2026-09-04): the session envelope keeps its ignorable field for stored-log read compatibility only - Session.append still cannot stamp it, so audit-gate behavior is unchanged. |
32
32
  | Node | `^22.19.0 || >=24.0.0` (DeepSeek Harness runtime) |
33
33
  | Platforms | All (plain ESM bundle; no native code, no network) |
34
34
  | Model | Any (no model interaction) |
@@ -246,6 +246,10 @@ This project is one of the [33 DeepSeek Harness plugins](https://github.com/Perr
246
246
 
247
247
  Community-maintained, **not** an official DeepSeek product. DeepSeek Harness is in developer preview and ships breaking changes; when in doubt, the official docs in `references/official-docs/` are the source of truth.
248
248
 
249
+ ### Install from the DSH Desktop Market
250
+
251
+ All PerryLink plugins are browsable in the built-in DSH Desktop Market: **Market → Sources → add source → paste** `https://perrylink-dsh-catalog.perrylink.workers.dev/catalog-source.json` **→ select it**. Installation still goes through the Market's npm-identity verification and your confirmation.
252
+
249
253
  ## License
250
254
 
251
255
  [Apache License 2.0](LICENSE) © 2026 dsh-plugin-guide contributors — our own text (`SKILL.md`, `guide/`, `references/`, `scripts/`, this README) is Apache-2.0; bundled third-party content is documented in [NOTICE.md](NOTICE.md).
package/README.pt.md CHANGED
@@ -25,7 +25,7 @@
25
25
 
26
26
  | Surface | Status |
27
27
  |---|---|
28
- | Harness | DeepSeek Harness `0.1.2-alpha.5` (adaptado em 2026-09-02): o envelope de sessão mantém seu campo ignorable apenas para compatibilidade de leitura de logs armazenados - o Session.append ainda não consegue estampá-lo, então o comportamento da porta não muda. |
28
+ | Harness | DeepSeek Harness `0.1.2-rc.1` (adaptado em 2026-09-04): o envelope de sessão mantém seu campo ignorable apenas para compatibilidade de leitura de logs armazenados - o Session.append ainda não consegue estampá-lo, então o comportamento da porta não muda. |
29
29
  | Node | `^22.19.0 || >=24.0.0` (runtime do DeepSeek Harness) |
30
30
  | Platforms | Todas (bundle ESM puro; sem código nativo, sem rede) |
31
31
  | Model | Qualquer (sem interação com o modelo) |
@@ -246,3 +246,7 @@ Mantido pela comunidade, **não** é um produto oficial da DeepSeek. O DeepSeek
246
246
  ## License
247
247
 
248
248
  [Apache License 2.0](LICENSE) © 2026 dsh-plugin-guide contributors — nosso próprio texto (`SKILL.md`, `guide/`, `references/`, `scripts/`, este README) é Apache-2.0; o conteúdo de terceiros empacotado é documentado em [NOTICE.md](NOTICE.md).
249
+
250
+ ### Instalar a partir do mercado do DSH Desktop
251
+
252
+ Todos os plugins PerryLink podem ser explorados no mercado integrado do DSH Desktop: **Market → Sources → add source → colar** `https://perrylink-dsh-catalog.perrylink.workers.dev/catalog-source.json` **→ selecionar**. A instalação continua passando pela verificação de identidade npm do mercado e pela sua confirmação.
package/README.zh.md CHANGED
@@ -27,7 +27,7 @@
27
27
 
28
28
  | Surface | Status |
29
29
  |---|---|
30
- | Harness | DeepSeek Harness `0.1.2-alpha.5`(2026-09-02 已适配):会话信封保留 ignorable 字段但仅用于存量日志读取兼容——Session.append 仍无法盖章,门控行为不变。 |
30
+ | Harness | DeepSeek Harness `0.1.2-rc.1`(2026-09-04 已适配):会话信封保留 ignorable 字段但仅用于存量日志读取兼容——Session.append 仍无法盖章,门控行为不变。 |
31
31
  | Node | `^22.19.0 || >=24.0.0`(DeepSeek Harness 运行时) |
32
32
  | Platforms | 全部(纯 ESM bundle;无原生代码、无网络) |
33
33
  | Model | 任意(无模型交互) |
@@ -248,3 +248,7 @@ pwsh -File scripts/verify-kit.ps1 # 关键路径 + 链接扫描(加 -Checkou
248
248
  ## License
249
249
 
250
250
  [Apache License 2.0](LICENSE) © 2026 dsh-plugin-guide contributors —— 自有文本(`SKILL.md`、`guide/`、`references/`、`scripts/`、本 README)按 Apache-2.0;打包的第三方内容见 [NOTICE.md](NOTICE.md)。
251
+
252
+ ### 从 DSH Desktop 市场安装
253
+
254
+ 所有 PerryLink 插件均可在 DSH Desktop 内置市场中浏览:**市场 → 来源 → 添加来源 → 粘贴** `https://perrylink-dsh-catalog.perrylink.workers.dev/catalog-source.json` **→ 选中**。安装仍需通过市场的 npm 身份校验与你的确认。
@@ -1466,7 +1466,7 @@ function suggestionsFor(step, result) {
1466
1466
  const base = [`tail of "${step}":\n${tailOf(result)}`];
1467
1467
  if (result.timedOut) base.push(`command timed out; raise --timeout or --smoke-timeout`);
1468
1468
  if (step === "install") {
1469
- base.push("ensure the dsh CLI is @deepseek-ai/dsh@0.1.2-alpha.5 (older rc.6 PATH builds do not satisfy the compat pin)");
1469
+ base.push("ensure the dsh CLI is @deepseek-ai/dsh@0.1.2-rc.1 (older builds such as the rc.6 line do not satisfy the compat pin)");
1470
1470
  base.push("confirm the profile allowlist matches the repo compat workflow (native builds allowlisted)");
1471
1471
  }
1472
1472
  if (step === "headless") base.push("a hang usually means an injected service stayed pending; the smoke timeout surfaces exactly that");
@@ -1587,8 +1587,8 @@ async function main(argv, cwd = process.cwd()) {
1587
1587
  dshBin: resolveDsh(flagString(flags, "dsh")),
1588
1588
  pnpmBin: resolvePnpm(flagString(flags, "pnpm")),
1589
1589
  profile: flagString(flags, "profile", "compat") ?? "compat",
1590
- base: flagString(flags, "base", "@deepseek-ai/dsh-base@0.1.2-alpha.5") ?? "@deepseek-ai/dsh-base@0.1.2-alpha.5",
1591
- headless: flagString(flags, "headless", "@deepseek-ai/dsh-headless@0.1.2-alpha.5") ?? "@deepseek-ai/dsh-headless@0.1.2-alpha.5",
1590
+ base: flagString(flags, "base", "@deepseek-ai/dsh-base@0.1.2-rc.1") ?? "@deepseek-ai/dsh-base@0.1.2-rc.1",
1591
+ headless: flagString(flags, "headless", "@deepseek-ai/dsh-headless@0.1.2-rc.1") ?? "@deepseek-ai/dsh-headless@0.1.2-rc.1",
1592
1592
  timeoutMs: timeoutMs(flags, "timeout", "DSH_PLUGIN_DEV_TIMEOUT", DEFAULT_TIMEOUT_MS),
1593
1593
  smokeTimeoutMs: timeoutMs(flags, "smoke-timeout", "DSH_PLUGIN_DEV_SMOKE_TIMEOUT", DEFAULT_SMOKE_TIMEOUT_MS)
1594
1594
  });
@@ -185,7 +185,7 @@ export function apply(ctx: Context, config: Config) { /* config 已校验+补默
185
185
  2. **waterfall 监听器必须调 `next()`**。
186
186
  3. **模型可见 ⟺ 已记录**(Model-visible ⟺ logged):任何进入模型请求的内容必须能从会话日志重建;新增模型可见输入必须新增会话事件。运行时不变式会断言这一点。
187
187
  4. **跨边界 opaque id 用 branded**:`Branded<B>`(`dsh-brand`,纯类型、零运行时依赖),从不裸 `string`;构造走 per-type factory(`SessionId` / `CallId` / `JobId` / `GoalId` 等),防止不同 id 在类型层互换。
188
- 5. **会话事件版本规则**:`SessionEventMap` 成员默认 required-on-read,无信封豁免——`0.1.2-alpha.1` 已移除 `ignorable` 信封、读路径 fail-closed,不认识该事件类型的 build 一律拒绝日志;只有结构格式变更才 bump `SESSION_FORMAT_VERSION`。`0.1.2-alpha.5` 恢复信封 `ignorable?: true` 字段但仅用于存量日志读取兼容——其 `Session.append` 第三参为仅 surface 事件的 `SurfaceIntent`,仍无法盖章标记,故自适应门在该线上继续停写(行为不变)。插件新增会话事件时按此契约设计:下游插件事件目前无注册面,写自定义事件的插件用自适应门在无信封宿主上停写(新增模型可见输入见红线 3)。
188
+ 5. **会话事件版本规则**:`SessionEventMap` 成员默认 required-on-read,无信封豁免——`0.1.2-alpha.1` 已移除 `ignorable` 信封、读路径 fail-closed,不认识该事件类型的 build 一律拒绝日志;只有结构格式变更才 bump `SESSION_FORMAT_VERSION`。`0.1.2-rc.1` 恢复信封 `ignorable?: true` 字段但仅用于存量日志读取兼容——其 `Session.append` 第三参为仅 surface 事件的 `SurfaceIntent`,仍无法盖章标记,故自适应门在该线上继续停写(行为不变)。插件新增会话事件时按此契约设计:下游插件事件目前无注册面,写自定义事件的插件用自适应门在无信封宿主上停写(新增模型可见输入见红线 3)。
189
189
 
190
190
  ---
191
191
 
@@ -357,7 +357,7 @@ bundle 挂一个普通 provider 插件:`inject = ['cmdlineArgs']`,用 `@deep
357
357
  **身份与依赖(最致命)**
358
358
  - **cordis 双副本 / 双 Cordis 分裂**:插件构建时若从 `.pnpm` 副本解析 cordis,与 harness 的 vendored 副本是"两个模块",`declare module` 增强合并不了 → 报 `Property 'tools' does not exist on type 'Context'`。构建期把 cordis 解析到 harness 的 `vendor/cordis`;npm 安装路径下 peer 必须与宿主同一身份——**scoped `@deepseek-ai/cordis` 与 unscoped `cordis` 混用同样分裂**(dsh-tools 的类型只增强 scoped 版本)。独立包把 cordis 设为 peerDependency(+ dev),版本对齐宿主。
359
359
  - **官方 `@deepseek-ai/*` 包曾未发布公共 npm**(rc 早期):社区 bundle 的 `dependencies` 留空,靠 profile 的 pnpm 闭包 flat fallback(`$DSH_HOME/profiles/node_modules`)注入;声明了反而解析失败。rc.6 起公开包可用(from-scratch 教程锁 `0.1.0-rc.6`、cordis `4.0.1`),两条时间线的资料都要知道,按当时宿主版本取舍。
360
- - **npm `latest` 标签是过期版本**:`@deepseek-ai/dsh-tools` 的 `latest` 停在陈旧 0.0.1-rc.1——脚手架(create-dsh-plugin)显式钉 `next` 标签版本;裸跑 `npm i @deepseek-ai/dsh-tools` 会踩旧版。2026-08-14 复核:dsh-tools 与 `@deepseek-ai/dsh-session-persistence-jsonl` 的 `latest` 均为 0.0.1-rc.1、`next` 为 0.1.0-rc.6;`@deepseek-ai/dsh` latest=next=0.1.0-rc.6、`@deepseek-ai/cordis` latest=4.0.1(另有 `next`=4.0.1-rc.4);create-dsh-plugin 已发布 latest=0.1.1(2026-08-13T15:15Z);dsh-core、dsh-sdk 仍未发布(404)。**无作用域 `dsh` 包是无关项目 node-dsh**("A shell written in JavaScript")——官方 CLI 包是 `@deepseek-ai/dsh`,别装错。
360
+ - **npm `latest` 标签是过期版本**:`@deepseek-ai/dsh-tools` 的 `latest` 停在陈旧 0.0.1-rc.1——脚手架(create-dsh-plugin)显式钉 `next` 标签版本;裸跑 `npm i @deepseek-ai/dsh-tools` 会踩旧版。2026-08-14 复核:dsh-tools 与 `@deepseek-ai/dsh-session-persistence-jsonl` 的 `latest` 均为 0.0.1-rc.1、`next` 为 0.1.0-rc.6;`@deepseek-ai/dsh` latest=next=0.1.0-rc.6、`@deepseek-ai/cordis` latest=4.0.1(另有 `next`=4.0.1-rc.4);create-dsh-plugin 已发布 latest=0.1.1(2026-08-13T15:15Z);dsh-core、dsh-sdk 仍未发布(404)。**无作用域 `dsh` 包是无关项目 node-dsh**("A shell written in JavaScript")——官方 CLI 包是 `@deepseek-ai/dsh`,别装错。2026-09-04 复核:`@deepseek-ai/dsh` latest=next=0.1.2-rc.1(`alpha`=0.1.2-alpha.5)、`@deepseek-ai/cordis` latest=4.0.2(`next`=4.0.1-rc.4)、dsh-tools 与 dsh-session-persistence-jsonl 的 `next` 抬到 0.1.2-rc.1(`latest` 仍 0.0.1-rc.1)、create-dsh-plugin latest=0.2.1;dsh-core、dsh-sdk 仍 404。
361
361
 
362
362
  **tsconfig 三件套 + 构建陷阱**
363
363
  - 独立 TS 插件包实测可用形态:`module: esnext` + `moduleResolution: bundler` + `allowImportingTsExtensions: true`(否则 TS5097)+ `rewriteRelativeImportExtensions: true`(否则产物残留 `./x.ts` 导入 → 运行时 ESM 崩溃)+ `lib: ["ES2024"]` + `outDir: lib` + `declarationDir: lib/types`。用 `Buffer`/`node:` 时显式 `"types": ["node"]`(不写 `types` 字段会隐式包含全部 @types,脆弱)。
@@ -138,7 +138,7 @@ Protocolo de chunks: `block-start` → `text-delta*` → `block-end` (bloque com
138
138
  5. Paquetes de plugin independientes: cordis es peerDependency con la misma identidad del host (mezclar scoped `@deepseek-ai/cordis` y unscoped divide identidades); ESM; manifiesto `dsh.bundle`; instalaciones git necesitan `prepare` + `allowBuilds`; publica `lib/` o un tarball.
139
139
  6. Documentación bilingüe en pares; descripciones/prompts son comportamiento; cambios no triviales llevan Agent Note; ejecuta el conjunto mínimo de checks antes de empujar (dsh-pre-push-checks).
140
140
  7. Los ids opacos entre límites son branded (`Branded<B>` de `dsh-brand`), nunca `string` pelado.
141
- 8. Los miembros de `SessionEventMap` son required-on-read: el sobre `ignorable` desaparece en 0.1.2-alpha.1 (la lectura falla cerrada — un build que no conoce un tipo de evento rechaza el log), y los appends de eventos propios de plugins cruzan una puerta adaptativa que deja de escribir en hosts sin sobre; 0.1.2-alpha.5 conserva el campo ignorable?: true solo para compatibilidad de lectura de logs almacenados (su Session.append sigue sin poder estampar el marcador), por lo que la puerta continúa sin escribir (sin cambio de comportamiento). Solo los cambios de formato estructural bumpan `SESSION_FORMAT_VERSION`. El switch sobre `SessionEvent` cae por un `default` documentado — sin `assertNever` (unión merge-extensible).
141
+ 8. Los miembros de `SessionEventMap` son required-on-read: el sobre `ignorable` desaparece en 0.1.2-alpha.1 (la lectura falla cerrada — un build que no conoce un tipo de evento rechaza el log), y los appends de eventos propios de plugins cruzan una puerta adaptativa que deja de escribir en hosts sin sobre; 0.1.2-rc.1 conserva el campo ignorable?: true solo para compatibilidad de lectura de logs almacenados (su Session.append sigue sin poder estampar el marcador), por lo que la puerta continúa sin escribir (sin cambio de comportamiento). Solo los cambios de formato estructural bumpan `SESSION_FORMAT_VERSION`. El switch sobre `SessionEvent` cae por un `default` documentado — sin `assertNever` (unión merge-extensible).
142
142
 
143
143
  ## Lista rápida de trampas comunitarias (detalles: guía §7.3 / community-repo-deep-dive.md)
144
144
 
@@ -147,7 +147,7 @@ Protocolo de chunks: `block-start` → `text-delta*` → `block-end` (bloque com
147
147
  - Junctions de Windows con PowerShell `New-Item -ItemType Junction`; la letra de unidad de vitest en mayúscula `C:/`.
148
148
  - `DSH_PERMISSION_MODE=danger-full-access` es de alto riesgo (sin backend de sandbox en Windows, aprobaciones desactivadas); `DSH_*` en `~/.dsh/.env` rompe el arranque.
149
149
  - Los archivos de sesión son zstd multiframe: usa `scanZstdFrames`/`createZstdFrameDecoder` (`@deepseek-ai/dsh-session-persistence-jsonl/src/zstd.ts`).
150
- - npm: `dsh` sin alcance es el proyecto ajeno node-dsh (un shell) — instala `@deepseek-ai/dsh`; `@deepseek-ai/dsh-tools` y `@deepseek-ai/dsh-session-persistence-jsonl` tienen `latest` obsoleto (0.0.1-rc.1), fija `next` (0.1.0-rc.6); `create-dsh-plugin` ya está publicado (0.1.1, 2026-08-13); dsh-core/dsh-sdk siguen sin publicarse (verificado 2026-08-14).
150
+ - npm: `dsh` sin alcance es el proyecto ajeno node-dsh (un shell) — instala `@deepseek-ai/dsh` (latest=0.1.2-rc.1); `@deepseek-ai/dsh-tools` y `@deepseek-ai/dsh-session-persistence-jsonl` tienen `latest` obsoleto (0.0.1-rc.1), fija `next` (0.1.2-rc.1); `create-dsh-plugin` latest=0.2.1; dsh-core/dsh-sdk siguen sin publicarse (verificado 2026-09-04).
151
151
  - Haz `resolve()` en ambos lados antes de comparar rutas (trampa de barras invertidas de Windows).
152
152
 
153
153
  ## Enlaces de documentación
@@ -147,7 +147,7 @@ Consumer (`dsh-tool-my-cap`): `inject = ['tools','myCap']`, `ctx.tools.register(
147
147
  - Windows junctions PowerShell `New-Item -ItemType Junction` से; vitest ड्राइव अक्षर बड़ा `C:/`।
148
148
  - `DSH_PERMISSION_MODE=danger-full-access` उच्च जोखिम है (Windows पर सैंडबॉक्स बैकएंड नहीं, अनुमोदन बंद); `~/.dsh/.env` में `DSH_*` स्टार्टअप तोड़ता है।
149
149
  - सत्र फ़ाइलें मल्टी-फ़्रेम zstd हैं: `scanZstdFrames`/`createZstdFrameDecoder` उपयोग करें (`@deepseek-ai/dsh-session-persistence-jsonl/src/zstd.ts`)।
150
- - npm: बिना स्कोप वाला `dsh` असंबंधित node-dsh प्रोजेक्ट (एक shell) है — `@deepseek-ai/dsh` इंस्टॉल करें; `@deepseek-ai/dsh-tools` और `@deepseek-ai/dsh-session-persistence-jsonl` का `latest` पुराना है (0.0.1-rc.1), `next` (0.1.0-rc.6) पिन करें; `create-dsh-plugin` अब प्रकाशित है (0.1.1, 2026-08-13); dsh-core/dsh-sdk अभी भी अप्रकाशित (2026-08-14 को सत्यापित)।
150
+ - npm: बिना स्कोप वाला `dsh` असंबंधित node-dsh प्रोजेक्ट (एक shell) है — `@deepseek-ai/dsh` इंस्टॉल करें (latest=0.1.2-rc.1); `@deepseek-ai/dsh-tools` और `@deepseek-ai/dsh-session-persistence-jsonl` का `latest` पुराना है (0.0.1-rc.1), `next` (0.1.2-rc.1) पिन करें; `create-dsh-plugin` latest=0.2.1; dsh-core/dsh-sdk अभी भी अप्रकाशित (2026-09-04 को सत्यापित)।
151
151
  - पथ तुलना से पहले दोनों ओर `resolve()` करें (Windows बैकस्लैश जाल)।
152
152
 
153
153
  ## दस्तावेज़ लिंक
@@ -138,7 +138,7 @@ Chunk protocol: `block-start` → `text-delta*` → `block-end` (complete block)
138
138
  5. Standalone plugin packages: cordis is a peerDependency matching the host identity (mixing scoped `@deepseek-ai/cordis` and unscoped splits identities); ESM; `dsh.bundle` manifest; git installs need `prepare` + `allowBuilds`; ship `lib/` or a tarball.
139
139
  6. Bilingual docs in pairs; tool descriptions/prompts are behavior; non-trivial changes need an Agent Note; run the minimal check set before pushing (dsh-pre-push-checks).
140
140
  7. Opaque cross-boundary ids are branded (`Branded<B>` from `dsh-brand`), never bare `string`.
141
- 8. `SessionEventMap` members are required-on-read: the `ignorable` envelope is gone on 0.1.2-alpha.1 (reads fail closed — a build that does not know an event type refuses the log), and plugin appends of custom events ride an adaptive gate that stops writing on envelope-less hosts; only structural format changes bump `SESSION_FORMAT_VERSION`. 0.1.2-alpha.5 retains the `ignorable?: true` field for stored-log read compatibility only — its `Session.append` third argument is a `SurfaceIntent` for surface events and still cannot stamp the marker, so the gate keeps skipping custom-event appends there (no behavior change). Switch over `SessionEvent` falls through a documented `default` — no `assertNever` (merge-extensible union).
141
+ 8. `SessionEventMap` members are required-on-read: the `ignorable` envelope is gone on 0.1.2-alpha.1 (reads fail closed — a build that does not know an event type refuses the log), and plugin appends of custom events ride an adaptive gate that stops writing on envelope-less hosts; only structural format changes bump `SESSION_FORMAT_VERSION`. 0.1.2-rc.1 retains the `ignorable?: true` field for stored-log read compatibility only — its `Session.append` third argument is a `SurfaceIntent` for surface events and still cannot stamp the marker, so the gate keeps skipping custom-event appends there (no behavior change). Switch over `SessionEvent` falls through a documented `default` — no `assertNever` (merge-extensible union).
142
142
 
143
143
  ## Community pitfalls quick list (details: guide §7.3 / community-repo-deep-dive.md)
144
144
 
@@ -147,7 +147,7 @@ Chunk protocol: `block-start` → `text-delta*` → `block-end` (complete block)
147
147
  - Windows junctions via PowerShell `New-Item -ItemType Junction`; vitest drive letter must be uppercase `C:/`.
148
148
  - `DSH_PERMISSION_MODE=danger-full-access` is high-risk (no sandbox backend on Windows, approvals disabled); `DSH_*` vars in `~/.dsh/.env` break startup.
149
149
  - Session files are multi-frame zstd: use `scanZstdFrames`/`createZstdFrameDecoder` (`@deepseek-ai/dsh-session-persistence-jsonl/src/zstd.ts`).
150
- - npm: unscoped `dsh` is the unrelated node-dsh shell — install `@deepseek-ai/dsh`; `@deepseek-ai/dsh-tools` and `@deepseek-ai/dsh-session-persistence-jsonl` have stale `latest` (0.0.1-rc.1), pin `next` (0.1.0-rc.6); `create-dsh-plugin` is now published (0.1.1, 2026-08-13); dsh-core/dsh-sdk still unpublished (verified 2026-08-14).
150
+ - npm: unscoped `dsh` is the unrelated node-dsh shell — install `@deepseek-ai/dsh` (latest=0.1.2-rc.1); `@deepseek-ai/dsh-tools` and `@deepseek-ai/dsh-session-persistence-jsonl` have stale `latest` (0.0.1-rc.1), pin `next` (0.1.2-rc.1); `create-dsh-plugin` latest=0.2.1; dsh-core/dsh-sdk still unpublished (verified 2026-09-04).
151
151
  - `resolve()` both sides before path comparisons (Windows backslash trap).
152
152
 
153
153
  ## Documentation links
@@ -138,7 +138,7 @@ Protocolo de chunks: `block-start` → `text-delta*` → `block-end` (bloco comp
138
138
  5. Pacotes de plugin independentes: cordis é peerDependency com a mesma identidade do host (misturar scoped `@deepseek-ai/cordis` e unscoped divide identidades); ESM; manifesto `dsh.bundle`; instalações git precisam de `prepare` + `allowBuilds`; publique `lib/` ou um tarball.
139
139
  6. Documentação bilíngue em pares; descrições/prompts são comportamento; mudanças não triviais levam Agent Note; rode o conjunto mínimo de verificações antes de empurrar (dsh-pre-push-checks).
140
140
  7. IDs opacos entre limites são branded (`Branded<B>` de `dsh-brand`), nunca `string` crua.
141
- 8. Membros de `SessionEventMap` são required-on-read: o envelope `ignorable` desaparece no 0.1.2-alpha.1 (a leitura falha fechada — um build que não conhece um tipo de evento recusa o log), e appends de eventos próprios de plugins cruzam uma porta adaptativa que para de gravar em hosts sem envelope; 0.1.2-alpha.5 mantém o campo ignorable?: true apenas para compatibilidade de leitura de logs armazenados (seu Session.append ainda não consegue estampar o marcador), então a porta continua sem gravar (sem mudança de comportamento). Apenas mudanças de formato estrutural bumpam `SESSION_FORMAT_VERSION`. O switch sobre `SessionEvent` cai num `default` documentado — sem `assertNever` (união merge-extensible).
141
+ 8. Membros de `SessionEventMap` são required-on-read: o envelope `ignorable` desaparece no 0.1.2-alpha.1 (a leitura falha fechada — um build que não conhece um tipo de evento recusa o log), e appends de eventos próprios de plugins cruzam uma porta adaptativa que para de gravar em hosts sem envelope; 0.1.2-rc.1 mantém o campo ignorable?: true apenas para compatibilidade de leitura de logs armazenados (seu Session.append ainda não consegue estampar o marcador), então a porta continua sem gravar (sem mudança de comportamento). Apenas mudanças de formato estrutural bumpam `SESSION_FORMAT_VERSION`. O switch sobre `SessionEvent` cai num `default` documentado — sem `assertNever` (união merge-extensible).
142
142
 
143
143
  ## Lista rápida de armadilhas da comunidade (detalhes: guia §7.3 / community-repo-deep-dive.md)
144
144
 
@@ -147,7 +147,7 @@ Protocolo de chunks: `block-start` → `text-delta*` → `block-end` (bloco comp
147
147
  - Junctions do Windows via PowerShell `New-Item -ItemType Junction`; letra de unidade do vitest em maiúscula `C:/`.
148
148
  - `DSH_PERMISSION_MODE=danger-full-access` é de alto risco (sem backend de sandbox no Windows, aprovações desativadas); `DSH_*` em `~/.dsh/.env` quebra a inicialização.
149
149
  - Arquivos de sessão são zstd multiframe: use `scanZstdFrames`/`createZstdFrameDecoder` (`@deepseek-ai/dsh-session-persistence-jsonl/src/zstd.ts`).
150
- - npm: o `dsh` sem escopo é o projeto alheio node-dsh (um shell) — instale `@deepseek-ai/dsh`; `@deepseek-ai/dsh-tools` e `@deepseek-ai/dsh-session-persistence-jsonl` têm `latest` obsoleto (0.0.1-rc.1), fixe `next` (0.1.0-rc.6); `create-dsh-plugin` já está publicado (0.1.1, 2026-08-13); dsh-core/dsh-sdk seguem não publicados (verificado em 2026-08-14).
150
+ - npm: o `dsh` sem escopo é o projeto alheio node-dsh (um shell) — instale `@deepseek-ai/dsh` (latest=0.1.2-rc.1); `@deepseek-ai/dsh-tools` e `@deepseek-ai/dsh-session-persistence-jsonl` têm `latest` obsoleto (0.0.1-rc.1), fixe `next` (0.1.2-rc.1); `create-dsh-plugin` latest=0.2.1; dsh-core/dsh-sdk seguem não publicados (verificado em 2026-09-04).
151
151
  - Aplique `resolve()` nos dois lados antes de comparar caminhos (armadilha da barra invertida do Windows).
152
152
 
153
153
  ## Links de documentação
@@ -1,4 +1,4 @@
1
- # DeepSeek Harness 0.1.2-alpha.5 恢复信封 ignorable?: true 字段但仅用于存量日志读取兼容(其 Session.append 仍无法盖章),门控行为不变。 插件开发速查表
1
+ # DeepSeek Harness 0.1.2-rc.1 恢复信封 ignorable?: true 字段但仅用于存量日志读取兼容(其 Session.append 仍无法盖章),门控行为不变。 插件开发速查表
2
2
 
3
3
  > 一页式速查。细节回到 [plugin-dev-guide.md](plugin-dev-guide.md) 与 [references](../references/)。
4
4
 
@@ -146,7 +146,7 @@ Chunk 协议:`block-start` → `text-delta*` → `block-end`(完整块)→
146
146
  - Windows junction 用 PowerShell `New-Item -ItemType Junction`;vitest 盘符大写 `C:/`。
147
147
  - `DSH_PERMISSION_MODE=danger-full-access` 高风险(Windows 无沙箱后端、禁用审批);`DSH_*` 放 `~/.dsh/.env` 会报错。
148
148
  - 会话文件多帧 zstd:用 `scanZstdFrames`/`createZstdFrameDecoder`(`@deepseek-ai/dsh-session-persistence-jsonl/src/zstd.ts`)。
149
- - npm:无作用域 `dsh` 是无关项目 node-dsh(shell)——官方包是 `@deepseek-ai/dsh`;`@deepseek-ai/dsh-tools` 与 `@deepseek-ai/dsh-session-persistence-jsonl` 的 `latest` 是过期版本(0.0.1-rc.1),要钉 `next`(0.1.0-rc.6);`create-dsh-plugin` 已发布(0.1.1,2026-08-13);dsh-core/dsh-sdk 仍未发布(2026-08-14 复核)。
149
+ - npm:无作用域 `dsh` 是无关项目 node-dsh(shell)——官方包是 `@deepseek-ai/dsh`(latest=0.1.2-rc.1);`@deepseek-ai/dsh-tools` 与 `@deepseek-ai/dsh-session-persistence-jsonl` 的 `latest` 是过期版本(0.0.1-rc.1),要钉 `next`(0.1.2-rc.1);`create-dsh-plugin` latest=0.2.1dsh-core/dsh-sdk 仍未发布(2026-09-04 复核)。
150
150
  - 路径比较前两侧都 `resolve()`(Windows 反斜杠陷阱)。
151
151
 
152
152
  ## 文档链接
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-plugin-guide",
3
- "version": "0.3.3",
3
+ "version": "0.3.4",
4
4
  "description": "The dsh-plugin-guide knowledge base plus the dsh-plugin-dev CLI toolchain: official docs, Cordis primer, community deep-dives, and battle-tested pitfalls registered as an on-demand agent skill, with a scaffolder, static checker, and pack verifier for building DSH plugins.",
5
5
  "type": "module",
6
6
  "main": "index.js",
@@ -62,7 +62,7 @@
62
62
  "tsdown": "^0.22.14",
63
63
  "typescript": "^5.9.3"
64
64
  },
65
- "devDependencies": {"@deepseek-ai/dsh-attachment": "0.1.2-alpha.5",
65
+ "devDependencies": {"@deepseek-ai/dsh-attachment": "0.1.2-rc.1",
66
66
  "@types/node": "^22.20.1",
67
67
  "vitest": "^3.2.7"
68
68
  },
@@ -105,7 +105,7 @@
105
105
  ],
106
106
  "compatibility": {
107
107
  "dshVersions": [
108
- "0.1.2-alpha.5"
108
+ "0.1.2-rc.1"
109
109
  ]
110
110
  },
111
111
  "capability": {
@@ -2,9 +2,9 @@
2
2
 
3
3
  DeepSeek Harness is an all-plugin Cordis agent harness. Read [docs/architecture.md](docs/architecture.md) before changing `packages/`; follow [docs/AGENTS.md](docs/AGENTS.md) for documentation.
4
4
 
5
- ## Pre-release stance: foundation over blast radius
5
+ ## Pre-stable APIs and released Session data
6
6
 
7
- **Remove at the first tagged release.** Until then, prefer correct foundations to compatibility shims: rename or repackage freely and update every reference. Backends reject old on-disk formats. SQLite uses monotonic `SCHEMA_VERSION`; `dsh-session` keeps `SESSION_FORMAT_VERSION` at `0` with no compatibility promise.
7
+ Public APIs are pre-stable; update every consumer. Released Session JSONL follows [adjacent migration](.agents/notes/implemented/architecture/2026-08-31-released-session-format-migrations.md): body reads may add a version-named successor but never move, overwrite, or delete committed generations; predecessors imply neither fallback nor downgrade support. SQLite domains use monotonic `SCHEMA_VERSION`.
8
8
 
9
9
  **Application launch.** Only `dsh` profiles launch supported Node apps; package bins, demos, and public SDK argv escapes are forbidden ([rule](docs/architecture.md#application-launch)).
10
10
 
@@ -7,10 +7,10 @@
7
7
  |---|---|
8
8
  | Source checkout | `D:\deepseek-harness` |
9
9
  | Source ref | `origin/master` |
10
- | Source commit | `49a606bc5b5934603f22a26957a07dc799ab0291` |
11
- | Synced at (UTC) | 2026-09-02T11:48:22Z |
10
+ | Source commit | `d347e703908d0406b7a7ef80e3a0e594d86b2215` |
11
+ | Synced at (UTC) | 2026-09-04T13:53:48Z |
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/: 239 md files (117 .zh.md pairs) |
13
+ | File counts | docs/: 241 md files (118 .zh.md pairs) |
14
14
  | Pruned this run | 15 out-of-scope/upstream-deleted entries |
15
15
 
16
16
  Drift check: `pwsh -File scripts/verify-kit.ps1 -Checkout <checkout>` (tracked files only).
@@ -70,6 +70,7 @@ External packages that a workspace package resolves at runtime. The tier covers
70
70
  | [`e2b`](https://github.com/e2b-dev/e2b) | MIT |
71
71
  | [`eventsource-parser`](https://github.com/rexxars/eventsource-parser) | MIT |
72
72
  | [`fflate`](https://github.com/101arrowz/fflate) | MIT |
73
+ | [`fs-ext`](https://github.com/baudehlo/node-fs-ext) | MIT |
73
74
  | [`immer`](https://github.com/immerjs/immer) | MIT |
74
75
  | [`ipaddr.js`](https://github.com/whitequark/ipaddr.js) | MIT |
75
76
  | [`js-yaml`](https://github.com/nodeca/js-yaml) | MIT |
@@ -112,6 +113,7 @@ External packages that a workspace package resolves at runtime. The tier covers
112
113
 
113
114
  pnpm applies local patches to the following packages at install time, so shipped artifacts carry modified copies; each patch file is the complete record of the modification:
114
115
 
116
+ - `@yao-pkg/pkg@6.21.0` — [`patches/@yao-pkg__pkg@6.21.0.patch`](patches/@yao-pkg__pkg@6.21.0.patch)
115
117
  - `node-pty@1.2.0-beta.15` — [`patches/node-pty@1.2.0-beta.15.patch`](patches/node-pty@1.2.0-beta.15.patch)
116
118
 
117
119
  ## Official Claude Code platform payloads
@@ -147,6 +149,7 @@ External packages **directly declared** only by repository tooling, test infrast
147
149
  | [`@testing-library/react`](https://github.com/testing-library/react-testing-library) | MIT |
148
150
  | [`@types/babel__code-frame`](https://github.com/DefinitelyTyped/DefinitelyTyped) | MIT |
149
151
  | [`@types/compression`](https://github.com/DefinitelyTyped/DefinitelyTyped) | MIT |
152
+ | [`@types/fs-ext`](https://github.com/DefinitelyTyped/DefinitelyTyped) | MIT |
150
153
  | [`@types/js-yaml`](https://github.com/DefinitelyTyped/DefinitelyTyped) | MIT |
151
154
  | [`@types/jsdom`](https://github.com/DefinitelyTyped/DefinitelyTyped) | MIT |
152
155
  | [`@types/negotiator`](https://github.com/DefinitelyTyped/DefinitelyTyped) | MIT |
@@ -161,6 +164,7 @@ External packages **directly declared** only by repository tooling, test infrast
161
164
  | [`@types/ws`](https://github.com/DefinitelyTyped/DefinitelyTyped) | MIT |
162
165
  | [`@vitejs/plugin-react`](https://github.com/vitejs/vite-plugin-react) | MIT |
163
166
  | [`@vitest/coverage-v8`](https://github.com/vitest-dev/vitest) | MIT |
167
+ | [`@yao-pkg/pkg`](https://github.com/yao-pkg/pkg) | MIT |
164
168
  | [`@yarnpkg/cli-dist`](https://github.com/yarnpkg/berry) | BSD-2-Clause |
165
169
  | [`cytoscape`](https://github.com/cytoscape/cytoscape.js) | MIT |
166
170
  | [`cytoscape-cose-bilkent`](https://github.com/cytoscape/cytoscape.js-cose-bilkent) | MIT |
@@ -204,12 +208,6 @@ Direct dependencies of the `pyproject.toml` manifests, plus `uv` as the developm
204
208
  | [`pytest`](https://github.com/pytest-dev/pytest) | MIT | test-only |
205
209
  | [`uv`](https://github.com/astral-sh/uv) | MIT / Apache-2.0 | development workflow tool |
206
210
 
207
- ## Fetched at build time
208
-
209
- | Package | License | Role |
210
- | --- | --- | --- |
211
- | [`@yao-pkg/pkg`](https://github.com/yao-pkg/pkg) | MIT | invoked by `scripts/build-exe-for-python-sdk.ts` to assemble the single-file SDK runtime executable |
212
-
213
211
  ## First-party native packages
214
212
 
215
213
  `@deepseek-ai/node-addon-landlock-run` (and its platform packages) is built and released from this repository under BSD 3-Clause. It is listed here for completeness; it is first-party, not third-party.
@@ -2,5 +2,5 @@
2
2
  # side as of the last confirmed-consistent state. Both languages carry equal authority;
3
3
  # after editing either side, bring the other along and re-record with:
4
4
  # pnpm run verify-translation-pairing --write docs/agent-lifecycle.md
5
- agent-lifecycle.md: 9d1b66888e35d840c95ee9f2bd589dad3aac66f6
6
- agent-lifecycle.zh.md: f1648792fa15495f878ae2ec362bb760ccf2dc22
5
+ agent-lifecycle.md: afe660051e5d3ce4ae40f5d4fd32e6ff47c99dba
6
+ agent-lifecycle.zh.md: ad81fbefe7afae5de4c497aa6522b1a5fcf54fe7
@@ -35,14 +35,16 @@ sequenceDiagram
35
35
  Driver->>Prompt: <code>system-prompt/assemble</code> waterfall
36
36
  Driver->>LLM: <code>agent/request</code> waterfall, then <code>llm/stream</code> waterfall
37
37
  LLM-->>Driver: StreamChunk*
38
- Driver->>Session: <code>assistant/chunk</code>*
39
- Session-->>SDK: <code>session/event</code> <code>assistant/chunk</code>*
38
+ Driver-->>SDK: <code>agent/assistant-stream</code> chunk*
40
39
  alt final adapter or terminal in-band request failure
40
+ Driver->>Session: <code>assistant/attempt</code>
41
+ Driver-->>SDK: <code>agent/assistant-stream</code> committed end
41
42
  Driver->>Session: <code>step/end</code>
42
43
  Driver->>Hooks: <code>agent/request-error</code> waterfall
43
44
  Hooks-->>Driver: return retry action or preserve the original error
44
45
  else model request succeeded
45
46
  Driver->>Session: <code>assistant/message</code>
47
+ Driver-->>SDK: <code>agent/assistant-stream</code> committed end
46
48
  Driver->>Tools: classify pending call by executionMode
47
49
  loop barriers and bounded rolling pool, reclassify before start
48
50
  opt call starts
@@ -71,7 +73,7 @@ sequenceDiagram
71
73
  Driver-->>SDK: <code>agent/status</code> idle
72
74
  ```
73
75
 
74
- The `assistant/message` event records every successful provider call, including content-less and `max-tokens` finishes. Empty content stays out of derived history, while the durable event keeps usage and `sourceEventSeqs` listing the exact `assistant/chunk` events, including an explicit empty list.
76
+ The `assistant/message` event records every successful provider call, including content-less and `max-tokens` finishes, and embeds the exact compact timed stream. Empty content stays out of derived history. A failed, retried, cancelled, or stream-error attempt that reaches settlement without a surface message records its stream as `assistant/attempt`. Live `agent/assistant-stream` chunk frames are transient; replay reads either durable settlement, and a hard process loss before settlement leaves no durable attempt stream.
75
77
 
76
78
  `dsh-compaction-basic` uses `agent/pre-step` for pressure before request derivation and `agent/request-error` only for canonical context overflow. Once either trigger qualifies, optional tool-result pruning runs before summary selection. Recovery works between the closed failed step and failed turn close, and opens a fresh retry turn only when pruning or summarization advances the surface replacement generation; otherwise the original request error remains authoritative.
77
79
 
@@ -37,14 +37,16 @@ sequenceDiagram
37
37
  Driver->>Prompt: <code>system-prompt/assemble</code> waterfall
38
38
  Driver->>LLM: <code>agent/request</code> waterfall, then <code>llm/stream</code> waterfall
39
39
  LLM-->>Driver: StreamChunk*
40
- Driver->>Session: <code>assistant/chunk</code>*
41
- Session-->>SDK: <code>session/event</code> <code>assistant/chunk</code>*
40
+ Driver-->>SDK: <code>agent/assistant-stream</code> chunk*
42
41
  alt final adapter or terminal in-band request failure
42
+ Driver->>Session: <code>assistant/attempt</code>
43
+ Driver-->>SDK: <code>agent/assistant-stream</code> committed end
43
44
  Driver->>Session: <code>step/end</code>
44
45
  Driver->>Hooks: <code>agent/request-error</code> waterfall
45
46
  Hooks-->>Driver: return retry action or preserve the original error
46
47
  else model request succeeded
47
48
  Driver->>Session: <code>assistant/message</code>
49
+ Driver-->>SDK: <code>agent/assistant-stream</code> committed end
48
50
  Driver->>Tools: classify pending call by executionMode
49
51
  loop barriers and bounded rolling pool, reclassify before start
50
52
  opt call starts
@@ -73,7 +75,7 @@ sequenceDiagram
73
75
  Driver-->>SDK: <code>agent/status</code> idle
74
76
  ```
75
77
 
76
- `assistant/message` 事件会记录每次成功的提供方调用,包括返回空内容或以 `max-tokens` 结束的调用。空内容不会进入派生历史,但该持久事件仍会保留用量,并通过 `sourceEventSeqs` 精确列出对应的 `assistant/chunk` 事件,包括显式空列表。
78
+ `assistant/message` 事件会记录每次成功的提供方调用,包括返回空内容或以 `max-tokens` 结束的调用,并嵌入精确的紧凑带时间 stream。空内容不会进入派生历史。失败、重试、取消或 stream error attempt 到达 settlement 时,如果没有 surface message,就会把 stream 记录为 `assistant/attempt`。实时 `agent/assistant-stream` chunk frame 是瞬态数据;回放读取任一种持久 settlement,如果进程在 settlement 前硬中断,则不会留下持久 attempt stream。
77
79
 
78
80
  `dsh-compaction-basic` 在派生请求之前通过 `agent/pre-step` 处理压力,而 `agent/request-error` 仅用于规范的上下文溢出。任一触发条件满足后,系统都会先执行可选的工具结果剪枝,再选择摘要。恢复发生在失败步骤结束之后、失败轮次结束之前;只有当剪枝或摘要生成推进了 surface replacement generation 时,系统才会开启一个全新的重试轮次,否则仍以原始请求错误为准。
79
81
 
@@ -2,5 +2,5 @@
2
2
  # side as of the last confirmed-consistent state. Both languages carry equal authority;
3
3
  # after editing either side, bring the other along and re-record with:
4
4
  # pnpm run verify-translation-pairing --write docs/architecture.md
5
- architecture.md: 902fd7b53fe7493127da68f9a8f381a33b8edc18
6
- architecture.zh.md: 2890b32b5db1ac30f6eafef47b019a03c6acedd4
5
+ architecture.md: 959ea9edf8f337b1ebe20df8b998f11fe35beb2e
6
+ architecture.zh.md: 9666f3589ce3710f84306d685ec1c5e7a49d1b78
@@ -84,7 +84,9 @@ turn/start
84
84
  step/start
85
85
  append entered messages as user/message
86
86
  derive model history from the log
87
- agent/request -> llm/stream -> assistant/chunk* -> assistant/message
87
+ agent/request -> llm/stream -> agent/assistant-stream start
88
+ agent/assistant-stream chunk*
89
+ assistant/message | assistant/attempt -> agent/assistant-stream end
88
90
  tool/call* -> tools/pre-execute -> tools/execute -> tools/post-execute -> tool/result*
89
91
  step/end
90
92
  tools owe another request, or next-step input arrived -> claim -> next step
@@ -92,7 +94,7 @@ turn/start
92
94
  turn/end
93
95
  ```
94
96
 
95
- `turn/*`, `step/*`, `user/message`, `assistant/*`, and `tool/*` are durable session events; the rest are live extension points across three domains. `agent/pre-step`, `agent/request`, `llm/stream`, and the three `tools/*` events are waterfalls, whose listeners must call `next()` to delegate; `agent/turn-stopping` is serial and has no `next()`.
97
+ `turn/*`, `step/*`, `user/message`, `assistant/message`, `assistant/attempt`, and `tool/*` are durable session events; the rest are live extension points across three domains. `agent/assistant-stream` publishes process-local start, transient chunk, and end frames. The loop commits the complete compact stream as one message or log-only attempt before a committed end frame, and the Web Session-follow adapter is the live event's only remote consumer. `agent/pre-step`, `agent/request`, `llm/stream`, and the three `tools/*` events are waterfalls, whose listeners must call `next()` to delegate; `agent/turn-stopping` is serial and has no `next()`.
96
98
 
97
99
  Input reaches the driver through one inbox. Some messages wake it immediately; injected context waits in the inbox until another message does.
98
100
 
@@ -102,7 +104,9 @@ Details: the [sequence diagram](agent-lifecycle.md), the [tool pipeline](tool-ex
102
104
 
103
105
  ## Session log
104
106
 
105
- The session log is the source of the context the model sees. `deriveMessages()` projects model history from it, and raw `assistant/chunk` events preserve replay and UI fidelity. Fork, resume, transcripts, telemetry, and persistence all derive from this stream.
107
+ The session log is the source of the context the model sees. `deriveMessages()` projects model history from it. Each `assistant/message` embeds the exact compact timed stream that produced its assembled content; `assistant/attempt` retains settled failed, retried, cancelled, and stream-error attempts without adding model history. Fork, resume, transcripts, telemetry, and persistence all derive from these durable settlements, while live UI incrementality comes from `agent/assistant-stream`; a hard process loss before settlement leaves no durable attempt stream ([decision](../.agents/notes/implemented/architecture/2026-09-01-v2-embedded-assistant-streams.md)).
108
+
109
+ Session consumers know only the current logical format. Header-only `stat` and `list` rescan each Session directory, select its numerically highest canonical generation, and translate a supported historical header without loading events or publishing a successor. A stored-session `open` selects that same generation, refuses a future version, or composes the static adjacent migration chain in memory, validates the final result, and exclusively publishes only that version-named successor beside the unchanged source before returning a handle; semantic interrupted-turn repair remains a handle consumer responsibility. JSONL v0 uses `session.jsonl[.zstd]`, v1 and later use lowercase `session.vN.jsonl[.zstd]`, and committed generation paths are never renamed, replaced, or deleted. The JSONL provider owns physical framing, compression, generation selection, and exclusive publication, while each adjacent migration package owns exactly one `vN -> vN+1` step ([decision](../.agents/notes/implemented/architecture/2026-08-31-released-session-format-migrations.md)).
106
110
 
107
111
  **Model-visible means logged.** Anything that reaches a model request must be reconstructable from the log, and a runtime invariant asserts it. This is why a new model-visible input requires a new session event: extend `SessionEventMap` and render from the log.
108
112
 
@@ -88,7 +88,9 @@ turn/start
88
88
  step/start
89
89
  append entered messages as user/message
90
90
  derive model history from the log
91
- agent/request -> llm/stream -> assistant/chunk* -> assistant/message
91
+ agent/request -> llm/stream -> agent/assistant-stream start
92
+ agent/assistant-stream chunk*
93
+ assistant/message | assistant/attempt -> agent/assistant-stream end
92
94
  tool/call* -> tools/pre-execute -> tools/execute -> tools/post-execute -> tool/result*
93
95
  step/end
94
96
  tools owe another request, or next-step input arrived -> claim -> next step
@@ -96,7 +98,7 @@ turn/start
96
98
  turn/end
97
99
  ```
98
100
 
99
- `turn/*`、`step/*`、`user/message`、`assistant/*` 和 `tool/*` 是持久会话事件;其余是分属三个事件域的实时扩展点。`agent/pre-step`、`agent/request`、`llm/stream` 和三个 `tools/*` 事件是 waterfall(瀑布式事件),其监听器必须调用 `next()` 才能委托下去;`agent/turn-stopping` 是 serial 事件,没有 `next()`。
101
+ `turn/*`、`step/*`、`user/message`、`assistant/message`、`assistant/attempt` 和 `tool/*` 是持久会话事件;其余是分属三个事件域的实时扩展点。`agent/assistant-stream` 发布进程本地 start、瞬态 chunk 与 end frame。loop 会在 committed end frame 前把完整紧凑 stream 提交为一个 message 或仅日志 attempt;Web Session-follow adapter 是该 live event 唯一的远程消费方。`agent/pre-step`、`agent/request`、`llm/stream` 和三个 `tools/*` 事件是 waterfall(瀑布式事件),其监听器必须调用 `next()` 才能委托下去;`agent/turn-stopping` 是 serial 事件,没有 `next()`。
100
102
 
101
103
  输入通过同一个 inbox 到达驱动器。有些消息会立即唤醒它;注入的上下文会留在 inbox 中,直到另一条消息将其唤醒。
102
104
 
@@ -106,7 +108,9 @@ turn/end
106
108
 
107
109
  ## 会话日志
108
110
 
109
- 会话日志是模型所见上下文的来源。`deriveMessages()` 从中投影出模型历史,原始 `assistant/chunk` 事件则保证回放和 UI 保真。fork、恢复、transcript(文本记录)、遥测和持久化都派生自该事件流。
111
+ 会话日志是模型所见上下文的来源。`deriveMessages()` 从中投影出模型历史。每个 `assistant/message` 都嵌入产生其组装内容的精确紧凑带时间 stream;`assistant/attempt` 保留已到达 settlement 的失败、重试、取消与 stream error attempt,且不添加模型历史。fork、恢复、transcript(文本记录)、遥测与持久化都从这些持久 settlement 派生,实时 UI 增量则来自 `agent/assistant-stream`;如果进程在 settlement 前硬中断,则不会留下持久 attempt stream(见[决策](../.agents/notes/implemented/architecture/2026-09-01-v2-embedded-assistant-streams.zh.md))。
112
+
113
+ Session 消费方只了解当前逻辑格式。仅 header 的 `stat` 与 `list` 会重新扫描每个 Session 目录,选择数值最高的规范 generation,并在不加载事件或发布后继的情况下转换受支持的历史 header。已存储 Session 的 `open` 选择同一 generation,拒绝未来版本,或在内存中组合静态相邻迁移链、校验最终结果,并在返回句柄前以不覆盖方式只发布该版本命名的后继文件且保持源文件不变;语义层的中断轮次修复仍由句柄消费方负责。JSONL v0 使用 `session.jsonl[.zstd]`,v1 及后续版本使用小写 `session.vN.jsonl[.zstd]`;已提交 generation 路径绝不重命名、替换或删除。JSONL provider 负责物理 framing、压缩、generation 选择与排他发布,每个相邻迁移包只负责一个 `vN -> vN+1` 步骤([决策](../.agents/notes/implemented/architecture/2026-08-31-released-session-format-migrations.zh.md))。
110
114
 
111
115
  **模型可见即已记录。** 抵达模型请求的一切都必须能从日志重建,并由一项运行时不变量断言这一点。因此,新增一项模型可见输入就需要新增一个会话事件:扩展 `SessionEventMap` 并从日志渲染。
112
116
 
@@ -2,5 +2,5 @@
2
2
  # side as of the last confirmed-consistent state. Both languages carry equal authority;
3
3
  # after editing either side, bring the other along and re-record with:
4
4
  # pnpm run verify-translation-pairing --write docs/capability-seams.md
5
- capability-seams.md: 83868afe952c5dbc179114ff52228fc1dc8b8fdb
6
- capability-seams.zh.md: 064797bbc3e5d71c0bdb0b2afe09560577a1b029
5
+ capability-seams.md: ecc88e397f41c4d279effa2df9d1b29108756ea5
6
+ capability-seams.zh.md: 105752ac01007d24788bcfbcb2eb22c07cfdd0f5
@@ -14,6 +14,8 @@ flowchart LR
14
14
  pkg_tool_fs["tool-fs"]
15
15
  pkg_llm_pi_ai["llm-pi-ai"]
16
16
  pkg_llm_deepseek["llm-deepseek"]
17
+ pkg_client_file_upload["client-file-upload"]
18
+ svc_fileUploads["ctx.fileUploads<br/>Agent-scoped staged file uploads"]
17
19
  pkg_llm["llm"]
18
20
  svc_llm["ctx.llm<br/>LLM adapter registry"]
19
21
  pkg_llm_replay["llm-replay"]
@@ -235,6 +237,7 @@ flowchart LR
235
237
  pkg_authorization --> svc_authorization
236
238
  pkg_bash_local --> svc_shell
237
239
  pkg_bash_sandbox --> svc_shell
240
+ pkg_client_file_upload --> svc_fileUploads
238
241
  pkg_client_modules --> svc_clientModules
239
242
  pkg_code_runtime --> svc_codeRuntime
240
243
  pkg_code_runtime_worker_thread --> svc_codeRuntime
@@ -364,6 +367,7 @@ flowchart LR
364
367
  svc_e2b --> pkg_fs_e2b
365
368
  svc_e2b --> pkg_subprocess_e2b
366
369
  svc_fileReferences --> pkg_api_session_controller
370
+ svc_fileUploads --> pkg_api_session_controller
367
371
  svc_fs --> pkg_tool_fs
368
372
  svc_invariants --> pkg_agent
369
373
  svc_invariants --> pkg_agent_loop
@@ -466,6 +470,7 @@ flowchart LR
466
470
  | ctx key | Role | Owner | Implementations | Direct consumers | Companion plugins | Note |
467
471
  | --- | --- | --- | --- | --- | --- | --- |
468
472
  | `ctx.attachments` | `seam` | [`attachment`](../packages/attachment/attachment) | [`attachment-local`](../packages/attachment/attachment-local) | [`api-session-controller`](../packages/api/session-controller), [`tool-fs`](../packages/fs/tool-fs), [`llm-pi-ai`](../packages/llm/llm-pi-ai), [`llm-deepseek`](../packages/llm/llm-deepseek) | - | The host commits accepted images before session events; provider adapters resolve authorized durable references into provider-native content. |
473
+ | `ctx.fileUploads` | `core` | [`client-file-upload`](../packages/client/file-upload) | - | [`api-session-controller`](../packages/api/session-controller) | - | Owns streaming intake, durable storage, and staged receipt lifetime; the Session controller binds receipts to accepted submissions. |
469
474
  | `ctx.llm` | `seam` | [`llm`](../packages/llm/llm) | [`llm-deepseek`](../packages/llm/llm-deepseek), [`llm-pi-ai`](../packages/llm/llm-pi-ai), [`llm-replay`](../packages/test-support/llm-replay) | [`agent-loop`](../packages/core/agent-loop), [`compaction-basic`](../packages/compaction/compaction-basic) | - | Adapters register provider implementations; the loop and compaction call the provider-neutral stream service. |
470
475
  | `ctx.deepseekLlmApiExtensions` | `seam` | [`deepseek-llm-api-extensions`](../packages/llm/deepseek-llm-api-extensions) | [`session-log-deepseek`](../packages/session/session-log-deepseek), [`plugin-package-inventory-deepseek`](../packages/llm/plugin-package-inventory-deepseek) | [`llm-deepseek`](../packages/llm/llm-deepseek) | - | Plugins prepare independent top-level fields; the official adapter merges them and commits their delivery state after HTTP acceptance. |
471
476
  | `ctx.tokenMeter` | `core` | [`token-meter`](../packages/llm/token-meter) | - | [`compaction-basic`](../packages/compaction/compaction-basic) | - | Owns isolated per-session replay folds; pressure consumers share immutable revisioned measurements. |
@@ -16,6 +16,8 @@ flowchart LR
16
16
  pkg_tool_fs["tool-fs"]
17
17
  pkg_llm_pi_ai["llm-pi-ai"]
18
18
  pkg_llm_deepseek["llm-deepseek"]
19
+ pkg_client_file_upload["client-file-upload"]
20
+ svc_fileUploads["ctx.fileUploads<br/>Agent-scoped staged file uploads"]
19
21
  pkg_llm["llm"]
20
22
  svc_llm["ctx.llm<br/>LLM adapter registry"]
21
23
  pkg_llm_replay["llm-replay"]
@@ -237,6 +239,7 @@ flowchart LR
237
239
  pkg_authorization --> svc_authorization
238
240
  pkg_bash_local --> svc_shell
239
241
  pkg_bash_sandbox --> svc_shell
242
+ pkg_client_file_upload --> svc_fileUploads
240
243
  pkg_client_modules --> svc_clientModules
241
244
  pkg_code_runtime --> svc_codeRuntime
242
245
  pkg_code_runtime_worker_thread --> svc_codeRuntime
@@ -366,6 +369,7 @@ flowchart LR
366
369
  svc_e2b --> pkg_fs_e2b
367
370
  svc_e2b --> pkg_subprocess_e2b
368
371
  svc_fileReferences --> pkg_api_session_controller
372
+ svc_fileUploads --> pkg_api_session_controller
369
373
  svc_fs --> pkg_tool_fs
370
374
  svc_invariants --> pkg_agent
371
375
  svc_invariants --> pkg_agent_loop
@@ -468,6 +472,7 @@ flowchart LR
468
472
  | ctx 键 | 角色 | 所属包 | 实现 | 直接消费方 | 配套插件 | 说明 |
469
473
  | --- | --- | --- | --- | --- | --- | --- |
470
474
  | `ctx.attachments` | `seam` | [`attachment`](../packages/attachment/attachment) | [`attachment-local`](../packages/attachment/attachment-local) | [`api-session-controller`](../packages/api/session-controller), [`tool-fs`](../packages/fs/tool-fs), [`llm-pi-ai`](../packages/llm/llm-pi-ai), [`llm-deepseek`](../packages/llm/llm-deepseek) | - | 宿主会在会话事件之前提交已接受的图片;提供方适配器将已授权的持久引用解析为提供方原生内容。 |
475
+ | `ctx.fileUploads` | `core` | [`client-file-upload`](../packages/client/file-upload) | - | [`api-session-controller`](../packages/api/session-controller) | - | 负责流式接收、持久存储和暂存回执生命周期;Session Controller 将回执绑定到已接受的提交。 |
471
476
  | `ctx.llm` | `seam` | [`llm`](../packages/llm/llm) | [`llm-deepseek`](../packages/llm/llm-deepseek), [`llm-pi-ai`](../packages/llm/llm-pi-ai), [`llm-replay`](../packages/test-support/llm-replay) | [`agent-loop`](../packages/core/agent-loop), [`compaction-basic`](../packages/compaction/compaction-basic) | - | 适配器注册提供方实现;agent loop(智能体循环)与压缩功能调用提供方无关的流服务。 |
472
477
  | `ctx.deepseekLlmApiExtensions` | `seam` | [`deepseek-llm-api-extensions`](../packages/llm/deepseek-llm-api-extensions) | [`session-log-deepseek`](../packages/session/session-log-deepseek), [`plugin-package-inventory-deepseek`](../packages/llm/plugin-package-inventory-deepseek) | [`llm-deepseek`](../packages/llm/llm-deepseek) | - | 插件准备彼此独立的顶层字段;官方适配器会合并这些字段,并在 HTTP 接受后提交其交付状态。 |
473
478
  | `ctx.tokenMeter` | `core` | [`token-meter`](../packages/llm/token-meter) | - | [`compaction-basic`](../packages/compaction/compaction-basic) | - | 拥有按会话隔离的回放折叠区;压力消费方共享不可变且带修订版本的测量结果。 |
@@ -2,5 +2,5 @@
2
2
  # side as of the last confirmed-consistent state. Both languages carry equal authority;
3
3
  # after editing either side, bring the other along and re-record with:
4
4
  # pnpm run verify-translation-pairing --write docs/config-catalog.md
5
- config-catalog.md: 6a0f7f23885cd85ccb1ff20e9322f133767aed4a
6
- config-catalog.zh.md: cae9fa49a6986130c8b7261cf41e04b4d6b4e0e1
5
+ config-catalog.md: af72b832723423745817fd340022e65c0c066d36
6
+ config-catalog.zh.md: 6d961f22b3c29fbc4355e99c8de55823e014b74c