external-subagent 0.6.2 → 0.6.3
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/cli/constants.mjs +1 -1
- package/npm/native/darwin-arm64/external-subagent-mcp +0 -0
- package/npm/native/darwin-arm64/external-subagentd +0 -0
- package/npm/native/darwin-arm64/payload.json +4 -4
- package/npm/native/linux-x64/external-subagent-mcp +0 -0
- package/npm/native/linux-x64/external-subagentd +0 -0
- package/npm/native/linux-x64/payload.json +5 -5
- package/package.json +1 -1
- package/schema/external-subagent-public-api.json +578 -91
package/cli/constants.mjs
CHANGED
|
@@ -12,7 +12,7 @@ const IS_DEBUG_VARIANT = process.env.EXTERNAL_SUBAGENT_VARIANT === 'debug';
|
|
|
12
12
|
|
|
13
13
|
export const PRODUCT_NAME = IS_DEBUG_VARIANT ? 'external-subagent-debug' : 'external-subagent';
|
|
14
14
|
export const PRODUCT_ID = IS_DEBUG_VARIANT ? 'external_subagent_debug' : 'external_subagent';
|
|
15
|
-
export const VERSION = '0.6.
|
|
15
|
+
export const VERSION = '0.6.3';
|
|
16
16
|
export const LAUNCH_AGENT_LABEL = IS_DEBUG_VARIANT ? 'com.external-subagent-debug.daemon' : 'com.external-subagent.daemon';
|
|
17
17
|
export const DAEMON_BIN_NAME = IS_DEBUG_VARIANT ? 'external-subagent-debugd' : 'external-subagentd';
|
|
18
18
|
export const MCP_BIN_NAME = IS_DEBUG_VARIANT ? 'external-subagent-debug-mcp' : 'external-subagent-mcp';
|
|
Binary file
|
|
Binary file
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema_version": 1,
|
|
3
3
|
"product": "external-subagent",
|
|
4
|
-
"version": "0.6.
|
|
4
|
+
"version": "0.6.3",
|
|
5
5
|
"platform": "darwin-arm64",
|
|
6
6
|
"files": [
|
|
7
7
|
{
|
|
8
8
|
"name": "external-subagentd",
|
|
9
|
-
"bytes":
|
|
9
|
+
"bytes": 10454160,
|
|
10
10
|
"mode": "755",
|
|
11
|
-
"sha256": "
|
|
11
|
+
"sha256": "8365dfc712e5cca2f3332dcab5db0e7b5eb905eb2e0e7dc231016b45c7275094"
|
|
12
12
|
},
|
|
13
13
|
{
|
|
14
14
|
"name": "external-subagent-mcp",
|
|
15
15
|
"bytes": 935776,
|
|
16
16
|
"mode": "755",
|
|
17
|
-
"sha256": "
|
|
17
|
+
"sha256": "98e60f3a0ff2840318842232a6f7689326a1e7d75f487cbcb0878ddce7b64719"
|
|
18
18
|
}
|
|
19
19
|
]
|
|
20
20
|
}
|
|
Binary file
|
|
Binary file
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema_version": 1,
|
|
3
3
|
"product": "external-subagent",
|
|
4
|
-
"version": "0.6.
|
|
4
|
+
"version": "0.6.3",
|
|
5
5
|
"platform": "linux-x64",
|
|
6
6
|
"files": [
|
|
7
7
|
{
|
|
8
8
|
"name": "external-subagentd",
|
|
9
|
-
"bytes":
|
|
9
|
+
"bytes": 12033072,
|
|
10
10
|
"mode": "755",
|
|
11
|
-
"sha256": "
|
|
11
|
+
"sha256": "5d8f39b76e22c24c8f848f9c753b7ba4336e9ecb57b82ef25d511ed21039dce7"
|
|
12
12
|
},
|
|
13
13
|
{
|
|
14
14
|
"name": "external-subagent-mcp",
|
|
15
|
-
"bytes":
|
|
15
|
+
"bytes": 1025520,
|
|
16
16
|
"mode": "755",
|
|
17
|
-
"sha256": "
|
|
17
|
+
"sha256": "11999c141398a0009f33d740123d381ad4aae58c0a56fb2131629b378da96e89"
|
|
18
18
|
}
|
|
19
19
|
]
|
|
20
20
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "external-subagent",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.3",
|
|
4
4
|
"description": "Manage bounded ZCode, DeepSeek Harness (DSH), Codex, and Google Antigravity (agy) subagent tasks through a local MCP service for any local host (Codex, ZCode, or a custom MCP client)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -4,181 +4,544 @@
|
|
|
4
4
|
"title": "external-subagent MCP public API",
|
|
5
5
|
"description": "The intentionally small external_subagent_* wire catalog.",
|
|
6
6
|
"type": "object",
|
|
7
|
-
"required": [
|
|
7
|
+
"required": [
|
|
8
|
+
"tools"
|
|
9
|
+
],
|
|
8
10
|
"properties": {
|
|
9
11
|
"tools": {
|
|
10
12
|
"type": "array",
|
|
11
|
-
"const": [
|
|
13
|
+
"const": [
|
|
14
|
+
"external_subagent_cancel",
|
|
15
|
+
"external_subagent_close",
|
|
16
|
+
"external_subagent_list",
|
|
17
|
+
"external_subagent_observe",
|
|
18
|
+
"external_subagent_wait",
|
|
19
|
+
"external_subagent_respond",
|
|
20
|
+
"external_subagent_result",
|
|
21
|
+
"external_subagent_send",
|
|
22
|
+
"external_subagent_spawn",
|
|
23
|
+
"external_subagent_status"
|
|
24
|
+
]
|
|
25
|
+
},
|
|
26
|
+
"permission_mode": {
|
|
27
|
+
"enum": [
|
|
28
|
+
"build",
|
|
29
|
+
"edit",
|
|
30
|
+
"plan",
|
|
31
|
+
"yolo"
|
|
32
|
+
],
|
|
33
|
+
"default": "build"
|
|
12
34
|
},
|
|
13
|
-
"permission_mode": { "enum": ["build", "edit", "plan", "yolo"], "default": "build" },
|
|
14
35
|
"subagent_status": {
|
|
15
36
|
"type": "object",
|
|
16
|
-
"required": [
|
|
37
|
+
"required": [
|
|
38
|
+
"subagent",
|
|
39
|
+
"configured",
|
|
40
|
+
"enabled",
|
|
41
|
+
"spawn_supported",
|
|
42
|
+
"permission_modes",
|
|
43
|
+
"model_selection",
|
|
44
|
+
"effort_selection",
|
|
45
|
+
"local",
|
|
46
|
+
"auth",
|
|
47
|
+
"hi"
|
|
48
|
+
],
|
|
17
49
|
"properties": {
|
|
18
|
-
"subagent": {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
50
|
+
"subagent": {
|
|
51
|
+
"enum": [
|
|
52
|
+
"zcode",
|
|
53
|
+
"dsh",
|
|
54
|
+
"codex",
|
|
55
|
+
"agy"
|
|
56
|
+
]
|
|
57
|
+
},
|
|
58
|
+
"configured": {
|
|
59
|
+
"type": "boolean"
|
|
60
|
+
},
|
|
61
|
+
"enabled": {
|
|
62
|
+
"type": "boolean"
|
|
63
|
+
},
|
|
64
|
+
"spawn_supported": {
|
|
65
|
+
"type": "boolean"
|
|
66
|
+
},
|
|
22
67
|
"permission_modes": {
|
|
23
68
|
"type": "array",
|
|
24
|
-
"items": {
|
|
69
|
+
"items": {
|
|
70
|
+
"enum": [
|
|
71
|
+
"build",
|
|
72
|
+
"edit",
|
|
73
|
+
"plan",
|
|
74
|
+
"yolo"
|
|
75
|
+
]
|
|
76
|
+
},
|
|
25
77
|
"uniqueItems": true
|
|
26
78
|
},
|
|
27
79
|
"model_selection": {
|
|
28
80
|
"type": "object",
|
|
29
|
-
"required": [
|
|
81
|
+
"required": [
|
|
82
|
+
"supported",
|
|
83
|
+
"mode"
|
|
84
|
+
],
|
|
30
85
|
"properties": {
|
|
31
|
-
"supported": {
|
|
32
|
-
|
|
86
|
+
"supported": {
|
|
87
|
+
"type": "boolean"
|
|
88
|
+
},
|
|
89
|
+
"mode": {
|
|
90
|
+
"enum": [
|
|
91
|
+
"native_only",
|
|
92
|
+
"catalog_token"
|
|
93
|
+
]
|
|
94
|
+
}
|
|
33
95
|
},
|
|
34
96
|
"additionalProperties": false
|
|
35
97
|
},
|
|
36
98
|
"effort_selection": {
|
|
37
99
|
"type": "object",
|
|
38
100
|
"description": "Reasoning-effort steering capability. codex admits only its closed set; zcode and dsh pass a bounded [a-z0-9_] token through to the runtime.",
|
|
39
|
-
"required": [
|
|
101
|
+
"required": [
|
|
102
|
+
"supported",
|
|
103
|
+
"mode"
|
|
104
|
+
],
|
|
40
105
|
"properties": {
|
|
41
|
-
"supported": {
|
|
42
|
-
|
|
106
|
+
"supported": {
|
|
107
|
+
"type": "boolean"
|
|
108
|
+
},
|
|
109
|
+
"mode": {
|
|
110
|
+
"enum": [
|
|
111
|
+
"closed_set",
|
|
112
|
+
"passthrough_token"
|
|
113
|
+
]
|
|
114
|
+
}
|
|
43
115
|
},
|
|
44
116
|
"additionalProperties": false
|
|
45
117
|
},
|
|
46
|
-
"local": {
|
|
47
|
-
|
|
48
|
-
|
|
118
|
+
"local": {
|
|
119
|
+
"$ref": "#/properties/subagent_scope_status"
|
|
120
|
+
},
|
|
121
|
+
"auth": {
|
|
122
|
+
"$ref": "#/properties/subagent_scope_status"
|
|
123
|
+
},
|
|
124
|
+
"hi": {
|
|
125
|
+
"$ref": "#/properties/subagent_scope_status"
|
|
126
|
+
}
|
|
49
127
|
},
|
|
50
128
|
"additionalProperties": false
|
|
51
129
|
},
|
|
52
130
|
"subagent_scope_status": {
|
|
53
131
|
"type": "object",
|
|
54
132
|
"description": "Readiness conclusion only. Probe evidence (scope paths, version, checked_at_ms, reason) stays on the daemon RPC view for the CLI diagnose owner.",
|
|
55
|
-
"required": [
|
|
133
|
+
"required": [
|
|
134
|
+
"state"
|
|
135
|
+
],
|
|
56
136
|
"properties": {
|
|
57
|
-
"state": {
|
|
137
|
+
"state": {
|
|
138
|
+
"enum": [
|
|
139
|
+
"READY",
|
|
140
|
+
"DEGRADED",
|
|
141
|
+
"UNAVAILABLE",
|
|
142
|
+
"UNKNOWN"
|
|
143
|
+
]
|
|
144
|
+
}
|
|
58
145
|
},
|
|
59
146
|
"additionalProperties": false
|
|
60
147
|
},
|
|
61
148
|
"spawn": {
|
|
62
149
|
"type": "object",
|
|
63
150
|
"description": "Start one durable subagent in an absolute repository workspace, returning after establishing the new session.",
|
|
64
|
-
"required": [
|
|
151
|
+
"required": [
|
|
152
|
+
"repository",
|
|
153
|
+
"prompt"
|
|
154
|
+
],
|
|
65
155
|
"properties": {
|
|
66
|
-
"profile": {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
"
|
|
72
|
-
|
|
73
|
-
|
|
156
|
+
"profile": {
|
|
157
|
+
"type": "string",
|
|
158
|
+
"minLength": 1,
|
|
159
|
+
"description": "Profile name referencing a JSON preset in profiles/*.json. Mutually exclusive with subagent, permission_mode, model, and effort."
|
|
160
|
+
},
|
|
161
|
+
"subagent": {
|
|
162
|
+
"type": "string",
|
|
163
|
+
"minLength": 1,
|
|
164
|
+
"description": "Subagent route key; omission uses configured default_subagent or returns subagent_required. Null is invalid; dsh production spawn requires its enabled + spawn_supported + pinned-runtime configuration."
|
|
165
|
+
},
|
|
166
|
+
"repository": {
|
|
167
|
+
"type": "string",
|
|
168
|
+
"minLength": 1
|
|
169
|
+
},
|
|
170
|
+
"permission_mode": {
|
|
171
|
+
"$ref": "#/properties/permission_mode",
|
|
172
|
+
"description": "codex supports build/edit (workspace-write), plan (read-only), and yolo (danger-full-access), always with approvalPolicy=never; agy supports only build (--mode accept-edits) and yolo (--dangerously-skip-permissions)."
|
|
173
|
+
},
|
|
174
|
+
"prompt": {
|
|
175
|
+
"type": "string",
|
|
176
|
+
"minLength": 1
|
|
177
|
+
},
|
|
178
|
+
"model": {
|
|
179
|
+
"type": "string",
|
|
180
|
+
"minLength": 1,
|
|
181
|
+
"description": "Task model. dsh requires provider:model, split at the first colon (the model side may contain further colons; a missing colon or an empty side is rejected before any task). codex uses its own model id; zcode requires an explicit provider/model token from the spawn request or a named profile, and rejects a bare token, an omitted model, and agents.zcode.default_model at admission. agy uses a bare model slug with no ':' or '/' separator or whitespace; admission validates only that shape and the daemon does not verify catalog membership, so an unknown slug fails loudly at session start when the agy CLI rejects it. Omission falls back to the configured default_model for dsh and agy, then to the provider-native model; codex requires an explicit model or agents.codex.default_model; zcode and codex never fall back to a provider default."
|
|
182
|
+
},
|
|
183
|
+
"effort": {
|
|
184
|
+
"type": "string",
|
|
185
|
+
"minLength": 1,
|
|
186
|
+
"maxLength": 24,
|
|
187
|
+
"pattern": "^[a-z0-9_]+$",
|
|
188
|
+
"description": "Reasoning-effort token: 1..24 bytes of [a-z0-9_]. codex admits only low, medium, high or xhigh; agy admits only low, medium, high or max; zcode and dsh pass the bounded token through. Omission keeps the runtime default."
|
|
189
|
+
},
|
|
190
|
+
"write_manifest": {
|
|
191
|
+
"type": "array",
|
|
192
|
+
"items": {
|
|
193
|
+
"type": "string",
|
|
194
|
+
"minLength": 1
|
|
195
|
+
},
|
|
196
|
+
"description": "codex requires an empty or omitted write_manifest; non-empty input returns codex_write_manifest_unsupported before task creation. agy likewise requires an empty or omitted write_manifest; non-empty input returns agy_write_manifest_unsupported before task creation. dsh admits a non-empty manifest in build through the guarded manifest-build composition (workspace-write sandbox, only tool-fs writable, out-of-manifest paths rejected as FS_WRITE_MANIFEST_DENIED), at most 256 entries; an explicit [\".\"] keeps the existing build composition. plan requires an empty manifest for every subagent."
|
|
197
|
+
}
|
|
74
198
|
},
|
|
75
199
|
"allOf": [
|
|
76
|
-
{
|
|
77
|
-
"
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
|
|
200
|
+
{
|
|
201
|
+
"if": {
|
|
202
|
+
"required": [
|
|
203
|
+
"subagent"
|
|
204
|
+
],
|
|
205
|
+
"properties": {
|
|
206
|
+
"subagent": {
|
|
207
|
+
"const": "codex"
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
},
|
|
211
|
+
"then": {
|
|
212
|
+
"properties": {
|
|
213
|
+
"write_manifest": {
|
|
214
|
+
"maxItems": 0
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
"if": {
|
|
221
|
+
"required": [
|
|
222
|
+
"subagent"
|
|
223
|
+
],
|
|
224
|
+
"properties": {
|
|
225
|
+
"subagent": {
|
|
226
|
+
"const": "dsh"
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
},
|
|
230
|
+
"then": {
|
|
231
|
+
"properties": {
|
|
232
|
+
"write_manifest": {
|
|
233
|
+
"maxItems": 256
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
"if": {
|
|
240
|
+
"required": [
|
|
241
|
+
"subagent"
|
|
242
|
+
],
|
|
243
|
+
"properties": {
|
|
244
|
+
"subagent": {
|
|
245
|
+
"const": "agy"
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
},
|
|
249
|
+
"then": {
|
|
250
|
+
"properties": {
|
|
251
|
+
"permission_mode": {
|
|
252
|
+
"enum": [
|
|
253
|
+
"build",
|
|
254
|
+
"yolo"
|
|
255
|
+
]
|
|
256
|
+
},
|
|
257
|
+
"model": {
|
|
258
|
+
"type": "string",
|
|
259
|
+
"minLength": 1,
|
|
260
|
+
"maxLength": 512,
|
|
261
|
+
"pattern": "^[^:/\\s]+$"
|
|
262
|
+
},
|
|
263
|
+
"effort": {
|
|
264
|
+
"enum": [
|
|
265
|
+
"low",
|
|
266
|
+
"medium",
|
|
267
|
+
"high",
|
|
268
|
+
"max"
|
|
269
|
+
]
|
|
270
|
+
},
|
|
271
|
+
"write_manifest": {
|
|
272
|
+
"maxItems": 0
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
"if": {
|
|
279
|
+
"required": [
|
|
280
|
+
"permission_mode"
|
|
281
|
+
],
|
|
282
|
+
"properties": {
|
|
283
|
+
"permission_mode": {
|
|
284
|
+
"const": "plan"
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
},
|
|
288
|
+
"then": {
|
|
289
|
+
"properties": {
|
|
290
|
+
"write_manifest": {
|
|
291
|
+
"maxItems": 0
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
89
296
|
],
|
|
90
297
|
"additionalProperties": false
|
|
91
298
|
},
|
|
92
299
|
"list": {
|
|
93
300
|
"type": "object",
|
|
94
|
-
"required": [
|
|
301
|
+
"required": [
|
|
302
|
+
"repository"
|
|
303
|
+
],
|
|
95
304
|
"properties": {
|
|
96
|
-
"subagent": {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
"
|
|
101
|
-
|
|
305
|
+
"subagent": {
|
|
306
|
+
"type": "string",
|
|
307
|
+
"minLength": 1
|
|
308
|
+
},
|
|
309
|
+
"repository": {
|
|
310
|
+
"type": "string",
|
|
311
|
+
"minLength": 1
|
|
312
|
+
},
|
|
313
|
+
"phase": {
|
|
314
|
+
"type": [
|
|
315
|
+
"string",
|
|
316
|
+
"null"
|
|
317
|
+
],
|
|
318
|
+
"default": null
|
|
319
|
+
},
|
|
320
|
+
"outcome": {
|
|
321
|
+
"type": [
|
|
322
|
+
"string",
|
|
323
|
+
"null"
|
|
324
|
+
],
|
|
325
|
+
"default": null
|
|
326
|
+
},
|
|
327
|
+
"cursor": {
|
|
328
|
+
"type": [
|
|
329
|
+
"string",
|
|
330
|
+
"null"
|
|
331
|
+
],
|
|
332
|
+
"default": null
|
|
333
|
+
},
|
|
334
|
+
"limit": {
|
|
335
|
+
"type": "integer",
|
|
336
|
+
"minimum": 1,
|
|
337
|
+
"maximum": 100,
|
|
338
|
+
"default": 100
|
|
339
|
+
}
|
|
102
340
|
},
|
|
103
341
|
"additionalProperties": false
|
|
104
342
|
},
|
|
105
343
|
"wait": {
|
|
106
344
|
"type": "object",
|
|
107
345
|
"description": "agent_id accepts one agent id (number) or a list of 1..=16 ids. A single id returns the single wait object described below. A list blocks until every listed agent is terminal OR any one of them raises an actionable pending request, then returns a FLAT object: one key per distinct agent id carrying that agent's ordinary wait object (a repeated id is awaited once like any other), plus one \"error\" key mapping problematic ids to markers - duplicated for ids repeated in the input and unknown_agent for ids that do not exist; the remaining ids are still awaited normally. Recommended parallel pattern: spawn every subagent first, then call wait once with all ids. In list mode message_id is not supported (pass it only with a scalar id), every element carries message_receipt=null, and each element's timed_out flag follows the same shared deadline. Wait up to 290 seconds by default. Returns early only when an actionable pending request exists (permission requests need allow/deny; user-input requests carry the full embedded question and need answer with non-empty content) or the terminal result is available; ordinary progress, message receipts, already-responded and unsupported requests never wake it, and its timeout still returns timed_out=true. When the embedded result page carries next_offset=null it is the whole final result and no further result call is needed; otherwise continue reading with external_subagent_result from next_offset. A failed terminal result also carries failure_message: usually the daemon's bounded single-line JSON failure detail, but an early fail_claim row may be plain text, so treat it as an opaque bounded string and attempt JSON parsing defensively (null when the task has no persisted detail or the outcome is not a failure). Read failure_message before falling back to daemon logs or sqlite. The pending_requests projection stays capped at 100 records while the wake decision scans the full pending set, and the request that woke the wait is always part of the returned projection so its request_id can be answered directly. activity carries the text tail incrementally: each wait returns only the text appended since the previous wait (an empty tail means nothing new), every byte is delivered by wait at most once, and latest_text_truncated flags the case where undelivered bytes rolled out of the bounded window so this response degraded to the whole window (on the terminal response, bytes repeating the embedded result page verbatim are stripped so they are not shipped twice), tool calls started in the last 60 seconds, and telemetry status; activity also exposes last_activity_age_ms (null before any activity) and model_request_active; additionally in_flight_tool_count counts tracked in-flight tool calls (scheduled or started without a matching result, error or permission resolution; 0 when there is no snapshot or the adapter has no per-call lifecycle tracking, such as codex) and oldest_in_flight_tool_age_ms is the age since the oldest tracked in-flight call first appeared (null when none is tracked); use external_subagent_observe only when these liveness signals suggest a meaningless loop or a stuck command, to inspect recent tool-call detail.Wait up to 290 seconds by default. Returns early only when an actionable pending request exists (permission requests need allow/deny; user-input requests carry the full embedded question and need answer with non-empty content) or the terminal result is available; ordinary progress, message receipts, already-responded and unsupported requests never wake it, and its timeout still returns timed_out=true. When the embedded result page carries next_offset=null it is the whole final result and no further result call is needed; otherwise continue reading with external_subagent_result from next_offset. A failed terminal result also carries failure_message: usually the daemon's bounded single-line JSON failure detail, but an early fail_claim row may be plain text, so treat it as an opaque bounded string and attempt JSON parsing defensively (null when the task has no persisted detail or the outcome is not a failure). Read failure_message before falling back to daemon logs or sqlite. The pending_requests projection stays capped at 100 records while the wake decision scans the full pending set, and the request that woke the wait is always part of the returned projection so its request_id can be answered directly. activity carries the text tail incrementally: each wait returns only the text appended since the previous wait (an empty tail means nothing new), every byte is delivered by wait at most once, and latest_text_truncated flags the case where undelivered bytes rolled out of the bounded window so this response degraded to the whole window (on the terminal response, bytes repeating the embedded result page verbatim are stripped so they are not shipped twice), tool calls started in the last 60 seconds, and telemetry status; activity also exposes last_activity_age_ms (null before any activity) and model_request_active; additionally in_flight_tool_count counts tracked in-flight tool calls (scheduled or started without a matching result, error or permission resolution; 0 when there is no snapshot or the adapter has no per-call lifecycle tracking, such as codex) and oldest_in_flight_tool_age_ms is the age since the oldest tracked in-flight call first appeared (null when none is tracked); use external_subagent_observe only when these liveness signals suggest a meaningless loop or a stuck command, to inspect recent tool-call detail.",
|
|
108
|
-
"required": [
|
|
346
|
+
"required": [
|
|
347
|
+
"agent_id"
|
|
348
|
+
],
|
|
109
349
|
"properties": {
|
|
110
350
|
"agent_id": {
|
|
111
351
|
"anyOf": [
|
|
112
|
-
{
|
|
113
|
-
|
|
352
|
+
{
|
|
353
|
+
"type": "integer",
|
|
354
|
+
"minimum": 10000000,
|
|
355
|
+
"maximum": 99999999
|
|
356
|
+
},
|
|
357
|
+
{
|
|
358
|
+
"type": "array",
|
|
359
|
+
"minItems": 1,
|
|
360
|
+
"maxItems": 16,
|
|
361
|
+
"items": {
|
|
362
|
+
"type": "integer",
|
|
363
|
+
"minimum": 10000000,
|
|
364
|
+
"maximum": 99999999
|
|
365
|
+
}
|
|
366
|
+
}
|
|
114
367
|
],
|
|
115
368
|
"description": "One agent id (scalar response) or a list of 1..=16 ids awaited together (response is an object keyed by agent id, each value the ordinary wait output or {\"error\":\"duplicated\"}/{\"error\":\"unknown_agent\"})."
|
|
116
369
|
},
|
|
117
|
-
"wait_time": {
|
|
118
|
-
|
|
370
|
+
"wait_time": {
|
|
371
|
+
"type": "integer",
|
|
372
|
+
"minimum": 0,
|
|
373
|
+
"maximum": 299,
|
|
374
|
+
"default": 290
|
|
375
|
+
},
|
|
376
|
+
"message_id": {
|
|
377
|
+
"type": [
|
|
378
|
+
"string",
|
|
379
|
+
"null"
|
|
380
|
+
],
|
|
381
|
+
"description": "Only supported with a scalar agent_id."
|
|
382
|
+
}
|
|
119
383
|
},
|
|
120
384
|
"additionalProperties": false
|
|
121
385
|
},
|
|
122
386
|
"observe": {
|
|
123
387
|
"description": "Read captured task observations for zcode, dsh, codex or agy. zcode and dsh expose at most 200 Unicode characters of public reasoning; codex and agy reasoning is null. Coverage reports capture gaps and unsupported history truthfully.",
|
|
124
388
|
"type": "object",
|
|
125
|
-
"required": [
|
|
389
|
+
"required": [
|
|
390
|
+
"agent_id"
|
|
391
|
+
],
|
|
126
392
|
"properties": {
|
|
127
|
-
"agent_id": {
|
|
393
|
+
"agent_id": {
|
|
394
|
+
"type": "integer",
|
|
395
|
+
"minimum": 10000000,
|
|
396
|
+
"maximum": 99999999
|
|
397
|
+
}
|
|
128
398
|
},
|
|
129
399
|
"additionalProperties": false
|
|
130
400
|
},
|
|
131
401
|
"result": {
|
|
132
402
|
"type": "object",
|
|
133
403
|
"description": "Pages bounded terminal task-owned text with the offset and limit continuation contract. Questions from user-input requests are embedded in full in wait projections, not paged here.",
|
|
134
|
-
"required": [
|
|
404
|
+
"required": [
|
|
405
|
+
"agent_id"
|
|
406
|
+
],
|
|
135
407
|
"properties": {
|
|
136
|
-
"agent_id": {
|
|
137
|
-
|
|
138
|
-
|
|
408
|
+
"agent_id": {
|
|
409
|
+
"type": "integer",
|
|
410
|
+
"minimum": 10000000,
|
|
411
|
+
"maximum": 99999999
|
|
412
|
+
},
|
|
413
|
+
"offset": {
|
|
414
|
+
"type": "integer",
|
|
415
|
+
"minimum": 0,
|
|
416
|
+
"default": 0
|
|
417
|
+
},
|
|
418
|
+
"limit": {
|
|
419
|
+
"type": "integer",
|
|
420
|
+
"minimum": 1,
|
|
421
|
+
"maximum": 262144,
|
|
422
|
+
"default": 262144
|
|
423
|
+
}
|
|
139
424
|
},
|
|
140
425
|
"additionalProperties": false
|
|
141
426
|
},
|
|
142
427
|
"result_projection": {
|
|
143
428
|
"type": "object",
|
|
144
|
-
"required": [
|
|
429
|
+
"required": [
|
|
430
|
+
"outcome",
|
|
431
|
+
"final_text",
|
|
432
|
+
"partial",
|
|
433
|
+
"offset",
|
|
434
|
+
"total_bytes",
|
|
435
|
+
"next_offset",
|
|
436
|
+
"reason_code",
|
|
437
|
+
"failure_message"
|
|
438
|
+
],
|
|
145
439
|
"properties": {
|
|
146
|
-
"outcome": {
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
440
|
+
"outcome": {
|
|
441
|
+
"enum": [
|
|
442
|
+
"COMPLETED",
|
|
443
|
+
"FAILED",
|
|
444
|
+
"CANCELLED",
|
|
445
|
+
"TIMED_OUT",
|
|
446
|
+
"RUNTIME_LOST",
|
|
447
|
+
"RESULT_INVALID"
|
|
448
|
+
]
|
|
449
|
+
},
|
|
450
|
+
"final_text": {
|
|
451
|
+
"type": "string"
|
|
452
|
+
},
|
|
453
|
+
"partial": {
|
|
454
|
+
"type": "boolean"
|
|
455
|
+
},
|
|
456
|
+
"offset": {
|
|
457
|
+
"type": "integer",
|
|
458
|
+
"minimum": 0
|
|
459
|
+
},
|
|
460
|
+
"total_bytes": {
|
|
461
|
+
"type": "integer",
|
|
462
|
+
"minimum": 0
|
|
463
|
+
},
|
|
464
|
+
"next_offset": {
|
|
465
|
+
"type": [
|
|
466
|
+
"integer",
|
|
467
|
+
"null"
|
|
468
|
+
],
|
|
469
|
+
"minimum": 0
|
|
470
|
+
},
|
|
471
|
+
"reason_code": {
|
|
472
|
+
"type": [
|
|
473
|
+
"string",
|
|
474
|
+
"null"
|
|
475
|
+
]
|
|
476
|
+
},
|
|
477
|
+
"failure_message": {
|
|
478
|
+
"type": [
|
|
479
|
+
"string",
|
|
480
|
+
"null"
|
|
481
|
+
]
|
|
482
|
+
}
|
|
154
483
|
},
|
|
155
484
|
"additionalProperties": false
|
|
156
485
|
},
|
|
157
486
|
"question_projection": {
|
|
158
487
|
"type": "object",
|
|
159
488
|
"description": "Embedded question of an answerable user-input request in the wait projection's pending_requests entries; wait is the only retrieval surface, so a question beyond the embed cap is marked truncated instead of paged.",
|
|
160
|
-
"required": [
|
|
489
|
+
"required": [
|
|
490
|
+
"text",
|
|
491
|
+
"truncated"
|
|
492
|
+
],
|
|
161
493
|
"properties": {
|
|
162
|
-
"text": {
|
|
163
|
-
|
|
494
|
+
"text": {
|
|
495
|
+
"type": "string"
|
|
496
|
+
},
|
|
497
|
+
"truncated": {
|
|
498
|
+
"type": "boolean"
|
|
499
|
+
}
|
|
164
500
|
},
|
|
165
501
|
"additionalProperties": false
|
|
166
502
|
},
|
|
167
503
|
"error_projection": {
|
|
168
504
|
"type": "object",
|
|
169
|
-
"required": [
|
|
505
|
+
"required": [
|
|
506
|
+
"error"
|
|
507
|
+
],
|
|
170
508
|
"properties": {
|
|
171
509
|
"error": {
|
|
172
510
|
"type": "object",
|
|
173
|
-
"required": [
|
|
511
|
+
"required": [
|
|
512
|
+
"code",
|
|
513
|
+
"message"
|
|
514
|
+
],
|
|
174
515
|
"properties": {
|
|
175
|
-
"code": {
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
"
|
|
180
|
-
|
|
181
|
-
|
|
516
|
+
"code": {
|
|
517
|
+
"type": "string",
|
|
518
|
+
"minLength": 1
|
|
519
|
+
},
|
|
520
|
+
"message": {
|
|
521
|
+
"type": "string",
|
|
522
|
+
"minLength": 1
|
|
523
|
+
},
|
|
524
|
+
"component": {
|
|
525
|
+
"type": "string",
|
|
526
|
+
"minLength": 1
|
|
527
|
+
},
|
|
528
|
+
"operation": {
|
|
529
|
+
"type": "string",
|
|
530
|
+
"minLength": 1
|
|
531
|
+
},
|
|
532
|
+
"request_id": {
|
|
533
|
+
"type": "string",
|
|
534
|
+
"minLength": 1
|
|
535
|
+
},
|
|
536
|
+
"agent_id": {
|
|
537
|
+
"type": "integer",
|
|
538
|
+
"minimum": 10000000,
|
|
539
|
+
"maximum": 99999999
|
|
540
|
+
},
|
|
541
|
+
"prompt_count": {
|
|
542
|
+
"type": "integer",
|
|
543
|
+
"minimum": 0
|
|
544
|
+
}
|
|
182
545
|
},
|
|
183
546
|
"additionalProperties": false
|
|
184
547
|
}
|
|
@@ -189,16 +552,140 @@
|
|
|
189
552
|
"type": "object",
|
|
190
553
|
"additionalProperties": false,
|
|
191
554
|
"properties": {
|
|
192
|
-
"external_subagent_status": {
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
"
|
|
555
|
+
"external_subagent_status": {
|
|
556
|
+
"input": [],
|
|
557
|
+
"output": [
|
|
558
|
+
"mcp_version",
|
|
559
|
+
"components",
|
|
560
|
+
"capabilities",
|
|
561
|
+
"subagents"
|
|
562
|
+
]
|
|
563
|
+
},
|
|
564
|
+
"external_subagent_spawn": {
|
|
565
|
+
"input": [
|
|
566
|
+
"profile",
|
|
567
|
+
"subagent",
|
|
568
|
+
"repository",
|
|
569
|
+
"permission_mode",
|
|
570
|
+
"prompt",
|
|
571
|
+
"model",
|
|
572
|
+
"effort",
|
|
573
|
+
"write_manifest"
|
|
574
|
+
],
|
|
575
|
+
"output": [
|
|
576
|
+
"agent_id",
|
|
577
|
+
"status",
|
|
578
|
+
"session_id",
|
|
579
|
+
"instruction"
|
|
580
|
+
],
|
|
581
|
+
"idempotent": false
|
|
582
|
+
},
|
|
583
|
+
"external_subagent_wait": {
|
|
584
|
+
"input": [
|
|
585
|
+
"agent_id",
|
|
586
|
+
"wait_time",
|
|
587
|
+
"message_id"
|
|
588
|
+
],
|
|
589
|
+
"output": [
|
|
590
|
+
"task",
|
|
591
|
+
"pending_requests",
|
|
592
|
+
"activity",
|
|
593
|
+
"result",
|
|
594
|
+
"timed_out",
|
|
595
|
+
"message_receipt"
|
|
596
|
+
],
|
|
597
|
+
"output_many": "<agent_id> keys, \"error\" only when an id was duplicated or unknown",
|
|
598
|
+
"agent_id_forms": "scalar or array of 1..=16",
|
|
599
|
+
"parallel_note": "spawn all subagents first, then wait once with the full id list"
|
|
600
|
+
},
|
|
601
|
+
"external_subagent_observe": {
|
|
602
|
+
"input": [
|
|
603
|
+
"agent_id"
|
|
604
|
+
],
|
|
605
|
+
"output": [
|
|
606
|
+
"tools",
|
|
607
|
+
"reasoning",
|
|
608
|
+
"coverage"
|
|
609
|
+
],
|
|
610
|
+
"idempotent": true
|
|
611
|
+
},
|
|
612
|
+
"external_subagent_list": {
|
|
613
|
+
"input": [
|
|
614
|
+
"subagent",
|
|
615
|
+
"repository",
|
|
616
|
+
"phase",
|
|
617
|
+
"outcome",
|
|
618
|
+
"cursor",
|
|
619
|
+
"limit"
|
|
620
|
+
],
|
|
621
|
+
"output": [
|
|
622
|
+
"tasks",
|
|
623
|
+
"next_cursor"
|
|
624
|
+
]
|
|
625
|
+
},
|
|
626
|
+
"external_subagent_send": {
|
|
627
|
+
"input": [
|
|
628
|
+
"agent_id",
|
|
629
|
+
"message_id",
|
|
630
|
+
"mode",
|
|
631
|
+
"content"
|
|
632
|
+
],
|
|
633
|
+
"required": [
|
|
634
|
+
"agent_id",
|
|
635
|
+
"mode",
|
|
636
|
+
"content"
|
|
637
|
+
],
|
|
638
|
+
"mode": [
|
|
639
|
+
"queue",
|
|
640
|
+
"steer"
|
|
641
|
+
],
|
|
642
|
+
"output": [
|
|
643
|
+
"message_id",
|
|
644
|
+
"disposition"
|
|
645
|
+
]
|
|
646
|
+
},
|
|
647
|
+
"external_subagent_respond": {
|
|
648
|
+
"input": [
|
|
649
|
+
"agent_id",
|
|
650
|
+
"request_id",
|
|
651
|
+
"decision",
|
|
652
|
+
"content"
|
|
653
|
+
],
|
|
654
|
+
"output": [
|
|
655
|
+
"disposition",
|
|
656
|
+
"requested_decision",
|
|
657
|
+
"effective_decision",
|
|
658
|
+
"policy_overrode",
|
|
659
|
+
"policy_reason_code"
|
|
660
|
+
]
|
|
661
|
+
},
|
|
662
|
+
"external_subagent_cancel": {
|
|
663
|
+
"input": [
|
|
664
|
+
"agent_id"
|
|
665
|
+
],
|
|
666
|
+
"output": [
|
|
667
|
+
"task"
|
|
668
|
+
]
|
|
669
|
+
},
|
|
670
|
+
"external_subagent_result": {
|
|
671
|
+
"input": [
|
|
672
|
+
"agent_id",
|
|
673
|
+
"offset",
|
|
674
|
+
"limit"
|
|
675
|
+
],
|
|
676
|
+
"output": [
|
|
677
|
+
"task",
|
|
678
|
+
"result"
|
|
679
|
+
]
|
|
680
|
+
},
|
|
681
|
+
"external_subagent_close": {
|
|
682
|
+
"input": [
|
|
683
|
+
"agent_id"
|
|
684
|
+
],
|
|
685
|
+
"output": [
|
|
686
|
+
"task"
|
|
687
|
+
]
|
|
688
|
+
}
|
|
202
689
|
}
|
|
203
690
|
}
|
|
204
691
|
},
|