dsh-plugin-dev-kb 1.0.3 → 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 (141) 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/site/develop/basic/index.md +1 -1
  38. package/kb/site/develop/basic/publish.md +3 -3
  39. package/kb/site/develop/cordis-tutorial/index.md +1 -1
  40. package/kb/site/en/reference/capability-seams.md +5 -0
  41. package/kb/site/en/reference/config-catalog.md +52 -17
  42. package/kb/site/en/reference/persistence-catalog.md +1 -1
  43. package/kb/site/en/reference/subsystems/approval.md +3 -3
  44. package/kb/site/en/reference/subsystems/client-modules.md +7 -7
  45. package/kb/site/en/reference/subsystems/code-runtime.md +2 -2
  46. package/kb/site/en/reference/subsystems/commands.md +3 -3
  47. package/kb/site/en/reference/subsystems/compaction.md +3 -3
  48. package/kb/site/en/reference/subsystems/core.md +19 -19
  49. package/kb/site/en/reference/subsystems/credentials.md +163 -8
  50. package/kb/site/en/reference/subsystems/filesystem.md +5 -5
  51. package/kb/site/en/reference/subsystems/goal.md +3 -3
  52. package/kb/site/en/reference/subsystems/invariants.md +2 -2
  53. package/kb/site/en/reference/subsystems/jobs.md +2 -2
  54. package/kb/site/en/reference/subsystems/llm-streaming.md +16 -4
  55. package/kb/site/en/reference/subsystems/lsp.md +2 -2
  56. package/kb/site/en/reference/subsystems/permission-presets.md +2 -2
  57. package/kb/site/en/reference/subsystems/persistence.md +2 -2
  58. package/kb/site/en/reference/subsystems/plan.md +2 -2
  59. package/kb/site/en/reference/subsystems/sandbox.md +3 -3
  60. package/kb/site/en/reference/subsystems/session-projection.md +60 -35
  61. package/kb/site/en/reference/subsystems/session-query.md +2 -2
  62. package/kb/site/en/reference/subsystems/session-reference.md +3 -3
  63. package/kb/site/en/reference/subsystems/session-telemetry.md +3 -3
  64. package/kb/site/en/reference/subsystems/session-title.md +2 -2
  65. package/kb/site/en/reference/subsystems/session.md +6 -6
  66. package/kb/site/en/reference/subsystems/settings.md +4 -4
  67. package/kb/site/en/reference/subsystems/shell.md +3 -3
  68. package/kb/site/en/reference/subsystems/skills.md +3 -3
  69. package/kb/site/en/reference/subsystems/spill.md +2 -2
  70. package/kb/site/en/reference/subsystems/storage.md +4 -4
  71. package/kb/site/en/reference/subsystems/subagent.md +6 -6
  72. package/kb/site/en/reference/subsystems/subprocess.md +3 -3
  73. package/kb/site/en/reference/subsystems/system-prompt.md +4 -4
  74. package/kb/site/en/reference/subsystems/terminal.md +2 -2
  75. package/kb/site/en/reference/subsystems/token-meter.md +2 -2
  76. package/kb/site/en/reference/subsystems/tools.md +8 -8
  77. package/kb/site/en/reference/subsystems/typert.md +4 -4
  78. package/kb/site/en/reference/subsystems/user-questions.md +2 -2
  79. package/kb/site/en/reference/subsystems/web-server.md +46 -6
  80. package/kb/site/en/reference/subsystems/web.md +2 -2
  81. package/kb/site/en/reference/subsystems/workflow.md +8 -8
  82. package/kb/site/en/reference/subsystems/workspace.md +3 -3
  83. package/kb/site/en/reference/tool-catalog.md +3 -3
  84. package/kb/site/guide/providers.md +2 -2
  85. package/kb/site/guide/python-sdk.md +2 -2
  86. package/kb/site/guide/quickstart.md +2 -2
  87. package/kb/site/reference/capability-seams.md +5 -0
  88. package/kb/site/reference/config-catalog.md +53 -18
  89. package/kb/site/reference/cookbook/adding-a-conversation-node.md +1 -1
  90. package/kb/site/reference/cookbook/adding-a-package.md +5 -3
  91. package/kb/site/reference/cookbook/adding-a-settings-card.md +1 -1
  92. package/kb/site/reference/cookbook/adding-a-tool.md +6 -6
  93. package/kb/site/reference/cookbook/adding-an-llm-adapter.md +2 -2
  94. package/kb/site/reference/cookbook/extension-cookbook.md +6 -4
  95. package/kb/site/reference/index.md +4 -4
  96. package/kb/site/reference/persistence-catalog.md +5 -5
  97. package/kb/site/reference/subsystems/approval.md +3 -3
  98. package/kb/site/reference/subsystems/client-modules.md +8 -8
  99. package/kb/site/reference/subsystems/code-runtime.md +4 -4
  100. package/kb/site/reference/subsystems/commands.md +5 -5
  101. package/kb/site/reference/subsystems/compaction.md +7 -7
  102. package/kb/site/reference/subsystems/core.md +26 -24
  103. package/kb/site/reference/subsystems/credentials.md +163 -8
  104. package/kb/site/reference/subsystems/filesystem.md +6 -6
  105. package/kb/site/reference/subsystems/goal.md +5 -5
  106. package/kb/site/reference/subsystems/index.md +5 -5
  107. package/kb/site/reference/subsystems/invariants.md +5 -5
  108. package/kb/site/reference/subsystems/jobs.md +4 -4
  109. package/kb/site/reference/subsystems/llm-streaming.md +21 -9
  110. package/kb/site/reference/subsystems/lsp.md +3 -3
  111. package/kb/site/reference/subsystems/permission-presets.md +3 -3
  112. package/kb/site/reference/subsystems/persistence.md +6 -6
  113. package/kb/site/reference/subsystems/plan.md +4 -4
  114. package/kb/site/reference/subsystems/sandbox.md +7 -5
  115. package/kb/site/reference/subsystems/schedule.md +1 -1
  116. package/kb/site/reference/subsystems/scope.md +1 -1
  117. package/kb/site/reference/subsystems/session-projection.md +61 -36
  118. package/kb/site/reference/subsystems/session-query.md +2 -2
  119. package/kb/site/reference/subsystems/session-reference.md +3 -3
  120. package/kb/site/reference/subsystems/session-telemetry.md +5 -5
  121. package/kb/site/reference/subsystems/session-title.md +2 -2
  122. package/kb/site/reference/subsystems/session.md +13 -11
  123. package/kb/site/reference/subsystems/settings.md +4 -4
  124. package/kb/site/reference/subsystems/shell.md +6 -6
  125. package/kb/site/reference/subsystems/skills.md +3 -3
  126. package/kb/site/reference/subsystems/spill.md +3 -3
  127. package/kb/site/reference/subsystems/storage.md +7 -7
  128. package/kb/site/reference/subsystems/subagent.md +11 -9
  129. package/kb/site/reference/subsystems/subprocess.md +4 -4
  130. package/kb/site/reference/subsystems/system-prompt.md +5 -5
  131. package/kb/site/reference/subsystems/terminal.md +3 -3
  132. package/kb/site/reference/subsystems/token-meter.md +2 -2
  133. package/kb/site/reference/subsystems/tools.md +9 -9
  134. package/kb/site/reference/subsystems/typert.md +5 -5
  135. package/kb/site/reference/subsystems/user-questions.md +2 -2
  136. package/kb/site/reference/subsystems/web-server.md +48 -8
  137. package/kb/site/reference/subsystems/web.md +3 -3
  138. package/kb/site/reference/subsystems/workflow.md +11 -11
  139. package/kb/site/reference/subsystems/workspace.md +5 -5
  140. package/kb/site/reference/tool-catalog.md +9 -5
  141. package/package.json +2 -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,
