dsh-plugin-dev-kb 1.1.0 → 1.3.0

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 (121) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.en.md +14 -8
  3. package/README.md +14 -8
  4. package/docs/banner.svg +25 -0
  5. package/kb/INDEX.md +6 -2
  6. package/kb/README.md +4 -4
  7. package/kb/extra/AGENTS.md +2 -2
  8. package/kb/extra/cookbook/adding-a-session-format-version.md +109 -0
  9. package/kb/extra/cookbook/adding-a-session-format-version.zh.md +109 -0
  10. package/kb/extra/cookbook/adding-a-vendored-package.md +1 -1
  11. package/kb/extra/cookbook/adding-a-vendored-package.zh.md +1 -1
  12. package/kb/extra/cookbook/responding-to-pr-review-on-a-stack.md +1 -1
  13. package/kb/extra/cookbook/responding-to-pr-review-on-a-stack.zh.md +1 -1
  14. package/kb/extra/deepseek-llm-api-wire-extensions.md +2 -2
  15. package/kb/extra/deepseek-llm-api-wire-extensions.zh.md +2 -2
  16. package/kb/extra/development.md +13 -3
  17. package/kb/extra/development.zh.md +13 -3
  18. package/kb/extra/event-producer-consumer.md +33 -31
  19. package/kb/extra/event-producer-consumer.zh.md +34 -32
  20. package/kb/extra/i18n/README.md +2 -1
  21. package/kb/extra/i18n/README.zh.md +3 -2
  22. package/kb/extra/i18n/translation-prompt.md +1 -1
  23. package/kb/extra/module-graph.md +62 -24
  24. package/kb/extra/module-graph.zh.md +62 -24
  25. package/kb/extra/rescope.md +1 -1
  26. package/kb/extra/rescope.zh.md +1 -1
  27. package/kb/extra/session-format-status.md +47 -0
  28. package/kb/extra/session-format-status.zh.md +47 -0
  29. package/kb/extra/subsystems/agent-team.md +1 -1
  30. package/kb/extra/subsystems/agent-team.zh.md +1 -1
  31. package/kb/extra/subsystems/feedback.md +164 -30
  32. package/kb/extra/subsystems/feedback.zh.md +164 -30
  33. package/kb/extra/testing.md +4 -3
  34. package/kb/extra/testing.zh.md +4 -3
  35. package/kb/extra/web-styling.md +1 -0
  36. package/kb/extra/web-styling.zh.md +1 -0
  37. package/kb/meta/search-index.json +151 -103
  38. package/kb/meta/site-pages.txt +188 -184
  39. package/kb/meta/source.json +5 -5
  40. package/kb/meta/topics.md +2 -2
  41. package/kb/site/develop/basic/publish.md +1 -1
  42. package/kb/site/en/develop/basic/publish.md +1 -1
  43. package/kb/site/en/guide/providers.md +1 -1
  44. package/kb/site/en/guide/python-sdk.md +19 -3
  45. package/kb/site/en/reference/agent-lifecycle.md +12 -5
  46. package/kb/site/en/reference/capability-seams.md +10 -3
  47. package/kb/site/en/reference/config-catalog.md +173 -42
  48. package/kb/site/en/reference/cookbook/adding-a-tool.md +1 -1
  49. package/kb/site/en/reference/cookbook/extension-cookbook.md +1 -1
  50. package/kb/site/en/reference/index.md +18 -8
  51. package/kb/site/en/reference/persistence-catalog.md +121 -48
  52. package/kb/site/en/reference/subsystems/approval.md +1 -1
  53. package/kb/site/en/reference/subsystems/client-modules.md +9 -0
  54. package/kb/site/en/reference/subsystems/client-resources.md +94 -0
  55. package/kb/site/en/reference/subsystems/compaction.md +1 -1
  56. package/kb/site/en/reference/subsystems/core.md +79 -16
  57. package/kb/site/en/reference/subsystems/filesystem.md +15 -0
  58. package/kb/site/en/reference/subsystems/goal.md +37 -1
  59. package/kb/site/en/reference/subsystems/index.md +2 -0
  60. package/kb/site/en/reference/subsystems/invariants.md +1 -1
  61. package/kb/site/en/reference/subsystems/llm-streaming.md +20 -10
  62. package/kb/site/en/reference/subsystems/lsp.md +1 -1
  63. package/kb/site/en/reference/subsystems/persistence.md +36 -15
  64. package/kb/site/en/reference/subsystems/schedule.md +1 -1
  65. package/kb/site/en/reference/subsystems/scope.md +1 -1
  66. package/kb/site/en/reference/subsystems/session-reference.md +4 -0
  67. package/kb/site/en/reference/subsystems/session-telemetry.md +22 -6
  68. package/kb/site/en/reference/subsystems/session.md +64 -42
  69. package/kb/site/en/reference/subsystems/shell.md +9 -6
  70. package/kb/site/en/reference/subsystems/sidebar-right.md +151 -0
  71. package/kb/site/en/reference/subsystems/slots.md +41 -33
  72. package/kb/site/en/reference/subsystems/spill.md +13 -6
  73. package/kb/site/en/reference/subsystems/subagent.md +20 -13
  74. package/kb/site/en/reference/subsystems/subprocess.md +25 -26
  75. package/kb/site/en/reference/subsystems/system-prompt.md +3 -1
  76. package/kb/site/en/reference/subsystems/token-meter.md +2 -1
  77. package/kb/site/en/reference/subsystems/tools.md +5 -5
  78. package/kb/site/en/reference/subsystems/workspace.md +80 -1
  79. package/kb/site/en/reference/tool-catalog.md +46 -2
  80. package/kb/site/en/reference/tool-execution-pipeline.md +2 -2
  81. package/kb/site/guide/providers.md +1 -1
  82. package/kb/site/guide/python-sdk.md +19 -3
  83. package/kb/site/reference/agent-lifecycle.md +12 -5
  84. package/kb/site/reference/capability-seams.md +10 -3
  85. package/kb/site/reference/config-catalog.md +173 -42
  86. package/kb/site/reference/cookbook/adding-a-tool.md +1 -1
  87. package/kb/site/reference/cookbook/extension-cookbook.md +1 -1
  88. package/kb/site/reference/index.md +18 -8
  89. package/kb/site/reference/persistence-catalog.md +127 -54
  90. package/kb/site/reference/subsystems/approval.md +1 -1
  91. package/kb/site/reference/subsystems/client-modules.md +9 -0
  92. package/kb/site/reference/subsystems/client-resources.md +94 -0
  93. package/kb/site/reference/subsystems/compaction.md +1 -1
  94. package/kb/site/reference/subsystems/core.md +79 -16
  95. package/kb/site/reference/subsystems/filesystem.md +15 -0
  96. package/kb/site/reference/subsystems/goal.md +37 -1
  97. package/kb/site/reference/subsystems/index.md +14 -12
  98. package/kb/site/reference/subsystems/invariants.md +1 -1
  99. package/kb/site/reference/subsystems/llm-streaming.md +20 -10
  100. package/kb/site/reference/subsystems/lsp.md +1 -1
  101. package/kb/site/reference/subsystems/persistence.md +36 -15
  102. package/kb/site/reference/subsystems/schedule.md +1 -1
  103. package/kb/site/reference/subsystems/scope.md +1 -1
  104. package/kb/site/reference/subsystems/session-reference.md +4 -0
  105. package/kb/site/reference/subsystems/session-telemetry.md +22 -6
  106. package/kb/site/reference/subsystems/session.md +64 -42
  107. package/kb/site/reference/subsystems/shell.md +9 -6
  108. package/kb/site/reference/subsystems/sidebar-right.md +151 -0
  109. package/kb/site/reference/subsystems/slots.md +41 -33
  110. package/kb/site/reference/subsystems/spill.md +13 -6
  111. package/kb/site/reference/subsystems/subagent.md +20 -13
  112. package/kb/site/reference/subsystems/subprocess.md +25 -26
  113. package/kb/site/reference/subsystems/system-prompt.md +3 -1
  114. package/kb/site/reference/subsystems/token-meter.md +2 -1
  115. package/kb/site/reference/subsystems/tools.md +5 -5
  116. package/kb/site/reference/subsystems/workspace.md +80 -1
  117. package/kb/site/reference/tool-catalog.md +46 -2
  118. package/kb/site/reference/tool-execution-pipeline.md +2 -2
  119. package/lib/index.js +25 -44
  120. package/package.json +3 -2
  121. package/skills/dsh-plugin-dev-kb.md +3 -3
