dsh-plugin-dev-kb 1.0.2 → 1.0.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 (144) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/kb/README.md +1 -1
  3. package/kb/extra/cookbook/adding-a-vendored-package.zh.md +3 -3
  4. package/kb/extra/cookbook/maintaining-dsh-code-review.zh.md +1 -1
  5. package/kb/extra/cookbook/responding-to-pr-review-on-a-stack.zh.md +1 -1
  6. package/kb/extra/defensive-patterns.zh.md +3 -1
  7. package/kb/extra/development.zh.md +15 -9
  8. package/kb/extra/event-producer-consumer.md +5 -2
  9. package/kb/extra/event-producer-consumer.zh.md +5 -2
  10. package/kb/extra/graph-atlas.zh.md +7 -7
  11. package/kb/extra/i18n/README.md +3 -3
  12. package/kb/extra/i18n/README.zh.md +9 -7
  13. package/kb/extra/i18n/style-samples.md +1 -1
  14. package/kb/extra/i18n/translation-prompt.md +3 -3
  15. package/kb/extra/i18n/translation-rules.md +2 -2
  16. package/kb/extra/i18n/translation-rules.zh.md +3 -3
  17. package/kb/extra/module-graph.md +18 -9
  18. package/kb/extra/module-graph.zh.md +18 -9
  19. package/kb/extra/postmortem/0001-acp-default-export-drops-inject.zh.md +1 -1
  20. package/kb/extra/postmortem/0002-js-expression-disabled-filesystem-tools.zh.md +1 -1
  21. package/kb/extra/postmortem/0004-landlock-partial-notice-misclassified-child-failures.zh.md +1 -1
  22. package/kb/extra/postmortem/README.zh.md +5 -5
  23. package/kb/extra/rescope.zh.md +1 -1
  24. package/kb/extra/subsystems/agent-team.md +2 -2
  25. package/kb/extra/subsystems/agent-team.zh.md +6 -6
  26. package/kb/extra/subsystems/attachment.md +63 -12
  27. package/kb/extra/subsystems/attachment.zh.md +63 -12
  28. package/kb/extra/subsystems/extensions.md +9 -9
  29. package/kb/extra/subsystems/extensions.zh.md +12 -12
  30. package/kb/extra/subsystems/feedback.md +2 -2
  31. package/kb/extra/subsystems/feedback.zh.md +2 -2
  32. package/kb/extra/testing.md +1 -1
  33. package/kb/extra/testing.zh.md +7 -7
  34. package/kb/extra/web-styling.zh.md +2 -2
  35. package/kb/meta/search-index.json +132 -132
  36. package/kb/meta/source.json +2 -2
  37. package/kb/meta/topics.md +2 -2
  38. package/kb/site/develop/basic/index.md +1 -1
  39. package/kb/site/develop/basic/publish.md +3 -3
  40. package/kb/site/develop/cordis-tutorial/index.md +1 -1
  41. package/kb/site/en/reference/capability-seams.md +5 -0
  42. package/kb/site/en/reference/config-catalog.md +52 -17
  43. package/kb/site/en/reference/persistence-catalog.md +1 -1
  44. package/kb/site/en/reference/subsystems/approval.md +3 -3
  45. package/kb/site/en/reference/subsystems/client-modules.md +7 -7
  46. package/kb/site/en/reference/subsystems/code-runtime.md +2 -2
  47. package/kb/site/en/reference/subsystems/commands.md +3 -3
  48. package/kb/site/en/reference/subsystems/compaction.md +3 -3
  49. package/kb/site/en/reference/subsystems/core.md +19 -19
  50. package/kb/site/en/reference/subsystems/credentials.md +163 -8
  51. package/kb/site/en/reference/subsystems/filesystem.md +5 -5
  52. package/kb/site/en/reference/subsystems/goal.md +3 -3
  53. package/kb/site/en/reference/subsystems/invariants.md +2 -2
  54. package/kb/site/en/reference/subsystems/jobs.md +2 -2
  55. package/kb/site/en/reference/subsystems/llm-streaming.md +16 -4
  56. package/kb/site/en/reference/subsystems/lsp.md +2 -2
  57. package/kb/site/en/reference/subsystems/permission-presets.md +2 -2
  58. package/kb/site/en/reference/subsystems/persistence.md +2 -2
  59. package/kb/site/en/reference/subsystems/plan.md +2 -2
  60. package/kb/site/en/reference/subsystems/sandbox.md +3 -3
  61. package/kb/site/en/reference/subsystems/session-projection.md +60 -35
  62. package/kb/site/en/reference/subsystems/session-query.md +2 -2
  63. package/kb/site/en/reference/subsystems/session-reference.md +3 -3
  64. package/kb/site/en/reference/subsystems/session-telemetry.md +3 -3
  65. package/kb/site/en/reference/subsystems/session-title.md +2 -2
  66. package/kb/site/en/reference/subsystems/session.md +6 -6
  67. package/kb/site/en/reference/subsystems/settings.md +4 -4
  68. package/kb/site/en/reference/subsystems/shell.md +3 -3
  69. package/kb/site/en/reference/subsystems/skills.md +3 -3
  70. package/kb/site/en/reference/subsystems/spill.md +2 -2
  71. package/kb/site/en/reference/subsystems/storage.md +4 -4
  72. package/kb/site/en/reference/subsystems/subagent.md +6 -6
  73. package/kb/site/en/reference/subsystems/subprocess.md +3 -3
  74. package/kb/site/en/reference/subsystems/system-prompt.md +4 -4
  75. package/kb/site/en/reference/subsystems/terminal.md +2 -2
  76. package/kb/site/en/reference/subsystems/token-meter.md +2 -2
  77. package/kb/site/en/reference/subsystems/tools.md +8 -8
  78. package/kb/site/en/reference/subsystems/typert.md +4 -4
  79. package/kb/site/en/reference/subsystems/user-questions.md +2 -2
  80. package/kb/site/en/reference/subsystems/web-server.md +46 -6
  81. package/kb/site/en/reference/subsystems/web.md +2 -2
  82. package/kb/site/en/reference/subsystems/workflow.md +8 -8
  83. package/kb/site/en/reference/subsystems/workspace.md +3 -3
  84. package/kb/site/en/reference/tool-catalog.md +3 -3
  85. package/kb/site/guide/providers.md +2 -2
  86. package/kb/site/guide/python-sdk.md +2 -2
  87. package/kb/site/guide/quickstart.md +2 -2
  88. package/kb/site/reference/capability-seams.md +5 -0
  89. package/kb/site/reference/config-catalog.md +53 -18
  90. package/kb/site/reference/cookbook/adding-a-conversation-node.md +1 -1
  91. package/kb/site/reference/cookbook/adding-a-package.md +5 -3
  92. package/kb/site/reference/cookbook/adding-a-settings-card.md +1 -1
  93. package/kb/site/reference/cookbook/adding-a-tool.md +6 -6
  94. package/kb/site/reference/cookbook/adding-an-llm-adapter.md +2 -2
  95. package/kb/site/reference/cookbook/extension-cookbook.md +6 -4
  96. package/kb/site/reference/index.md +4 -4
  97. package/kb/site/reference/persistence-catalog.md +5 -5
  98. package/kb/site/reference/subsystems/approval.md +3 -3
  99. package/kb/site/reference/subsystems/client-modules.md +8 -8
  100. package/kb/site/reference/subsystems/code-runtime.md +4 -4
  101. package/kb/site/reference/subsystems/commands.md +5 -5
  102. package/kb/site/reference/subsystems/compaction.md +7 -7
  103. package/kb/site/reference/subsystems/core.md +26 -24
  104. package/kb/site/reference/subsystems/credentials.md +163 -8
  105. package/kb/site/reference/subsystems/filesystem.md +6 -6
  106. package/kb/site/reference/subsystems/goal.md +5 -5
  107. package/kb/site/reference/subsystems/index.md +5 -5
  108. package/kb/site/reference/subsystems/invariants.md +5 -5
  109. package/kb/site/reference/subsystems/jobs.md +4 -4
  110. package/kb/site/reference/subsystems/llm-streaming.md +21 -9
  111. package/kb/site/reference/subsystems/lsp.md +3 -3
  112. package/kb/site/reference/subsystems/permission-presets.md +3 -3
  113. package/kb/site/reference/subsystems/persistence.md +6 -6
  114. package/kb/site/reference/subsystems/plan.md +4 -4
  115. package/kb/site/reference/subsystems/sandbox.md +7 -5
  116. package/kb/site/reference/subsystems/schedule.md +1 -1
  117. package/kb/site/reference/subsystems/scope.md +1 -1
  118. package/kb/site/reference/subsystems/session-projection.md +61 -36
  119. package/kb/site/reference/subsystems/session-query.md +2 -2
  120. package/kb/site/reference/subsystems/session-reference.md +3 -3
  121. package/kb/site/reference/subsystems/session-telemetry.md +5 -5
  122. package/kb/site/reference/subsystems/session-title.md +2 -2
  123. package/kb/site/reference/subsystems/session.md +13 -11
  124. package/kb/site/reference/subsystems/settings.md +4 -4
  125. package/kb/site/reference/subsystems/shell.md +6 -6
  126. package/kb/site/reference/subsystems/skills.md +3 -3
  127. package/kb/site/reference/subsystems/spill.md +3 -3
  128. package/kb/site/reference/subsystems/storage.md +7 -7
  129. package/kb/site/reference/subsystems/subagent.md +11 -9
  130. package/kb/site/reference/subsystems/subprocess.md +4 -4
  131. package/kb/site/reference/subsystems/system-prompt.md +5 -5
  132. package/kb/site/reference/subsystems/terminal.md +3 -3
  133. package/kb/site/reference/subsystems/token-meter.md +2 -2
  134. package/kb/site/reference/subsystems/tools.md +9 -9
  135. package/kb/site/reference/subsystems/typert.md +5 -5
  136. package/kb/site/reference/subsystems/user-questions.md +2 -2
  137. package/kb/site/reference/subsystems/web-server.md +48 -8
  138. package/kb/site/reference/subsystems/web.md +3 -3
  139. package/kb/site/reference/subsystems/workflow.md +11 -11
  140. package/kb/site/reference/subsystems/workspace.md +5 -5
  141. package/kb/site/reference/tool-catalog.md +9 -5
  142. package/lib/index.js +9 -1
  143. package/package.json +2 -1
  144. package/skills/dsh-plugin-dev-kb.md +1 -1