@@ -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 -->
@@ -317,7 +317,7 @@ The two core IDs are `CallId` (correlates a tool call with its result; dsh-llm)
317
317
 
318
318
  ## Cordis API
319
319
 
320
- 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).
320
+ 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).
321
321
 
322
322
  <a id="ctxagentdefaultmodel--agentdefaultmodelconfig"></a>
323
323
 
@@ -341,7 +341,7 @@ currentSelection(): ModelSelection
341
341
  async saveSelection(next: ModelSelection): Promise<void>
342
342
  ```
343
343
 
344
- Source: [`packages/core/agent-default-model/src/index.ts:64`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent-default-model/src/index.ts)
344
+ Source: [`packages/core/agent-default-model/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent-default-model/src/index.ts)
345
345
 
346
346
  <a id="ctxagentloop--agentloop"></a>
347
347
 
@@ -380,7 +380,7 @@ async resume(ownerCtx: Context, options: ResumeAgentOptions): Promise<AgentHandl
380
380
 
381
381
  Types: [SessionHeader](./persistence.md)
382
382
 
383
- Source: [`packages/core/agent-loop/src/index.ts:296`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent-loop/src/index.ts)
383
+ Source: [`packages/core/agent-loop/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent-loop/src/index.ts)
384
384
 
385
385
  <a id="ctxagentpresets--agentpresets"></a>
386
386
 
@@ -551,7 +551,7 @@ async standingKeyFor(id?: string): Promise<ScopeKey>
551
551
 
552
552
  Types: [ScopeKey](./scope.md)
553
553
 
554
- Source: [`packages/preset/agent-presets/src/index.ts:82`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/preset/agent-presets/src/index.ts)
554
+ Source: [`packages/preset/agent-presets/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/preset/agent-presets/src/index.ts)
555
555
 