@@ -217,7 +217,7 @@ export interface Config {
217
217
  }
218
218
  ```
219
219
 
220
- Source: [`packages/api/session-controller/src/index.ts:69`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/api/session-controller/src/index.ts)
220
+ Source: [`packages/api/session-controller/src/index.ts:71`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/api/session-controller/src/index.ts)
221
221
 
222
222
  <a id="deepseek-aidsh-api-settings-controller"></a>
223
223
 
@@ -233,6 +233,34 @@ export interface Config {
233
233
 
234
234
  Source: [`packages/api/settings-controller/src/index.ts:36`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/api/settings-controller/src/index.ts)
235
235
 
236
+ <a id="deepseek-aidsh-api-workspace-files"></a>
237
+
238
+ ## `@deepseek-ai/dsh-api-workspace-files`
239
+
240
+ Requires: `fs` · `sandboxPolicy` · `sessions` · `typert`
241
+
242
+ ```ts config-catalog
243
+ /** Deployment caps on one page or one listing. */
244
+ export interface Config {
245
+ /**
246
+ * Inclusive byte cap on one page's text and on one byte window.
247
+ *
248
+ * A page above this fails; it is not shortened, because a silently cut page
249
+ * reads as the whole page. A byte window asking for more is refused the same
250
+ * way. The file itself has no size cap: a caller pages through it.
251
+ */
252
+ readonly maxBytes: number
253
+ /** Inclusive byte cap on a complete-file read; larger files are refused, never truncated. */
254
+ readonly maxFileBytes: number
255
+ /** Default and largest page size in lines; a request asking for more is refused. */
256
+ readonly maxLines: number
257
+ /** Cap on returned directory entries; the rest is dropped and reported cut. */
258
+ readonly maxEntries: number
259
+ }
260
+ ```
261
+
262
+ Source: [`packages/api/workspace-files/src/index.ts:69`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/api/workspace-files/src/index.ts)
263
+
236
264
  <a id="deepseek-aidsh-attachment-local"></a>
237
265
 
238
266
  ## `@deepseek-ai/dsh-attachment-local`
@@ -313,17 +341,19 @@ export type Config = LocalConfig
313
341
 
314
342
  Depends on: [`LocalConfig`](#deepseek-aidsh-bash-local)
315
343
 
316
- Source: [`packages/shell/bash-sandbox/src/index.ts:35`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/shell/bash-sandbox/src/index.ts)
344
+ Source: [`packages/shell/bash-sandbox/src/index.ts:36`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/shell/bash-sandbox/src/index.ts)
317
345
 
318
346
  <a id="deepseek-aidsh-client-connection"></a>
319
347
 
320
348
  ## `@deepseek-ai/dsh-client-connection`
321
349
 
322
- Requires: `webServer` · `credentials`
350
+ Requires: `credentials`
323
351
 
324
352
  ```ts config-catalog
325
- /** Plugin config: the deployment's non-loopback serving authorities. */
353
+ /** Browser authentication, request limits, and connection recovery configuration. */
326
354
  export interface ConnectionConfig {
355
+ /** Browser recovery timing, injected into each served page. */
356
+ recovery?: ConnectionRecoveryConfig
327
357
  /**
328
358
  * Authorities this deployment serves beyond loopback: exact `host:port`, or
329
359
  * port-less `host` matching any port. The /api trust fence refuses any
@@ -338,9 +368,26 @@ export interface ConnectionConfig {
338
368
  /** Maximum buffered JSON body for every `/api` request. Default: 300 MiB. */
339
369
  maxRequestBodyBytes?: number
340
370
  }
