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
@@ -93,7 +93,7 @@ interface PromptContext {
93
93
 
94
94
  ## Cordis API
95
95
 
96
- 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).
96
+ 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).
97
97
 
98
98
  <a id="ctxsystemprompt--systemprompt"></a>
99
99
 
@@ -159,7 +159,7 @@ variable(name: string, provider: (context: AssembleContext) => string | undefine
159
159
  async assemble(context: AssembleContext = {}): Promise<PromptAssembly>
160
160
  ```
161
161
 
162
- Source: [`packages/core/system-prompt/src/index.ts:338`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/system-prompt/src/index.ts)
162
+ Source: [`packages/core/system-prompt/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/system-prompt/src/index.ts)
163
163
 
164
164
  <a id="system-prompt-events"></a>
165
165
 
@@ -189,7 +189,7 @@ Expert waterfall over the assembled sections, contexts, tools, and variables. Sc
189
189
 
190
190
  Types: [Scoped](./scope.md)
191
191
 
192
- Source: [`packages/core/system-prompt/src/index.ts:31`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/system-prompt/src/index.ts)
192
+ Source: [`packages/core/system-prompt/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/system-prompt/src/index.ts)
193
193
 
194
194
  <a id="system-promptchange--emit"></a>
195
195
 
@@ -206,5 +206,5 @@ Emitted when any prompt provider changes. This registry notification is unfilter
206
206
  'system-prompt/change'(): void
207
207
  ```
208
208
 
209
- Source: [`packages/core/system-prompt/src/index.ts:37`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/system-prompt/src/index.ts)
209
+ Source: [`packages/core/system-prompt/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/system-prompt/src/index.ts)
210
210
  <!-- END GENERATED cordis-surface -->
@@ -99,7 +99,7 @@ interface TerminalSendResult {
99
99
 
100
100
  ## Cordis API
101
101
 
102
- 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).
102
+ 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).
103
103
 
104
104
  <a id="ctxterminals--terminalsessionservice"></a>
105
105
 
@@ -183,5 +183,5 @@ list(owner: Agent): TerminalSessionSnapshot[]
183
183
 
184
184
  Types: [Agent](./core.md)
185
185
 
186
- Source: [`packages/terminal/terminal/src/index.ts:105`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/terminal/terminal/src/index.ts)
186
+ Source: [`packages/terminal/terminal/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/terminal/terminal/src/index.ts)
187
187
  <!-- END GENERATED cordis-surface -->
@@ -51,7 +51,7 @@ Surface order is authoritative; replacement nodes can have higher durable seqs t
51
51
 
52
52
  ## Cordis API
53
53
 
54
- 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).
54
+ 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).
55
55
 
56
56
  <a id="ctxtokenmeter--tokenmeter"></a>
57
57
 
@@ -89,5 +89,5 @@ estimateMessage(message: Message): number
89
89
 
90
90
  Types: [EpochHeader](./session.md) · [Message](./llm-streaming.md) · [Session](./session.md)
91
91
 
92
- Source: [`packages/llm/token-meter/src/index.ts:74`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/llm/token-meter/src/index.ts)
92
+ Source: [`packages/llm/token-meter/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/llm/token-meter/src/index.ts)
93
93
  <!-- END GENERATED cordis-surface -->
@@ -476,7 +476,7 @@ The full presentation field docs live in [`packages/core/tools/src/presentation.
476
476
 
477
477
  ## Cordis API
478
478
 
479
- 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).
479
+ 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).
480
480
 
481
481
  <a id="ctxtools--toolruntime"></a>
482
482
 
@@ -574,7 +574,7 @@ async execute(exec: ToolExecutionInput): Promise<ToolExecutionResult>
574
574
 
575
575
  Types: [ScopeKey](./scope.md)
576
576
 