556
556
  <a id="ctxagents--agentregistry"></a>
557
557
 
@@ -723,7 +723,7 @@ list(): Agent[]
723
723
  roots(): Agent[]
724
724
  ```
725
725
 
726
- Source: [`packages/core/agent/src/index.ts:256`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent/src/index.ts)
726
+ Source: [`packages/core/agent/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent/src/index.ts)
727
727
 
728
728
  <a id="agent-events"></a>
729
729
 
@@ -751,7 +751,7 @@ A fully configured agent and live session were published. Setup is composition-o
751
751
 
752
752
  Types: [Scoped](./scope.md)
753
753
 
754
- Source: [`packages/core/agent/src/runtime-types.ts:159`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent/src/runtime-types.ts)
754
+ Source: [`packages/core/agent/src/runtime-types.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent/src/runtime-types.ts)
755
755
 
756
756
  <a id="agentdisposed--emit"></a>
757
757
 
@@ -773,7 +773,7 @@ An agent left the registry; AgentLoop emits this after driver quiescence and sco
773
773
 
774
774
  Types: [Scoped](./scope.md)
775
775
 
776
- Source: [`packages/core/agent/src/runtime-types.ts:168`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent/src/runtime-types.ts)
776
+ Source: [`packages/core/agent/src/runtime-types.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent/src/runtime-types.ts)
777
777
 
778
778
  <a id="agenterror--emit"></a>
779
779
 
@@ -797,7 +797,7 @@ A step or turn errored. The machine reports a failure here even when the error h
797
797
 
798
798
  Types: [Scoped](./scope.md)
799
799
 
800
- Source: [`packages/core/agent/src/runtime-types.ts:290`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent/src/runtime-types.ts)
800
+ Source: [`packages/core/agent/src/runtime-types.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent/src/runtime-types.ts)
801
801
 
802
802
  <a id="agentinboxclaimed--emit"></a>
803
803
 
@@ -821,7 +821,7 @@ One message left the inbox inside its open turn. If the proposed step is rejecte
821
821
 
822
822
  Types: [Scoped](./scope.md) · [UserMessage](./session.md)
823
823
 
824
- Source: [`packages/core/agent/src/runtime-types.ts:197`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent/src/runtime-types.ts)
824
+ Source: [`packages/core/agent/src/runtime-types.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent/src/runtime-types.ts)
825
825
 
826
826
  <a id="agentinboxdiscarded--emit"></a>
827
827
 
@@ -842,7 +842,7 @@ One message was discarded from the live inbox.
842
842
 
843
843
  Types: [Scoped](./scope.md) · [UserMessage](./session.md)
844
844
 
845
- Source: [`packages/core/agent/src/runtime-types.ts:205`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent/src/runtime-types.ts)
845
+ Source: [`packages/core/agent/src/runtime-types.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent/src/runtime-types.ts)
846
846
 
847
847
  <a id="agentinboxinserted--emit"></a>
848
848
 
@@ -863,7 +863,7 @@ One message entered the live inbox.
863
863
 
864
864
  Types: [Scoped](./scope.md) · [UserMessage](./session.md)
865
865
 
866
- Source: [`packages/core/agent/src/runtime-types.ts:186`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent/src/runtime-types.ts)
866
+ Source: [`packages/core/agent/src/runtime-types.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent/src/runtime-types.ts)
867
867
 
868
868
  <a id="agentpre-step--waterfall"></a>