@@ -3,8 +3,8 @@
3
3
  "source": "官方文档站点 https://deepseek-harness.github.io/deepseek-harness/ (VitePress)",
4
4
  "repository": "https://github.com/deepseek-ai/deepseek-harness",
5
5
  "branch": "master",
6
- "commit": "141eb6fef83422698aef7a981029e843e8161534",
7
- "fetchedAt": "2026-08-20T06:20:00.000Z",
6
+ "commit": "b150a551b8d465e31e418e1b2eaf5e79bbb7d28e",
7
+ "fetchedAt": "2026-08-21T13:35:39.256Z",
8
8
  "siteBase": "https://deepseek-harness.github.io/deepseek-harness",
9
9
  "publishedMarkdownPages": 168,
10
10
  "siteFiles": 172,
package/kb/meta/topics.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # 主题导航(Topics)
2
2
 
3
- > 用途:按**任务场景**快速定位要读的文档。路径相对于知识库根 `kb/`(绝对路径:`D:\dsh\plugins\dsh-plugin-dev-kb\kb\`)。
3
+ > 用途:按**任务场景**快速定位要读的文档。路径相对于知识库根 `kb/`(知识库绝对路径见技能正文注入的 `{{KB_ROOT}}`,不在此写死机器路径)。
4
4
  > 中文优先读 `site/` 下的文件;英文原文在 `site/en/` 对应路径(如 `site/en/develop/basic/index.md`)。
5
5
  > 每个主题:**核心** = 先读这些;**扩展** = 需要细节时再读。
6
6
 
@@ -44,7 +44,7 @@
44
44
  - 核心:`site/reference/cookbook/adding-a-package.md`、`site/reference/cookbook/adding-a-settings-card.md`、`site/reference/cookbook/adding-a-conversation-node.md`
45
45
 
46
46
  ## 11. 子系统能力速查(按需)
47
- - 总览:`site/reference/subsystems/index.md`;README 约定见 `site/reference/subsystems/README.md`
47
+ - 总览:`site/reference/subsystems/index.md`
48
48
  - 内核与作用域:`core.md`、`scope.md`、`invariants.md`(运行时不变式)
49
49
  - 会话与持久化:`session.md`、`session-query.md`、`session-reference.md`、`session-title.md`、`session-projection.md`、`persistence.md`、`spill.md`、`session-telemetry.md`
50
50
  - 模型与上下文:`llm-streaming.md`、`token-meter.md`、`system-prompt.md`、`compaction.md`(上下文压缩)
@@ -4,7 +4,7 @@ editSource: "docs/user/develop/basic/index.zh.md"
4
4
 
5
5
  # 第一个插件
6
6
 
7
- 本教程会创建一个最小的 Harness 插件,并将其加载到 Web UI 中。请从已完成[从源码运行路径](https://github.com/deepseek-ai/deepseek-harness/blob/master/README.md#run-from-source)的仓库检出开始。
7
+ 本教程会创建一个最小的 Harness 插件,并将其加载到 Web UI 中。请从已完成[从源码运行路径](https://github.com/deepseek-ai/deepseek-harness/blob/master/README.zh.md#run-from-source)的仓库检出开始。
8
8
 
9
9
  ## 创建本地项目
10
10
 
@@ -6,7 +6,7 @@ editSource: "docs/user/develop/basic/publish.zh.md"
6
6
 
7
7
  前几篇教程通过 `--patch` overlay 加载本地插件。本教程把它打包成可安装的**组合包**(bundle),用 `dsh plugin add` 安装进一个 **profile**,并解释决定组合后配置的层顺序。本文假设 `dsh` CLI 已安装。请先完成[插件配置](./config.md)。
8
8
 
9
- 如果改用全新的源码 checkout,请先按照[从源码运行章节](https://github.com/deepseek-ai/deepseek-harness/blob/master/README.md#run-from-source)完成准备,将本教程的 `hello-plugin` 目录放在仓库根目录,并从该目录把下文的 `dsh ...` 命令改为 `pnpm dsh ...`。构建与启动器行为见[源码执行](https://github.com/deepseek-ai/deepseek-harness/blob/master/apps/cli/reference/README.md#source-execution)。
9
+ 如果改用全新的源码 checkout,请先按照[从源码运行章节](https://github.com/deepseek-ai/deepseek-harness/blob/master/README.zh.md#run-from-source)完成准备,将本教程的 `hello-plugin` 目录放在仓库根目录,并从该目录把下文的 `dsh ...` 命令改为 `pnpm dsh ...`。构建与启动器行为见[源码执行](https://github.com/deepseek-ai/deepseek-harness/blob/master/apps/cli/reference/README.zh.md#source-execution)。
10
10
 
11
11
  ## 两个概念,两种 manifest
12
12
 
@@ -138,7 +138,7 @@ dsh --profile demo
138
138
  name: 'dsh-hello-plugin/startup'
139
139
  ```
140
140
 
141
- 该插件导出 `inject = ['cmdlineArgs']`,使用自己的 commander program 调用 [`@deepseek-ai/dsh-cmdline`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/boot/cmdline/README.md) 中的 `parseCmdline`,再在 program 自己的 action 中把应用自有服务提供出去。启动器把自身 flag 之后的同一份不可变参数交给每个插件,因此添加应用专属 flag 无需修改启动器,多个插件也可以解析该快照。Loader 行不需要启动器标记或特殊类型。
141
+ 该插件导出 `inject = ['cmdlineArgs']`,使用自己的 commander program 调用 [`@deepseek-ai/dsh-cmdline`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/boot/cmdline/README.zh.md) 中的 `parseCmdline`,再在 program 自己的 action 中把应用自有服务提供出去。启动器把自身 flag 之后的同一份不可变参数交给每个插件,因此添加应用专属 flag 无需修改启动器,多个插件也可以解析该快照。Loader 行不需要启动器标记或特殊类型。
142
142
 
143
143
  受这些参数配置的行会注入提供方服务,并在自己的 `!!js` 选项中读取它,同时把部署取值写在旁边作为回退:
144
144
 
@@ -182,4 +182,4 @@ dsh plugin --profile demo add github:you/hello-plugin
182
182
  ## 下一步
183
183
 
184
184
  - [插件与生命周期](../framework/index.md) — 插件的完整生命周期
185
- - [CLI(命令行界面)行为参考](https://github.com/deepseek-ai/deepseek-harness/blob/master/apps/cli/reference/README.md) — 确切的层优先级、flag 与 profile 机制
185
+ - [CLI(命令行界面)行为参考](https://github.com/deepseek-ai/deepseek-harness/blob/master/apps/cli/reference/README.zh.md) — 确切的层优先级、flag 与 profile 机制
@@ -16,7 +16,7 @@ Cordis 是 DeepSeek Harness 底层的插件框架:它是一个小型运行时
16
16
 
17
17
  ## 准备工作
18
18
 
19
- 你需要克隆本仓库并安装依赖;[开发指南](https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/development.md#setup-tutorial)列出了前置条件。本教程不需要 API 密钥;所有示例均可在无密钥环境中运行。
19
+ 你需要克隆本仓库并安装依赖;[开发指南](https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/development.zh.md#setup-tutorial)列出了前置条件。本教程不需要 API 密钥;所有示例均可在无密钥环境中运行。
20
20
 
21
21
  ```sh
22
22
  git clone https://github.com/deepseek-ai/deepseek-harness.git
@@ -55,6 +55,8 @@ flowchart LR
55
55
  pkg_credentials["credentials"]
56
56
  svc_credentials["ctx.credentials<br/>Credential seam"]
57
57
  pkg_credentials_local["credentials-local"]
58
+ pkg_authorization["authorization"]
59
+ svc_authorization["ctx.authorization<br/>Authorization flow registry"]
58
60
  pkg_session_telemetry["session-telemetry"]
59
61
  svc_sessionTelemetry["ctx.sessionTelemetry<br/>Session telemetry seam"]
60
62
  pkg_session_telemetry_otel["session-telemetry-otel"]
@@ -214,6 +216,7 @@ flowchart LR
214
216
  pkg_approval --> svc_approval
215
217
  pkg_attachment --> svc_attachments
216
218
  pkg_attachment_local --> svc_attachments
219
+ pkg_authorization --> svc_authorization
217
220
  pkg_bash_local --> svc_shell
218
221
  pkg_bash_sandbox --> svc_shell
219
222
  pkg_code_runtime --> svc_codeRuntime
@@ -319,6 +322,7 @@ flowchart LR
319
322
  svc_approval --> pkg_tools
320
323
  svc_attachments --> pkg_host_runtime
321
324
  svc_attachments --> pkg_llm_pi_ai
325
+ svc_authorization --> pkg_llm_pi_ai
322
326
  svc_clientModules --> pkg_hmr
323
327
  svc_codeRuntime --> pkg_tools
324
328
  svc_compaction --> pkg_compaction_basic
@@ -436,6 +440,7 @@ flowchart LR
436
440
  | `ctx.sessionPersistence` | `seam` | [`session-persistence`](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/session/session-persistence) | [`session-persistence-jsonl`](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/session/session-persistence-jsonl), [`session-persistence-sqlite`](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/session/session-persistence-sqlite) | [`agent-loop`](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/core/agent-loop), [`tool-bash`](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/shell/tool-bash), [`hooks-claude-code`](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/hooks/hooks-claude-code), [`hooks-codex`](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/hooks/hooks-codex), [`session-query`](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/session-query/session-query), [`session-query-sqlite`](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/session-query/session-query-sqlite), [`message-feedback`](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/feedback/message-feedback) | - | Backends persist the same SessionEvent vocabulary; apps choose a backend at composition time. |
437
441
  | `ctx.settings` | `seam` | [`settings`](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/settings/settings) | [`settings-file`](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/settings/settings-file) | [`llm-deepseek`](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/llm/llm-deepseek), [`llm-pi-ai`](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/llm/llm-pi-ai), `apiproxy` | - | Plugins register namespace schemas and resolve layered values; providers store the raw document. The LLM adapters register their entry config as the composition base under the user section; the web gateway serves redacted layered descriptors and writes the user layer. |
438
442
  | `ctx.credentials` | `seam` | [`credentials`](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/credentials/credentials) | [`credentials-local`](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/credentials/credentials-local) | [`llm-deepseek`](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/llm/llm-deepseek), [`llm-pi-ai`](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/llm/llm-pi-ai), `apiproxy` | - | Configuration carries references to secrets; providers own the values. Consumers resolve per operation, so a rotated credential reaches the very next request; the web gateway exposes value-free views and write-only storage. |
443
+ | `ctx.authorization` | `seam` | [`authorization`](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/credentials/authorization) | - | [`llm-pi-ai`](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/llm/llm-pi-ai) | - | Flows are registered by the plugin that knows how to obtain one credential and keyed by the record they write; the seam owns the conversation and the one-attempt-per-key lifecycle, never the protocol. |
439
444
  | `ctx.sessionTelemetry` | `seam` | [`session-telemetry`](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/session/session-telemetry) | [`session-telemetry-otel`](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/session/session-telemetry-otel) | - | - | The seam captures, redacts, and hands session records to one backend; nothing else consumes the service — its output leaves the process. |
440
445
  | `ctx.storage` | `seam` | [`storage`](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/storage/storage) | [`storage-json`](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/storage/storage-json), [`storage-sqlite`](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/storage/storage-sqlite) | [`storage-domain`](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/storage/storage-domain) | - | Backends register side by side under names; data forms (domain first) mount on the hub and translate typed operations into opaque KV-unit primitives. |
441
446
  | `ctx.storageDomain` | `core` | [`storage-domain`](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/storage/storage-domain) | - | [`workspace`](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/workspace/workspace), [`message-feedback`](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/feedback/message-feedback) | - | Waits for every configured backend, then publishes the domain form as one lifecycle-bound service for typed durable state. |
@@ -331,20 +331,26 @@ Source: [`packages/core/agent-tool-presentation/src/index.ts:38`](https://github
331
331
  export interface Config {
332
332
  /** Explicit harness home; omitted follows `DSH_HOME`, then `~/.dsh`. */
333
333
  dshHome?: string
334
- /** Maximum encoded bytes accepted for one image. */
334
+ /** Maximum encoded bytes accepted for one submitted image. Default: 20 MiB. */
335
335
  maxImageBytes?: number
336
- /** Maximum image count accepted in one submitted message. */
336
+ /** Maximum image count accepted in one submitted message. Default: 20. */
337
337
  maxImagesPerMessage?: number
338
- /** Maximum aggregate encoded image bytes accepted in one submitted message. */
338
+ /** Maximum aggregate encoded image bytes accepted in one submitted message. Default: 200 MiB. */
339
339
  maxMessageImageBytes?: number
340
- /** Maximum intrinsic width multiplied by height accepted for one image. */
340
+ /** Maximum intrinsic width multiplied by height accepted for one submitted image. Default: 64,000,000. */
341
341
  maxImagePixels?: number
342
- /** Maximum intrinsic width and maximum intrinsic height accepted for one image. */
342
+ /** Maximum intrinsic width and maximum intrinsic height accepted for one submitted image. Default: 8192px. */
343
343
  maxImageDimension?: number
344
+ /** Long-edge pixel cap of the stored provider-independent normalized image. */
345
+ normalizedImageMaxDimension?: number
346
+ /** Encoded-byte safety cap of the stored provider-independent normalized image. */
347
+ normalizedImageMaxBytes?: number
348
+ /** Maximum simultaneous normalization or request-image transformations in this service instance. */
349
+ imageCompressionConcurrency?: number
344
350
  }
345
351
  ```
346
352
 
347
- Source: [`packages/attachment/attachment-local/src/index.ts:31`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/attachment/attachment-local/src/index.ts)
353
+ Source: [`packages/attachment/attachment-local/src/index.ts:51`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/attachment/attachment-local/src/index.ts)
348
354
 
349
355
  <a id="deepseek-aidsh-bash-local"></a>
350
356
 
@@ -411,7 +417,7 @@ export interface ConnectionConfig {
411
417
  * that is not a bare, canonical authority fails the plugin load.
412
418
  */
413
419
  trustedHosts?: string[]
414
- /** Maximum buffered JSON body for every `/api` request. */
420
+ /** Maximum buffered JSON body for every `/api` request. Default: 300 MiB. */
415
421
  maxRequestBodyBytes?: number
416
422
  }
417
423
  ```
@@ -571,7 +577,7 @@ export interface Config {
571
577
  }
572
578
  ```
573
579
 
574
- Source: [`packages/credentials/credentials-local/src/index.ts:55`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/credentials/credentials-local/src/index.ts)
580
+ Source: [`packages/credentials/credentials-local/src/index.ts:64`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/credentials/credentials-local/src/index.ts)
575
581
 
576
582
  <a id="deepseek-aidsh-e2b"></a>
577
583
 
@@ -867,7 +873,7 @@ export interface Config {
867
873
  }
868
874
  ```
869
875
 
870
- Source: [`packages/host/webserver/src/index.ts:45`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/host/webserver/src/index.ts)
876
+ Source: [`packages/host/webserver/src/index.ts:59`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/host/webserver/src/index.ts)
871
877
 
872
878
  <a id="deepseek-aidsh-invariants"></a>
873
879
 
@@ -932,12 +938,30 @@ export interface Config {
932
938
  maxTokens?: number
933
939
  /** Positive context capacity used when the selected model has no exact value (default 1,000,000). */
934
940
  defaultContextWindow?: number
935
- /** Advisory models shown by discovery consumers; defaults to V4 Flash and V4 Pro. */
941
+ /** Advisory models shown by discovery consumers; defaults to V4 Flash, V4 Pro, and V4 Flash Vision Exp. */
936
942
  models?: DeepSeekCatalogModel[]
937
943
  /** Maximum provider idle time while one stream read is outstanding (default five minutes). */
938
944
  streamIdleTimeoutMs?: number
939
- /** Maximum accumulated base64 image payload per request (default 20 MiB). */
940
- maxRequestImageBytes?: number
945
+ /** Maximum accumulated file-referenced image bytes per chat request (default 128 MiB). */
946
+ maxRequestFilesBytes?: number
947
+ /** Maximum accumulated base64 image payload after Files API fallback (default 20 MiB). */
948
+ maxInlineRequestImageBytes?: number
949
+ /** Maximum number of represented images per chat request (default 600). */
950
+ maxImagesPerRequest?: number
951
+ /** Raw-byte removal step after the request exceeds its file bound (default 64 MiB). */
952
+ imageOffloadByteQuantum?: number
953
+ /** Base64-byte removal step after inline fallback exceeds its bound (default 10 MiB). */
954
+ inlineImageOffloadByteQuantum?: number
955
+ /** Image-count removal step after the request exceeds its count bound (default 20). */
956
+ imageOffloadCountQuantum?: number
957
+ /** Maximum duration of one request-image Files API resolution (default one minute). */
958
+ filesApiTimeoutMs?: number
959
+ /** Explicit lifetime assigned to each uploaded image (default seven days). */
960
+ fileExpiresAfterSeconds?: number
961
+ /** Remaining lifetime below which an indexed file is replaced (default one hour). */
962
+ fileRefreshMarginSeconds?: number
963
+ /** Oldest harness-owned files deleted before one quota-recovery upload retry (default 100). */
964
+ fileQuotaCleanupBatch?: number
941
965
  /** Provider-owned model-request retry policy; omission uses normal mode with five retries. */
942
966
  retryPolicy?: RetryPolicyConfig
943
967
  }
@@ -956,12 +980,18 @@ export interface DeepSeekCatalogModel {
956
980
  maxTokens?: number
957
981
  /** Accepted request modalities; omission is text-only. */
958
982
  inputModalities?: ModelModality[]
983
+ /** Total-pixel budget for one deterministic request preview. */
984
+ imagePixelBudget?: number
985
+ /** Encoded-byte cap for one deterministic request preview. */
986
+ imageMaxBytes?: number
987
+ /** Provider detail tier; `low` uses the 512-by-512 total-pixel default. */
988
+ imageDetail?: 'auto' | 'low'
959
989
  }
960
990
  ```
961
991
 
962
992
  Depends on: [`ModelModality`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/llm/llm/src/index.ts) · [`RetryPolicyConfig`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/llm/llm/src/index.ts)
963
993
 
964
- Source: [`packages/llm/llm-deepseek/src/index.ts:66`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/llm/llm-deepseek/src/index.ts)
994
+ Source: [`packages/llm/llm-deepseek/src/index.ts:106`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/llm/llm-deepseek/src/index.ts)
965
995
 
966
996
  <a id="deepseek-aidsh-llm-pi-ai"></a>
967
997
 
@@ -1063,6 +1093,10 @@ export interface PiAiProviderProfile {
1063
1093
  * requests instead of being rejected by a request-size cap.
1064
1094
  */
1065
1095
  maxRequestImageBytes?: number
1096
+ /** Total-pixel budget for each deterministic inline request version. */
1097
+ requestImagePixelBudget?: number
1098
+ /** Raw encoded-byte cap for each deterministic inline request version. */
1099
+ requestImageMaxBytes?: number
1066
1100
  /** Provider-owned model-request retry policy; omission uses normal mode with five retries. */
1067
1101
  retryPolicy?: RetryPolicyConfig
1068
1102
  }
@@ -1211,7 +1245,7 @@ export type PiAiThinkingFormat = NonNullable<OpenAICompletionsCompat['thinkingFo
1211
1245
 
1212
1246
  Depends on: `Api` (`@earendil-works/pi-ai`) · `CacheRetention` (`@earendil-works/pi-ai`) · `Model` (`@earendil-works/pi-ai`) · `ModelThinkingLevel` (`@earendil-works/pi-ai`) · `OpenAICompletionsCompat` (`@earendil-works/pi-ai`) · [`RetryPolicyConfig`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/llm/llm/src/index.ts) · `ThinkingBudgets` (`@earendil-works/pi-ai`) · `Transport` (`@earendil-works/pi-ai`)
1213
1247
 
1214
- Source: [`packages/llm/llm-pi-ai/src/config.ts:201`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/llm/llm-pi-ai/src/config.ts)
1248
+ Source: [`packages/llm/llm-pi-ai/src/config.ts:213`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/llm/llm-pi-ai/src/config.ts)
1215
1249
 
1216
1250
  <a id="deepseek-aidsh-llm-replay"></a>
1217
1251
 
@@ -1279,7 +1313,7 @@ export interface ReplayModelConfig {
1279
1313
 
1280
1314
  Depends on: [`ModelModality`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/llm/llm/src/index.ts) · [`RetryPolicyConfig`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/llm/llm/src/index.ts)
1281
1315
 
1282
- Source: [`packages/test-support/llm-replay/src/index.ts:776`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/test-support/llm-replay/src/index.ts)
1316
+ Source: [`packages/test-support/llm-replay/src/index.ts:809`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/test-support/llm-replay/src/index.ts)
1283
1317
 
1284
1318
  <a id="deepseek-aidsh-llm-retry"></a>
1285
1319
 
@@ -1462,7 +1496,7 @@ export interface PresetSpec {
1462
1496
 
1463
1497
  Depends on: [`ApprovalPolicy`](./subsystems/approval.md) · [`SandboxMode`](./subsystems/sandbox.md)
1464
1498
 
1465
- Source: [`packages/interaction/permission-presets/src/index.ts:140`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/interaction/permission-presets/src/index.ts)
1499
+ Source: [`packages/interaction/permission-presets/src/index.ts:156`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/interaction/permission-presets/src/index.ts)
1466
1500
 
1467
1501
  <a id="deepseek-aidsh-persona"></a>
1468
1502
 
@@ -1502,7 +1536,7 @@ export interface PlanModeConfig {
1502
1536
  }
1503
1537
  ```
1504
1538
 
1505
- Source: [`packages/plan/plan-mode/src/index.ts:71`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/plan/plan-mode/src/index.ts)
1539
+ Source: [`packages/plan/plan-mode/src/index.ts:70`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/plan/plan-mode/src/index.ts)
1506
1540
 
1507
1541
  <a id="deepseek-aidsh-pwsh-local"></a>
1508
1542
 
@@ -3195,6 +3229,7 @@ These load from a `cordis.yml` entry with no `config:` block; they declare no co
3195
3229
  - `@deepseek-ai/dsh-agent` ([`packages/core/agent/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent/src/index.ts))
3196
3230
  - `@deepseek-ai/dsh-api-gateway` — requires `typert` ([`packages/api/gateway/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/api/gateway/src/index.ts))
3197
3231
  - `@deepseek-ai/dsh-api-remotes` ([`packages/api/remotes/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/api/remotes/src/index.ts))
3232
+ - `@deepseek-ai/dsh-authorization` — requires `credentials` ([`packages/credentials/authorization/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/credentials/authorization/src/index.ts))
3198
3233
  - `@deepseek-ai/dsh-client-locale` ([`packages/client/locale/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/locale/src/index.ts))
3199
3234
  - `@deepseek-ai/dsh-client-modules` — requires `webServer` · `loader` ([`packages/client/modules/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/modules/src/index.ts))
3200
3235
  - `@deepseek-ai/dsh-client-runtime` ([`packages/client/runtime/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/runtime/src/index.ts))
@@ -536,7 +536,7 @@ Source: [`packages/interaction/permission-presets/src/index.ts:50`](https://gith
536
536
  'plan/mode': { active: boolean }
537
537
  ```
538
538
 
539
- Source: [`packages/plan/plan-mode/src/index.ts:54`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/plan/plan-mode/src/index.ts)
539
+ Source: [`packages/plan/plan-mode/src/index.ts:53`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/plan/plan-mode/src/index.ts)
540
540
 
541
541
  ### `request/*`
542
542
 
@@ -96,7 +96,7 @@ The audit events are log-only and do not enter the model transcript. Model-visib
96
96
 
97
97
  ## Cordis API
98
98
 
99
- Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — this section is byte-identical in both language sides of the page. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
99
+ Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — the language sides differ only in locale-specific paired document paths. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
100
100
 
101
101
  <a id="ctxapproval--approvalservice"></a>
102
102
 
@@ -144,7 +144,7 @@ overrideOf(session: Session): ApprovalPolicy | undefined
144
144
 
145
145
  Types: [Agent](./core.md) · [Session](./session.md)
146
146
 
147
- Source: [`packages/interaction/user-approval/src/index.ts:192`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/interaction/user-approval/src/index.ts)
147
+ Source: [`packages/interaction/user-approval/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/interaction/user-approval/src/index.ts)
148
148
 
149
149
  <a id="approval-events"></a>
150
150
 
@@ -169,5 +169,5 @@ Ask composed answerers for one decision. Return an outcome to claim the request
169
169
 
170
170
  Types: [Scoped](./scope.md)
171
171
 
172
- Source: [`packages/interaction/user-approval/src/index.ts:30`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/interaction/user-approval/src/index.ts)
172
+ Source: [`packages/interaction/user-approval/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/interaction/user-approval/src/index.ts)
173
173
  <!-- END GENERATED cordis-surface -->
@@ -5,13 +5,13 @@ outline: [2,3]
5
5
 
6
6
  # Client Modules
7
7
 
8
- The web plugin table: the Node half of the client module system in [dsh-client-modules](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/client/modules), provided as `ctx.clientModules` (`ClientModuleRegistry`). It scans the host Loader's entries for packages declaring `dsh.client`, composes the `window.__DSH_BOOT__` entry graph, serves each bundle at `/plugins/<id>/client.js`, and taps the index render to inject the boot manifest — the four faces of one service. It is an optional capability of the web GUI stack, not part of the agent-loop spine, and it is a consumer of [dsh-host-webserver](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/host/webserver): the carrier described in [web-server.md](./web-server.md) supplies the prefix route and index tap this service registers. The same package's browser half (`ctx.modules`, the lazy-CJS module table that fetches and materializes these bundles) is kernel machinery documented in the [package README](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/modules/README.md), not here.
8
+ The web plugin table: the Node half of the client module system in [dsh-client-modules](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/client/modules), provided as `ctx.clientModules` (`ClientModuleRegistry`). It scans the host Loader's entries for packages declaring `dsh.client`, composes the `window.__DSH_BOOT__` entry graph, serves each bundle at `/plugins/<id>/client.js`, and answers every index-injection collection with the boot manifest rows — the four faces of one service. It is an optional capability of the web GUI stack, not part of the agent-loop spine, and it is a consumer of [dsh-host-webserver](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/host/webserver): the carrier described in [web-server.md](./web-server.md) supplies the prefix route and the `webserver/index-inject` event this service answers. The same package's browser half (`ctx.modules`, the lazy-CJS module table that fetches and materializes these bundles) is kernel machinery documented in the [package README](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/modules/README.md), not here.
9
9
 
10
10
  Source: [`packages/client/modules/src/client/manifest.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/modules/src/client/manifest.ts)
11
11
 
12
12
  ## The wire
13
13
 
14
- The graph is the wire single source between the Node and browser halves: the host composes `WebBootEntry` rows from scanned packages, injects the graph as the first script in `<head>` (`window.__DSH_BOOT__`, with `<` escaped so plugin-controlled strings cannot break out of the script element), and the shell parses it before booting anything. A page without a valid manifest cannot boot — the browser-side parser throws loud on a missing or malformed graph.
14
+ The graph is the wire single source between the Node and browser halves: the host composes `WebBootEntry` rows from scanned packages, publishes the graph as a `global` injection row rendered ahead of later script rows (`globalThis["__DSH_BOOT__"]`, with `<` escaped so plugin-controlled strings cannot break out of the script element), and the shell parses it before booting anything. A page without a valid manifest cannot boot — the browser-side parser throws loud on a missing or malformed graph.
15
15
 
16
16
  ```ts type-equiv
17
17
  /**
@@ -63,9 +63,9 @@ Scanning is incremental per package; there is no full-rescan code path. Every co
63
63
 
64
64
  Package metadata — including the negative "not a client package" verdict — is cached per name and never expires: plugin-set changes take effect on restart. A fiber restart reuses its row and rev untouched; bundle content changes reach the graph only through `rebuilt()`.
65
65
 
66
- ## The bundle route and index tap
66
+ ## The bundle route and index injection
67
67
 
68
- `GET`/`HEAD /plugins/<id>/client.js` serves the registered bundle from disk with `no-cache` (the rev query, not HTTP caching, anchors consistency); other methods are 405. An unknown id — or a registered row whose bundle is unreadable because it has not been built yet — answers a loud 404 rather than letting the carrier's SPA fallback ship HTML as JavaScript. The index tap injects the current graph on every index render, so a reload always boots against the live composition.
68
+ `GET`/`HEAD /plugins/<id>/client.js` serves the registered bundle from disk with `no-cache` (the rev query, not HTTP caching, anchors consistency); other methods are 405. An unknown id — or a registered row whose bundle is unreadable because it has not been built yet — answers a loud 404, so no unreadable bundle appears as a successful JavaScript response. The injection rows carry the current graph on every index render, so a reload always boots against the live composition.
69
69
 
70
70
  ## The service
71
71
 
@@ -79,13 +79,13 @@ In development, [dsh-client-hmr](https://github.com/deepseek-ai/deepseek-harness
79
79
 
80
80
  ## Cordis API
81
81
 
82
- Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — this section is byte-identical in both language sides of the page. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
82
+ Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — the language sides differ only in locale-specific paired document paths. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
83
83
 
84
84
  <a id="ctxclientmodules--clientmoduleregistry"></a>
85
85
 
86
86
  ### `ctx.clientModules` — `ClientModuleRegistry`
87
87
 
88
- The web plugin table service: incremental `dsh.client` scan + wire composition + bundle route + index tap. Construction runs the activation scan synchronously — a malformed declaration or missing bundle among the already-loaded entries aggregates into one loud throw (FAILED fiber; the boot activation audit reports it).
88
+ The web plugin table service: incremental `dsh.client` scan + wire composition + bundle route + index injection rows. Construction runs the activation scan synchronously — a malformed declaration or missing bundle among the already-loaded entries aggregates into one loud throw (FAILED fiber; the boot activation audit reports it).
89
89
 
90
90
  ```ts cordis-catalog
91
91
  /**
@@ -125,5 +125,5 @@ onRebuilt(listener: (id: string, rev: string) => void): () => void
125
125
  onGraphChanged(listener: () => void): () => void
126
126
  ```
127
127
 
128
- Source: [`packages/client/modules/src/index.ts:295`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/modules/src/index.ts)
128
+ Source: [`packages/client/modules/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/modules/src/index.ts)
129
129
  <!-- END GENERATED cordis-surface -->
@@ -169,7 +169,7 @@ interface CodeRunFailure {
169
169
 
170
170
  ## Cordis API
171
171
 
172
- Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — this section is byte-identical in both language sides of the page. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
172
+ Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — the language sides differ only in locale-specific paired document paths. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
173
173
 
174
174
  <a id="ctxcoderuntime--coderuntime-abstract-seam"></a>
175
175
 
@@ -190,5 +190,5 @@ Registers one `ctx.codeRuntime` implementation. Program, budget, abort, and subs
190
190
  abstract run(request: CodeRunRequest): Promise<CodeRunResult>
191
191
  ```
192
192
 
193
- Source: [`packages/code-runtime/code-runtime/src/index.ts:102`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/code-runtime/code-runtime/src/index.ts)
193
+ Source: [`packages/code-runtime/code-runtime/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/code-runtime/code-runtime/src/index.ts)
194
194
  <!-- END GENERATED cordis-surface -->
@@ -125,7 +125,7 @@ interface ParsedCommand {
125
125
 
126
126
  ## Cordis API
127
127
 
128
- Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — this section is byte-identical in both language sides of the page. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
128
+ Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — the language sides differ only in locale-specific paired document paths. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
129
129
 
130
130
  <a id="ctxcommands--commandruntime"></a>
131
131
 
@@ -187,7 +187,7 @@ find(agent: Agent, name: string): CommandDefinition | undefined
187
187
 
188
188
  Types: [Agent](./core.md) · [EncodedImageAttachment](https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/subsystems/attachment.md)
189
189
 
190
- Source: [`packages/interaction/commands/src/index.ts:250`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/interaction/commands/src/index.ts)
190
+ Source: [`packages/interaction/commands/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/interaction/commands/src/index.ts)
191
191
 
192
192
  <a id="commands-events"></a>
193
193
 
@@ -209,5 +209,5 @@ A command was registered or unregistered. This is an unfiltered registry notific
209
209
  'commands/change'(): void
210
210
  ```
211
211
 
212
- Source: [`packages/interaction/commands/src/types.ts:80`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/interaction/commands/src/types.ts)
212
+ Source: [`packages/interaction/commands/src/types.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/interaction/commands/src/types.ts)
213
213
  <!-- END GENERATED cordis-surface -->
@@ -126,7 +126,7 @@ interface PruneResult {
126
126
 
127
127
  ## Cordis API
128
128
 
129
- Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — this section is byte-identical in both language sides of the page. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
129
+ Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — the language sides differ only in locale-specific paired document paths. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
130
130
 
131
131
  <a id="ctxcompaction--compactionengine-abstract-seam"></a>
132
132
 
@@ -195,7 +195,7 @@ abstract compactRegion( start: number, end: number, agent: CompactionAgentContex
195
195
 
196
196
  Types: [CommandId](./commands.md)
197
197
 
198
- Source: [`packages/compaction/compaction/src/index.ts:96`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/compaction/compaction/src/index.ts)
198
+ Source: [`packages/compaction/compaction/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/compaction/compaction/src/index.ts)
199
199
 
200
200
  <a id="ctxtoolresultpruner--toolresultpruner"></a>
201
201
 
@@ -237,5 +237,5 @@ pruneSession(session: Session): PruneResult
237
237
 
238
238
  Types: [ContentBlock](./llm-streaming.md) · [Session](./session.md)
239
239
 
240
- Source: [`packages/compaction/compaction-tool-result-pruner/src/index.ts:44`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/compaction/compaction-tool-result-pruner/src/index.ts)
240
+ Source: [`packages/compaction/compaction-tool-result-pruner/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/compaction/compaction-tool-result-pruner/src/index.ts)
241
241
  <!-- END GENERATED cordis-surface -->