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
@@ -233,6 +233,34 @@ export interface Config {
233
233
 
234
234
  来源:[`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
+ 来源:[`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
  依赖:[`LocalConfig`](#deepseek-aidsh-bash-local)
315
343
 
316
- 来源:[`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
+ 来源:[`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
- 需要:`webServer` · `credentials`
350
+ 需要:`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
- 来源:[`packages/client/connection/src/index.ts:71`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/connection/src/index.ts)
390
+ 来源: [`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
 
@@ -537,7 +584,7 @@ export interface Config {
537
584
  }
538
585
  ```
539
586
 
540
- 来源:[`packages/experimental/agent-team/src/types.ts:124`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/experimental/agent-team/src/types.ts)
587
+ 来源:[`packages/experimental/agent-team/src/types.ts:130`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/experimental/agent-team/src/types.ts)
541
588
 
542
589
  <a id="deepseek-aidsh-experimental-code-runtime-python"></a>
543
590
 
@@ -729,7 +776,7 @@ export interface Config {
729
776
  }
730
777
  ```
731
778
 
732
- 来源:[`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
+ 来源:[`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
 
@@ -781,7 +828,7 @@ export interface Config {
781
828
  }
782
829
  ```
783
830
 
784
- 来源:[`packages/bundle/headless/src/index.ts:33`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/bundle/headless/src/index.ts)
831
+ 来源:[`packages/bundle/headless/src/index.ts:34`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/bundle/headless/src/index.ts)
785
832
 
786
833
  <a id="deepseek-aidsh-hooks-claude-code"></a>
787
834
 
@@ -819,7 +866,7 @@ export interface Config {
819
866
  }
820
867
  ```
821
868
 
822
- 来源:[`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
+ 来源:[`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
- 来源:[`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
+ 来源:[`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
  来源:[`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
+ 需要:`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
+ 来源:[`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
- 依赖:[`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
+ 依赖:[`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
- 来源:[`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
+ 来源:[`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
  依赖:`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
- 来源:[`packages/llm/llm-pi-ai/src/config.ts:213`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/llm/llm-pi-ai/src/config.ts)
1376
+ 来源:[`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
- 依赖:[`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
+ 依赖:[`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
- 来源:[`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
+ 来源:[`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 @@ export interface ReconnectConfig {
1491
1586
 
1492
1587
  ## `@deepseek-ai/dsh-message-feedback`
1493
1588
 
1494
- 需要:`storageDomain` · `sessionPersistence` · `sessions`
1589
+ 需要:`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
- 来源:[`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
+ 来源:[`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 @@ export interface PresetSpec {
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
- 来源:[`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
+ 来源:[`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
- 来源:[`packages/session/session-persistence-jsonl/src/index.ts:85`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/session/session-persistence-jsonl/src/index.ts)
1949
+ 来源:[`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 @@ export interface Config {
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
  依赖:`BatchLogRecordProcessorOptions`(`@opentelemetry/sdk-logs`)· `OTLPExporterNodeConfigBase`(`@opentelemetry/otlp-exporter-base`)
1986
2087
 
1987
- 来源:[`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
+ 来源:[`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
- 来源:[`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
+ 来源:[`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
- 来源:[`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
+ 来源:[`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
- 来源:[`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
+ 来源:[`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
- 来源:[`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
+ 来源:[`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
  来源:[`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
+ 依赖: `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
+ 来源: [`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
@@ -3331,7 +3453,8 @@ export interface Config {
3331
3453
  - `@deepseek-ai/dsh-authorization` — 需要 `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` — 需要 `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` — 需要 `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` — 需要 `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 @@ export interface Config {
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` — 需要 `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` — 需要 `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 @@ export interface Config {
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 @@ export interface Config {
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))
@@ -3433,8 +3560,10 @@ export interface Config {
3433
3560
  - `@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))
3434
3561
  - `@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))
3435
3562
  - `@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))
3563
+ - `@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))
3436
3564
  - `@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))
3437
3565
  - `@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))
3566
+ - `@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))
3438
3567
  - `@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))
3439
3568
  - `@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))
3440
3569
  - `@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))
@@ -3452,6 +3581,7 @@ export interface Config {
3452
3581
  - `@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))
3453
3582
  - `@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))
3454
3583
  - `@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))
3584
+ - `@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))
3455
3585
  - `@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))
3456
3586
  - `@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))
3457
3587
  - `@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))
@@ -3461,6 +3591,7 @@ export interface Config {
3461
3591
  - `@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))
3462
3592
  - `@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))
3463
3593
  - `@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))
3594
+ - `@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))
3464
3595
  - `@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))
3465
3596
  - `@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))
3466
3597
  - `@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 @@ export function apply(ctx: Context) {
41
41
 
42
42
  ## execute() 约定的规则
43
43
 
44
- - **参数已为你校验。** `defineTool` 在 `execute` 运行前,会根据统一的 `ParameterSchemaSpec` 校验模型生成的 `arguments`(类型、必填键、字面量约束、恰好匹配一个分支的联合以及嵌套值——见[运行时参数校验](https://github.com/deepseek-ai/deepseek-harness/blob/master/.agents/notes/implemented/architecture/2026-06-11-runtime-arg-validation.zh.md)),因此 `execute` 内的 args 会匹配 `InferArgs`。显式对象节点必须声明 `additionalProperties: true | false`;隐式参数根对象保持开放。你仍需手动检查 schema DSL 无法表达的约束,例如非空字符串、正数或跨字段规则。直接注册的原始 JSON Schema 工具自行负责输入校验。
44
+ - **参数已为你校验。** `defineTool` 在 `execute` 运行前,会根据统一的 `ParameterSchemaSpec` 校验模型生成的 `arguments`(类型、必填键、字面量约束、恰好匹配一个分支的联合以及嵌套值),因此 `execute` 内的 args 会匹配 `InferArgs`。显式对象节点必须声明 `additionalProperties: true | false`;隐式参数根对象保持开放。你仍需手动检查 schema DSL 无法表达的约束,例如非空字符串、正数或跨字段规则。直接注册的原始 JSON Schema 工具自行负责输入校验。
45
45
  - **注册借用你的只读定义。** 类型化的同进程贡献不是序列化边界;注册后不要修改其 schema 或替换回调。`schemas()` 只物化显式的模型可见投影。如需热替换工具,请 dispose 其所属副作用并注册替代品;回调闭包内的可变状态仍是普通的插件状态。
46
46
  - **执行身份受保护。** 注册表在一次递归遍历中将 `arguments` 物化为分离的无损 JSON,在策略开始前冻结该值,并分配一个不透明的 `exec.token`;`callId`、`name`、`arguments`、`agent`、`token`、必填且由调用方持有的 `signal`,以及可选的外层传输 `parent` token 在整个分发过程中保持不可变。`parent` 仅用于身份标识,不暴露活跃的外层执行。请将 `args` 视为只读输入。只有 around-dispatch 包装器会收到可变视图;它可以替换并恢复必填的 `exec.signal` 以施加截止时间,但不能移除该信号。
47
47
  - **声明并返回一个规范 JSON 值。** `output.schema` 使用 `ValueSchemaSpec`,根可以是对象、数组、标量或 null。`execute` 只返回推导出的值;注册表将其快照为无损 JSON,完成校验和冻结后,再传给 `output.render(args, value)`。工具主体不要返回内容块,也不要迫使调用方从自然语言中解析 id 和字段。
@@ -4,7 +4,7 @@ editSource: "docs/cookbook/extension-cookbook.zh.md"
4
4
 
5
5
  # 实操手册:扩展插件形态
6
6
 
7
- harness 扩展的参考模式。代码片段省略了 import 和辅助实现,无法直接复制运行。具体编写路径见[包检查清单](./adding-a-package.md)、[第一个工具教程](../../develop/basic/tool.md)、[工具参考](./adding-a-tool.md)[LLM(大语言模型)适配器指南](./adding-an-llm-adapter.md);系统与扩展点映射由[架构文档](../index.md)负责。
7
+ harness 扩展的参考模式。代码片段省略了 import 和辅助实现,无法直接复制运行。具体编写路径见[包检查清单](./adding-a-package.md)、[第一个工具教程](../../develop/basic/tool.md)、[工具参考](./adding-a-tool.md)[LLM(大语言模型)适配器指南](./adding-an-llm-adapter.md)和 [Session 格式版本教程](https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/cookbook/adding-a-session-format-version.zh.md);系统与扩展点映射由[架构文档](../index.md)负责。
8
8
 
9
9
  ## 工具插件
10
10