371
+
372
+ /** Timing for generation readiness and automatic reconnection. */
373
+ export interface ConnectionRecoveryConfig {
374
+ /** First-retry delay cap in ms; actual delay is 50–100% of the cap. Default: 500. */
375
+ backoffBaseMs?: number
376
+ /** Finite growth factor of at least 1 per failed attempt; 1 keeps a fixed cap. Default: 2. */
377
+ backoffFactor?: number
378
+ /** Maximum retry delay cap in ms; retries continue at this cap. Default: 10000. */
379
+ backoffMaxMs?: number
380
+ /**
381
+ * Delay before reporting a slow handshake, without cancelling it. Default: 3000.
382
+ * Omitted when readiness, failure, cancellation, or the hard deadline occurs first.
383
+ */
384
+ generationReadyWarnMs?: number
385
+ /** Deadline in ms for readiness, including physical connection setup. Default: 15000. */
386
+ generationReadyTimeoutMs?: number
387
+ }
341
388
  ```
342
389
 
343
- Source: [`packages/client/connection/src/index.ts:71`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/connection/src/index.ts)
390
+ Source: [`packages/client/connection/src/index.ts:72`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/connection/src/index.ts)
344
391
 
345
392
  <a id="deepseek-aidsh-client-hmr"></a>
346
393
 
@@ -729,7 +776,7 @@ export interface Config {
729
776
  }
730
777
  ```
731
778
 
732
- Source: [`packages/fs/fs-local/src/index.ts:41`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/fs/fs-local/src/index.ts)
779
+ Source: [`packages/fs/fs-local/src/index.ts:42`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/fs/fs-local/src/index.ts)
733
780
 
734
781
  <a id="deepseek-aidsh-fs-sandbox"></a>
735
782
 
@@ -819,7 +866,7 @@ export interface Config {
819
866
  }
820
867
  ```
821
868
 
822
- Source: [`packages/hooks/hooks-claude-code/src/index.ts:45`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/hooks/hooks-claude-code/src/index.ts)
869
+ Source: [`packages/hooks/hooks-claude-code/src/index.ts:44`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/hooks/hooks-claude-code/src/index.ts)
823
870
 
824
871
  <a id="deepseek-aidsh-hooks-codex"></a>
825
872
 
@@ -846,7 +893,7 @@ export interface Config {
846
893
  }
847
894
  ```
848
895
 
849
- Source: [`packages/hooks/hooks-codex/src/index.ts:44`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/hooks/hooks-codex/src/index.ts)
896
+ Source: [`packages/hooks/hooks-codex/src/index.ts:43`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/hooks/hooks-codex/src/index.ts)
850
897
 
851
898
  <a id="deepseek-aidsh-host-directory-picker-browse"></a>
852
899
 