577
- Source: [`packages/core/tools/src/index.ts:787`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/tools/src/index.ts)
577
+ Source: [`packages/core/tools/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/tools/src/index.ts)
578
578
 
579
579
  <a id="tools-events"></a>
580
580
 
@@ -599,7 +599,7 @@ A tool was registered or unregistered, or a scoped restriction changed (the avai
599
599
  'tools/change'(): void
600
600
  ```
601
601
 
602
- Source: [`packages/core/tools/src/index.ts:207`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/tools/src/index.ts)
602
+ Source: [`packages/core/tools/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/tools/src/index.ts)
603
603
 
604
604
  <a id="toolscode-dispatch-log--waterfall"></a>
605
605
 
@@ -626,7 +626,7 @@ Allow a listener to replace content in the DURABLE LOG COPY of one `run_code` su
626
626
 
627
627
  Types: [ContentBlock](./llm-streaming.md) · [Scoped](./scope.md)
628
628
 
629
- Source: [`packages/core/tools/src/index.ts:189`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/tools/src/index.ts)
629
+ Source: [`packages/core/tools/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/tools/src/index.ts)
630
630
 
631
631
  <a id="toolsexecute--waterfall"></a>
632
632
 
@@ -650,7 +650,7 @@ Around-dispatch waterfall for timeout, retry, or metrics. `next()` returns a nor
650
650
 
651
651
  Types: [Scoped](./scope.md)
652
652
 
653
- Source: [`packages/core/tools/src/index.ts:163`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/tools/src/index.ts)
653
+ Source: [`packages/core/tools/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/tools/src/index.ts)
654
654
 
655
655
  <a id="toolspost-execute--waterfall"></a>
656
656
 
@@ -675,7 +675,7 @@ Accept, replace, enrich, or block a normalized dispatch result. `next()` accepts
675
675
 
676
676
  Types: [Scoped](./scope.md)
677
677
 
678
- Source: [`packages/core/tools/src/index.ts:175`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/tools/src/index.ts)
678
+ Source: [`packages/core/tools/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/tools/src/index.ts)
679
679
 
680
680
  <a id="toolspre-execute--waterfall"></a>
681
681
 
@@ -698,7 +698,7 @@ Allow, deny, or ask before dispatch. `next()` delegates to allow; missing approv
698
698
 
699
699
  Types: [Scoped](./scope.md)
700
700
 
701
- Source: [`packages/core/tools/src/index.ts:152`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/tools/src/index.ts)
701
+ Source: [`packages/core/tools/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/tools/src/index.ts)
702
702
 
703
703
  <a id="toolsresult--emit"></a>
704
704
 
@@ -719,5 +719,5 @@ Observe the frozen, lossless-JSON final outcome. Listener failures are contained
719
719
 
720
720
  Types: [Scoped](./scope.md)
721
721
 
722
- Source: [`packages/core/tools/src/index.ts:197`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/tools/src/index.ts)
722
+ Source: [`packages/core/tools/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/tools/src/index.ts)
723
723
  <!-- END GENERATED cordis-surface -->
@@ -234,7 +234,7 @@ interface TypertClientRemote extends TypertRemoteNamespaceMap {
234
234
 
235
235
  ## Cordis API
236
236
 
237
- 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).
237
+ 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).
238
238
 
239
239
  <a id="ctxapiproxy--apiproxy"></a>
240
240
 
@@ -251,7 +251,7 @@ Root interface of the unified API. New client-request domain = one new file pair
251
251
  respond(message: ClientResponse): Promise<RpcReceipt>
252
252
  ```
253
253
 
254
- Source: [`packages/host/apiproxy/src/api/index.ts:22`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/host/apiproxy/src/api/index.ts)
254
+ Source: [`packages/host/apiproxy/src/api/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/host/apiproxy/src/api/index.ts)
255
255
 
256
256
  <a id="ctxtypert--typertregistry"></a>
257
257
 
@@ -317,7 +317,7 @@ toJSONSchema(key: string, params?: z.core.ToJSONSchemaParams): z.core.JSONSchema
317
317
 
318
318
  Types: [TypertContribution](./invariants.md) · [TypertFace](./invariants.md) · [TypertPackageFilter](./invariants.md) · [TypertPackageRecord](./invariants.md) · [TypertSchemaFilter](./invariants.md) · [TypertSchemaRecord](./invariants.md)
319
319
 
