dsh-plugin-dev-kb 1.0.1 → 1.0.2

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 (54) hide show
  1. package/README.md +37 -4
  2. package/kb/INDEX.md +1 -1
  3. package/kb/README.md +22 -11
  4. package/kb/extra/development.md +2 -0
  5. package/kb/extra/development.zh.md +2 -0
  6. package/kb/extra/event-producer-consumer.md +9 -9
  7. package/kb/extra/event-producer-consumer.zh.md +9 -9
  8. package/kb/extra/i18n/README.md +1 -1
  9. package/kb/extra/i18n/README.zh.md +1 -1
  10. package/kb/extra/module-graph.md +251 -210
  11. package/kb/extra/module-graph.zh.md +251 -210
  12. package/kb/extra/subsystems/agent-team.md +183 -0
  13. package/kb/extra/subsystems/agent-team.zh.md +183 -0
  14. package/kb/extra/subsystems/attachment.md +16 -2
  15. package/kb/extra/subsystems/attachment.zh.md +16 -2
  16. package/kb/meta/search-index.json +54 -42
  17. package/kb/meta/source.json +3 -3
  18. package/kb/meta/topics.md +1 -1
  19. package/kb/site/en/guide/providers.md +40 -1
  20. package/kb/site/en/reference/capability-seams.md +12 -0
  21. package/kb/site/en/reference/config-catalog.md +238 -72
  22. package/kb/site/en/reference/index.md +2 -0
  23. package/kb/site/en/reference/persistence-catalog.md +76 -13
  24. package/kb/site/en/reference/subsystems/client-modules.md +11 -3
  25. package/kb/site/en/reference/subsystems/commands.md +28 -5
  26. package/kb/site/en/reference/subsystems/index.md +1 -0
  27. package/kb/site/en/reference/subsystems/llm-streaming.md +11 -2
  28. package/kb/site/en/reference/subsystems/persistence.md +3 -3
  29. package/kb/site/en/reference/subsystems/plan.md +1 -1
  30. package/kb/site/en/reference/subsystems/session-reference.md +71 -5
  31. package/kb/site/en/reference/subsystems/session.md +6 -2
  32. package/kb/site/en/reference/subsystems/subagent.md +22 -3
  33. package/kb/site/en/reference/subsystems/web.md +5 -4
  34. package/kb/site/en/reference/tool-catalog.md +353 -5
  35. package/kb/site/guide/providers.md +40 -1
  36. package/kb/site/reference/capability-seams.md +12 -0
  37. package/kb/site/reference/config-catalog.md +252 -86
  38. package/kb/site/reference/index.md +2 -0
  39. package/kb/site/reference/persistence-catalog.md +76 -13
  40. package/kb/site/reference/subsystems/client-modules.md +11 -3
  41. package/kb/site/reference/subsystems/commands.md +28 -5
  42. package/kb/site/reference/subsystems/index.md +1 -0
  43. package/kb/site/reference/subsystems/llm-streaming.md +11 -2
  44. package/kb/site/reference/subsystems/persistence.md +3 -3
  45. package/kb/site/reference/subsystems/plan.md +1 -1
  46. package/kb/site/reference/subsystems/session-reference.md +71 -5
  47. package/kb/site/reference/subsystems/session.md +6 -2
  48. package/kb/site/reference/subsystems/subagent.md +22 -3
  49. package/kb/site/reference/subsystems/web.md +5 -4
  50. package/kb/site/reference/tool-catalog.md +352 -5
  51. package/package.json +8 -2
  52. package/scripts/rebuild-index.mjs +2 -1
  53. package/scripts/selfcheck.mjs +30 -0
  54. package/skills/dsh-plugin-dev-kb.md +2 -2
@@ -339,10 +339,12 @@ export interface Config {
339
339
  maxMessageImageBytes?: number
340
340
  /** Maximum intrinsic width multiplied by height accepted for one image. */
341
341
  maxImagePixels?: number
342
+ /** Maximum intrinsic width and maximum intrinsic height accepted for one image. */
343
+ maxImageDimension?: number
342
344
  }
343
345
  ```
344
346
 
345
- 来源:[`packages/attachment/attachment-local/src/index.ts:24`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/attachment/attachment-local/src/index.ts)
347
+ 来源:[`packages/attachment/attachment-local/src/index.ts:31`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/attachment/attachment-local/src/index.ts)
346
348
 
347
349
  <a id="deepseek-aidsh-bash-local"></a>
348
350
 
@@ -420,7 +422,7 @@ export interface ConnectionConfig {
420
422
 
421
423
  ## `@deepseek-ai/dsh-client-hmr`
422
424
 
423
- 需要:`clientModuleHost` · `webServer`
425
+ 需要:`clientModules` · `webServer`
424
426
 
425
427
  ```ts config-catalog
426
428
  /** Plugin config, validated by the same-named schemastery schema. */