869
869
 
@@ -888,7 +888,7 @@ Reject a proposed step or replace the messages that enter it. Calling `next()` p
888
888
 
889
889
  Types: [Scoped](./scope.md) · [UserMessage](./session.md)
890
890
 
891
- Source: [`packages/core/agent/src/runtime-types.ts:231`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent/src/runtime-types.ts)
891
+ Source: [`packages/core/agent/src/runtime-types.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent/src/runtime-types.ts)
892
892
 
893
893
  <a id="agentrequest--waterfall"></a>
894
894
 
@@ -914,7 +914,7 @@ Replace the frozen call configuration. `await next()` yields the config the mach
914
914
 
915
915
  Types: [LlmCallConfig](./llm-streaming.md) · [Scoped](./scope.md)
916
916
 
917
- Source: [`packages/core/agent/src/runtime-types.ts:244`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent/src/runtime-types.ts)
917
+ Source: [`packages/core/agent/src/runtime-types.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent/src/runtime-types.ts)
918
918
 
919
919
  <a id="agentrequest-error--waterfall"></a>
920
920
 
@@ -943,7 +943,7 @@ Handle one failed model-request attempt before the loop retries or closes its st
943
943
 
944
944
  Types: [LlmFailure](./llm-streaming.md) · [ResolvedRetryPolicy](./llm-streaming.md) · [Scoped](./scope.md)
945
945
 
946
- Source: [`packages/core/agent/src/runtime-types.ts:260`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent/src/runtime-types.ts)
946
+ Source: [`packages/core/agent/src/runtime-types.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent/src/runtime-types.ts)
947
947
 
948
948
  <a id="agentsession-start--emit"></a>
949
949
 
@@ -967,7 +967,7 @@ The session lifecycle began, once before the first turn. Use `agent.inject()` to
967
967
 
968
968
  Types: [Scoped](./scope.md)
969
969
 
970
- Source: [`packages/core/agent/src/runtime-types.ts:217`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent/src/runtime-types.ts)
970
+ Source: [`packages/core/agent/src/runtime-types.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent/src/runtime-types.ts)
971
971
 
972
972
  <a id="agentstatus--emit"></a>
973
973
 
@@ -990,7 +990,7 @@ Agent status changed (`idle` ⇄ `running`). A waking delivery enters `running`
990
990
 
991
991
  Types: [Scoped](./scope.md)
992
992
 
993
- Source: [`packages/core/agent/src/runtime-types.ts:178`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent/src/runtime-types.ts)
993
+ Source: [`packages/core/agent/src/runtime-types.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent/src/runtime-types.ts)
994
994
 
995
995
  <a id="agentturn-stopping--serial"></a>
996
996
 
@@ -1021,7 +1021,7 @@ The turn is about to close: the model owes no response (no live tool calls, no f
1021
1021
 
1022
1022
  Types: [Scoped](./scope.md)
1023
1023
 
1024
- Source: [`packages/core/agent/src/runtime-types.ts:278`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent/src/runtime-types.ts)
1024
+ Source: [`packages/core/agent/src/runtime-types.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent/src/runtime-types.ts)
1025
1025
 
1026
1026
  <a id="agent-loop-events"></a>
1027
1027
 
@@ -1046,7 +1046,7 @@ A declarative agent entry failed before it could publish a live agent. Consumers
1046
1046
  'agent-loop/config-start-failed'(payload: { sessionId: SessionId; error: unknown }): void
1047
1047
  ```
1048
1048
 
1049
- Source: [`packages/core/agent-loop/src/index.ts:183`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent-loop/src/index.ts)
1049
+ Source: [`packages/core/agent-loop/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent-loop/src/index.ts)
1050
1050
 
1051
1051
  <a id="agent-preset-events"></a>
1052
1052
 
@@ -1069,5 +1069,5 @@ One session committed a different agent preset to its durable log. Consumers inv
1069
1069
  'agent-preset/selected'(sessionId: SessionId, agentPreset: string): void
1070
1070
  ```
1071
1071
 
1072
- Source: [`packages/preset/agent-presets/src/types.ts:13`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/preset/agent-presets/src/types.ts)
1072
+ Source: [`packages/preset/agent-presets/src/types.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/preset/agent-presets/src/types.ts)
1073
1073
  <!-- END GENERATED cordis-surface -->