@@ -878,6 +925,37 @@ export interface Config {
878
925
 
879
926
  Source: [`packages/host/frontend-static/src/index.ts:30`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/host/frontend-static/src/index.ts)
880
927
 
928
+ <a id="deepseek-aidsh-host-open-in-app"></a>
929
+
930
+ ## `@deepseek-ai/dsh-host-open-in-app`
931
+
932
+ Requires: `webServer` · `connection` · `subprocess`
933
+
934
+ ```ts config-catalog
935
+ /** Open-in-app host configuration. */
936
+ export interface Config {
937
+ /**
938
+ * Per-command deadline in milliseconds for catalog-resolution host
939
+ * commands (`xcode-select`, the Windows registry reads).
940
+ */
941
+ readonly probeTimeoutMs: number
942
+ /**
943
+ * Per-command deadline in milliseconds for icon-extraction host commands
944
+ * (`plutil`/`sips` on macOS, the PowerShell extraction on Windows).
945
+ */
946
+ readonly iconTimeoutMs: number
947
+ /**
948
+ * Early-failure watch window per launch, in milliseconds: a launcher still
949
+ * running when the window closes counts as launched and keeps running, so
950
+ * this bounds how long the open route holds a successful launch, not how
951
+ * long an application may live.
952
+ */
953
+ readonly launchWatchMs: number
954
+ }
955
+ ```
956
+
957
+ Source: [`packages/host/open-in-app/src/index.ts:50`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/host/open-in-app/src/index.ts)
958
+
881
959
  <a id="deepseek-aidsh-host-webserver"></a>
882
960
 
883
961
  ## `@deepseek-ai/dsh-host-webserver`
@@ -963,7 +1041,7 @@ export interface Config {
963
1041
  maxTokens?: number
964
1042
  /** Positive context capacity used when the selected model has no exact value (default 1,000,000). */
965
1043
  defaultContextWindow?: number
966
- /** Advisory models shown by discovery consumers; defaults to V4 Flash, V4 Pro, and V4 Flash Vision Exp. */
1044
+ /** Advisory models shown by discovery consumers; defaults to V41 Flash, V4 Flash, V4 Pro, and V4 Flash Vision Exp. */
967
1045
  models?: DeepSeekCatalogModel[]
968
1046
  /** Maximum provider idle time while one stream read is outstanding (default five minutes). */
969
1047
  streamIdleTimeoutMs?: number
@@ -1009,12 +1087,18 @@ export interface DeepSeekCatalogModel {
1009
1087
  imagePixelBudget?: number | 'low'
1010
1088
  /** Encoded-byte target for one deterministic request preview; the smallest quality-ladder output is used when no quality fits. */
1011
1089
  imageMaxBytes?: number
1090
+ /**
1091
+ * `'in-history'` declares that the endpoint reads the latest `system`
1092
+ * message at any position of the conversation as the complete effective
1093
+ * system prompt; omission means only a leading system message is read.
1094
+ */
1095
+ systemPromptUpdate?: SystemPromptUpdate
1012
1096
  }
1013
1097
  ```
1014
1098
 
1015
- 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)
1099
+ 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) · [`SystemPromptUpdate`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/llm/llm/src/index.ts)
1016
1100
 
1017
- Source: [`packages/llm/llm-deepseek/src/index.ts:125`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/llm/llm-deepseek/src/index.ts)
1101
+ Source: [`packages/llm/llm-deepseek/src/index.ts:134`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/llm/llm-deepseek/src/index.ts)
1018
1102
 
1019
1103
  <a id="deepseek-aidsh-llm-pi-ai"></a>
1020
1104
 
@@ -1233,8 +1317,14 @@ export interface PiAiCompatProfile {
1233
1317
  chatTemplateKwargs?: NonNullable<OpenAICompletionsCompat['chatTemplateKwargs']>
1234
1318
  /** Arguments sent as `chat_template_args` under the `baseten` thinking format; `openai-completions`. */
1235
1319
  chatTemplateArgs?: NonNullable<OpenAICompletionsCompat['chatTemplateArgs']>
1236
- /** Whether the endpoint accepts `thinking_token_budget` to cap vLLM reasoning; `openai-completions`. */
1320
+ /** Alias for `thinkingTokenBudgetField: "thinking_token_budget"`; an explicit field wins. `openai-completions`. */
1237
1321
  supportsThinkingTokenBudget?: boolean
1322
+ /** Request field carrying the reasoning budget from `thinkingBudgets`; omitted unless configured. `openai-completions`. */
1323
+ thinkingTokenBudgetField?: PiAiThinkingTokenBudgetField
1324
+ /** vLLM scheduler `priority`; lower runs earlier, and the server must enable priority scheduling. Omitted unless configured. */
1325
+ vllmPriority?: number
1326
+ /** Whether `openai-responses` accepts `max_output_tokens`; `false` omits it. Azure and Codex ignore this shared compat field. */
1327
+ supportsMaxOutputTokens?: boolean
1238
1328
  /**
1239
1329
  * Whether the endpoint accepts `strict` in tool definitions;
1240
1330
  * `openai-completions`, the three Responses protocols, `bedrock-converse-stream`.
@@ -1276,11 +1366,14 @@ export type PiAiReasoningEfforts = Partial<Record<ModelThinkingLevel, string | n
1276
1366
 
1277
1367
  /** One reasoning-dispatch wire format a profile may name. */
1278
1368
  export type PiAiThinkingFormat = NonNullable<OpenAICompletionsCompat['thinkingFormat']>
1369
+
1370
+ /** The reasoning-budget field spellings pi-ai accepts. */
1371
+ export type PiAiThinkingTokenBudgetField = NonNullable<OpenAICompletionsCompat['thinkingTokenBudgetField']>
1279
1372
  ```
1280
1373
 
1281
1374
  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`)
1282
1375
 
1283
- Source: [`packages/llm/llm-pi-ai/src/config.ts:216`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/llm/llm-pi-ai/src/config.ts)
1376
+ Source: [`packages/llm/llm-pi-ai/src/config.ts:221`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/llm/llm-pi-ai/src/config.ts)
1284
1377
 
1285
1378
  <a id="deepseek-aidsh-llm-replay"></a>
1286
1379
 
@@ -1352,12 +1445,14 @@ export interface ReplayModelConfig {
1352
1445
  * {@link reasoningEfforts} or call resolution rejects the route.
1353
1446
  */
1354
1447
  defaultReasoningEffort?: string
1448
+ /** Optional in-history system prompt replacement for a keyless replay route. */
1449
+ systemPromptUpdate?: SystemPromptUpdate
1355
1450
  }
1356
1451
  ```
1357
1452
 
1358
- 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)
1453
+ 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) · [`SystemPromptUpdate`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/llm/llm/src/index.ts)
1359
1454
 
1360
- Source: [`packages/test-support/llm-replay/src/index.ts:1294`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/test-support/llm-replay/src/index.ts)
1455
+ Source: [`packages/test-support/llm-replay/src/index.ts:1123`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/test-support/llm-replay/src/index.ts)
1361
1456
 
1362
1457
  <a id="deepseek-aidsh-llm-retry"></a>
1363
1458
 