@@ -589,6 +591,68 @@ export interface Config {
589
591
 
590
592
  来源:[`packages/e2b/e2b/src/index.ts:43`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/e2b/e2b/src/index.ts)
591
593
 
594
+ <a id="deepseek-aidsh-experimental-agent-team"></a>
595
+
596
+ ## `@deepseek-ai/dsh-experimental-agent-team`
597
+
598
+ 需要:`agents` · `sessions` · `sessionPersistence` · `subagents`
599
+
600
+ ```ts config-catalog
601
+ /** Team-service deployment limits. */
602
+ export interface Config {
603
+ /** Maximum immutable teammate names retained by one Team. */
604
+ readonly maxMembers?: number
605
+ /** Maximum non-deleted tasks retained by one Team. */
606
+ readonly maxTasks?: number
607
+ /** Maximum queued-minus-delivered messages for one target member. */
608
+ readonly maxPendingMessagesPerMember?: number
609
+ /** Maximum UTF-8 bytes in one complete sender-framed delivery. */
610
+ readonly maxMessageBytes?: number
611
+ /** Maximum milliseconds allowed for Team-owned runtime disposal. */
612
+ readonly disposalTimeoutMs?: number
613
+ }
614
+ ```
615
+
616
+ 来源:[`packages/experimental/agent-team/src/types.ts:125`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/experimental/agent-team/src/types.ts)
617
+
618
+ <a id="deepseek-aidsh-experimental-tool-agent-team"></a>
619
+
620
+ ## `@deepseek-ai/dsh-experimental-tool-agent-team`
621
+
622
+ 需要:`agents` · `agentTeams` · `tools` · `systemPrompt`
623
+
624
+ ```ts config-catalog
625
+ /** Tool routing configuration. */
626
+ export interface Config {
627
+ /** Continuable-subagent provider used for fresh teammates. */
628
+ readonly freshProvider?: string
629
+ /** Continuable-subagent provider used for completed-prefix fork teammates. */
630
+ readonly forkProvider?: string
631
+ }
632
+ ```
633
+
634
+ 来源:[`packages/experimental/tool-agent-team/src/index.ts:17`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/experimental/tool-agent-team/src/index.ts)
635
+
636
+ <a id="deepseek-aidsh-file-reference-local"></a>
637
+
638
+ ## `@deepseek-ai/dsh-file-reference-local`
639
+
640
+ 需要:`agents`
641
+
642
+ ```ts config-catalog
643
+ /** Local file-reference discovery configuration. */
644
+ export interface Config {
645
+ /** Maximum ranked candidates returned for one query. */
646
+ maxResults?: number
647
+ /** Maximum indexed files and directories per agent workspace. */
648
+ maxEntries?: number
649
+ /** Directory basenames never traversed or offered. */
650
+ excludedDirectories?: string[]
651
+ }
652
+ ```
653
+
654
+ 来源:[`packages/context/file-reference-local/src/index.ts:35`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/context/file-reference-local/src/index.ts)
655
+
592
656
  <a id="deepseek-aidsh-fs-local"></a>
593
657
 
594
658
  ## `@deepseek-ai/dsh-fs-local`
@@ -664,7 +728,7 @@ export interface Config {
664
728
 
665
729
  ## `@deepseek-ai/dsh-hooks-claude-code`
666
730
 
667
- 需要:`bash`
731
+ 需要:`shell`
668
732
 
669
733
  ```ts config-catalog
670
734
  /** Plugin config: where the CC hook config lives + substitution roots. */
@@ -702,7 +766,7 @@ export interface Config {
702
766
 
703
767
  ## `@deepseek-ai/dsh-hooks-codex`
704
768
 
705
- 需要:`bash`
769
+ 需要:`shell`
706
770
 
707
771
  ```ts config-catalog
708
772
  /** Plugin config: where the Codex hooks.json lives + the model name for payloads. */
@@ -729,7 +793,7 @@ export interface Config {
729
793
 
730
794
  ## `@deepseek-ai/dsh-host-apiproxy`
731
795
 
732
- 需要:`agentDefaultModel` · `agents` · `attachments` · `directoryPicker` · `llm` · `sessions` · `subagents` · `sessionQuery` · `tools` · `userInteraction` · `workspace`
796
+ 需要:`agentDefaultModel` · `agents` · `attachments` · `directoryPicker` · `llm` · `sessions` · `subagents` · `sessionQuery` · `tools` · `userQuestions` · `workspaceRegistry`
733
797
 
734
798
  ```ts config-catalog
735
799
  /** Gateway plugin configuration. */
@@ -872,7 +936,9 @@ export interface Config {
872
936
  models?: DeepSeekCatalogModel[]
873
937
  /** Maximum provider idle time while one stream read is outstanding (default five minutes). */
874
938
  streamIdleTimeoutMs?: number
875
- /** Provider-owned model-request retry policy; omission uses normal defaults. */
939
+ /** Maximum accumulated base64 image payload per request (default 20 MiB). */
940
+ maxRequestImageBytes?: number
941
+ /** Provider-owned model-request retry policy; omission uses normal mode with five retries. */
876
942
  retryPolicy?: RetryPolicyConfig
877
943
  }
878
944
 
@@ -888,12 +954,14 @@ export interface DeepSeekCatalogModel {
888
954
  contextWindow?: number
889
955
  /** Per-request output cap for this model; omission falls back to the profile's {@link DeepSeekConnectionOptions.maxTokens}. */
890
956
  maxTokens?: number
957
+ /** Accepted request modalities; omission is text-only. */
958
+ inputModalities?: ModelModality[]
891
959
  }
892
960
  ```
893
961
 
894
- 依赖:[`RetryPolicyConfig`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/llm/llm/src/index.ts)
962
+ 依赖:[`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)
895
963
 
896
- 来源:[`packages/llm/llm-deepseek/src/index.ts:62`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/llm/llm-deepseek/src/index.ts)
964
+ 来源:[`packages/llm/llm-deepseek/src/index.ts:66`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/llm/llm-deepseek/src/index.ts)
897
965
 
898
966
  <a id="deepseek-aidsh-llm-pi-ai"></a>
899
967
 
@@ -942,10 +1010,11 @@ export interface PiAiProviderProfile {
942
1010
  */
943
1011
  modelOverrides?: Record<string, PiAiModelOverride>
944
1012
  /**
945
- * Reasoning-dispatch switches for every `openai-completions` model on this
946
- * route; each model's own `compat` overrides per field. What neither sets
947
- * keeps the installed catalog entry's value, then pi-ai's baseURL-derived
948
- * detection.
1013
+ * pi-ai wire-compatibility switches defaulting every model on this route
1014
+ * whose protocol declares them; each model's own `compat` overrides per
1015
+ * field. What neither sets keeps the installed catalog entry's value, then
1016
+ * pi-ai's own detection. A switch no model on the route could read is
1017
+ * refused rather than left looking applied.
949
1018
  */
950
1019
  compat?: PiAiCompatProfile
951
1020
  /**
@@ -987,7 +1056,14 @@ export interface PiAiProviderProfile {
987
1056
  websocketConnectTimeoutMs?: number
988
1057
  /** Maximum provider idle time while one stream read is outstanding. */
989
1058
  streamIdleTimeoutMs?: number
990
- /** Provider-owned model-request retry policy; omission uses normal defaults. */
1059
+ /**
1060
+ * Maximum base64-encoded image payload per request. When a request's
1061
+ * accumulated images exceed it, the oldest images are replaced by text
1062
+ * placeholders until the request fits, so a long session keeps completing
1063
+ * requests instead of being rejected by a request-size cap.
1064
+ */
1065
+ maxRequestImageBytes?: number
1066
+ /** Provider-owned model-request retry policy; omission uses normal mode with five retries. */
991
1067
  retryPolicy?: RetryPolicyConfig
992
1068
  }
993
1069
 
@@ -1026,7 +1102,7 @@ export interface PiAiModelProfile {
1026
1102
  * declares the offered levels and their wire spellings.
1027
1103
  */
1028
1104
  reasoningEfforts?: false | PiAiReasoningEfforts
1029
- /** Reasoning-dispatch switches for this model, winning over the route's. */
1105
+ /** pi-ai wire-compatibility switches for this model, winning over the route's per field; one its protocol does not declare is refused. */
1030
1106
  compat?: PiAiCompatProfile
1031
1107
  }
1032
1108
 
@@ -1040,19 +1116,80 @@ export interface PiAiModelProfile {
1040
1116
  export type PiAiModelOverride = Omit<PiAiModelProfile, 'id'>
1041
1117
 
1042
1118
  /**
1043
- * Reasoning-dispatch compatibility switches, set on the route (its models'
1044
- * default) or per model (winning over the route). Only the switches pi-ai's
1045
- * reasoning dispatch reads are offered; the rest of pi-ai's compat surface
1046
- * keeps its baseURL-derived auto-detection. pi-ai types both fields only on
1047
- * `OpenAICompletionsCompat` the other wire protocols define their reasoning
1048
- * fields in the protocol itself so resolution rejects a model-level switch
1049
- * anywhere else, while a route-level default skips past models it cannot fit.
1119
+ * pi-ai wire-compatibility switches, set on the route (its models' default) or
1120
+ * per model (winning over the route, field by field).
1121
+ *
1122
+ * pi-ai decides each of these from the provider id and baseURL when no layer
1123
+ * sets it, and a private gateway's URL says nothing: for an endpoint it does
1124
+ * not recognize the detection answers as though it were OpenAI itself, which
1125
+ * is wrong for most OpenAI-compatible gateways. So every field here is one a
1126
+ * deployment must be able to state because nothing can infer it, while the
1127
+ * fields pi-ai's catalog sets for a named vendor stay withheld.
1128
+ *
1129
+ * A field belongs to the protocols whose upstream compat type declares it: a
1130
+ * model-level switch its protocol does not take fails resolution, and a
1131
+ * route-level one skips past models it cannot fit. "The three Responses
1132
+ * protocols" below means `openai-responses`, `azure-openai-responses`, and
1133
+ * `openai-codex-responses`, which pi-ai gives one shared compat type, so a
1134
+ * switch settable on one is settable on all three.
1050
1135
  */
1051
1136
  export interface PiAiCompatProfile {
1052
- /** Reasoning parameter format the endpoint expects; absent keeps the catalog entry's, then pi-ai's baseURL-derived guess. */
1053
- thinkingFormat?: PiAiThinkingFormat
1054
- /** Whether the endpoint accepts `reasoning_effort`; absent keeps the catalog entry's, then pi-ai's baseURL-derived guess. */
1137
+ /** Whether the endpoint accepts `store`; `openai-completions`. */
1138
+ supportsStore?: boolean
1139
+ /**
1140
+ * Whether the endpoint accepts the `developer` role for the system prompt,
1141
+ * which pi-ai sends only to a reasoning model; `false` keeps `system`.
1142
+ * `openai-completions` and the three Responses protocols.
1143
+ */
1144
+ supportsDeveloperRole?: boolean
1145
+ /** Whether the endpoint accepts `reasoning_effort`; `openai-completions`. */
1055
1146
  supportsReasoningEffort?: boolean
1147
+ /** Whether the endpoint accepts `stream_options: {include_usage: true}`; `openai-completions`. */
1148
+ supportsUsageInStreaming?: boolean
1149
+ /** Which output-cap field the endpoint reads; `openai-completions`. */
1150
+ maxTokensField?: NonNullable<OpenAICompletionsCompat['maxTokensField']>
1151
+ /** Whether tool results must carry `name`; `openai-completions`. */
1152
+ requiresToolResultName?: boolean
1153
+ /** Whether a user message after tool results needs an assistant message between; `openai-completions`. */
1154
+ requiresAssistantAfterToolResult?: boolean
1155
+ /** Whether thinking blocks must travel as text in `<thinking>` delimiters; `openai-completions`. */
1156
+ requiresThinkingAsText?: boolean
1157
+ /** Whether replayed assistant messages need an empty `reasoning_content` while reasoning is on; `openai-completions`. */
1158
+ requiresReasoningContentOnAssistantMessages?: boolean
1159
+ /** Reasoning parameter format the endpoint expects; `openai-completions`. */
1160
+ thinkingFormat?: PiAiThinkingFormat
1161
+ /**
1162
+ * Kwargs sent as `chat_template_kwargs`, which pi-ai reads only under the
1163
+ * two `chat-template` thinking formats; `openai-completions`. Nothing checks
1164
+ * that pairing: the format in force may come from the installed catalog
1165
+ * entry or from pi-ai's own baseURL detection, neither of which resolution
1166
+ * can read, so kwargs set beside another format are sent nowhere.
1167
+ */
1168
+ chatTemplateKwargs?: NonNullable<OpenAICompletionsCompat['chatTemplateKwargs']>
1169
+ /**
1170
+ * Whether the endpoint accepts `strict` in tool definitions;
1171
+ * `openai-completions`, the three Responses protocols, `bedrock-converse-stream`.
1172
+ */
1173
+ supportsStrictMode?: boolean
1174
+ /** Prompt-cache marker convention; `openai-completions`. */
1175
+ cacheControlFormat?: NonNullable<OpenAICompletionsCompat['cacheControlFormat']>
1176
+ /**
1177
+ * Whether the endpoint accepts long prompt-cache retention;
1178
+ * `openai-completions`, the three Responses protocols, `anthropic-messages`.
1179
+ */
1180
+ supportsLongCacheRetention?: boolean
1181
+ /** Whether the endpoint accepts per-tool `eager_input_streaming`; `anthropic-messages`. */
1182
+ supportsEagerToolInputStreaming?: boolean
1183
+ /** Whether the endpoint accepts `cache_control` on tool definitions; `anthropic-messages`. */
1184
+ supportsCacheControlOnTools?: boolean
1185
+ /** Whether the endpoint accepts the `temperature` request field; `anthropic-messages`. */
1186
+ supportsTemperature?: boolean
1187
+ /** Whether to force adaptive thinking regardless of model id; `anthropic-messages`. */
1188
+ forceAdaptiveThinking?: boolean
1189
+ /** Whether to replay an empty thinking signature instead of converting thinking to text; `anthropic-messages`. */
1190
+ allowEmptySignature?: boolean
1191
+ /** Whether the endpoint accepts Anthropic strict tool schemas; `anthropic-messages`. */
1192
+ supportsStrictTools?: boolean
1056
1193
  }
1057
1194
 
1058
1195
  /** One request modality a pi-ai model may accept. */
@@ -1069,21 +1206,12 @@ export type PiAiModality = Model<Api>['input'][number]
1069
1206
  export type PiAiReasoningEfforts = Partial<Record<ModelThinkingLevel, string | null>>
1070
1207
 
1071
1208
  /** One reasoning-dispatch wire format a profile may name. */
1072
- export type PiAiThinkingFormat = Exclude<PiThinkingFormat, WithheldThinkingFormat>
1073
-
1074
- /** The `compat.thinkingFormat` spellings pi-ai accepts on an `openai-completions` model. */
1075
- type PiThinkingFormat = NonNullable<OpenAICompletionsCompat['thinkingFormat']>
1076
-
1077
- /**
1078
- * pi-ai thinking formats a profile cannot name: both drive the request through
1079
- * `chatTemplateKwargs`, which this configuration does not expose.
1080
- */
1081
- type WithheldThinkingFormat = 'chat-template' | 'qwen-chat-template'
1209
+ export type PiAiThinkingFormat = NonNullable<OpenAICompletionsCompat['thinkingFormat']>
1082
1210
  ```
1083
1211
 
1084
- 依赖:`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`)
1212
+ 依赖:`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`)
1085
1213
 
1086
- 来源:[`packages/llm/llm-pi-ai/src/config.ts:172`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/llm/llm-pi-ai/src/config.ts)
1214
+ 来源:[`packages/llm/llm-pi-ai/src/config.ts:201`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/llm/llm-pi-ai/src/config.ts)
1087
1215
 
1088
1216
  <a id="deepseek-aidsh-llm-replay"></a>
1089
1217
 
@@ -1301,7 +1429,7 @@ export interface Config {
1301
1429
 
1302
1430
  ## `@deepseek-ai/dsh-permission-presets`
1303
1431
 
1304
- 需要:`bash` · `approval` · `sessions`
1432
+ 需要:`shell` · `approval` · `sessions`
1305
1433
 
1306
1434
  ```ts config-catalog
1307
1435
  /** The {@link PermissionPresetService} config: preset table and composition default. */
@@ -1374,7 +1502,7 @@ export interface PlanModeConfig {
1374
1502
  }
1375
1503
  ```
1376
1504
 
1377
- 来源:[`packages/plan/plan-mode/src/index.ts:70`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/plan/plan-mode/src/index.ts)
1505
+ 来源:[`packages/plan/plan-mode/src/index.ts:71`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/plan/plan-mode/src/index.ts)
1378
1506
 
1379
1507
  <a id="deepseek-aidsh-pwsh-local"></a>
1380
1508
 
@@ -1596,41 +1724,23 @@ export type JsonlCompression = 'zstd' | 'none'
1596
1724
  ```ts config-catalog
1597
1725
  /** Plugin configuration. */
1598
1726
  export interface Config {
1599
- /**
1600
- * Filesystem path to the SQLite database file. The special value `:memory:`
1601
- * opens an in-process database (tests). On filesystems with POSIX modes,
1602
- * missing directories and databases are created owner-only; existing path
1603
- * modes are preserved. Filesystem setup errors other than an existing database
1604
- * fail initialization. The backend does not protect confidentiality or
1605
- * integrity when another principal can replace the database entry in its
1606
- * parent directory.
1607
- */
1727
+ /** SQLite database path, or `:memory:` for an in-process database. */
1608
1728
  path: string
1609
- /**
1610
- * SQLite `journal_mode` pragma. `wal` (the default) is the recorded
1611
- * durability model; pick a rollback-journal mode (`delete`/`truncate`/
1612
- * `persist`) on filesystems where WAL's shared-memory files do not work
1613
- * (network mounts). See {@link JournalMode}.
1614
- */
1729
+ /** Durable SQLite journal mode; defaults to `wal`. */
1615
1730
  journalMode?: JournalMode
1731
+ /** Maximum wait for another SQLite connection's lock; defaults to 5,000 ms. */
1732
+ busyTimeoutMs?: number
1616
1733
  /** Maximum cold Session preparations retained for history-to-resume reuse. */
1617
1734
  preparedSessionCacheSize?: number
1618
1735
  /** Fixed live-event coalescing window; not a backend completion deadline. */
1619
1736
  writeBatchMaxDelayMs?: number
1620
1737
  }
1621
1738
 
1622
- /**
1623
- * Journal modes the backend will run under. `wal` is the default and the
1624
- * durability model the persistence ADR records; the rollback-journal modes
1625
- * (`delete`/`truncate`/`persist`) exist for filesystems where WAL's
1626
- * shared-memory files do not work (network mounts). `memory`/`off` are
1627
- * excluded: dropping journal durability silently contradicts what this
1628
- * backend promises.
1629
- */
1739
+ /** Durable journal modes accepted by the backend. */
1630
1740
  export type JournalMode = 'wal' | 'delete' | 'truncate' | 'persist'
1631
1741
  ```
1632
1742
 
1633
- 来源:[`packages/session/session-persistence-sqlite/src/index.ts:70`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/session/session-persistence-sqlite/src/index.ts)
1743
+ 来源:[`packages/session/session-persistence-sqlite/src/index.ts:36`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/session/session-persistence-sqlite/src/index.ts)
1634
1744
 
1635
1745
  <a id="deepseek-aidsh-session-projection-cache"></a>
1636
1746
 
@@ -2085,19 +2195,31 @@ export type PermissionPolicy = 'allow' | 'reject'
2085
2195
  需要:`subagents` · `subprocess`
2086
2196
 
2087
2197
  ```ts config-catalog
2088
- /** Deployment-owned environment and process-release bound. */
2198
+ /** Deployment-owned permission, environment, and process-release settings. */
2089
2199
  export interface Config {
2200
+ /** Provider name on `ctx.subagents` (default `claude-code`). */
2201
+ providerName?: string
2090
2202
  /**
2091
2203
  * Explicit environment entries layered over the subprocess seam's
2092
2204
  * credential-scrubbed parent environment.
2093
2205
  */
2094
2206
  env?: Record<string, string>
2207
+ /**
2208
+ * Native non-interactive mode fixed for this Provider instance. Defaults to
2209
+ * `dontAsk`; `acceptEdits` accepts edits, `auto` uses the native classifier,
2210
+ * `plan` returns a plan without approving execution, and
2211
+ * `bypassPermissions` explicitly skips permission checks.
2212
+ */
2213
+ permissionMode?: ClaudeCodePermissionMode
2095
2214
  /** Grace in milliseconds for Claude Code process-tree termination. */
2096
2215
  disposeGraceMs?: number
2097
2216
  }
2217
+
2218
+ /** Profile-selectable non-interactive Claude Code permission mode. */
2219
+ export type ClaudeCodePermissionMode = typeof CLAUDE_CODE_PERMISSION_MODES[number]
2098
2220
  ```
2099
2221
 
2100
- 来源:[`packages/subagent/subagent-claude-code/src/index.ts:32`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/subagent/subagent-claude-code/src/index.ts)
2222
+ 来源:[`packages/subagent/subagent-claude-code/src/index.ts:38`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/subagent/subagent-claude-code/src/index.ts)
2101
2223
 
2102
2224
  <a id="deepseek-aidsh-subagent-codex"></a>
2103
2225
 
@@ -2106,19 +2228,29 @@ export interface Config {
2106
2228
  需要:`subagents` · `subprocess`
2107
2229
 
2108
2230
  ```ts config-catalog
2109
- /** Deployment-owned environment and process-release bound. */
2231
+ /** Deployment-owned permission, environment, and process-release settings. */
2110
2232
  export interface Config {
2233
+ /** Provider name on `ctx.subagents` (default `codex`). */
2234
+ providerName?: string
2111
2235
  /**
2112
2236
  * Explicit environment entries layered over the subprocess seam's
2113
2237
  * credential-scrubbed parent environment.
2114
2238
  */
2115
2239
  env?: Record<string, string>
2240
+ /** Native non-interactive permission mode fixed for this Provider instance. */
2241
+ permissionMode?: CodexPermissionMode
2116
2242
  /** Grace in milliseconds for app-server process-tree termination. */
2117
2243
  disposeGraceMs?: number
2118
2244
  }
2245
+
2246
+ /** Profile-selectable non-interactive Codex permission mode. */
2247
+ export type CodexPermissionMode =
2248
+ | 'never'
2249
+ | 'approve-for-me'
2250
+ | 'dangerously-bypass-approvals-and-sandbox'
2119
2251
  ```
2120
2252
 
2121
- 来源:[`packages/subagent/subagent-codex/src/index.ts:30`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/subagent/subagent-codex/src/index.ts)
2253
+ 来源:[`packages/subagent/subagent-codex/src/index.ts:36`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/subagent/subagent-codex/src/index.ts)
2122
2254
 
2123
2255
  <a id="deepseek-aidsh-subagent-dsh-sdk"></a>
2124
2256
 
@@ -2252,16 +2384,18 @@ export interface Config {
2252
2384
 
2253
2385
  ## `@deepseek-ai/dsh-terminal-bash`
2254
2386
 
2255
- 需要:`pty` · `sandboxPolicy` · `subprocess`
2387
+ 需要:`terminals` · `sandboxPolicy` · `subprocess`
2256
2388
 
2257
2389
  ```ts config-catalog
2258
2390
  /** Public plugin configuration. */
2259
2391
  export interface Config {
2260
2392
  /** Backend registry type (default: `shell`). */
2261
2393
  backendType?: string
2262
- /** Interactive shell executable (default: `/bin/bash`). */
2394
+ /** Interactive shell dialect (default: `bash`); selects the argv/env/startup defaults. */
2395
+ shellDialect?: ShellDialect
2396
+ /** Interactive shell executable (default per dialect: `/bin/bash`, or the resolved pwsh). */
2263
2397
  shellPath?: string
2264
- /** Shell arguments (default: `--noprofile --norc -i`). */
2398
+ /** Shell arguments (default per dialect: bash `--noprofile --norc -i`, pwsh `-NoLogo -NoProfile`). */
2265
2399
  shellArgs?: string[]
2266
2400
  /** Terminal rows. */
2267
2401
  rows?: number
@@ -2289,9 +2423,12 @@ export interface Config {
2289
2423
  /** Grace before teardown escalates to `SIGKILL`. */
2290
2424
  disposeGraceMs?: number
2291
2425
  }
2426
+
2427
+ /** One supported interactive shell dialect. */
2428
+ export type ShellDialect = 'bash' | 'pwsh'
2292
2429
  ```
2293
2430
 
2294
- 来源:[`packages/terminal/terminal-bash/src/config.ts:6`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/terminal/terminal-bash/src/config.ts)
2431
+ 来源:[`packages/terminal/terminal-bash/src/config.ts:10`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/terminal/terminal-bash/src/config.ts)
2295
2432
 
2296
2433
  <a id="deepseek-aidsh-time-context"></a>
2297
2434
 
@@ -2342,7 +2479,7 @@ export type TokenMeterConfig = Record<string, never>
2342
2479
 
2343
2480
  ## `@deepseek-ai/dsh-tool-bash`
2344
2481
 
2345
- 需要:`tools` · `bash` · `systemPrompt` · `bashEnv`
2482
+ 需要:`tools` · `shell` · `systemPrompt` · `shellEnv`
2346
2483
 
2347
2484
  ```ts config-catalog
2348
2485
  /** Configuration for the bash tool. */
@@ -2358,7 +2495,7 @@ export interface Config {
2358
2495
 
2359
2496
  ## `@deepseek-ai/dsh-tool-bash-persistent`
2360
2497
 
2361
- 需要:`tools` · `pty`
2498
+ 需要:`tools` · `terminals`
2362
2499
 
2363
2500
  ```ts config-catalog
2364
2501
  /** Configuration for the persistent Bash tool. */
@@ -2374,7 +2511,7 @@ export interface Config {
2374
2511
  }
2375
2512
  ```
2376
2513
 
2377
- 来源:[`packages/shell/tool-bash-persistent/src/index.ts:400`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/shell/tool-bash-persistent/src/index.ts)
2514
+ 来源:[`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)
2378
2515
 
2379
2516
  <a id="deepseek-aidsh-tool-fs"></a>
2380
2517
 
@@ -2453,7 +2590,7 @@ export interface Config {
2453
2590
 
2454
2591
  ## `@deepseek-ai/dsh-tool-jobs`
2455
2592
 
2456
- 需要:`tools` · `tasks` · `systemPrompt`
2593
+ 需要:`tools` · `jobs` · `systemPrompt`
2457
2594
 
2458
2595
  ```ts config-catalog
2459
2596
  /** Configures bounded `job_output` waits and completion-notice delivery. */
@@ -2507,7 +2644,7 @@ export interface Config {
2507
2644
 
2508
2645
  ## `@deepseek-ai/dsh-tool-pwsh`
2509
2646
 
2510
- 需要:`tools` · `bash` · `systemPrompt` · `bashEnv`
2647
+ 需要:`tools` · `shell` · `systemPrompt` · `shellEnv`
2511
2648
 
2512
2649
  ```ts config-catalog
2513
2650
  /** Configuration for the pwsh tool. */
@@ -2519,11 +2656,33 @@ export interface Config {
2519
2656
 
2520
2657
  来源:[`packages/shell/tool-pwsh/src/index.ts:52`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/shell/tool-pwsh/src/index.ts)
2521
2658
 
2659
+ <a id="deepseek-aidsh-tool-pwsh-persistent"></a>
2660
+
2661
+ ## `@deepseek-ai/dsh-tool-pwsh-persistent`
2662
+
2663
+ 需要:`tools` · `terminals`
2664
+
2665
+ ```ts config-catalog
2666
+ /** Configuration for the persistent pwsh tool. */
2667
+ export interface Config {
2668
+ /** PTY backend used for each owner-isolated persistent shell (default `shell`). */
2669
+ backendType?: string
2670
+ /** Wall-clock limit for one command (default 300000). */
2671
+ timeoutMs?: number
2672
+ /** Maximum returned command-output characters before clipping (default 16000). */
2673
+ maxOutputChars?: number
2674
+ /** Model-facing tool description; deployments may describe their environment. */
2675
+ description?: string
2676
+ }
2677
+ ```
2678
+
2679
+ 来源:[`packages/shell/tool-pwsh-persistent/src/index.ts:472`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/shell/tool-pwsh-persistent/src/index.ts)
2680
+
2522
2681
  <a id="deepseek-aidsh-tool-ralph"></a>
2523
2682
 
2524
2683
  ## `@deepseek-ai/dsh-tool-ralph`
2525
2684
 
2526
- 需要:`tools` · `workflows` · `subagents` · `systemPrompt`
2685
+ 需要:`tools` · `workflowEngine` · `subagents` · `systemPrompt`
2527
2686
 
2528
2687
  ```ts config-catalog
2529
2688
  /** Deployment policy for the fixed Ralph workflow. */
@@ -2668,9 +2827,9 @@ export interface Config {
2668
2827
  /** Config: how accepted reports are scheduled on the parent. */
2669
2828
  export interface Config {
2670
2829
  /**
2671
- * Parent scheduling (default `wakeup`). `wakeup` creates one ordinary later
2672
- * parent turn; `quiet` adds context without waking, so a parked parent learns
2673
- * of the report only when something else wakes it.
2830
+ * Parent scheduling (default `next-step`). `next-step` wakes the parent and
2831
+ * enters at its nearest step boundary; `quiet` adds the same context without
2832
+ * waking, so a parked parent waits for another waking input.
2674
2833
  */
2675
2834
  reportDelivery?: SubagentReportDelivery
2676
2835
  }
@@ -2684,7 +2843,7 @@ export interface Config {
2684
2843
 
2685
2844
  ## `@deepseek-ai/dsh-tool-terminal`
2686
2845
 
2687
- 需要:`pty` · `tools` · `systemPrompt`
2846
+ 需要:`terminals` · `tools` · `systemPrompt`
2688
2847
 
2689
2848
  ```ts config-catalog
2690
2849
  /** Model-facing terminal tool configuration. */
@@ -2727,7 +2886,7 @@ export interface Config {
2727
2886
  需要:`tools` · `web` · `systemPrompt`
2728
2887
 
2729
2888
  ```ts config-catalog
2730
- /** Plugin config: which web tools to register, the source cap, per-tool budgets, and the fetch output cap. */
2889
+ /** Plugin config: which web tools to register, search bounds, per-tool budgets, and the fetch output cap. */
2731
2890
  export interface Config {
2732
2891
  /** Register `web_search`. Defaults to true. */
2733
2892
  search?: boolean
@@ -2735,6 +2894,8 @@ export interface Config {
2735
2894
  fetch?: boolean
2736
2895
  /** Upper bound on sources returned by one `web_search` call. */
2737
2896
  searchMaxResults?: number
2897
+ /** Upper bound on queries accepted by one `web_search` call. */
2898
+ searchMaxQueries?: number
2738
2899
  /** Cooperative timeout budget (ms) for `web_fetch`. Defaults to 30000. */
2739
2900
  fetchTimeoutMs?: number
2740
2901
  /** Cooperative timeout budget (ms) for `web_search`. Defaults to 30000. */
@@ -2750,7 +2911,7 @@ export interface Config {
2750
2911
 
2751
2912
  ## `@deepseek-ai/dsh-tool-workflow`
2752
2913
 
2753
- 需要:`tools` · `workflows` · `systemPrompt`
2914
+ 需要:`tools` · `workflowEngine` · `systemPrompt`
2754
2915
 
2755
2916
  ```ts config-catalog
2756
2917
  /** Config: the model-facing tool name plus result rendering caps. */
@@ -2877,6 +3038,8 @@ export interface WebRuntimeConfig {
2877
3038
  ```ts config-catalog
2878
3039
  /** Plugin config: composed deployment settings plus per-invocation command-line values. */
2879
3040
  export interface Config {
3041
+ /** Permit default-browser handoff after the Loader tree settles; an SSH launch suppresses it. */
3042
+ openBrowser: boolean
2880
3043
  /** Print the URL line on activation; a non-interactive layer can turn it off. */
2881
3044
  printUrl: boolean
2882
3045
  /**
@@ -2891,7 +3054,7 @@ export interface Config {
2891
3054
  }
2892
3055
  ```
2893
3056
 
2894
- 来源:[`packages/bundle/web-app/src/index.ts:38`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/bundle/web-app/src/index.ts)
3057
+ 来源:[`packages/bundle/web-app/src/index.ts:42`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/bundle/web-app/src/index.ts)
2895
3058
 
2896
3059
  <a id="deepseek-aidsh-web-fetch-http"></a>
2897
3060
 
@@ -3036,6 +3199,8 @@ export interface Config {
3036
3199
  - `@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))
3037
3200
  - `@deepseek-ai/dsh-client-runtime`([`packages/client/runtime/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/runtime/src/index.ts))
3038
3201
  - `@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))
3202
+ - `@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))
3203
+ - `@deepseek-ai/dsh-client-ui-brand-official`([`packages/client/ui-brand-official/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/ui-brand-official/src/index.ts))
3039
3204
  - `@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))
3040
3205
  - `@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))
3041
3206
  - `@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))
@@ -3050,6 +3215,8 @@ export interface Config {
3050
3215
  - `@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))
3051
3216
  - `@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))
3052
3217
  - `@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))
3218
+ - `@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))
3219
+ - `@deepseek-ai/dsh-client-ui-renderer`([`packages/client/ui-renderer/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/ui-renderer/src/index.ts))
3053
3220
  - `@deepseek-ai/dsh-client-ui-settings`([`packages/client/ui-settings/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/ui-settings/src/index.ts))