320
- Source: [`packages/typert/registry/src/service.ts:446`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/typert/registry/src/service.ts)
320
+ Source: [`packages/typert/registry/src/service.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/typert/registry/src/service.ts)
321
321
 
322
322
  <a id="ctxtypertgateway--typertgatewayservice"></a>
323
323
 
@@ -335,5 +335,5 @@ Resolve strict generated definitions or conservative SRC markers against current
335
335
  async invoke(request: InvokeRemoteRequest): Promise<unknown>
336
336
  ```
337
337
 
338
- Source: [`packages/api/gateway/src/index.ts:90`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/api/gateway/src/index.ts)
338
+ Source: [`packages/api/gateway/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/api/gateway/src/index.ts)
339
339
  <!-- END GENERATED cordis-surface -->
@@ -142,7 +142,7 @@ class UserQuestionError extends HarnessError {
142
142
 
143
143
  ## Cordis API
144
144
 
145
- 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).
145
+ 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).
146
146
 
147
147
  <a id="ctxuserquestions--userquestionservice"></a>
148
148
 
@@ -177,5 +177,5 @@ registerProvider(provider: UserQuestionProvider): () => void
177
177
  async ask(request: AskUserQuestionRequest): Promise<AskUserQuestionAnswer>
178
178
  ```
179
179
 
180
- Source: [`packages/interaction/user-questions/src/index.ts:51`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/interaction/user-questions/src/index.ts)
180
+ Source: [`packages/interaction/user-questions/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/interaction/user-questions/src/index.ts)
181
181
  <!-- END GENERATED cordis-surface -->
@@ -27,7 +27,7 @@ interface WebRoute {
27
27
  }
28
28
  ```
29
29
 
30
- Match order is fixed: exact table first, then longest matching prefix, then the registered fallback. Registration order carries no request-facing semantics — named routes are composed to be disjoint, and the fallback seat answers anything no named route claims; one owner only, a second registration throws. The shipped Web composition claims the seat with [`dsh-host-frontend-static`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/host/frontend-static/src/index.ts), the SPA dist server with locked semantics: non-GET/HEAD is 405, traversal outside the dist root is 403, any miss falls back to `index.html` with HTTP 200 (SPA routing), and unknown extensions ship as octet-stream.
30
+ Match order is fixed: exact table first, then longest matching prefix, then the registered fallback. Registration order carries no request-facing semantics — named routes are composed to be disjoint, and the fallback seat answers anything no named route claims; one owner only, a second registration throws. The shipped Web composition claims the seat with [`dsh-host-frontend-static`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/host/frontend-static/src/index.ts), the SPA dist server with locked semantics: non-GET/HEAD is 405, traversal outside the dist root is 403, a readable index renders at the dist root and configured index path, existing files are served directly, absent or non-file targets are empty 404 responses, and unknown extensions ship as octet-stream.
31
31
 
32
32
  ## Config
33
33
 
@@ -45,7 +45,7 @@ interface Config {
45
45
 
46
46
  ## The service
47
47
 
48
- `WebServer` (`ctx.webServer`) listens immediately on activation; a listen failure (EADDRINUSE…) rejects initialization, and the boot process reports the failed fiber. `register(route)` adds one named route and returns its disposer; a duplicate `(kind, path)` throws because route patterns are a composition-level contract and a collision is a misconfiguration. `tapIndex(transform)` adds a pure html-to-html transform applied to every index response `/` and each SPA fallback in registration order; [dsh-client-modules](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/client/modules) uses it to inject the boot manifest. `port` reads the listening port, including the port assigned by the OS when `config.port` is 0.
48
+ `WebServer` (`ctx.webServer`) listens immediately on activation; a listen failure (EADDRINUSE…) rejects initialization, and the boot process reports the failed fiber. `register(route)` adds one named route and returns its disposer; a duplicate `(kind, path)` throws because route patterns are a composition-level contract and a collision is a misconfiguration. `collectIndexInjections()` gathers structured `IndexInjection` rows over one `webserver/index-inject` emit, and `renderIndex(html)` renders them into successful root and configured index responses before applying the raw `tapIndex(transform)` escape-hatch transforms in registration order; [dsh-client-modules](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/client/modules) answers the event with the boot manifest rows. `port` reads the listening port, including the port assigned by the OS when `config.port` is 0.
49
49
 
50
50
  A request whose handling throws (a malformed %-escape hitting `decodeURIComponent`, a client dropping mid-body) is logged as a warning and answered 400 — or the socket destroyed when headers are already out — never a process exit. Disposal pairs `close()` with `closeAllConnections()` because a handler may hold its response open (SSE) and such connections never end on their own; without the force-close, teardown would hang. The package never prints: the URL line belongs to the shell. Per-package operational detail, including the dev-mode bundle watch pipeline, stays in the [README](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/host/webserver/README.md).
51
51
 
@@ -55,7 +55,7 @@ A request whose handling throws (a malformed %-escape hitting `decodeURIComponen
55
55
 
56
56
  ## Cordis API
57
57
 
58
- 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).
58
+ 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).
59
59
 
60
60
  <a id="ctxwebserver--webserver"></a>
61
61
 
@@ -91,8 +91,9 @@ registerUpgrade(route: WebUpgradeRoute): () => void
91
91
  registerFallback(handler: WebRoute['handler']): () => void
92
92
 
93
93
  /**
94
- * Register an index.html transform, applied by the fallback owner to every
95
- * index response ({@link applyIndexTaps}) in registration order.
94
+ * Register a raw-HTML index transform, the escape hatch for markup no
95
+ * {@link IndexInjection} row expresses: {@link renderIndex} applies taps in
96
+ * registration order after rendering the structured rows.
96
97
  * @param transform - pure html-to-html function.
97
98
  * @returns the disposer removing the transform.
98
99
  */
@@ -105,7 +106,46 @@ tapIndex(transform: (html: string) => string): () => void
105
106
  * @returns the transformed body.
106
107
  */
107
108
  applyIndexTaps(html: string): string
109
+
110
+ /**
111
+ * Gather the structured injection table: one `webserver/index-inject` emit,
112
+ * every subscriber pushes its current rows. Fresh per call, so subscribers
113
+ * read live state (module graph, theme preference) at emit time.
114
+ * @returns rows in subscriber activation order.
115
+ */
116
+ collectIndexInjections(): IndexInjection[]
117
+
118
+ /**
119
+ * Render one index.html body: the structured injection table first, then
120
+ * the raw `tapIndex` transforms over the result.
121
+ * @param html - the raw index.html body.
122
+ * @returns the transformed body.
123
+ */
124
+ renderIndex(html: string): string
108
125
  ```
109
126
 
110
- Source: [`packages/host/webserver/src/index.ts:59`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/host/webserver/src/index.ts)
127
+ Source: [`packages/host/webserver/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/host/webserver/src/index.ts)
128
+
129
+ <a id="webserver-events"></a>
130
+
131
+ ### `webserver/*` events
132
+
133
+ <a id="webserverindex-inject--emit"></a>
134
+
135
+ #### `webserver/index-inject` — emit
136
+
137
+ Collect the structured index injection table. Emitted on every index render and every worker boot-payload request; listeners push their current rows, so a row's data is read fresh at emit time.
138
+
139
+ ```ts cordis-catalog
140
+ /**
141
+ * Collect the structured index injection table. Emitted on every index
142
+ * render and every worker boot-payload request; listeners push their
143
+ * current rows, so a row's data is read fresh at emit time.
144
+ * @param table - Mutable row table; listeners append in activation order.
145
+ * @mode emit
146
+ */
147
+ 'webserver/index-inject'(table: IndexInjection[]): void
148
+ ```
149
+
150
+ Source: [`packages/host/webserver/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/host/webserver/src/index.ts)
111
151
  <!-- END GENERATED cordis-surface -->
@@ -141,7 +141,7 @@ Selection never depends on registration, config, or HMR order: a capability has
141
141
 
142
142
  ## Cordis API
143
143
 
144
- 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).
144
+ 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).
145
145
 
146
146
  <a id="ctxweb--webruntime"></a>
147
147
 
@@ -199,5 +199,5 @@ async search(request: WebSearchRequest, signal?: AbortSignal): Promise<WebSearch
199
199
  async fetch(request: WebFetchRequest, signal?: AbortSignal): Promise<WebFetchResult>
200
200
  ```
201
201
 
202
- Source: [`packages/web/web/src/index.ts:74`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/web/web/src/index.ts)
202
+ Source: [`packages/web/web/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/web/web/src/index.ts)
203
203
  <!-- END GENERATED cordis-surface -->
@@ -136,7 +136,7 @@ The top-level `dsh-tool-workflow` consumer projects display facts into its calli
136
136
 
137
137
  ## Cordis API
138
138
 
139
- 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).
139
+ 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).
140
140
 