@@ -1491,7 +1586,7 @@ Source: [`packages/mcp/mcp-client/src/index.ts:98`](https://github.com/deepseek-
1491
1586
 
1492
1587
  ## `@deepseek-ai/dsh-message-feedback`
1493
1588
 
1494
- Requires: `storageDomain` · `sessionPersistence` · `sessions`
1589
+ Requires: `sessionPersistence` · `sessions`
1495
1590
 
1496
1591
  ```ts config-catalog
1497
1592
  /** Required deployment policy for optional notes. */
@@ -1501,7 +1596,7 @@ export interface Config {
1501
1596
  }
1502
1597
  ```
1503
1598
 
1504
- Source: [`packages/feedback/message-feedback/src/index.ts:50`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/feedback/message-feedback/src/index.ts)
1599
+ Source: [`packages/feedback/message-feedback/src/index.ts:40`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/feedback/message-feedback/src/index.ts)
1505
1600
 
1506
1601
  <a id="deepseek-aidsh-permission-presets"></a>
1507
1602
 
@@ -1552,12 +1647,17 @@ Requires: `systemPrompt`
1552
1647
  /** Plugin config: the persona text this composition contributes. */
1553
1648
  export interface Config {
1554
1649
  /**
1555
- * Persona prose rendered as the `deployment:persona` section. A template:
1650
+ * Persona prose rendered as the `deployment:persona-prefix` section. A template:
1556
1651
  * complete `{{…}}` groups interpolate strictly against registered prompt
1557
1652
  * variables. Empty text drops the section at render, matching the registry.
1558
1653
  */
1559
- text: string
1560
- /** Make this persona the complete system prompt, suppressing every other section. */
1654
+ prefix: string
1655
+ /**
1656
+ * Persona suffix template rendered after first-party guidance. Omitted or empty
1657
+ * text shadows the deployment suffix away; interpolation is strict.
1658
+ */
1659
+ suffix?: string
1660
+ /** Make the prefix the complete system prompt, suppressing the suffix and every other section. */
1561
1661
  complete?: boolean
1562
1662
  /** Suppress dynamic runtime-context snapshots for this persona's agent scope. */
1563
1663
  includeRuntimeContext?: boolean
@@ -1802,7 +1902,7 @@ export interface Config {
1802
1902
  }
1803
1903
  ```
1804
1904
 
1805
- Source: [`packages/session/session-log-deepseek/src/index.ts:36`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/session/session-log-deepseek/src/index.ts)
1905
+ Source: [`packages/session/session-log-deepseek/src/index.ts:38`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/session/session-log-deepseek/src/index.ts)
1806
1906
 
1807
1907
  <a id="deepseek-aidsh-session-log-export"></a>
1808
1908
 
@@ -1846,7 +1946,7 @@ export interface Config {
1846
1946
  export type JsonlCompression = 'zstd' | 'none'
1847
1947
  ```
1848
1948
 
1849
- Source: [`packages/session/session-persistence-jsonl/src/index.ts:86`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/session/session-persistence-jsonl/src/index.ts)
1949
+ Source: [`packages/session/session-persistence-jsonl/src/index.ts:88`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/session/session-persistence-jsonl/src/index.ts)
1850
1950
 
1851
1951
  <a id="deepseek-aidsh-session-projection-cache"></a>
1852
1952
 
@@ -1933,8 +2033,10 @@ export interface Config {
1933
2033
  maxReferences?: number
1934
2034
  /** Default host candidate-list limit. */
1935
2035
  candidateLimit?: number
1936
- /** Maximum rendered UTF-8 bytes for one source snapshot. */
2036
+ /** Explicit maximum rendered UTF-8 bytes per source; absent uses the model-relative budget with a 64 KiB floor. */
1937
2037
  maxReferenceBytes?: number
2038
+ /** Fraction of the model context window per source, estimated at four bytes per token; between zero and one. */
2039
+ referenceContextFraction?: number
1938
2040
  }
1939
2041
  ```
1940
2042
 
@@ -1953,7 +2055,7 @@ Requires: `sessions`
1953
2055
  * and shutdown deadline at plugin load; `DISABLED` reads neither.
1954
2056
  */
1955
2057
  export interface Config {
1956
- /** Sharing policy; defaults to local-only `DISABLED` behavior. */
2058
+ /** Defaults to `FEEDBACK_ONLY`: capture session history only when feedback is explicitly submitted. */
1957
2059
  mode?: SessionTelemetryMode
1958
2060
  /**
1959
2061
  * Passed verbatim to the SDK's OTLP/HTTP log exporter — the complete
@@ -1976,7 +2078,6 @@ export interface Config {
1976
2078
 
1977
2079
  /** Session-sharing policy selected by {@link Config.mode}. */
1978
2080
  export enum SessionTelemetryMode {
1979
- FULL = 'FULL',
1980
2081
  FEEDBACK_ONLY = 'FEEDBACK_ONLY',
1981
2082
  DISABLED = 'DISABLED',
1982
2083
  }
@@ -1984,7 +2085,7 @@ export enum SessionTelemetryMode {
1984
2085
 
1985
2086
  Depends on: `BatchLogRecordProcessorOptions` (`@opentelemetry/sdk-logs`) · `OTLPExporterNodeConfigBase` (`@opentelemetry/otlp-exporter-base`)
1986
2087
 
1987
- Source: [`packages/session/session-telemetry-otel/src/index.ts:91`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/session/session-telemetry-otel/src/index.ts)
2088
+ Source: [`packages/session/session-telemetry-otel/src/index.ts:100`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/session/session-telemetry-otel/src/index.ts)
1988
2089
 
1989
2090
  <a id="deepseek-aidsh-session-title"></a>
1990
2091
 
@@ -2169,7 +2270,7 @@ export interface Config {
2169
2270
  }
2170
2271
  ```
2171
2272
 
2172
- Source: [`packages/spill/spill-policy/src/index.ts:60`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/spill/spill-policy/src/index.ts)
2273
+ Source: [`packages/spill/spill-policy/src/index.ts:61`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/spill/spill-policy/src/index.ts)
2173
2274
 
2174
2275
  <a id="deepseek-aidsh-storage-domain"></a>
2175
2276
 
@@ -2333,7 +2434,7 @@ export interface Config {
2333
2434
  * `bypassPermissions` explicitly skips permission checks.
2334
2435
  */
2335
2436
  permissionMode?: ClaudeCodePermissionMode
2336
- /** Grace in milliseconds for Claude Code process-tree termination. */
2437
+ /** Grace in milliseconds between Claude Code managed-range termination tiers. */
2337
2438
  disposeGraceMs?: number
2338
2439
  }
2339
2440
 
@@ -2363,7 +2464,7 @@ export interface Config {
2363
2464
  env?: Record<string, string>
2364
2465
  /** Native non-interactive permission mode fixed for this Provider instance. */
2365
2466
  permissionMode?: CodexPermissionMode
2366
- /** Grace in milliseconds for app-server process-tree termination. */
2467
+ /** Grace in milliseconds between app-server managed-range termination tiers. */
2367
2468
  disposeGraceMs?: number
2368
2469
  }
2369
2470
 
@@ -2478,24 +2579,29 @@ export interface Config {
2478
2579
  }
2479
2580
  ```
2480
2581
 
2481
- Source: [`packages/e2b/subprocess-e2b/src/index.ts:25`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/e2b/subprocess-e2b/src/index.ts)
2582
+ Source: [`packages/e2b/subprocess-e2b/src/index.ts:26`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/e2b/subprocess-e2b/src/index.ts)
2482
2583
 
2483
2584
  <a id="deepseek-aidsh-system-prompt"></a>
2484
2585
 
2485
2586
  ## `@deepseek-ai/dsh-system-prompt`
2486
2587
 
2487
2588
  ```ts config-catalog
2488
- /** Plugin config: the deployment-authored fragment of the system prompt (see {@link Config.persona} for its contract). */
2589
+ /** Plugin config: the deployment-authored fragment of the system prompt (see {@link Config.personaPrefix} for its contract). */
2489
2590
  export interface Config {
2490
2591
  /** Include the fixed DeepSeek Harness identity before the deployment persona (default true). */
2491
2592
  includeHarnessIdentity?: boolean
2492
2593
  /** Include dynamic runtime-context snapshots in model history (default true). */
2493
2594
  includeRuntimeContext?: boolean
2494
2595
  /**
2495
- * Deployment-wide order-0 persona template. A scoped section named
2496
- * `deployment:persona` shadows it; `{{variable}}` references are strict.
2596
+ * Deployment-wide persona prefix template before first-party guidance. A scoped section named
2597
+ * `deployment:persona-prefix` shadows it; `{{variable}}` references are strict.
2497
2598
  */
2498
- persona?: string
2599
+ personaPrefix?: string
2600
+ /**
2601
+ * Persona suffix template after first-party guidance. A scoped `deployment:persona-suffix`
2602
+ * section shadows it; `{{variable}}` references are strict. Defaults to empty.
2603
+ */
2604
+ personaSuffix?: string
2499
2605
  /**
2500
2606
  * Model-facing tool names in order, with {@link TOOL_ORDER_REST} exactly once.
2501
2607
  * Invalid fields fail at load and unknown names fail at assembly; known names
@@ -2505,7 +2611,7 @@ export interface Config {
2505
2611
  }
2506
2612
  ```
2507
2613
 
2508
- Source: [`packages/core/system-prompt/src/index.ts:237`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/system-prompt/src/index.ts)
2614
+ Source: [`packages/core/system-prompt/src/index.ts:242`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/system-prompt/src/index.ts)
2509
2615
 
2510
2616
  <a id="deepseek-aidsh-terminal-bash"></a>
2511
2617
 
@@ -2640,7 +2746,7 @@ export interface Config {
2640
2746
  }
2641
2747
  ```
2642
2748
 
2643
- Source: [`packages/shell/tool-bash-persistent/src/index.ts:432`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/shell/tool-bash-persistent/src/index.ts)
2749
+ Source: [`packages/shell/tool-bash-persistent/src/index.ts:435`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/shell/tool-bash-persistent/src/index.ts)
2644
2750
 
2645
2751
  <a id="deepseek-aidsh-tool-fs"></a>
2646
2752
 
@@ -2769,6 +2875,22 @@ export interface Config {
2769
2875
 
2770
2876
  Source: [`packages/lsp/tool-lsp/src/index.ts:57`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/lsp/tool-lsp/src/index.ts)
2771
2877
 
2878
+ <a id="deepseek-aidsh-tool-present"></a>
2879
+
2880
+ ## `@deepseek-ai/dsh-tool-present`
2881
+
2882
+ Requires: `tools` · `fs` · `sessionProjections`
2883
+
2884
+ ```ts config-catalog
2885
+ /** Per-call delivery limit. */
2886
+ export interface Config {
2887
+ /** Maximum number of files in one call. */
2888
+ maxFiles: number
2889
+ }
2890
+ ```
2891
+
2892
+ Source: [`packages/fs/tool-present/src/index.ts:15`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/fs/tool-present/src/index.ts)
2893
+
2772
2894
  <a id="deepseek-aidsh-tool-pwsh"></a>
2773
2895
 
2774
2896
  ## `@deepseek-ai/dsh-tool-pwsh`
@@ -2898,8 +3020,8 @@ export interface Config {
2898
3020
  */
2899
3021
  toolName?: string
2900
3022
  /**
2901
- * Sample the Host `subagent-model-selection` user setting for each new
2902
- * top-level session and inherit that decision in its child sessions.
3023
+ * Sample the Host `subagent-model-selection` setting for each new top-level
3024
+ * Session and inherit that decision in its child Sessions.
2903
3025
  */
2904
3026
  modelSelectionSettings?: boolean
2905
3027
  /**
@@ -2919,7 +3041,7 @@ export interface Config {
2919
3041
  */
2920
3042
  agentOptions?: AgentOptions
2921
3043
  /**
2922
- * Per-child persona that shadows `deployment:persona`. Requires the
3044
+ * Per-child persona that shadows `deployment:persona-prefix`. Requires the
2923
3045
  * provider's `persona` capability; omission preserves the deployment persona.
2924
3046
  */
2925
3047
  persona?: string
@@ -2949,7 +3071,7 @@ export interface Config {
2949
3071
 
2950
3072
  Depends on: [`AgentOptions`](./subsystems/core.md)
2951
3073
 
2952
- Source: [`packages/subagent/tool-subagent/src/index.ts:47`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/subagent/tool-subagent/src/index.ts)
3074
+ Source: [`packages/subagent/tool-subagent/src/index.ts:48`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/subagent/tool-subagent/src/index.ts)
2953
3075
 
2954
3076
  <a id="deepseek-aidsh-tool-terminal"></a>
2955
3077
 
@@ -3331,7 +3453,8 @@ These load from a `cordis.yml` entry with no `config:` block; they declare no co
3331
3453
  - `@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))
3332
3454
  - `@deepseek-ai/dsh-client-file-upload` — requires `agents` · `attachments` · `commands` · `connection` ([`packages/client/file-upload/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/file-upload/src/index.ts))
3333
3455
  - `@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))
3334
- - `@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))
3456
+ - `@deepseek-ai/dsh-client-modules` — requires `loader` ([`packages/client/modules/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/modules/src/index.ts))
3457
+ - `@deepseek-ai/dsh-client-resources` ([`packages/client/resources/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/resources/src/index.ts))
3335
3458
  - `@deepseek-ai/dsh-client-ui-agent-preset` ([`packages/client/ui-agent-preset/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/ui-agent-preset/src/index.ts))
