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.
- package/README.md +37 -4
- package/kb/INDEX.md +1 -1
- package/kb/README.md +22 -11
- package/kb/extra/development.md +2 -0
- package/kb/extra/development.zh.md +2 -0
- package/kb/extra/event-producer-consumer.md +9 -9
- package/kb/extra/event-producer-consumer.zh.md +9 -9
- package/kb/extra/i18n/README.md +1 -1
- package/kb/extra/i18n/README.zh.md +1 -1
- package/kb/extra/module-graph.md +251 -210
- package/kb/extra/module-graph.zh.md +251 -210
- package/kb/extra/subsystems/agent-team.md +183 -0
- package/kb/extra/subsystems/agent-team.zh.md +183 -0
- package/kb/extra/subsystems/attachment.md +16 -2
- package/kb/extra/subsystems/attachment.zh.md +16 -2
- package/kb/meta/search-index.json +54 -42
- package/kb/meta/source.json +3 -3
- package/kb/meta/topics.md +1 -1
- package/kb/site/en/guide/providers.md +40 -1
- package/kb/site/en/reference/capability-seams.md +12 -0
- package/kb/site/en/reference/config-catalog.md +238 -72
- package/kb/site/en/reference/index.md +2 -0
- package/kb/site/en/reference/persistence-catalog.md +76 -13
- package/kb/site/en/reference/subsystems/client-modules.md +11 -3
- package/kb/site/en/reference/subsystems/commands.md +28 -5
- package/kb/site/en/reference/subsystems/index.md +1 -0
- package/kb/site/en/reference/subsystems/llm-streaming.md +11 -2
- package/kb/site/en/reference/subsystems/persistence.md +3 -3
- package/kb/site/en/reference/subsystems/plan.md +1 -1
- package/kb/site/en/reference/subsystems/session-reference.md +71 -5
- package/kb/site/en/reference/subsystems/session.md +6 -2
- package/kb/site/en/reference/subsystems/subagent.md +22 -3
- package/kb/site/en/reference/subsystems/web.md +5 -4
- package/kb/site/en/reference/tool-catalog.md +353 -5
- package/kb/site/guide/providers.md +40 -1
- package/kb/site/reference/capability-seams.md +12 -0
- package/kb/site/reference/config-catalog.md +252 -86
- package/kb/site/reference/index.md +2 -0
- package/kb/site/reference/persistence-catalog.md +76 -13
- package/kb/site/reference/subsystems/client-modules.md +11 -3
- package/kb/site/reference/subsystems/commands.md +28 -5
- package/kb/site/reference/subsystems/index.md +1 -0
- package/kb/site/reference/subsystems/llm-streaming.md +11 -2
- package/kb/site/reference/subsystems/persistence.md +3 -3
- package/kb/site/reference/subsystems/plan.md +1 -1
- package/kb/site/reference/subsystems/session-reference.md +71 -5
- package/kb/site/reference/subsystems/session.md +6 -2
- package/kb/site/reference/subsystems/subagent.md +22 -3
- package/kb/site/reference/subsystems/web.md +5 -4
- package/kb/site/reference/tool-catalog.md +352 -5
- package/package.json +8 -2
- package/scripts/rebuild-index.mjs +2 -1
- package/scripts/selfcheck.mjs +30 -0
- 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
|
-
Source: [`packages/attachment/attachment-local/src/index.ts:
|
|
347
|
+
Source: [`packages/attachment/attachment-local/src/index.ts:31`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/attachment/attachment-local/src/index.ts)
|
|
346
348
|
|
|
347
349
|
<a id="deepseek-aidsh-bash-local"></a>
|
|
348
350
|
|
|
@@ -589,6 +591,68 @@ export interface Config {
|
|
|
589
591
|
|
|
590
592
|
Source: [`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
|
+
Requires: `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
|
+
Source: [`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
|
+
Requires: `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
|
+
Source: [`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
|
+
Requires: `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
|
+
Source: [`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`
|
|
@@ -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
|
-
/**
|
|
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
|
-
Depends on: [`RetryPolicyConfig`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/llm/llm/src/index.ts)
|
|
962
|
+
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)
|
|
895
963
|
|
|
896
|
-
Source: [`packages/llm/llm-deepseek/src/index.ts:
|
|
964
|
+
Source: [`packages/llm/llm-deepseek/src/index.ts:66`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/llm/llm-deepseek/src/index.ts)
|
|
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
|
-
*
|
|
946
|
-
*
|
|
947
|
-
* keeps the installed catalog entry's value, then
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
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
|
-
*
|
|
1044
|
-
*
|
|
1045
|
-
*
|
|
1046
|
-
*
|
|
1047
|
-
*
|
|
1048
|
-
*
|
|
1049
|
-
*
|
|
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
|
-
/**
|
|
1053
|
-
|
|
1054
|
-
/**
|
|
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 =
|
|
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
1212
|
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`)
|
|
1085
1213
|
|
|
1086
|
-
Source: [`packages/llm/llm-pi-ai/src/config.ts:
|
|
1214
|
+
Source: [`packages/llm/llm-pi-ai/src/config.ts:201`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/llm/llm-pi-ai/src/config.ts)
|
|
1087
1215
|
|
|
1088
1216
|
<a id="deepseek-aidsh-llm-replay"></a>
|
|
1089
1217
|
|
|
@@ -1374,7 +1502,7 @@ export interface PlanModeConfig {
|
|
|
1374
1502
|
}
|
|
1375
1503
|
```
|
|
1376
1504
|
|
|
1377
|
-
Source: [`packages/plan/plan-mode/src/index.ts:
|
|
1505
|
+
Source: [`packages/plan/plan-mode/src/index.ts:71`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/plan/plan-mode/src/index.ts)
|
|
1378
1506
|
|
|
1379
1507
|
<a id="deepseek-aidsh-pwsh-local"></a>
|
|
1380
1508
|
|
|
@@ -1596,41 +1724,23 @@ Requires: `sessions`
|
|
|
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
|
-
Source: [`packages/session/session-persistence-sqlite/src/index.ts:
|
|
1743
|
+
Source: [`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 @@ Source: [`packages/subagent/subagent-acp/src/index.ts:27`](https://github.com/de
|
|
|
2085
2195
|
Requires: `subagents` · `subprocess`
|
|
2086
2196
|
|
|
2087
2197
|
```ts config-catalog
|
|
2088
|
-
/** Deployment-owned environment and process-release
|
|
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
|
-
Source: [`packages/subagent/subagent-claude-code/src/index.ts:
|
|
2222
|
+
Source: [`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 @@ Source: [`packages/subagent/subagent-claude-code/src/index.ts:32`](https://githu
|
|
|
2106
2228
|
Requires: `subagents` · `subprocess`
|
|
2107
2229
|
|
|
2108
2230
|
```ts config-catalog
|
|
2109
|
-
/** Deployment-owned environment and process-release
|
|
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
|
-
Source: [`packages/subagent/subagent-codex/src/index.ts:
|
|
2253
|
+
Source: [`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
|
|
|
@@ -2259,9 +2391,11 @@ Requires: `terminals` · `sandboxPolicy` · `subprocess`
|
|
|
2259
2391
|
export interface Config {
|
|
2260
2392
|
/** Backend registry type (default: `shell`). */
|
|
2261
2393
|
backendType?: string
|
|
2262
|
-
/** Interactive shell
|
|
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
|
-
Source: [`packages/terminal/terminal-bash/src/config.ts:
|
|
2431
|
+
Source: [`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
|
|
|
@@ -2374,7 +2511,7 @@ export interface Config {
|
|
|
2374
2511
|
}
|
|
2375
2512
|
```
|
|
2376
2513
|
|
|
2377
|
-
Source: [`packages/shell/tool-bash-persistent/src/index.ts:
|
|
2514
|
+
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)
|
|
2378
2515
|
|
|
2379
2516
|
<a id="deepseek-aidsh-tool-fs"></a>
|
|
2380
2517
|
|
|
@@ -2519,6 +2656,28 @@ export interface Config {
|
|
|
2519
2656
|
|
|
2520
2657
|
Source: [`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
|
+
Requires: `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
|
+
Source: [`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`
|
|
@@ -2668,9 +2827,9 @@ Requires: `subagents` · `tools` · `systemPrompt`
|
|
|
2668
2827
|
/** Config: how accepted reports are scheduled on the parent. */
|
|
2669
2828
|
export interface Config {
|
|
2670
2829
|
/**
|
|
2671
|
-
* Parent scheduling (default `
|
|
2672
|
-
*
|
|
2673
|
-
*
|
|
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
|
}
|
|
@@ -2727,7 +2886,7 @@ Source: [`packages/todo/tool-todo/src/index.ts:29`](https://github.com/deepseek-
|
|
|
2727
2886
|
Requires: `tools` · `web` · `systemPrompt`
|
|
2728
2887
|
|
|
2729
2888
|
```ts config-catalog
|
|
2730
|
-
/** Plugin config: which web tools to register,
|
|
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. */
|
|
@@ -2877,6 +3038,8 @@ Requires: `webServer`
|
|
|
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
|
-
Source: [`packages/bundle/web-app/src/index.ts:
|
|
3057
|
+
Source: [`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 @@ These load from a `cordis.yml` entry with no `config:` block; they declare no co
|
|
|
3036
3199
|
- `@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))
|
|
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 @@ These load from a `cordis.yml` entry with no `config:` block; they declare no co
|
|
|
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 @@ Abstract service classes — a deployment loads a concrete implementation packag
|
|
|
3103
3270
|
- `@deepseek-ai/dsh-code-runtime` — abstract `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` — abstract `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` — abstract `CredentialProvider` ([`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` — abstract `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` — abstract `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` — abstract `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` — abstract `JobRegistry` ([`packages/jobs/jobs/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/jobs/jobs/src/index.ts))
|
|
@@ -3126,14 +3294,12 @@ Imported as libraries by other packages; a `cordis.yml` cannot load them.
|
|
|
3126
3294
|
- `@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))
|
|
3127
3295
|
- `@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))
|
|
3128
3296
|
- `@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))
|
|
3129
|
-
- `@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))
|
|
3130
3297
|
- `@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))
|
|
3131
|
-
- `@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))
|
|
3132
3298
|
- `@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))
|
|
3133
3299
|
- `@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))
|
|
3134
3300
|
- `@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))
|
|
3135
|
-
- `@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))
|
|
3136
3301
|
- `@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))
|
|
3302
|
+
- `@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))
|
|
3137
3303
|
- `@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))
|
|
3138
3304
|
- `@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))
|
|
3139
3305
|
- `@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))
|
|
@@ -103,6 +103,8 @@ A **seam** is a swappable capability with three roles: a **Service Definition**
|
|
|
103
103
|
|
|
104
104
|
Seams are why one provider swap changes the whole product. Filesystem and subprocess providers share one execution world, so pointing them at a remote sandbox moves Bash, PTY, and LSP with them, with no provider forks. [Subagent providers](./subsystems/subagent.md) vary just as widely behind one interface, from a fresh child agent to a delegated turn in another product.
|
|
105
105
|
|
|
106
|
+
[Experimental Agent Teams](https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/subsystems/agent-team.md) is a private opt-in coordination seam on `ctx.agentTeams`, with a durable roster, task board, and mailbox layered over continuable subagents.
|
|
107
|
+
|
|
106
108
|
## Where new behavior goes
|
|
107
109
|
|
|
108
110
|
New behavior attaches to a documented extension point. Changing the loop itself updates this map.
|