141
141
  <a id="ctxworkflowengine--workflowengine-abstract-seam"></a>
142
142
 
@@ -154,7 +154,7 @@ Workflow Service Definition contract. Invalid requests throw before publication;
154
154
  abstract start(request: WorkflowStartRequest): WorkflowRun
155
155
  ```
156
156
 
157
- Source: [`packages/workflow/workflow/src/index.ts:157`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/workflow/workflow/src/index.ts)
157
+ Source: [`packages/workflow/workflow/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/workflow/workflow/src/index.ts)
158
158
 
159
159
  <a id="workflow-events"></a>
160
160
 
@@ -180,7 +180,7 @@ One `agent()` call settled (clean result, child failure, or run cancellation). P
180
180
  'workflow/agent-end'(info: WorkflowRunInfo, agent: WorkflowAgentEndInfo): void
181
181
  ```
182
182
 
183
- Source: [`packages/workflow/workflow/src/index.ts:79`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/workflow/workflow/src/index.ts)
183
+ Source: [`packages/workflow/workflow/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/workflow/workflow/src/index.ts)
184
184
 
185
185
  <a id="workflowagent-start--emit"></a>
186
186
 
@@ -201,7 +201,7 @@ One `agent()` call established a published child run. Paired with Events['workfl
201
201
  'workflow/agent-start'(info: WorkflowRunInfo, agent: WorkflowAgentInfo): void
202
202
  ```
203
203
 
204
- Source: [`packages/workflow/workflow/src/index.ts:68`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/workflow/workflow/src/index.ts)
204
+ Source: [`packages/workflow/workflow/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/workflow/workflow/src/index.ts)
205
205
 