3336
3459
  - `@deepseek-ai/dsh-client-ui-approval` ([`packages/client/ui-approval/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/ui-approval/src/index.ts))
3337
3460
  - `@deepseek-ai/dsh-client-ui-attachment` ([`packages/client/ui-attachment/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/ui-attachment/src/index.ts))
@@ -3340,7 +3463,7 @@ These load from a `cordis.yml` entry with no `config:` block; they declare no co
3340
3463
  - `@deepseek-ai/dsh-client-ui-commands` ([`packages/client/ui-commands/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/ui-commands/src/index.ts))
3341
3464
  - `@deepseek-ai/dsh-client-ui-conversation` ([`packages/client/ui-conversation/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/ui-conversation/src/index.ts))
3342
3465
  - `@deepseek-ai/dsh-client-ui-cordis` ([`packages/extensions/ui-cordis/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/extensions/ui-cordis/src/index.ts))
3343
- - `@deepseek-ai/dsh-client-ui-deliverables` — requires `systemPrompt` ([`packages/client/ui-deliverables/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/ui-deliverables/src/index.ts))
3466
+ - `@deepseek-ai/dsh-client-ui-deliverables` — requires `systemPrompt` · `connection` · `sessionQuery` · `sessionController` · `workspaceFiles` · `fs` · `sandboxPolicy` ([`packages/client/ui-deliverables/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/ui-deliverables/src/index.ts))
3344
3467
  - `@deepseek-ai/dsh-client-ui-directory-picker-browse` ([`packages/client/ui-directory-picker-browse/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/ui-directory-picker-browse/src/index.ts))