3054
3221
  - `@deepseek-ai/dsh-client-ui-settings-general`([`packages/client/ui-settings-general/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/ui-settings-general/src/index.ts))
3055
3222
  - `@deepseek-ai/dsh-client-ui-settings-models`([`packages/client/ui-settings-models/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/ui-settings-models/src/index.ts))
@@ -3103,6 +3270,7 @@ export interface Config {
3103
3270
  - `@deepseek-ai/dsh-code-runtime` — 抽象 `CodeRuntime`([`packages/code-runtime/code-runtime/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/code-runtime/code-runtime/src/index.ts))
3104
3271
  - `@deepseek-ai/dsh-compaction` — 抽象 `CompactionEngine`([`packages/compaction/compaction/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/compaction/compaction/src/index.ts))
3105
3272
  - `@deepseek-ai/dsh-credentials` — 抽象 `Credentials`([`packages/credentials/credentials/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/credentials/credentials/src/index.ts))
3273
+ - `@deepseek-ai/dsh-file-reference` — 抽象 `FileReferenceService`([`packages/context/file-reference/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/context/file-reference/src/index.ts))
3106
3274
  - `@deepseek-ai/dsh-fs` — 抽象 `FileSystem`([`packages/fs/fs/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/fs/fs/src/index.ts))
3107
3275
  - `@deepseek-ai/dsh-host-directory-picker` — 抽象 `DirectoryPicker`([`packages/host/directory-picker/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/host/directory-picker/src/index.ts))
3108
3276
  - `@deepseek-ai/dsh-jobs` — 抽象 `JobRegistry`([`packages/jobs/jobs/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/jobs/jobs/src/index.ts))
@@ -3125,14 +3293,12 @@ export interface Config {
3125
3293
  - `@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))
3126
3294
  - `@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))
3127
3295
  - `@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))
3128
- - `@deepseek-ai/dsh-client-schema-form`([`packages/client/schema-form/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/schema-form/src/index.ts))
3129
3296
  - `@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))
3130
- - `@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))
3131
3297
  - `@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))
3132
3298
  - `@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))
3133
3299
  - `@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))
3134
- - `@deepseek-ai/dsh-client-web-react`([`packages/client/web-react/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/web-react/src/index.ts))
3135
3300
  - `@deepseek-ai/dsh-cmdline`([`packages/boot/cmdline/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/boot/cmdline/src/index.ts))
3301
+ - `@deepseek-ai/dsh-code-runtime-python`([`packages/code-runtime/code-runtime-python/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/code-runtime/code-runtime-python/src/index.ts))
3136
3302
  - `@deepseek-ai/dsh-home-paths`([`packages/util/home-paths/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/util/home-paths/src/index.ts))
3137
3303
  - `@deepseek-ai/dsh-hook-protocol`([`packages/hooks/hook-protocol/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/hooks/hook-protocol/src/index.ts))
3138
3304
  - `@deepseek-ai/dsh-launch-environment`([`packages/util/launch-environment/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/util/launch-environment/src/index.ts))