206
206
  <a id="workflowend--emit"></a>
207
207
 
@@ -222,7 +222,7 @@ A workflow run settled (any stop reason). Fired when WorkflowRun.result resolves
222
222
  'workflow/end'(info: WorkflowRunInfo, result: WorkflowResultInfo): void
223
223
  ```
224
224
 
225
- Source: [`packages/workflow/workflow/src/index.ts:89`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/workflow/workflow/src/index.ts)
225
+ Source: [`packages/workflow/workflow/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/workflow/workflow/src/index.ts)
226
226
 
227
227
  <a id="workflowlog--emit"></a>
228
228
 
@@ -240,7 +240,7 @@ The script emitted a narration line (a `log(message)` call).
240
240
  'workflow/log'(info: WorkflowRunInfo, message: string): void
241
241
  ```
242
242
 
243
- Source: [`packages/workflow/workflow/src/index.ts:58`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/workflow/workflow/src/index.ts)
243
+ Source: [`packages/workflow/workflow/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/workflow/workflow/src/index.ts)
244
244
 
245
245
  <a id="workflowphase--emit"></a>
246
246
 
@@ -259,7 +259,7 @@ The script entered a phase (a `phase(title)` call) — progress grouping for obs
259
259
  'workflow/phase'(info: WorkflowRunInfo, title: string): void
260
260
  ```
261
261
 
262
- Source: [`packages/workflow/workflow/src/index.ts:51`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/workflow/workflow/src/index.ts)
262
+ Source: [`packages/workflow/workflow/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/workflow/workflow/src/index.ts)
263
263
 
264
264
  <a id="workflowstart--emit"></a>
265
265
 
@@ -277,5 +277,5 @@ A workflow run started — the script's meta block validated, the body about to
277
277
  'workflow/start'(info: WorkflowRunInfo): void
278
278
  ```
279
279
 
280
- Source: [`packages/workflow/workflow/src/index.ts:43`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/workflow/workflow/src/index.ts)
280
+ Source: [`packages/workflow/workflow/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/workflow/workflow/src/index.ts)
281
281
  <!-- END GENERATED cordis-surface -->
@@ -134,7 +134,7 @@ Sessions get their cwd at create time from whoever creates them, not from this r
134
134
 
135
135
  ## Cordis API
136
136
 
137
- 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).
137
+ 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).
138
138
 
139
139
  <a id="ctxdirectorypicker--directorypicker-abstract-seam"></a>
140
140
 
@@ -150,7 +150,7 @@ Abstract directory-picking service. Subclass, implement `capability()`, and load
150
150
  abstract capability(): DirectoryPickerCapability
151
151
  ```
152
152
 
153
- Source: [`packages/host/directory-picker/src/index.ts:131`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/host/directory-picker/src/index.ts)
153
+ Source: [`packages/host/directory-picker/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/host/directory-picker/src/index.ts)
154
154
 
155
155
  <a id="ctxworkspaceregistry--workspaceregistry"></a>
156
156
 
@@ -227,5 +227,5 @@ async resolveByPath(path: string): Promise<Workspace | undefined>
227
227
 
228
228
  Types: [SessionId](./core.md)
229
229
 