3345
3468
  - `@deepseek-ai/dsh-client-ui-directory-picker-native` ([`packages/client/ui-directory-picker-native/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/ui-directory-picker-native/src/index.ts))
3346
3469
  - `@deepseek-ai/dsh-client-ui-goal` ([`packages/client/ui-goal/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/ui-goal/src/index.ts))
@@ -3349,6 +3472,7 @@ These load from a `cordis.yml` entry with no `config:` block; they declare no co
3349
3472
  - `@deepseek-ai/dsh-client-ui-layout` ([`packages/client/ui-layout/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/ui-layout/src/index.ts))
3350
3473
  - `@deepseek-ai/dsh-client-ui-message-feedback` ([`packages/client/ui-message-feedback/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/ui-message-feedback/src/index.ts))
3351
3474
  - `@deepseek-ai/dsh-client-ui-model-selection` ([`packages/client/ui-model-selection/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/ui-model-selection/src/index.ts))
3475
+ - `@deepseek-ai/dsh-client-ui-open-in-app` ([`packages/client/ui-open-in-app/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/ui-open-in-app/src/index.ts))
3352
3476
  - `@deepseek-ai/dsh-client-ui-permission-presets` ([`packages/client/ui-permission-presets/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/ui-permission-presets/src/index.ts))
3353
3477
  - `@deepseek-ai/dsh-client-ui-plan` ([`packages/client/ui-plan/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/ui-plan/src/index.ts))
3354
3478
  - `@deepseek-ai/dsh-client-ui-reference` ([`packages/client/ui-reference/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/ui-reference/src/index.ts))
@@ -3361,6 +3485,9 @@ These load from a `cordis.yml` entry with no `config:` block; they declare no co
3361
3485
  - `@deepseek-ai/dsh-client-ui-settings-plugin-inventory` ([`packages/client/ui-settings-plugin-inventory/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/ui-settings-plugin-inventory/src/index.ts))
3362
3486
  - `@deepseek-ai/dsh-client-ui-settings-plugins` ([`packages/client/ui-settings-plugins/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/ui-settings-plugins/src/index.ts))
3363
3487
  - `@deepseek-ai/dsh-client-ui-sidebar` ([`packages/client/ui-sidebar/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/ui-sidebar/src/index.ts))
3488
+ - `@deepseek-ai/dsh-client-ui-sidebar-documentpreview` ([`packages/client/ui-sidebar-documentpreview/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/ui-sidebar-documentpreview/src/index.ts))
3489
+ - `@deepseek-ai/dsh-client-ui-sidebar-files` ([`packages/client/ui-sidebar-files/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/ui-sidebar-files/src/index.ts))
3490
+ - `@deepseek-ai/dsh-client-ui-sidebar-right` ([`packages/client/ui-sidebar-right/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/ui-sidebar-right/src/index.ts))
3364
3491
  - `@deepseek-ai/dsh-client-ui-skill` ([`packages/client/ui-skill/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/ui-skill/src/index.ts))
3365
3492
  - `@deepseek-ai/dsh-client-ui-subagent` ([`packages/client/ui-subagent/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/ui-subagent/src/index.ts))
3366
3493
  - `@deepseek-ai/dsh-client-ui-theme` ([`packages/client/ui-theme/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/ui-theme/src/index.ts))
@@ -3434,8 +3561,10 @@ Imported as libraries by other packages; a `cordis.yml` cannot load them.
3434
3561
  - `@deepseek-ai/dsh-atomic-write` ([`packages/util/atomic-write/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/util/atomic-write/src/index.ts))
3435
3562
  - `@deepseek-ai/dsh-base` ([`packages/bundle/base/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/bundle/base/src/index.ts))
3436
3563
  - `@deepseek-ai/dsh-brand` ([`packages/util/brand/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/util/brand/src/index.ts))
3564
+ - `@deepseek-ai/dsh-chunked-list` ([`packages/util/chunked-list/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/util/chunked-list/src/index.ts))
3437
3565
  - `@deepseek-ai/dsh-client-store` ([`packages/client/store/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/store/src/index.ts))
3438
3566
  - `@deepseek-ai/dsh-client-test-runtime` ([`packages/test-support/client-runtime/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/test-support/client-runtime/src/index.ts))
3567
+ - `@deepseek-ai/dsh-client-ui-dockkit` ([`packages/client/ui-dockkit/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/ui-dockkit/src/index.ts))
3439
3568
  - `@deepseek-ai/dsh-client-ui-primitives` ([`packages/client/ui-primitives/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/ui-primitives/src/index.ts))
3440
3569
  - `@deepseek-ai/dsh-client-ui-slots` ([`packages/client/ui-slots/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/ui-slots/src/index.ts))
3441
3570
  - `@deepseek-ai/dsh-client-web` ([`packages/client/web/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/web/src/index.ts))
@@ -3453,6 +3582,7 @@ Imported as libraries by other packages; a `cordis.yml` cannot load them.
3453
3582
  - `@deepseek-ai/dsh-loader-smoke` ([`packages/test-support/loader-smoke/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/test-support/loader-smoke/src/index.ts))
3454
3583
  - `@deepseek-ai/dsh-native-command` ([`packages/util/native-command/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/util/native-command/src/index.ts))
3455
3584
  - `@deepseek-ai/dsh-output-retention` ([`packages/util/output-retention/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/util/output-retention/src/index.ts))
3585
+ - `@deepseek-ai/dsh-package-manifest` ([`packages/util/package-manifest/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/util/package-manifest/src/index.ts))
3456
3586
  - `@deepseek-ai/dsh-sandbox-windows-acl` ([`packages/sandbox/sandbox-windows-acl/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/sandbox/sandbox-windows-acl/src/index.ts))
3457
3587
  - `@deepseek-ai/dsh-scope` ([`packages/core/scope/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/scope/src/index.ts))
3458
3588
  - `@deepseek-ai/dsh-sdk-client` ([`packages/sdk/client/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/sdk/client/src/index.ts))
@@ -3462,6 +3592,7 @@ Imported as libraries by other packages; a `cordis.yml` cannot load them.
3462
3592
  - `@deepseek-ai/dsh-session-format-catalog` ([`packages/session/session-format-catalog/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/session/session-format-catalog/src/index.ts))
3463
3593
  - `@deepseek-ai/dsh-session-format-v0-to-v1` ([`packages/session/session-format-v0-to-v1/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/session/session-format-v0-to-v1/src/index.ts))
3464
3594
  - `@deepseek-ai/dsh-session-format-v1-to-v2` ([`packages/session/session-format-v1-to-v2/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/session/session-format-v1-to-v2/src/index.ts))
3595
+ - `@deepseek-ai/dsh-session-format-v2-to-v3` ([`packages/session/session-format-v2-to-v3/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/session/session-format-v2-to-v3/src/index.ts))
3465
3596
  - `@deepseek-ai/dsh-session-snapshot` ([`packages/test-support/session-snapshot/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/test-support/session-snapshot/src/index.ts))
3466
3597
  - `@deepseek-ai/dsh-session-telemetry` ([`packages/session/session-telemetry/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/session/session-telemetry/src/index.ts))
3467
3598
  - `@deepseek-ai/dsh-session-title-llm` ([`packages/session/session-title-llm/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/session/session-title-llm/src/index.ts))
@@ -41,7 +41,7 @@ Registration is effect-based: disposing the plugin fiber unregisters the tool. S
41
41
 
42
42
  ## Rules of the execute() contract
43
43
 
44
- - **Args are validated for you.** `defineTool` validates model-generated `arguments` against the unified `ParameterSchemaSpec` before `execute` runs (types, required keys, literal constraints, exact-one unions, and nested values — [runtime arg validation](https://github.com/deepseek-ai/deepseek-harness/blob/master/.agents/notes/implemented/architecture/2026-06-11-runtime-arg-validation.md)), so inside `execute` the args match `InferArgs`. Explicit object nodes declare `additionalProperties: true | false`; the implicit parameter root stays open. You still hand-check constraints the DSL does not express, such as non-empty strings, positive numbers, or cross-field rules. Raw JSON-Schema tools registered directly own their input validation.
44
+ - **Args are validated for you.** `defineTool` validates model-generated `arguments` against the unified `ParameterSchemaSpec` before `execute` runs (types, required keys, literal constraints, exact-one unions, and nested values), so inside `execute` the args match `InferArgs`. Explicit object nodes declare `additionalProperties: true | false`; the implicit parameter root stays open. You still hand-check constraints the DSL does not express, such as non-empty strings, positive numbers, or cross-field rules. Raw JSON-Schema tools registered directly own their input validation.
45
45
  - **Registration borrows your readonly definition.** A typed same-process contribution is not a serialization boundary; do not mutate its schema or replace callbacks after registration. `schemas()` materializes only the explicit model-facing projection. To hot-swap a tool, dispose its owning effect and register the replacement; mutable state inside the callback's closure remains ordinary plugin state.
46
46
  - **Execution identity is protected.** The registry materializes `arguments` as detached lossless JSON in one recursive pass, freezes that value before policy starts, and assigns an opaque `exec.token`; `callId`, `name`, `arguments`, `agent`, `token`, the required caller-owned `signal`, and an optional enclosing-transport `parent` token stay immutable through dispatch. `parent` is identity-only and exposes no live outer execution. Treat `args` as readonly input. Only an around-dispatch wrapper receives a mutable view, and it may replace and restore the required `exec.signal` to impose a deadline but cannot remove it.
47
47
  - **Declare and return one canonical JSON value.** `output.schema` uses `ValueSchemaSpec` and may have an object, array, scalar, or null root. `execute` returns only the inferred value; the registry snapshots it as lossless JSON, validates it, freezes it, and passes it to `output.render(args, value)`. Do not return content blocks from the body or make callers parse prose for ids and fields.
@@ -4,7 +4,7 @@ editSource: "docs/cookbook/extension-cookbook.md"
4
4
 
5
5
  # Cookbook: extension plugin shapes
6
6
 
7
- Reference patterns for harness extensions. The snippets omit imports and helper implementations and are not copy-paste-complete. For concrete authoring paths, see the [package checklist](./adding-a-package.md), [first-tool tutorial](../../develop/basic/tool.md), [tool reference](./adding-a-tool.md), and [LLM adapter guide](./adding-an-llm-adapter.md); the [architecture](../index.md) owns the system and extension-point map.
7
+ Reference patterns for harness extensions. The snippets omit imports and helper implementations and are not copy-paste-complete. For concrete authoring paths, see the [package checklist](./adding-a-package.md), [first-tool tutorial](../../develop/basic/tool.md), [tool reference](./adding-a-tool.md), [LLM adapter guide](./adding-an-llm-adapter.md), and [Session format version tutorial](https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/cookbook/adding-a-session-format-version.md); the [architecture](../index.md) owns the system and extension-point map.
8
8
 
9
9
  ## A tool plugin
10
10