230
- Source: [`packages/workspace/workspace/src/index.ts:92`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/workspace/workspace/src/index.ts)
230
+ Source: [`packages/workspace/workspace/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/workspace/workspace/src/index.ts)
231
231
  <!-- END GENERATED cordis-surface -->
@@ -28,7 +28,7 @@ This table connects model-visible tool names to the plugin package and service s
28
28
  | `@deepseek-ai/dsh-tool-bash-persistent` | `bash` | `ctx.tools`, `ctx.terminals`, `an owning Agent at execution time` | `tool/call`, `PTY shell state`, `tool/result` | - | One owner-isolated persistent bash tool; deployment composition supplies the PTY backend and may override the model-facing environment description. |
29
29
  | `@deepseek-ai/dsh-tool-pwsh-persistent` | `pwsh` | `ctx.tools`, `ctx.terminals`, `an owning Agent at execution time` | `tool/call`, `PTY shell state`, `tool/result` | - | One owner-isolated persistent pwsh tool, the Windows counterpart of the persistent bash tool; deployment composition supplies a pwsh-dialect PTY backend and may override the model-facing environment description. |
30
30
  | `@deepseek-ai/dsh-tool-str-replace-editor` | `str_replace_editor` | `ctx.tools`, `ctx.fs` | `tool/call`, `fs/observed after view presence/absence, edit absence, or successful mutation`, `tool/result` | - | Standalone view/create/unique literal replace/line insert tool over the filesystem seam; it composes with any shell or terminal API. |
31
- | `@deepseek-ai/dsh-tool-fs` | `edit`, `read`, `read_image`, `write` | `ctx.tools`, `ctx.fs`, `ctx.systemPrompt`, `ctx.attachments (read_image registration)`, `ctx.llm + an image-capable route (read_image execution)` | `tool/call`, `fs/write-intent or fs/edit-intent for mutations`, `fs/observed after read presence/absence or successful file operation`, `durable attachment (read_image)`, `tool/result` | - | The read-before-write/edit policy is added by `@deepseek-ai/dsh-fs-observation-policy` (an `fs/*` event-gate plugin, no schema change); a deployment that loads these tools is expected to also load it. `read_image` is not registered without `ctx.attachments`; its schema is route-independent, and execution refuses unless the exact routed model declares image input. |
31
+ | `@deepseek-ai/dsh-tool-fs` | `edit`, `read`, `read_image`, `write` | `ctx.tools`, `ctx.fs`, `ctx.systemPrompt`, `ctx.attachments (image-tool registration)`, `ctx.llm + an image-capable route (image-tool execution)` | `tool/call`, `fs/write-intent or fs/edit-intent for mutations`, `fs/observed after read presence/absence or successful file operation`, `durable attachment (read_image)`, `tool/result` | - | The read-before-write/edit policy is added by `@deepseek-ai/dsh-fs-observation-policy` (an `fs/*` event-gate plugin, no schema change); a deployment that loads these tools is expected to also load it. The image tool is not registered without `ctx.attachments`; its schema is route-independent, and execution refuses unless the exact routed model declares image input. |
32
32
  | `@deepseek-ai/dsh-tool-fs-search` | `glob`, `grep` | `ctx.tools`, `ctx.subprocess`, `ctx.systemPrompt` | `tool/call`, `tool/result` | - | glob and grep are unconditional discovery tools that spawn the packaged ripgrep binary (`@vscode/ripgrep`) through ctx.subprocess as ordinary foreground calls (never background jobs) — no host `rg` install and no shell layer. The catalog uses `sampleOverCapGlobResults: true`; deployments must choose that behavior explicitly. Capped results save the complete formatted list through the optional ctx.spillStore backend; returned locators are follow-up-readable/searchable when the backend exposes local paths in co-located deployments. |
33
33
  | `@deepseek-ai/dsh-tool-terminal` | `terminal_close`, `terminal_list`, `terminal_open`, `terminal_read`, `terminal_send`, `terminal_signal` | `ctx.tools`, `ctx.terminals`, `ctx.systemPrompt`, `ctx.jobs at call time for run_in_background` | `tool/call`, `tool/result` | - | The six terminal tools are opt-in and complement one-shot shell/filesystem tools. `terminal_send(run_in_background: true)` registers with `ctx.jobs`; TUI, named key sequences, BEL, resize, auto-start, and cross-agent sharing are absent from the schema. |
34
34
  | `@deepseek-ai/dsh-tool-goal` | `create_goal`, `get_goal`, `update_goal` | `ctx.tools`, `ctx.agents`, `ctx.goals`, `ctx.systemPrompt`, `a calling Agent in an authorized open turn` | `tool/call`, `goal/change for mutations`, `tool/result` | - | create, edit, pause, and resume require direct-human root authority; complete and blocked also accept the exact current goal round. The default blocked lower bound is three admitted rounds. |
@@ -699,7 +699,7 @@ Source: [`packages/fs/tool-fs/src/index.ts`](https://github.com/deepseek-ai/deep
699
699
 
700
700
  ### `read_image`
701
701
 
702
- Read a PNG/JPEG/WebP/GIF file and return the image itself. Requires the current model to accept image input.
702
+ Read a PNG/JPEG/WebP/GIF file and return the image itself. Harness validates and downscales large supported images before the next model request, so use this tool directly instead of installing image libraries or creating thumbnails merely to inspect an image. Independent files may be read concurrently in small batches. Requires the current model to accept image input.
703
703
 
704
704
  ```json
705
705
  {
@@ -744,7 +744,7 @@ Create or fully replace a UTF-8 text file.
744
744
 
745
745
  Source: [`packages/fs/tool-fs/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/fs/tool-fs/src/index.ts)
746
746
 
747
- The read-before-write/edit policy is added by `@deepseek-ai/dsh-fs-observation-policy` (an `fs/*` event-gate plugin, no schema change); a deployment that loads these tools is expected to also load it. `read_image` is not registered without `ctx.attachments`; its schema is route-independent, and execution refuses unless the exact routed model declares image input.
747
+ The read-before-write/edit policy is added by `@deepseek-ai/dsh-fs-observation-policy` (an `fs/*` event-gate plugin, no schema change); a deployment that loads these tools is expected to also load it. The image tool is not registered without `ctx.attachments`; its schema is route-independent, and execution refuses unless the exact routed model declares image input.
748
748
 
749
749
  <a id="deepseek-aidsh-tool-fs-search"></a>
750
750
 
@@ -4,7 +4,7 @@ editSource: "docs/user/guide/providers.zh.md"
4
4
 
5
5
  # 配置模型
6
6
 
7
- 本指南假定你已按照[根 README](https://github.com/deepseek-ai/deepseek-harness/blob/master/README.md#run)启动 Web UI。模型变更会在下一次请求时生效,不需要重启服务器。
7
+ 本指南假定你已按照[根 README](https://github.com/deepseek-ai/deepseek-harness/blob/master/README.zh.md#run)启动 Web UI。模型变更会在下一次请求时生效,不需要重启服务器。
8
8
 
9
9
  ## 配置 DeepSeek
10
10
 
@@ -136,4 +136,4 @@ llm-pi-ai:
136
136
 
137
137
  ## 进阶配置
138
138
 
139
- 自动生成的[插件配置目录](../reference/config-catalog.md)列出每个插件的所有受支持字段与默认值;[`dsh-llm-pi-ai`](../reference/config-catalog.md#deepseek-aidsh-llm-pi-ai) 就是本页所配置的那个提供方段落。[`dsh-llm-pi-ai`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/llm/llm-pi-ai/README.md) 和 [`dsh-llm-deepseek`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/llm/llm-deepseek/README.md) 参考文档负责直接 `settings.yaml` 配置、目录解析、推理控制、凭据与适配器错误。
139
+ 自动生成的[插件配置目录](../reference/config-catalog.md)列出每个插件的所有受支持字段与默认值;[`dsh-llm-pi-ai`](../reference/config-catalog.md#deepseek-aidsh-llm-pi-ai) 就是本页所配置的那个提供方段落。[`dsh-llm-pi-ai`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/llm/llm-pi-ai/README.zh.md) 和 [`dsh-llm-deepseek`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/llm/llm-deepseek/README.zh.md) 参考文档负责直接 `settings.yaml` 配置、目录解析、推理控制、凭据与适配器错误。
@@ -26,7 +26,7 @@ python -m venv .venv
26
26
  python -m pip install deepseek-harness-sdk
27
27
  ```
28
28
 
29
- 安装后的运行时不需要系统提供 Node.js。需要从源码构建运行时或 wheel 包的仓库贡献者应使用 [Python 贡献者工作流](https://github.com/deepseek-ai/deepseek-harness/blob/master/python/development.md)。
29
+ 安装后的运行时不需要系统提供 Node.js。需要从源码构建运行时或 wheel 包的仓库贡献者应使用 [Python 贡献者工作流](https://github.com/deepseek-ai/deepseek-harness/blob/master/python/development.zh.md)。
30
30
 
31
31
  ## 运行仓库内置示例
32
32
 
@@ -103,4 +103,4 @@ print(result.final_response)
103
103
 
104
104
  该组合使用 `danger-full-access`。只能在可丢弃的 checkout 或容器内运行:Bash 与编辑器可以修改运行时进程有权访问的任何路径。持久 PTY 后端需要 POSIX 终端环境,因此该组合不支持 Windows agent。
105
105
 
106
- 准确的组合内容归 [`jsonrpc-agent` 示例参考](https://github.com/deepseek-ai/deepseek-harness/blob/master/examples/jsonrpc-agent/README.md)所有。[Python SDK 参考](https://github.com/deepseek-ai/deepseek-harness/blob/master/python/sdk/README.md)介绍生命周期、结果、通知、运行时选择和配置;[Cordis primer](../reference/cordis-primer.md)介绍组合语法。
106
+ 准确的组合内容归 [`jsonrpc-agent` 示例参考](https://github.com/deepseek-ai/deepseek-harness/blob/master/examples/jsonrpc-agent/README.zh.md)所有。[Python SDK 参考](https://github.com/deepseek-ai/deepseek-harness/blob/master/python/sdk/README.zh.md)介绍生命周期、结果、通知、运行时选择和配置;[Cordis primer](../reference/cordis-primer.md)介绍组合语法。
@@ -4,7 +4,7 @@ editSource: "docs/user/guide/index.zh.md"
4
4
 
5
5
  # 使用 Web UI
6
6
 
7
- 请先按照[根目录 README](https://github.com/deepseek-ai/deepseek-harness/blob/master/README.md#run) 中的说明启动 Web UI;命令会打印其访问地址。本指南从服务器已经运行的状态开始。`dsh` 进程会把启动时所在的目录作为默认文件系统位置;全新的 Web UI 则不会选中任何工作区,你需要添加一个工作区。
7
+ 请先按照[根目录 README](https://github.com/deepseek-ai/deepseek-harness/blob/master/README.zh.md#run) 中的说明启动 Web UI;命令会打印其访问地址。本指南从服务器已经运行的状态开始。`dsh` 进程会把启动时所在的目录作为默认文件系统位置;全新的 Web UI 则不会选中任何工作区,你需要添加一个工作区。
8
8
 
9
9
  ## 配置模型
10
10
 
@@ -28,5 +28,5 @@ Agent(智能体)可以读取和编辑工作区文件、运行命令、委派
28
28
 
29
29
  - [配置模型](./providers.md)
30
30
  - [使用 Python SDK](./python-sdk.md)
31
- - [使用其他 CLI 模式](https://github.com/deepseek-ai/deepseek-harness/blob/master/apps/cli/README.md)
31
+ - [使用其他 CLI 模式](https://github.com/deepseek-ai/deepseek-harness/blob/master/apps/cli/README.zh.md)
32
32
  - [开发插件](../develop/basic/index.md)
@@ -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) | - | 各后端持久化同一套 SessionEvent 词汇;应用在组合时选择后端。 |
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` | - | 插件注册命名空间 schema 并解析分层值;提供方存储原始文档。LLM(大语言模型)适配器在用户分区下将其入口配置注册为组合基础;Web 网关提供经过脱敏的分层描述符,并写入用户层。 |
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` | - | 配置携带对机密信息的引用;提供方拥有实际值。消费方按操作解析,因此轮换后的凭据会在紧接着的下一次请求中生效;Web 网关提供不含实际值的视图和只写存储。 |
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) | - | flow 由知道如何取得某份凭据的插件注册,并以其写入的记录为键;seam 拥有这段对话与"每个键同时只跑一次尝试"的生命周期,而非协议本身。 |
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) | - | - | 该 seam 捕获会话记录、进行脱敏并交给一个后端;没有其他组件消费该服务,其输出会离开当前进程。 |
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) | - | 各后端以不同名称并列注册;数据形态(领域优先)挂载到枢纽上,并将类型化操作转换为不透明的 KV 单元原语。 |
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) | - | 等待所有已配置后端就绪,然后将领域形态发布为一个受生命周期约束的服务,用于类型化持久状态。 |