@narumitw/pi-subagents 2.0.5 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +152 -50
- package/dist/chunks/{auto-transport-SY2VHUFH.ts → auto-transport-FUUKFDIG.ts} +6 -6
- package/dist/chunks/{capability-grant-CGEWOEKE.ts → capability-grant-PR72SWWS.ts} +4 -4
- package/dist/chunks/{chunk-DPPVEQAM.ts → chunk-4AQSF7AS.ts} +1 -1
- package/dist/chunks/chunk-4AQSF7AS.ts.map +7 -0
- package/dist/chunks/chunk-6H6TBBED.ts +108 -0
- package/dist/chunks/chunk-6H6TBBED.ts.map +7 -0
- package/dist/chunks/{chunk-DSOOH73Y.ts → chunk-7AAJEUSL.ts} +3 -3
- package/dist/chunks/{chunk-DSOOH73Y.ts.map → chunk-7AAJEUSL.ts.map} +2 -2
- package/dist/chunks/{chunk-7QPPBBXZ.ts → chunk-D4CR7T73.ts} +21 -3
- package/dist/chunks/chunk-D4CR7T73.ts.map +7 -0
- package/dist/chunks/{chunk-434NII74.ts → chunk-DIHBUR2E.ts} +54 -8
- package/dist/chunks/chunk-DIHBUR2E.ts.map +7 -0
- package/dist/chunks/{chunk-NIF42QMF.ts → chunk-FEVPWRMU.ts} +7 -4
- package/dist/chunks/chunk-FEVPWRMU.ts.map +7 -0
- package/dist/chunks/{chunk-YBUWBRF7.ts → chunk-FXI45N3J.ts} +5 -5
- package/dist/chunks/{chunk-S2IWVK3J.ts → chunk-ILEQ27AL.ts} +3 -2
- package/dist/chunks/chunk-ILEQ27AL.ts.map +7 -0
- package/dist/chunks/{chunk-DQMN4OYM.ts → chunk-ITVWPNU4.ts} +12 -106
- package/dist/chunks/chunk-ITVWPNU4.ts.map +7 -0
- package/dist/chunks/{chunk-QDVGH2X7.ts → chunk-IWC32VPY.ts} +2 -1
- package/dist/chunks/{chunk-QDVGH2X7.ts.map → chunk-IWC32VPY.ts.map} +2 -2
- package/dist/chunks/{chunk-I2FAK44T.ts → chunk-JSZIP73U.ts} +48 -10
- package/dist/chunks/chunk-JSZIP73U.ts.map +7 -0
- package/dist/chunks/{chunk-ZHTNCZIA.ts → chunk-JU6LUNLP.ts} +2 -2
- package/dist/chunks/{chunk-PSK43Y6A.ts → chunk-LASD73CM.ts} +2 -2
- package/dist/chunks/{chunk-C4L6P266.ts → chunk-LEOYDZI3.ts} +1 -1
- package/dist/chunks/{chunk-C4L6P266.ts.map → chunk-LEOYDZI3.ts.map} +2 -2
- package/dist/chunks/{chunk-H3BFJ7HJ.ts → chunk-LL4LP2T7.ts} +5 -5
- package/dist/chunks/chunk-N2T5IN4X.ts +18 -0
- package/dist/chunks/chunk-N2T5IN4X.ts.map +7 -0
- package/dist/chunks/{chunk-G3RSMSXJ.ts → chunk-NTRPLF46.ts} +1 -1
- package/dist/chunks/chunk-NTRPLF46.ts.map +7 -0
- package/dist/chunks/{chunk-CBP76ARQ.ts → chunk-PABJJYP6.ts} +174 -47
- package/dist/chunks/chunk-PABJJYP6.ts.map +7 -0
- package/dist/chunks/{chunk-EFBPISNT.ts → chunk-PBZMBTNJ.ts} +104 -103
- package/dist/chunks/chunk-PBZMBTNJ.ts.map +7 -0
- package/dist/chunks/{chunk-SCZ33MYW.ts → chunk-PGLSFLYW.ts} +2 -2
- package/dist/chunks/{chunk-O4VO6JUJ.ts → chunk-TM2R67J3.ts} +3 -3
- package/dist/chunks/{chunk-QBORTI4W.ts → chunk-TMZRHIIK.ts} +32 -3
- package/dist/chunks/chunk-TMZRHIIK.ts.map +7 -0
- package/dist/chunks/chunk-TZ34IQ3M.ts +59 -0
- package/dist/chunks/chunk-TZ34IQ3M.ts.map +7 -0
- package/dist/chunks/chunk-VBDGNNLM.ts +214 -0
- package/dist/chunks/chunk-VBDGNNLM.ts.map +7 -0
- package/dist/chunks/{chunk-7OBINKFM.ts → chunk-VDG7LTYE.ts} +11 -11
- package/dist/chunks/chunk-VDG7LTYE.ts.map +7 -0
- package/dist/chunks/{chunk-AEUYS7JC.ts → chunk-X4NMONPE.ts} +1 -1
- package/dist/chunks/chunk-X4NMONPE.ts.map +7 -0
- package/dist/chunks/{chunk-HKC4ES4B.ts → chunk-YPJEN6NU.ts} +2 -2
- package/dist/chunks/{completion-delivery-YPOWSSV3.ts → completion-delivery-JVLNQRWX.ts} +5 -4
- package/dist/chunks/{config-status-J4GPWP46.ts → config-status-FKGDECZ3.ts} +7 -6
- package/dist/chunks/{config-ui-2YUCUEBM.ts → config-ui-DDKERQHI.ts} +297 -231
- package/dist/chunks/config-ui-DDKERQHI.ts.map +7 -0
- package/dist/chunks/{consult-IV7UBNQQ.ts → consult-PQ6PRAKC.ts} +14 -13
- package/dist/chunks/consult-PQ6PRAKC.ts.map +7 -0
- package/dist/chunks/{create-stateful-transport-ZP3IXNV3.ts → create-stateful-transport-JWC2EFYL.ts} +6 -6
- package/dist/chunks/{delegation-contract-WJPT4FVS.ts → delegation-contract-LA56I5DT.ts} +2 -2
- package/dist/chunks/{discovery-K25T3SH4.ts → discovery-MIFB2U4Y.ts} +3 -3
- package/dist/chunks/{execution-LA7HN5YF.ts → execution-Q2JZLKJA.ts} +19 -16
- package/dist/chunks/execution-Q2JZLKJA.ts.map +7 -0
- package/dist/chunks/{in-process-transport-4RF3J6XK.ts → in-process-transport-HJ6TZXC3.ts} +9 -9
- package/dist/chunks/{inspect-XV2QALMR.ts → inspect-UH2TKH6E.ts} +25 -10
- package/dist/chunks/inspect-UH2TKH6E.ts.map +7 -0
- package/dist/chunks/{persistence-VSGXAW4P.ts → persistence-XHPJBZL7.ts} +11 -7
- package/dist/chunks/persistence-XHPJBZL7.ts.map +7 -0
- package/dist/chunks/{registry-E6XPJB7L.ts → registry-XDXPECWF.ts} +136 -15
- package/dist/chunks/registry-XDXPECWF.ts.map +7 -0
- package/dist/chunks/{retained-semantic-state-7WXSGRJU.ts → retained-semantic-state-GM75FZGE.ts} +3 -3
- package/dist/chunks/{rpc-transport-NEHBHWX4.ts → rpc-transport-7R7DVCEB.ts} +12 -16
- package/dist/chunks/rpc-transport-7R7DVCEB.ts.map +7 -0
- package/dist/chunks/{spawn-idempotency-QGHO2WKC.ts → spawn-idempotency-BNHOSMZW.ts} +2 -2
- package/dist/chunks/{subprocess-transport-NSHOGDC4.ts → subprocess-transport-VHZJRBTW.ts} +15 -14
- package/dist/chunks/subprocess-transport-VHZJRBTW.ts.map +7 -0
- package/dist/chunks/usage-recording-store-CW3EH2SZ.ts +164 -0
- package/dist/chunks/usage-recording-store-CW3EH2SZ.ts.map +7 -0
- package/dist/index.ts +427 -30
- package/dist/index.ts.map +3 -3
- package/docs/async-runtime-protocol.md +69 -0
- package/docs/implementation-notes/pi-subagents-capability-matrix.md +62 -0
- package/docs/implementation-notes/pi-subagents-current-direction.md +99 -0
- package/docs/implementation-notes/pi-subagents-rpc-v1.md +153 -0
- package/docs/pi-subagents-diagrams.md +183 -0
- package/package.json +9 -8
- package/src/agents/types.ts +2 -0
- package/src/async-subagent-benchmark.ts +532 -0
- package/src/completion-delivery.ts +71 -4
- package/src/completion-render.ts +1 -0
- package/src/completion-requirement.ts +308 -0
- package/src/config-registration.ts +5 -5
- package/src/config-status.ts +66 -70
- package/src/config-ui.ts +244 -150
- package/src/consult-resources.ts +1 -1
- package/src/consult.ts +3 -8
- package/src/delegation-contract.ts +55 -9
- package/src/execution-plan.ts +1 -1
- package/src/execution-ui.ts +40 -29
- package/src/execution.ts +2 -3
- package/src/inspect.ts +24 -1
- package/src/orchestration-metrics.ts +1 -1
- package/src/panel-execution.ts +2 -3
- package/src/panel-failure.ts +1 -1
- package/src/panel-render.ts +1 -1
- package/src/parallel-limit-ui.ts +6 -5
- package/src/params.ts +2 -1
- package/src/persistence.ts +9 -0
- package/src/process-control.ts +43 -0
- package/src/registry-types.ts +5 -0
- package/src/registry.ts +162 -18
- package/src/render.ts +2 -1
- package/src/rpc-transport.ts +1 -1
- package/src/runner-outcome.ts +1 -1
- package/src/runner-result.ts +1 -1
- package/src/runner-types.ts +102 -0
- package/src/runner.ts +11 -192
- package/src/settings/inspection.ts +27 -0
- package/src/settings/schema.ts +9 -0
- package/src/settings-reader.ts +7 -0
- package/src/settings.ts +20 -0
- package/src/spawn-idempotency.ts +5 -0
- package/src/stateful-agent-view.ts +15 -19
- package/src/stateful-guidance.ts +14 -4
- package/src/stateful-limit-ui.ts +23 -20
- package/src/stateful-limits.ts +10 -10
- package/src/stateful-registration.ts +126 -9
- package/src/stateful-render.ts +27 -2
- package/src/subagent-details.ts +43 -0
- package/src/subagents-extension.ts +66 -8
- package/src/subagents.ts +2 -0
- package/src/subprocess-transport.ts +2 -1
- package/src/supervision.ts +2 -1
- package/src/timeout-finalization.ts +1 -1
- package/src/tool-schema-compatibility.ts +73 -0
- package/src/transport-types.ts +6 -0
- package/src/transport-ui.ts +18 -46
- package/src/usage-recording-config.ts +13 -0
- package/src/usage-recording-store.ts +183 -0
- package/src/usage-recording.ts +478 -0
- package/src/verification-harness.ts +1 -1
- package/src/workflow-ui.ts +17 -9
- package/dist/chunks/chunk-434NII74.ts.map +0 -7
- package/dist/chunks/chunk-7OBINKFM.ts.map +0 -7
- package/dist/chunks/chunk-7QPPBBXZ.ts.map +0 -7
- package/dist/chunks/chunk-AEUYS7JC.ts.map +0 -7
- package/dist/chunks/chunk-CBP76ARQ.ts.map +0 -7
- package/dist/chunks/chunk-DPPVEQAM.ts.map +0 -7
- package/dist/chunks/chunk-DQMN4OYM.ts.map +0 -7
- package/dist/chunks/chunk-EFBPISNT.ts.map +0 -7
- package/dist/chunks/chunk-G3RSMSXJ.ts.map +0 -7
- package/dist/chunks/chunk-I2FAK44T.ts.map +0 -7
- package/dist/chunks/chunk-NIF42QMF.ts.map +0 -7
- package/dist/chunks/chunk-QBORTI4W.ts.map +0 -7
- package/dist/chunks/chunk-S2IWVK3J.ts.map +0 -7
- package/dist/chunks/config-ui-2YUCUEBM.ts.map +0 -7
- package/dist/chunks/consult-IV7UBNQQ.ts.map +0 -7
- package/dist/chunks/execution-LA7HN5YF.ts.map +0 -7
- package/dist/chunks/inspect-XV2QALMR.ts.map +0 -7
- package/dist/chunks/persistence-VSGXAW4P.ts.map +0 -7
- package/dist/chunks/registry-E6XPJB7L.ts.map +0 -7
- package/dist/chunks/rpc-transport-NEHBHWX4.ts.map +0 -7
- package/dist/chunks/subprocess-transport-NSHOGDC4.ts.map +0 -7
- /package/dist/chunks/{auto-transport-SY2VHUFH.ts.map → auto-transport-FUUKFDIG.ts.map} +0 -0
- /package/dist/chunks/{capability-grant-CGEWOEKE.ts.map → capability-grant-PR72SWWS.ts.map} +0 -0
- /package/dist/chunks/{chunk-YBUWBRF7.ts.map → chunk-FXI45N3J.ts.map} +0 -0
- /package/dist/chunks/{chunk-ZHTNCZIA.ts.map → chunk-JU6LUNLP.ts.map} +0 -0
- /package/dist/chunks/{chunk-PSK43Y6A.ts.map → chunk-LASD73CM.ts.map} +0 -0
- /package/dist/chunks/{chunk-H3BFJ7HJ.ts.map → chunk-LL4LP2T7.ts.map} +0 -0
- /package/dist/chunks/{chunk-SCZ33MYW.ts.map → chunk-PGLSFLYW.ts.map} +0 -0
- /package/dist/chunks/{chunk-O4VO6JUJ.ts.map → chunk-TM2R67J3.ts.map} +0 -0
- /package/dist/chunks/{chunk-HKC4ES4B.ts.map → chunk-YPJEN6NU.ts.map} +0 -0
- /package/dist/chunks/{completion-delivery-YPOWSSV3.ts.map → completion-delivery-JVLNQRWX.ts.map} +0 -0
- /package/dist/chunks/{config-status-J4GPWP46.ts.map → config-status-FKGDECZ3.ts.map} +0 -0
- /package/dist/chunks/{create-stateful-transport-ZP3IXNV3.ts.map → create-stateful-transport-JWC2EFYL.ts.map} +0 -0
- /package/dist/chunks/{delegation-contract-WJPT4FVS.ts.map → delegation-contract-LA56I5DT.ts.map} +0 -0
- /package/dist/chunks/{discovery-K25T3SH4.ts.map → discovery-MIFB2U4Y.ts.map} +0 -0
- /package/dist/chunks/{in-process-transport-4RF3J6XK.ts.map → in-process-transport-HJ6TZXC3.ts.map} +0 -0
- /package/dist/chunks/{retained-semantic-state-7WXSGRJU.ts.map → retained-semantic-state-GM75FZGE.ts.map} +0 -0
- /package/dist/chunks/{spawn-idempotency-QGHO2WKC.ts.map → spawn-idempotency-BNHOSMZW.ts.map} +0 -0
|
@@ -6,11 +6,11 @@ import {
|
|
|
6
6
|
import {
|
|
7
7
|
isCapabilityGrantActive,
|
|
8
8
|
revokeCapabilityGrant
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-YPJEN6NU.ts";
|
|
10
10
|
import {
|
|
11
11
|
copyExecutionPlan,
|
|
12
12
|
rotateExecutionPlanGeneration
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-7AAJEUSL.ts";
|
|
14
14
|
import {
|
|
15
15
|
ROOT_TASK_PATH,
|
|
16
16
|
deriveTaskName,
|
|
@@ -33,8 +33,17 @@ import {
|
|
|
33
33
|
} from "./chunk-KMGKCEO4.ts";
|
|
34
34
|
import {
|
|
35
35
|
resolveStatefulLimits
|
|
36
|
-
} from "./chunk-
|
|
37
|
-
import "./chunk-
|
|
36
|
+
} from "./chunk-VDG7LTYE.ts";
|
|
37
|
+
import "./chunk-4AQSF7AS.ts";
|
|
38
|
+
import {
|
|
39
|
+
MAX_UNRESOLVED_REQUIRED_COMPLETIONS,
|
|
40
|
+
beginCompletionRequirement,
|
|
41
|
+
cancelPendingCompletionRequirements,
|
|
42
|
+
completionRequirementKey,
|
|
43
|
+
makeCompletionAvailable,
|
|
44
|
+
makeCompletionVisible,
|
|
45
|
+
pendingRequiredCompletionCount
|
|
46
|
+
} from "./chunk-VBDGNNLM.ts";
|
|
38
47
|
import {
|
|
39
48
|
safeTerminalLine
|
|
40
49
|
} from "./chunk-SWGQLFSD.ts";
|
|
@@ -256,8 +265,19 @@ var AgentRegistry = class {
|
|
|
256
265
|
contextSourceIds: [...record.contextSourceIds ?? []],
|
|
257
266
|
capabilityGrant: record.capabilityGrant?.state === "active" ? revokeCapabilityGrant(record.capabilityGrant, "restore-boundary", this.now()) : record.capabilityGrant,
|
|
258
267
|
mailbox: (record.mailbox ?? []).slice(-this.maxMailboxMessages).map((message) => ({ ...message, recipientId: record.id })),
|
|
268
|
+
completionRequirements: (record.completionRequirements ?? []).map((item) => ({
|
|
269
|
+
...item
|
|
270
|
+
})),
|
|
259
271
|
history: record.history.slice(-this.maxHistoryTurns).map((turn) => ({ ...turn }))
|
|
260
272
|
});
|
|
273
|
+
const restored = this.agents.get(record.id);
|
|
274
|
+
if (restored && restored.state !== "running" && restored.state !== "starting") {
|
|
275
|
+
restored.completionRequirements = cancelPendingCompletionRequirements(
|
|
276
|
+
restored.completionRequirements,
|
|
277
|
+
restored.state,
|
|
278
|
+
this.now()
|
|
279
|
+
);
|
|
280
|
+
}
|
|
261
281
|
}
|
|
262
282
|
for (const agent of this.agents.values()) {
|
|
263
283
|
if (agent.parentId) {
|
|
@@ -285,6 +305,7 @@ var AgentRegistry = class {
|
|
|
285
305
|
input.spawnRequestHash
|
|
286
306
|
);
|
|
287
307
|
if (existing) return existing;
|
|
308
|
+
this.assertRequiredCompletionCapacity(input.completionRequirement);
|
|
288
309
|
const task = truncateUtf8(input.task, this.maxTaskBytes).text;
|
|
289
310
|
const expired = this.evictExpired();
|
|
290
311
|
let expiryReleaseError;
|
|
@@ -338,6 +359,7 @@ var AgentRegistry = class {
|
|
|
338
359
|
currentTask: task,
|
|
339
360
|
turnGeneration: 0,
|
|
340
361
|
pendingCompletions: [],
|
|
362
|
+
completionRequirements: [],
|
|
341
363
|
history: [],
|
|
342
364
|
mailbox: [],
|
|
343
365
|
context: input.context,
|
|
@@ -362,7 +384,7 @@ var AgentRegistry = class {
|
|
|
362
384
|
parent.updatedAt = now;
|
|
363
385
|
}
|
|
364
386
|
await this.changed();
|
|
365
|
-
this.startTurn(record, task, input);
|
|
387
|
+
this.startTurn(record, task, input, input.completionRequirement);
|
|
366
388
|
return this.copy(record);
|
|
367
389
|
}
|
|
368
390
|
findBySpawnIdempotencyKey(key, requestHash) {
|
|
@@ -387,6 +409,7 @@ var AgentRegistry = class {
|
|
|
387
409
|
if (![
|
|
388
410
|
"idle",
|
|
389
411
|
"completed",
|
|
412
|
+
"partial",
|
|
390
413
|
"blocked",
|
|
391
414
|
"needs-input",
|
|
392
415
|
"abstained",
|
|
@@ -396,9 +419,10 @@ var AgentRegistry = class {
|
|
|
396
419
|
].includes(agent.state)) {
|
|
397
420
|
throw new Error(`Agent ${id} cannot accept follow-up while ${agent.state}`);
|
|
398
421
|
}
|
|
422
|
+
this.assertRequiredCompletionCapacity(options.completionRequirement);
|
|
399
423
|
const unread = agent.mailbox.filter((message) => !message.readAt).slice(-20);
|
|
400
424
|
agent.currentMailboxMessageIds = unread.map((message) => message.id);
|
|
401
|
-
this.startTurn(agent, boundedTask, options);
|
|
425
|
+
this.startTurn(agent, boundedTask, options, options.completionRequirement);
|
|
402
426
|
return this.copy(agent);
|
|
403
427
|
}
|
|
404
428
|
async updateSemanticState(id, executionPlan, capabilityGrant, snapshot, compatibility) {
|
|
@@ -550,6 +574,13 @@ var AgentRegistry = class {
|
|
|
550
574
|
createdAt: this.completionCreatedAt()
|
|
551
575
|
};
|
|
552
576
|
agent.state = "interrupted";
|
|
577
|
+
agent.completionRequirements = makeCompletionAvailable(agent.completionRequirements, {
|
|
578
|
+
runId: persistedCompletion.runId,
|
|
579
|
+
generation: persistedCompletion.generation,
|
|
580
|
+
completionId: persistedCompletion.completionId,
|
|
581
|
+
terminalState: agent.state,
|
|
582
|
+
updatedAt: persistedCompletion.createdAt
|
|
583
|
+
});
|
|
553
584
|
agent.pendingCompletions = [...agent.pendingCompletions ?? [], persistedCompletion];
|
|
554
585
|
this.enqueueCompletionMessage(agent, persistedCompletion, persistedCompletion.error);
|
|
555
586
|
clearCurrentTurn(agent);
|
|
@@ -618,6 +649,11 @@ var AgentRegistry = class {
|
|
|
618
649
|
await this.running.get(agentId)?.catch(() => void 0);
|
|
619
650
|
agent.state = "closed";
|
|
620
651
|
agent.updatedAt = this.now();
|
|
652
|
+
agent.completionRequirements = cancelPendingCompletionRequirements(
|
|
653
|
+
agent.completionRequirements,
|
|
654
|
+
agent.state,
|
|
655
|
+
agent.updatedAt
|
|
656
|
+
);
|
|
621
657
|
if (agent.parentId) {
|
|
622
658
|
const parent = this.agents.get(agent.parentId);
|
|
623
659
|
if (parent) parent.children = parent.children.filter((childId) => childId !== agentId);
|
|
@@ -682,6 +718,11 @@ var AgentRegistry = class {
|
|
|
682
718
|
if (agent.state === "running" || agent.state === "starting") {
|
|
683
719
|
agent.state = "interrupted";
|
|
684
720
|
}
|
|
721
|
+
agent.completionRequirements = cancelPendingCompletionRequirements(
|
|
722
|
+
agent.completionRequirements,
|
|
723
|
+
agent.state,
|
|
724
|
+
this.now()
|
|
725
|
+
);
|
|
685
726
|
clearCurrentTurn(agent);
|
|
686
727
|
}
|
|
687
728
|
}
|
|
@@ -724,6 +765,9 @@ var AgentRegistry = class {
|
|
|
724
765
|
currentTask: agent.currentTask,
|
|
725
766
|
currentRunId: agent.currentRunId,
|
|
726
767
|
currentTurnGeneration: agent.currentTurnGeneration,
|
|
768
|
+
completionRequirements: (agent.completionRequirements ?? []).map((record) => ({
|
|
769
|
+
...record
|
|
770
|
+
})),
|
|
727
771
|
error: agent.error,
|
|
728
772
|
workspaceMode: agent.workspaceMode,
|
|
729
773
|
contextTurns: agent.contextTurns,
|
|
@@ -758,6 +802,26 @@ var AgentRegistry = class {
|
|
|
758
802
|
const agent = this.findReference(reference, senderId);
|
|
759
803
|
return agent ? this.copy(agent) : void 0;
|
|
760
804
|
}
|
|
805
|
+
reconcileCompletionRequirements(activeRecords, observedState) {
|
|
806
|
+
if (!observedState) return;
|
|
807
|
+
for (const agent of this.agents.values()) {
|
|
808
|
+
agent.completionRequirements = (agent.completionRequirements ?? []).flatMap((record) => {
|
|
809
|
+
const restored = activeRecords.get(completionRequirementKey(record));
|
|
810
|
+
if (!restored) return [];
|
|
811
|
+
if (restored.state === "pending" && agent.state !== "running" && agent.state !== "starting") {
|
|
812
|
+
return [
|
|
813
|
+
{
|
|
814
|
+
...restored,
|
|
815
|
+
state: "cancelled",
|
|
816
|
+
terminalState: "interrupted",
|
|
817
|
+
updatedAt: Math.max(restored.updatedAt, this.now())
|
|
818
|
+
}
|
|
819
|
+
];
|
|
820
|
+
}
|
|
821
|
+
return [{ ...restored }];
|
|
822
|
+
});
|
|
823
|
+
}
|
|
824
|
+
}
|
|
761
825
|
listPendingCompletions() {
|
|
762
826
|
return [...this.agents.values()].flatMap(
|
|
763
827
|
(agent) => (agent.pendingCompletions ?? []).map((completion) => ({
|
|
@@ -777,6 +841,11 @@ var AgentRegistry = class {
|
|
|
777
841
|
(completion) => completion.completionId === completionId
|
|
778
842
|
);
|
|
779
843
|
if (!acknowledged) return;
|
|
844
|
+
agent.completionRequirements = makeCompletionVisible(
|
|
845
|
+
agent.completionRequirements,
|
|
846
|
+
completionId,
|
|
847
|
+
deliveredAt
|
|
848
|
+
);
|
|
780
849
|
agent.pendingCompletions = (agent.pendingCompletions ?? []).filter(
|
|
781
850
|
(completion) => completion.completionId !== completionId
|
|
782
851
|
);
|
|
@@ -791,6 +860,9 @@ var AgentRegistry = class {
|
|
|
791
860
|
try {
|
|
792
861
|
await this.changed(true);
|
|
793
862
|
} catch (error) {
|
|
863
|
+
agent.completionRequirements = (agent.completionRequirements ?? []).map(
|
|
864
|
+
(record) => record.completionId === completionId && record.state === "visible" ? { ...record, state: "available", updatedAt: acknowledged.createdAt } : record
|
|
865
|
+
);
|
|
794
866
|
if (!agent.pendingCompletions?.some(
|
|
795
867
|
(completion) => completion.completionId === acknowledged.completionId
|
|
796
868
|
)) {
|
|
@@ -817,7 +889,7 @@ var AgentRegistry = class {
|
|
|
817
889
|
if (releaseError) throw releaseError;
|
|
818
890
|
return removed.length;
|
|
819
891
|
}
|
|
820
|
-
startTurn(agent, task, limits = {}) {
|
|
892
|
+
startTurn(agent, task, limits = {}, completionRequirement = "background") {
|
|
821
893
|
if ((agent.pendingCompletions?.length ?? 0) >= MAX_PENDING_COMPLETIONS_PER_AGENT) {
|
|
822
894
|
throw new Error(
|
|
823
895
|
`Agent ${agent.id} has ${MAX_PENDING_COMPLETIONS_PER_AGENT} undelivered completions; wait for delivery before another turn`
|
|
@@ -826,6 +898,13 @@ var AgentRegistry = class {
|
|
|
826
898
|
agent.turnGeneration = (agent.turnGeneration ?? 0) + 1;
|
|
827
899
|
agent.currentTurnGeneration = agent.turnGeneration;
|
|
828
900
|
agent.currentRunId = `run:${agent.id}:${randomUUID()}`;
|
|
901
|
+
if (completionRequirement === "required") {
|
|
902
|
+
agent.completionRequirements = beginCompletionRequirement(agent.completionRequirements, {
|
|
903
|
+
runId: agent.currentRunId,
|
|
904
|
+
generation: agent.currentTurnGeneration,
|
|
905
|
+
createdAt: this.now()
|
|
906
|
+
});
|
|
907
|
+
}
|
|
829
908
|
agent.state = "starting";
|
|
830
909
|
agent.error = void 0;
|
|
831
910
|
agent.currentTask = task;
|
|
@@ -841,7 +920,13 @@ var AgentRegistry = class {
|
|
|
841
920
|
phase: "queued",
|
|
842
921
|
queuePosition: this.queue.length + 1,
|
|
843
922
|
updatedAt: agent.updatedAt,
|
|
844
|
-
timing: { queuedAt: agent.updatedAt }
|
|
923
|
+
timing: { queuedAt: agent.updatedAt },
|
|
924
|
+
budgetSource: {
|
|
925
|
+
timeout: agent.currentTimeoutMs === void 0 ? "runtime" : "explicit",
|
|
926
|
+
idleTimeout: agent.currentIdleTimeoutMs === void 0 ? "runtime" : "explicit",
|
|
927
|
+
turnLimit: agent.currentMaxTurns === void 0 ? "runtime" : "explicit",
|
|
928
|
+
toolCallLimit: agent.currentMaxToolCalls === void 0 ? "runtime" : "explicit"
|
|
929
|
+
}
|
|
845
930
|
};
|
|
846
931
|
let resolveQueued;
|
|
847
932
|
const completion = new Promise((resolve) => {
|
|
@@ -877,6 +962,13 @@ var AgentRegistry = class {
|
|
|
877
962
|
error: truncateUtf8(agent.error, 512).text,
|
|
878
963
|
createdAt: this.completionCreatedAt()
|
|
879
964
|
};
|
|
965
|
+
agent.completionRequirements = makeCompletionAvailable(agent.completionRequirements, {
|
|
966
|
+
runId: persistedCompletion.runId,
|
|
967
|
+
generation: persistedCompletion.generation,
|
|
968
|
+
completionId: persistedCompletion.completionId,
|
|
969
|
+
terminalState: agent.state,
|
|
970
|
+
updatedAt: persistedCompletion.createdAt
|
|
971
|
+
});
|
|
880
972
|
agent.pendingCompletions = [...agent.pendingCompletions ?? [], persistedCompletion];
|
|
881
973
|
this.enqueueCompletionMessage(agent, persistedCompletion, persistedCompletion.error ?? "");
|
|
882
974
|
clearCurrentTurn(agent);
|
|
@@ -938,17 +1030,19 @@ var AgentRegistry = class {
|
|
|
938
1030
|
});
|
|
939
1031
|
agent.history = agent.history.slice(-this.maxHistoryTurns);
|
|
940
1032
|
agent.structuredResult = outcome.structuredResult ?? parseAnyStructuredSubagentResult(output, agent.resultFormat);
|
|
941
|
-
|
|
1033
|
+
const malformedStructuredResult = agent.resultFormat !== void 0 && agent.resultFormat !== "text" && agent.structuredResult === void 0;
|
|
1034
|
+
const finalizedPartial = outcome.termination?.finalization.status === "completed" && output.trim().length > 0;
|
|
1035
|
+
agent.outcome = outcome.aborted ? classifyStructuredOutcome("interrupted", "transport-aborted") : malformedStructuredResult ? classifyStructuredOutcome("contract-invalid", "malformed-structured-result") : finalizedPartial ? classifyStructuredOutcome("partial", outcome.termination?.reason) : outcome.outcome ?? (agent.structuredResult?.version === "pi-subagents:result:v2" ? classifyStructuredOutcome(
|
|
942
1036
|
agent.structuredResult.status,
|
|
943
1037
|
agent.structuredResult.reasonCode
|
|
944
|
-
) :
|
|
1038
|
+
) : void 0);
|
|
945
1039
|
const staleGeneration = Boolean(
|
|
946
1040
|
acceptedPlanId && agent.executionPlan?.id !== acceptedPlanId
|
|
947
1041
|
);
|
|
948
1042
|
if (staleGeneration) {
|
|
949
1043
|
agent.outcome = classifyStructuredOutcome("stale", "cancelled-generation");
|
|
950
1044
|
}
|
|
951
|
-
agent.state = staleGeneration ? "stale" : outcome.aborted ? "interrupted" : outcome.exitCode !== 0 ? "failed" : lifecycleStateForOutcome(agent.outcome?.status);
|
|
1045
|
+
agent.state = staleGeneration ? "stale" : outcome.aborted ? "interrupted" : outcome.exitCode !== 0 && agent.outcome?.status !== "partial" ? "failed" : lifecycleStateForOutcome(agent.outcome?.status);
|
|
952
1046
|
agent.error = error;
|
|
953
1047
|
if (agent.capabilityGrant?.state === "active") {
|
|
954
1048
|
agent.capabilityGrant = revokeCapabilityGrant(
|
|
@@ -963,7 +1057,8 @@ var AgentRegistry = class {
|
|
|
963
1057
|
timing: {
|
|
964
1058
|
queuedAt: agent.telemetry?.timing.queuedAt,
|
|
965
1059
|
...outcome.telemetry.timing
|
|
966
|
-
}
|
|
1060
|
+
},
|
|
1061
|
+
budgetSource: outcome.telemetry.budgetSource ?? agent.telemetry?.budgetSource
|
|
967
1062
|
} : agent.telemetry;
|
|
968
1063
|
agent.termination = outcome.termination ? copyTurnTerminationReport(outcome.termination) : void 0;
|
|
969
1064
|
completionOutput = output;
|
|
@@ -1025,6 +1120,13 @@ var AgentRegistry = class {
|
|
|
1025
1120
|
error: completionError ? truncateUtf8(completionError, 512).text : void 0,
|
|
1026
1121
|
createdAt: this.completionCreatedAt()
|
|
1027
1122
|
};
|
|
1123
|
+
agent.completionRequirements = makeCompletionAvailable(agent.completionRequirements, {
|
|
1124
|
+
runId,
|
|
1125
|
+
generation: turnGeneration,
|
|
1126
|
+
completionId: persistedCompletion.completionId,
|
|
1127
|
+
terminalState: agent.state,
|
|
1128
|
+
updatedAt: persistedCompletion.createdAt
|
|
1129
|
+
});
|
|
1028
1130
|
agent.pendingCompletions = [...agent.pendingCompletions ?? [], persistedCompletion];
|
|
1029
1131
|
this.enqueueCompletionMessage(agent, persistedCompletion, completionContent);
|
|
1030
1132
|
clearCurrentTurn(agent);
|
|
@@ -1155,6 +1257,18 @@ var AgentRegistry = class {
|
|
|
1155
1257
|
reservedPaths.add(taskPath);
|
|
1156
1258
|
return { taskName, taskPath };
|
|
1157
1259
|
}
|
|
1260
|
+
assertRequiredCompletionCapacity(mode) {
|
|
1261
|
+
if (mode !== "required") return;
|
|
1262
|
+
const unresolved = [...this.agents.values()].reduce(
|
|
1263
|
+
(sum, agent) => sum + pendingRequiredCompletionCount(agent),
|
|
1264
|
+
0
|
|
1265
|
+
);
|
|
1266
|
+
if (unresolved >= MAX_UNRESOLVED_REQUIRED_COMPLETIONS) {
|
|
1267
|
+
throw new Error(
|
|
1268
|
+
`Required subagent completion capacity reached (${MAX_UNRESOLVED_REQUIRED_COMPLETIONS}); wait for exact completion visibility or terminalize an existing requirement`
|
|
1269
|
+
);
|
|
1270
|
+
}
|
|
1271
|
+
}
|
|
1158
1272
|
retainedCount() {
|
|
1159
1273
|
return [...this.agents.values()].filter((agent) => agent.state !== "closed").length;
|
|
1160
1274
|
}
|
|
@@ -1260,7 +1374,8 @@ var AgentRegistry = class {
|
|
|
1260
1374
|
historyCount: agent.history.length,
|
|
1261
1375
|
unreadMessages,
|
|
1262
1376
|
turnGeneration: agent.turnGeneration ?? 0,
|
|
1263
|
-
pendingCompletionCount: agent.pendingCompletions?.length ?? 0
|
|
1377
|
+
pendingCompletionCount: agent.pendingCompletions?.length ?? 0,
|
|
1378
|
+
pendingRequiredCompletionCount: pendingRequiredCompletionCount(agent)
|
|
1264
1379
|
};
|
|
1265
1380
|
}
|
|
1266
1381
|
copy(agent) {
|
|
@@ -1272,6 +1387,9 @@ var AgentRegistry = class {
|
|
|
1272
1387
|
pendingCompletions: (agent.pendingCompletions ?? []).map((completion) => ({
|
|
1273
1388
|
...completion
|
|
1274
1389
|
})),
|
|
1390
|
+
completionRequirements: (agent.completionRequirements ?? []).map((record) => ({
|
|
1391
|
+
...record
|
|
1392
|
+
})),
|
|
1275
1393
|
history: agent.history.map((turn) => ({ ...turn })),
|
|
1276
1394
|
mailbox: agent.mailbox.map((message) => ({ ...message })),
|
|
1277
1395
|
contract: agent.contract ? structuredClone(agent.contract) : void 0,
|
|
@@ -1294,6 +1412,8 @@ var AgentRegistry = class {
|
|
|
1294
1412
|
};
|
|
1295
1413
|
function lifecycleStateForOutcome(status) {
|
|
1296
1414
|
switch (status) {
|
|
1415
|
+
case "partial":
|
|
1416
|
+
return "partial";
|
|
1297
1417
|
case "blocked":
|
|
1298
1418
|
case "needs-input":
|
|
1299
1419
|
case "abstained":
|
|
@@ -1315,10 +1435,11 @@ function copyTelemetry(value) {
|
|
|
1315
1435
|
return {
|
|
1316
1436
|
...value,
|
|
1317
1437
|
timing: { ...value.timing },
|
|
1318
|
-
usage: value.usage ? { ...value.usage } : void 0
|
|
1438
|
+
usage: value.usage ? { ...value.usage } : void 0,
|
|
1439
|
+
budgetSource: value.budgetSource ? { ...value.budgetSource } : void 0
|
|
1319
1440
|
};
|
|
1320
1441
|
}
|
|
1321
1442
|
export {
|
|
1322
1443
|
AgentRegistry
|
|
1323
1444
|
};
|
|
1324
|
-
//# sourceMappingURL=registry-
|
|
1445
|
+
//# sourceMappingURL=registry-XDXPECWF.ts.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/registry.ts", "../../src/completion-routing.ts", "../../src/transport.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * AgentRegistry intentionally owns its full state machine in one module so queue, tree,\n * mailbox, generation, grant, transport, persistence, and completion transitions are atomic.\n */\nimport { randomUUID } from \"node:crypto\";\nimport { projectAgentRecords } from \"./agent-projection.js\";\nimport type { SubagentThinkingLevel } from \"./agents/types.js\";\nimport {\n\ttype CapabilityGrant,\n\tisCapabilityGrantActive,\n\trevokeCapabilityGrant,\n} from \"./capability-grant.js\";\nimport {\n\tbeginCompletionRequirement,\n\ttype CompletionRequirementMode,\n\tcancelPendingCompletionRequirements,\n\tcompletionRequirementKey,\n\tMAX_UNRESOLVED_REQUIRED_COMPLETIONS,\n\tmakeCompletionAvailable,\n\tmakeCompletionVisible,\n\tpendingRequiredCompletionCount,\n} from \"./completion-requirement.js\";\nimport { resolveCompletionRecipient } from \"./completion-routing.js\";\nimport type { TargetPolicyAudit } from \"./cwd-policy.js\";\nimport type { DelegationContract } from \"./delegation-contract.js\";\nimport {\n\tcopyExecutionPlan,\n\ttype ExecutionPlan,\n\trotateExecutionPlanGeneration,\n} from \"./execution-plan.js\";\nimport {\n\tDEFAULT_MAX_CONTEXT_BYTES,\n\tDEFAULT_MAX_OUTPUT_BYTES,\n\tMAX_SUBAGENT_TIMEOUT_MS,\n\tMAX_TOOL_MESSAGE_BYTES,\n\ttruncateUtf8,\n} from \"./limits.js\";\nimport { classifyStructuredOutcome } from \"./outcome.js\";\nimport type {\n\tAgentInspectionCounts,\n\tAgentLifecycleState,\n\tAgentMailboxMessage,\n\tAgentRegistryOptions,\n\tAgentRunInspectionDetail,\n\tAgentRunInspectionSummary,\n\tAgentTurnCompletion,\n\tManagedAgent,\n} from \"./registry-types.js\";\nimport {\n\ttype AnyStructuredSubagentResult,\n\tparseAnyStructuredSubagentResult,\n\ttype SubagentResultFormat,\n} from \"./result-contract.js\";\nimport { safeTerminalLine } from \"./safe-text.js\";\nimport type { SemanticCompatibility, SemanticSnapshot } from \"./semantic-snapshot.js\";\nimport { resolveStatefulLimits } from \"./stateful-limits.js\";\nimport {\n\tderiveTaskName,\n\tjoinTaskPath,\n\tROOT_TASK_PATH,\n\tresolveTaskPath,\n\tvalidateTaskName,\n\tvalidateTaskPath,\n} from \"./task-path.js\";\nimport { copyTurnTerminationReport } from \"./timeout-checkpoint.js\";\nimport { type AgentTurnRunner, normalizeTransport, type SubagentTransport } from \"./transport.js\";\nimport type { TransportTelemetry } from \"./transport-types.js\";\nimport { type TurnLimits, validateTurnLimits } from \"./turn-budget.js\";\n\nconst DEFAULT_STATEFUL_LIMITS = resolveStatefulLimits();\nconst MAX_PENDING_COMPLETIONS_PER_AGENT = 20;\nconst INITIAL_PERSISTENCE_RETRY_DELAY_MS = 25;\nconst MAX_PERSISTENCE_RETRY_DELAY_MS = 1_000;\n\nexport type * from \"./registry-types.js\";\n\nfunction positiveInteger(value: number, label: string): number {\n\tif (!Number.isSafeInteger(value) || value < 1) {\n\t\tthrow new Error(`${label} must be a positive safe integer`);\n\t}\n\treturn value;\n}\n\nfunction nonNegativeInteger(value: number, label: string): number {\n\tif (!Number.isSafeInteger(value) || value < 0) {\n\t\tthrow new Error(`${label} must be a non-negative safe integer`);\n\t}\n\treturn value;\n}\n\nfunction validateTurnTimeout(value: number): number {\n\tif (!Number.isSafeInteger(value) || value < 1 || value > MAX_SUBAGENT_TIMEOUT_MS) {\n\t\tthrow new Error(`Subagent timeoutMs must be between 1 and ${MAX_SUBAGENT_TIMEOUT_MS}`);\n\t}\n\treturn value;\n}\n\nfunction clearCurrentTurn(agent: ManagedAgent): void {\n\tagent.currentTask = undefined;\n\tagent.currentRunId = undefined;\n\tagent.currentTurnGeneration = undefined;\n\tagent.currentTimeoutMs = undefined;\n\tagent.currentIdleTimeoutMs = undefined;\n\tagent.currentMaxTurns = undefined;\n\tagent.currentMaxToolCalls = undefined;\n\tagent.currentMailboxMessageIds = undefined;\n}\n\nfunction waitAbortError(): Error {\n\tconst error = new Error(\"Subagent wait was aborted\");\n\terror.name = \"AbortError\";\n\treturn error;\n}\n\nfunction waitForPersistenceRetry(milliseconds: number, signal: AbortSignal): Promise<void> {\n\tif (signal.aborted) return Promise.reject(signal.reason);\n\treturn new Promise((resolve, reject) => {\n\t\tconst onAbort = () => {\n\t\t\tclearTimeout(timer);\n\t\t\treject(signal.reason);\n\t\t};\n\t\tconst timer = setTimeout(() => {\n\t\t\tsignal.removeEventListener(\"abort\", onAbort);\n\t\t\tresolve();\n\t\t}, milliseconds);\n\t\tsignal.addEventListener(\"abort\", onAbort, { once: true });\n\t});\n}\n\nexport class AgentRegistry {\n\tprivate readonly agents = new Map<string, ManagedAgent>();\n\tprivate readonly controllers = new Map<string, AbortController>();\n\tprivate readonly running = new Map<string, Promise<ManagedAgent>>();\n\tprivate readonly queue: Array<{\n\t\tagent: ManagedAgent;\n\t\ttask: string;\n\t\tresolve: (agent: ManagedAgent) => void;\n\t}> = [];\n\tprivate changeQueue: Promise<void> = Promise.resolve();\n\tprivate readonly shutdownController = new AbortController();\n\tprivate readonly maxAgents: number;\n\tprivate readonly maxActiveTurns: number;\n\tprivate readonly maxHistoryTurns: number;\n\tprivate readonly maxDepth: number;\n\tprivate readonly maxChildrenPerAgent: number;\n\tprivate readonly maxMailboxMessages: number;\n\tprivate readonly maxMailboxMessageBytes: number;\n\tprivate readonly maxTaskBytes: number;\n\tprivate readonly maxTurnOutputBytes: number;\n\tprivate readonly idleTtlMs: number;\n\tprivate readonly transport: SubagentTransport;\n\tprivate readonly now: () => number;\n\tprivate lastCompletionAt = 0;\n\n\tconstructor(\n\t\ttransport: SubagentTransport | AgentTurnRunner,\n\t\tprivate readonly options: AgentRegistryOptions = {},\n\t) {\n\t\tthis.transport = normalizeTransport(transport);\n\t\tthis.maxAgents = positiveInteger(\n\t\t\toptions.maxAgents ?? DEFAULT_STATEFUL_LIMITS.maxAgents,\n\t\t\t\"maxAgents\",\n\t\t);\n\t\tthis.maxActiveTurns = positiveInteger(\n\t\t\toptions.maxActiveTurns ?? DEFAULT_STATEFUL_LIMITS.maxActiveTurns,\n\t\t\t\"maxActiveTurns\",\n\t\t);\n\t\tthis.maxHistoryTurns = positiveInteger(options.maxHistoryTurns ?? 20, \"maxHistoryTurns\");\n\t\tthis.maxDepth = nonNegativeInteger(\n\t\t\toptions.maxDepth ?? DEFAULT_STATEFUL_LIMITS.maxDepth,\n\t\t\t\"maxDepth\",\n\t\t);\n\t\tthis.maxChildrenPerAgent = positiveInteger(\n\t\t\toptions.maxChildrenPerAgent ?? DEFAULT_STATEFUL_LIMITS.maxChildrenPerAgent,\n\t\t\t\"maxChildrenPerAgent\",\n\t\t);\n\t\tthis.maxMailboxMessages = positiveInteger(\n\t\t\toptions.maxMailboxMessages ?? 100,\n\t\t\t\"maxMailboxMessages\",\n\t\t);\n\t\tthis.maxMailboxMessageBytes = positiveInteger(\n\t\t\toptions.maxMailboxMessageBytes ?? 16 * 1024,\n\t\t\t\"maxMailboxMessageBytes\",\n\t\t);\n\t\tthis.maxTaskBytes = positiveInteger(\n\t\t\toptions.maxTaskBytes ?? DEFAULT_MAX_CONTEXT_BYTES,\n\t\t\t\"maxTaskBytes\",\n\t\t);\n\t\tthis.maxTurnOutputBytes = positiveInteger(\n\t\t\toptions.maxTurnOutputBytes ?? DEFAULT_MAX_OUTPUT_BYTES,\n\t\t\t\"maxTurnOutputBytes\",\n\t\t);\n\t\tthis.idleTtlMs = positiveInteger(options.idleTtlMs ?? 60 * 60 * 1000, \"idleTtlMs\");\n\t\tthis.now = options.now ?? Date.now;\n\t}\n\n\trestore(records: readonly ManagedAgent[]): void {\n\t\tconst candidates = new Map(\n\t\t\tprojectAgentRecords(\n\t\t\t\trecords.filter((record) => record.id && record.state !== \"closed\"),\n\t\t\t\t{ maxAgents: this.maxAgents, maxDepth: this.maxDepth },\n\t\t\t).map((record) => [record.id, record]),\n\t\t);\n\t\tconst restorable: Array<{ record: ManagedAgent; rootId: string; depth: number }> = [];\n\t\tfor (const record of candidates.values()) {\n\t\t\tif (record.parentId && !candidates.has(record.parentId)) continue;\n\t\t\tif (record.parentId === record.id) continue;\n\t\t\tconst seen = new Set([record.id]);\n\t\t\tlet parentId = record.parentId;\n\t\t\tlet rootId = record.id;\n\t\t\tlet cyclic = false;\n\t\t\twhile (parentId) {\n\t\t\t\tif (seen.has(parentId)) {\n\t\t\t\t\tcyclic = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tseen.add(parentId);\n\t\t\t\trootId = parentId;\n\t\t\t\tparentId = candidates.get(parentId)?.parentId;\n\t\t\t}\n\t\t\tconst depth = seen.size - 1;\n\t\t\tif (!cyclic && depth <= this.maxDepth) restorable.push({ record, rootId, depth });\n\t\t}\n\t\trestorable.sort(\n\t\t\t(left, right) =>\n\t\t\t\tleft.depth - right.depth ||\n\t\t\t\tleft.record.createdAt - right.record.createdAt ||\n\t\t\t\tleft.record.id.localeCompare(right.record.id),\n\t\t);\n\t\tconst reservedPaths = new Set(\n\t\t\t[...this.agents.values()].flatMap((agent) =>\n\t\t\t\tagent.state !== \"closed\" && agent.taskPath ? [agent.taskPath] : [],\n\t\t\t),\n\t\t);\n\t\tfor (const { record, rootId, depth } of restorable) {\n\t\t\tconst parentPath = record.parentId\n\t\t\t\t? this.agents.get(record.parentId)?.taskPath\n\t\t\t\t: ROOT_TASK_PATH;\n\t\t\tif (!parentPath) continue;\n\t\t\tconst identity = this.reserveRestoredIdentity(record, parentPath, reservedPaths);\n\t\t\tfor (const completion of record.pendingCompletions ?? []) {\n\t\t\t\tthis.lastCompletionAt = Math.max(this.lastCompletionAt, completion.createdAt);\n\t\t\t}\n\t\t\tthis.agents.set(record.id, {\n\t\t\t\t...record,\n\t\t\t\t...identity,\n\t\t\t\tstate:\n\t\t\t\t\trecord.state === \"running\" || record.state === \"starting\" ? \"interrupted\" : record.state,\n\t\t\t\trootId,\n\t\t\t\tdepth,\n\t\t\t\tcurrentTask: undefined,\n\t\t\t\tturnGeneration: record.turnGeneration ?? 0,\n\t\t\t\tcurrentRunId: undefined,\n\t\t\t\tcurrentTurnGeneration: undefined,\n\t\t\t\tpendingCompletions: (record.pendingCompletions ?? []).map((completion) => ({\n\t\t\t\t\t...completion,\n\t\t\t\t})),\n\t\t\t\tcurrentTimeoutMs: undefined,\n\t\t\t\tcurrentIdleTimeoutMs: undefined,\n\t\t\t\tcurrentMaxTurns: undefined,\n\t\t\t\tcurrentMaxToolCalls: undefined,\n\t\t\t\tcurrentMailboxMessageIds: undefined,\n\t\t\t\tchildren: [],\n\t\t\t\tcontextSourceIds: [...(record.contextSourceIds ?? [])],\n\t\t\t\tcapabilityGrant:\n\t\t\t\t\trecord.capabilityGrant?.state === \"active\"\n\t\t\t\t\t\t? revokeCapabilityGrant(record.capabilityGrant, \"restore-boundary\", this.now())\n\t\t\t\t\t\t: record.capabilityGrant,\n\t\t\t\tmailbox: (record.mailbox ?? [])\n\t\t\t\t\t.slice(-this.maxMailboxMessages)\n\t\t\t\t\t.map((message) => ({ ...message, recipientId: record.id })),\n\t\t\t\tcompletionRequirements: (record.completionRequirements ?? []).map((item) => ({\n\t\t\t\t\t...item,\n\t\t\t\t})),\n\t\t\t\thistory: record.history.slice(-this.maxHistoryTurns).map((turn) => ({ ...turn })),\n\t\t\t});\n\t\t\tconst restored = this.agents.get(record.id);\n\t\t\tif (restored && restored.state !== \"running\" && restored.state !== \"starting\") {\n\t\t\t\trestored.completionRequirements = cancelPendingCompletionRequirements(\n\t\t\t\t\trestored.completionRequirements,\n\t\t\t\t\trestored.state,\n\t\t\t\t\tthis.now(),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tfor (const agent of this.agents.values()) {\n\t\t\tif (agent.parentId) {\n\t\t\t\tconst parent = this.agents.get(agent.parentId);\n\t\t\t\tif (parent && !parent.children.includes(agent.id)) parent.children.push(agent.id);\n\t\t\t}\n\t\t\tfor (const completion of agent.pendingCompletions ?? []) {\n\t\t\t\tif (!completion.recipientId || !completion.recipientPath) {\n\t\t\t\t\tObject.assign(completion, this.completionRecipient(agent));\n\t\t\t\t}\n\t\t\t\tthis.enqueueCompletionMessage(\n\t\t\t\t\tagent,\n\t\t\t\t\tcompletion,\n\t\t\t\t\tcompletion.output || completion.error || \"(no output)\",\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tasync spawn(input: {\n\t\tagent: string;\n\t\ttaskName?: string;\n\t\ttask: string;\n\t\tcwd: string;\n\t\tagentScope?: \"user\" | \"project\" | \"both\";\n\t\tthinkingLevel?: SubagentThinkingLevel;\n\t\ttimeoutMs?: number;\n\t\tidleTimeoutMs?: number;\n\t\tmaxTurns?: number;\n\t\tmaxToolCalls?: number;\n\t\tcompletionRequirement?: CompletionRequirementMode;\n\t\tparentId?: string;\n\t\tcontext?: string;\n\t\tcontextSourceIds?: string[];\n\t\tcontextTruncated?: boolean;\n\t\tcontextTurns?: number;\n\t\tcontextBytes?: number;\n\t\tworkspaceMode?: \"worktree\";\n\t\tspawnIdempotencyKey?: string;\n\t\tspawnRequestHash?: string;\n\t\tcontract?: DelegationContract;\n\t\tresultFormat?: SubagentResultFormat;\n\t\texecutionPlan?: ExecutionPlan;\n\t\tcapabilityGrant?: CapabilityGrant;\n\t\tsemanticSnapshot?: SemanticSnapshot;\n\t\tsemanticCompatibility?: SemanticCompatibility;\n\t\ttarget?: TargetPolicyAudit;\n\t}): Promise<ManagedAgent> {\n\t\tif (!input.task.trim()) throw new Error(\"Subagent tasks cannot be empty\");\n\t\tif (input.timeoutMs !== undefined) validateTurnTimeout(input.timeoutMs);\n\t\tvalidateTurnLimits(input);\n\t\tconst existing = this.findBySpawnIdempotencyKey(\n\t\t\tinput.spawnIdempotencyKey,\n\t\t\tinput.spawnRequestHash,\n\t\t);\n\t\tif (existing) return existing;\n\t\tthis.assertRequiredCompletionCapacity(input.completionRequirement);\n\t\tconst task = truncateUtf8(input.task, this.maxTaskBytes).text;\n\t\tconst expired = this.evictExpired();\n\t\tlet expiryReleaseError: unknown;\n\t\ttry {\n\t\t\tawait this.releaseAgents(expired);\n\t\t} catch (error) {\n\t\t\texpiryReleaseError = error;\n\t\t}\n\t\tif (expired.length > 0) await this.changed();\n\t\tif (expiryReleaseError) throw expiryReleaseError;\n\t\tif (this.retainedCount() >= this.maxAgents) {\n\t\t\tthrow new Error(`Subagent capacity reached (${this.maxAgents})`);\n\t\t}\n\t\tconst parent = input.parentId ? this.require(input.parentId) : undefined;\n\t\tif (parent?.state === \"closed\") throw new Error(`Cannot spawn under closed agent ${parent.id}`);\n\t\tif (parent && parent.children.length >= this.maxChildrenPerAgent) {\n\t\t\tthrow new Error(`Agent ${parent.id} child capacity reached (${this.maxChildrenPerAgent})`);\n\t\t}\n\t\tconst depth = parent ? parent.depth + 1 : 0;\n\t\tif (depth > this.maxDepth) throw new Error(`Subagent depth limit reached (${this.maxDepth})`);\n\t\tconst now = this.now();\n\t\tconst id = `sa_${randomUUID()}`;\n\t\tconst taskName = input.taskName ? validateTaskName(input.taskName) : deriveTaskName(id);\n\t\tconst taskPath = joinTaskPath(parent?.taskPath ?? ROOT_TASK_PATH, taskName);\n\t\tif (this.findByTaskPath(taskPath)) {\n\t\t\tthrow new Error(`Canonical subagent task path is already retained: ${taskPath}`);\n\t\t}\n\t\tconst record: ManagedAgent = {\n\t\t\tid,\n\t\t\ttaskName,\n\t\t\ttaskPath,\n\t\t\tagent: input.agent,\n\t\t\tparentId: parent?.id,\n\t\t\trootId: parent?.rootId ?? id,\n\t\t\tdepth,\n\t\t\tchildren: [],\n\t\t\tstate: \"starting\",\n\t\t\tcreatedAt: now,\n\t\t\tupdatedAt: now,\n\t\t\tcwd: input.cwd,\n\t\t\tagentScope: input.agentScope,\n\t\t\tthinkingLevel: input.thinkingLevel,\n\t\t\ttimeoutMs: input.timeoutMs,\n\t\t\tcurrentTimeoutMs: input.timeoutMs,\n\t\t\tidleTimeoutMs: input.idleTimeoutMs,\n\t\t\tcurrentIdleTimeoutMs: input.idleTimeoutMs,\n\t\t\tmaxTurns: input.maxTurns,\n\t\t\tcurrentMaxTurns: input.maxTurns,\n\t\t\tmaxToolCalls: input.maxToolCalls,\n\t\t\tcurrentMaxToolCalls: input.maxToolCalls,\n\t\t\tcurrentTask: task,\n\t\t\tturnGeneration: 0,\n\t\t\tpendingCompletions: [],\n\t\t\tcompletionRequirements: [],\n\t\t\thistory: [],\n\t\t\tmailbox: [],\n\t\t\tcontext: input.context,\n\t\t\tcontextSourceIds: input.contextSourceIds,\n\t\t\tcontextTruncated: input.contextTruncated,\n\t\t\tcontextTurns: input.contextTurns,\n\t\t\tcontextBytes: input.contextBytes,\n\t\t\tworkspaceMode: input.workspaceMode,\n\t\t\tspawnIdempotencyKey: input.spawnIdempotencyKey,\n\t\t\tspawnRequestHash: input.spawnRequestHash,\n\t\t\tcontract: input.contract,\n\t\t\tresultFormat: input.resultFormat,\n\t\t\texecutionPlan: input.executionPlan,\n\t\t\tcapabilityGrant: input.capabilityGrant,\n\t\t\tsemanticSnapshot: input.semanticSnapshot,\n\t\t\tsemanticCompatibility: input.semanticCompatibility,\n\t\t\ttarget: input.target,\n\t\t};\n\t\tthis.agents.set(record.id, record);\n\t\tif (parent) {\n\t\t\tparent.children.push(record.id);\n\t\t\tparent.updatedAt = now;\n\t\t}\n\t\tawait this.changed();\n\t\tthis.startTurn(record, task, input, input.completionRequirement);\n\t\treturn this.copy(record);\n\t}\n\n\tfindBySpawnIdempotencyKey(\n\t\tkey: string | undefined,\n\t\trequestHash: string | undefined,\n\t): ManagedAgent | undefined {\n\t\tif (!key) return undefined;\n\t\tconst existing = [...this.agents.values()].find(\n\t\t\t(agent) => agent.state !== \"closed\" && agent.spawnIdempotencyKey === key,\n\t\t);\n\t\tif (!existing) return undefined;\n\t\tif (!requestHash || existing.spawnRequestHash !== requestHash) {\n\t\t\tthrow new Error(\n\t\t\t\t\"The subagent_spawn idempotencyKey was already used with different parameters\",\n\t\t\t);\n\t\t}\n\t\treturn this.copy(existing);\n\t}\n\n\tasync followUp(\n\t\tid: string,\n\t\ttask: string,\n\t\toptions: TurnLimits & {\n\t\t\ttimeoutMs?: number;\n\t\t\tcompletionRequirement?: CompletionRequirementMode;\n\t\t} = {},\n\t): Promise<ManagedAgent> {\n\t\tif (!task.trim()) throw new Error(\"Subagent tasks cannot be empty\");\n\t\tif (options.timeoutMs !== undefined) validateTurnTimeout(options.timeoutMs);\n\t\tvalidateTurnLimits(options);\n\t\tconst boundedTask = truncateUtf8(task, this.maxTaskBytes).text;\n\t\tconst agent = this.require(id);\n\t\tif (\n\t\t\t![\n\t\t\t\t\"idle\",\n\t\t\t\t\"completed\",\n\t\t\t\t\"partial\",\n\t\t\t\t\"blocked\",\n\t\t\t\t\"needs-input\",\n\t\t\t\t\"abstained\",\n\t\t\t\t\"stale\",\n\t\t\t\t\"interrupted\",\n\t\t\t\t\"failed\",\n\t\t\t].includes(agent.state)\n\t\t) {\n\t\t\tthrow new Error(`Agent ${id} cannot accept follow-up while ${agent.state}`);\n\t\t}\n\t\tthis.assertRequiredCompletionCapacity(options.completionRequirement);\n\t\tconst unread = agent.mailbox.filter((message) => !message.readAt).slice(-20);\n\t\tagent.currentMailboxMessageIds = unread.map((message) => message.id);\n\t\tthis.startTurn(agent, boundedTask, options, options.completionRequirement);\n\t\treturn this.copy(agent);\n\t}\n\n\tasync updateSemanticState(\n\t\tid: string,\n\t\texecutionPlan: ExecutionPlan,\n\t\tcapabilityGrant: CapabilityGrant,\n\t\tsnapshot: SemanticSnapshot,\n\t\tcompatibility: SemanticCompatibility,\n\t): Promise<ManagedAgent> {\n\t\tconst agent = this.require(id);\n\t\tif (agent.state === \"running\" || agent.state === \"starting\" || agent.state === \"closed\") {\n\t\t\tthrow new Error(`Agent ${id} cannot update semantic state while ${agent.state}`);\n\t\t}\n\t\tagent.executionPlan = copyExecutionPlan(executionPlan);\n\t\tagent.capabilityGrant = structuredClone(capabilityGrant);\n\t\tagent.semanticSnapshot = structuredClone(snapshot);\n\t\tagent.semanticCompatibility = structuredClone(compatibility);\n\t\tagent.updatedAt = this.now();\n\t\tawait this.changed();\n\t\treturn this.copy(agent);\n\t}\n\n\tasync sendMessage(\n\t\trecipientId: string,\n\t\tcontent: string,\n\t\tsenderId = \"root\",\n\t\tdeduplicationKey?: string,\n\t): Promise<AgentMailboxMessage> {\n\t\tif (!content.trim()) throw new Error(\"Subagent mailbox messages cannot be empty\");\n\t\tif (deduplicationKey && deduplicationKey.length > 256) {\n\t\t\tthrow new Error(\"Subagent mailbox deduplication keys cannot exceed 256 characters\");\n\t\t}\n\t\tconst sender = senderId === \"root\" ? undefined : this.require(senderId);\n\t\tif (sender?.state === \"closed\")\n\t\t\tthrow new Error(`Closed agent ${sender.id} cannot send messages`);\n\t\tconst recipient = this.require(recipientId, sender?.id);\n\t\tif (recipient.state === \"closed\")\n\t\t\tthrow new Error(`Cannot message closed agent ${recipient.id}`);\n\t\tconst message = this.enqueueMessage(recipient, content, sender?.id ?? \"root\", deduplicationKey);\n\t\tawait this.changed();\n\t\treturn { ...message };\n\t}\n\n\tasync readMessages(\n\t\tid: string,\n\t\tacknowledge = true,\n\t\tlimit = this.maxMailboxMessages,\n\t): Promise<AgentMailboxMessage[]> {\n\t\tif (!Number.isSafeInteger(limit) || limit < 1) {\n\t\t\tthrow new Error(\"Subagent mailbox read limit must be a positive safe integer\");\n\t\t}\n\t\tconst agent = this.require(id);\n\t\tconst unread = agent.mailbox.filter((message) => !message.readAt).slice(0, limit);\n\t\tif (acknowledge && unread.length > 0) {\n\t\t\tconst readAt = this.now();\n\t\t\tfor (const message of unread) message.readAt = readAt;\n\t\t\tawait this.changed();\n\t\t}\n\t\treturn unread.map((message) => ({ ...message }));\n\t}\n\n\tasync acknowledgeVisibleMessages(\n\t\tid: string,\n\t\tmessageIds: readonly string[],\n\t\tcompletionIds: readonly string[] = [],\n\t\tvisibleAt = this.now(),\n\t): Promise<void> {\n\t\tconst agent = this.require(id);\n\t\tconst visibleMessageIds = new Set(messageIds);\n\t\tconst visibleCompletionIds = new Set(completionIds);\n\t\tconst changedMessages: AgentMailboxMessage[] = [];\n\t\tconst removedCompletions: Array<{\n\t\t\towner: ManagedAgent;\n\t\t\tcompletion: NonNullable<ManagedAgent[\"pendingCompletions\"]>[number];\n\t\t}> = [];\n\t\tfor (const message of agent.mailbox) {\n\t\t\tif (message.readAt === undefined && visibleMessageIds.has(message.id)) {\n\t\t\t\tmessage.readAt = visibleAt;\n\t\t\t\tchangedMessages.push(message);\n\t\t\t}\n\t\t\tif (message.completionId && visibleMessageIds.has(message.id)) {\n\t\t\t\tvisibleCompletionIds.add(message.completionId);\n\t\t\t}\n\t\t}\n\t\tfor (const owner of this.agents.values()) {\n\t\t\tfor (const completion of owner.pendingCompletions ?? []) {\n\t\t\t\tif (!visibleCompletionIds.has(completion.completionId)) continue;\n\t\t\t\tif (completion.recipientId !== agent.id && completion.recipientPath !== agent.taskPath) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tremovedCompletions.push({ owner, completion });\n\t\t\t}\n\t\t}\n\t\tif (changedMessages.length === 0 && removedCompletions.length === 0) return;\n\t\tfor (const { owner, completion } of removedCompletions) {\n\t\t\towner.pendingCompletions = (owner.pendingCompletions ?? []).filter(\n\t\t\t\t(candidate) => candidate.completionId !== completion.completionId,\n\t\t\t);\n\t\t}\n\t\tagent.updatedAt = Math.max(agent.updatedAt, visibleAt);\n\t\ttry {\n\t\t\tawait this.changed(true);\n\t\t} catch (error) {\n\t\t\tfor (const message of changedMessages) message.readAt = undefined;\n\t\t\tfor (const { owner, completion } of removedCompletions) {\n\t\t\t\towner.pendingCompletions = [...(owner.pendingCompletions ?? []), completion].sort(\n\t\t\t\t\t(left, right) => left.createdAt - right.createdAt || left.generation - right.generation,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync wait(\n\t\tid: string,\n\t\ttimeoutMs = 30_000,\n\t\tsignal?: AbortSignal,\n\t): Promise<{ timedOut: boolean; agent: ManagedAgent }> {\n\t\tif (!Number.isFinite(timeoutMs) || timeoutMs < 1) {\n\t\t\tthrow new Error(\"Subagent wait timeout must be a positive finite number\");\n\t\t}\n\t\tif (signal?.aborted) throw waitAbortError();\n\t\tconst agent = this.require(id);\n\t\tconst agentId = agent.id;\n\t\tconst running = this.running.get(agentId);\n\t\tif (!running) return { timedOut: false, agent: this.copy(agent) };\n\t\tlet timer: NodeJS.Timeout | undefined;\n\t\tlet onAbort: (() => void) | undefined;\n\t\tconst timeout = new Promise<\"timeout\">((resolve) => {\n\t\t\ttimer = setTimeout(() => resolve(\"timeout\"), Math.max(1, timeoutMs));\n\t\t});\n\t\tconst aborted = new Promise<\"aborted\">((resolve) => {\n\t\t\tonAbort = () => resolve(\"aborted\");\n\t\t\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\t\t});\n\t\tconst result = await Promise.race([running, timeout, aborted]);\n\t\tif (timer) clearTimeout(timer);\n\t\tif (onAbort) signal?.removeEventListener(\"abort\", onAbort);\n\t\tif (result === \"aborted\") throw waitAbortError();\n\t\treturn result === \"timeout\"\n\t\t\t? { timedOut: true, agent: this.copy(this.require(agentId)) }\n\t\t\t: { timedOut: false, agent: this.copy(result) };\n\t}\n\n\tasync interruptTree(id: string): Promise<ManagedAgent[]> {\n\t\tconst results: ManagedAgent[] = [];\n\t\tfor (const target of this.descendants(id).reverse()) {\n\t\t\tconst agent = this.require(target);\n\t\t\tif (agent.state === \"running\" || agent.state === \"starting\") {\n\t\t\t\tresults.push(await this.interrupt(target));\n\t\t\t}\n\t\t}\n\t\treturn results;\n\t}\n\n\tasync interrupt(id: string): Promise<ManagedAgent> {\n\t\tconst agent = this.require(id);\n\t\tconst agentId = agent.id;\n\t\tif (agent.state !== \"running\" && agent.state !== \"starting\")\n\t\t\tthrow new Error(`Agent ${id} is not running`);\n\t\tif (agent.capabilityGrant?.state === \"active\") {\n\t\t\tagent.capabilityGrant = revokeCapabilityGrant(\n\t\t\t\tagent.capabilityGrant,\n\t\t\t\t\"interrupted\",\n\t\t\t\tthis.now(),\n\t\t\t);\n\t\t}\n\t\tif (agent.executionPlan) {\n\t\t\tagent.executionPlan = rotateExecutionPlanGeneration(agent.executionPlan);\n\t\t}\n\t\tif (agent.state === \"starting\") {\n\t\t\tconst index = this.queue.findIndex((entry) => entry.agent.id === agentId);\n\t\t\tif (index >= 0) {\n\t\t\t\tconst [entry] = this.queue.splice(index, 1);\n\t\t\t\tconst recipient = this.completionRecipient(agent);\n\t\t\t\tconst persistedCompletion = {\n\t\t\t\t\tcompletionId: `completion:${agent.id}:${randomUUID()}`,\n\t\t\t\t\t...recipient,\n\t\t\t\t\trunId: agent.currentRunId ?? `run:${agent.id}:${randomUUID()}`,\n\t\t\t\t\tgeneration: agent.currentTurnGeneration ?? agent.turnGeneration ?? 1,\n\t\t\t\t\ttask: truncateUtf8(entry.task, 256).text,\n\t\t\t\t\toutput: \"\",\n\t\t\t\t\terror: \"Interrupted before execution\",\n\t\t\t\t\tcreatedAt: this.completionCreatedAt(),\n\t\t\t\t};\n\t\t\t\tagent.state = \"interrupted\";\n\t\t\t\tagent.completionRequirements = makeCompletionAvailable(agent.completionRequirements, {\n\t\t\t\t\trunId: persistedCompletion.runId,\n\t\t\t\t\tgeneration: persistedCompletion.generation,\n\t\t\t\t\tcompletionId: persistedCompletion.completionId,\n\t\t\t\t\tterminalState: agent.state,\n\t\t\t\t\tupdatedAt: persistedCompletion.createdAt,\n\t\t\t\t});\n\t\t\t\tagent.pendingCompletions = [...(agent.pendingCompletions ?? []), persistedCompletion];\n\t\t\t\tthis.enqueueCompletionMessage(agent, persistedCompletion, persistedCompletion.error);\n\t\t\t\tclearCurrentTurn(agent);\n\t\t\t\tagent.updatedAt = this.now();\n\t\t\t\tconst persisted = await this.persistTerminalState().then(\n\t\t\t\t\t() => true,\n\t\t\t\t\t() => false,\n\t\t\t\t);\n\t\t\t\tconst completion: AgentTurnCompletion = {\n\t\t\t\t\t...persistedCompletion,\n\t\t\t\t\tagent: this.copy(agent),\n\t\t\t\t};\n\t\t\t\tentry.resolve(agent);\n\t\t\t\tthis.running.delete(agentId);\n\t\t\t\tif (persisted) await this.notifyTurnComplete(completion);\n\t\t\t\treturn this.copy(agent);\n\t\t\t}\n\t\t}\n\t\tthis.controllers.get(agentId)?.abort();\n\t\tawait this.running.get(agentId);\n\t\treturn this.copy(this.require(agentId));\n\t}\n\n\tasync closeTree(id: string): Promise<ManagedAgent[]> {\n\t\tconst results: ManagedAgent[] = [];\n\t\tconst failures: unknown[] = [];\n\t\tfor (const target of this.descendants(id).reverse()) {\n\t\t\tconst agent = this.require(target);\n\t\t\tif (agent.state === \"closed\") continue;\n\t\t\ttry {\n\t\t\t\tresults.push(await this.close(target));\n\t\t\t} catch (error) {\n\t\t\t\tfailures.push(error);\n\t\t\t\tconst closed = this.get(target);\n\t\t\t\tif (closed?.state === \"closed\") results.push(closed);\n\t\t\t}\n\t\t}\n\t\tif (failures.length > 0) {\n\t\t\tthrow new AggregateError(failures, `Failed to release ${failures.length} subagent(s)`);\n\t\t}\n\t\treturn results;\n\t}\n\n\tasync close(id: string): Promise<ManagedAgent> {\n\t\tconst agent = this.require(id);\n\t\tconst agentId = agent.id;\n\t\tif (agent.state === \"closed\") throw new Error(`Agent ${id} is already closed`);\n\t\tif (agent.children.some((childId) => this.agents.get(childId)?.state !== \"closed\")) {\n\t\t\tthrow new Error(`Agent ${id} has active descendants; close the subtree instead`);\n\t\t}\n\t\tif (agent.state === \"starting\" || agent.state === \"running\") {\n\t\t\tif (agent.capabilityGrant?.state === \"active\") {\n\t\t\t\tagent.capabilityGrant = revokeCapabilityGrant(agent.capabilityGrant, \"closed\", this.now());\n\t\t\t}\n\t\t\tif (agent.executionPlan) {\n\t\t\t\tagent.executionPlan = rotateExecutionPlanGeneration(agent.executionPlan);\n\t\t\t}\n\t\t}\n\t\tif (agent.state === \"starting\") {\n\t\t\tconst index = this.queue.findIndex((entry) => entry.agent.id === agentId);\n\t\t\tif (index >= 0) {\n\t\t\t\tconst [entry] = this.queue.splice(index, 1);\n\t\t\t\tentry.resolve(agent);\n\t\t\t\tthis.running.delete(agentId);\n\t\t\t}\n\t\t}\n\t\tthis.controllers.get(agentId)?.abort();\n\t\tawait this.running.get(agentId)?.catch(() => undefined);\n\t\tagent.state = \"closed\";\n\t\tagent.updatedAt = this.now();\n\t\tagent.completionRequirements = cancelPendingCompletionRequirements(\n\t\t\tagent.completionRequirements,\n\t\t\tagent.state,\n\t\t\tagent.updatedAt,\n\t\t);\n\t\tif (agent.parentId) {\n\t\t\tconst parent = this.agents.get(agent.parentId);\n\t\t\tif (parent) parent.children = parent.children.filter((childId) => childId !== agentId);\n\t\t}\n\t\tclearCurrentTurn(agent);\n\t\tlet releaseError: unknown;\n\t\ttry {\n\t\t\tawait this.transport.release?.(this.copy(agent));\n\t\t} catch (error) {\n\t\t\treleaseError = error;\n\t\t}\n\t\tthis.pruneClosedAgents();\n\t\tawait this.changed();\n\t\tif (releaseError) throw releaseError;\n\t\treturn this.copy(agent);\n\t}\n\n\tasync closeAll(): Promise<void> {\n\t\tconst roots = [...this.agents.values()]\n\t\t\t.filter((agent) => agent.state !== \"closed\" && !agent.parentId)\n\t\t\t.map((agent) => agent.id);\n\t\tconst results = await Promise.allSettled(roots.map((id) => this.closeTree(id)));\n\t\tconst failures = results.flatMap((result) =>\n\t\t\tresult.status === \"rejected\" ? [result.reason] : [],\n\t\t);\n\t\tif (failures.length > 0) {\n\t\t\tthrow new AggregateError(failures, `Failed to close ${failures.length} subagent tree(s)`);\n\t\t}\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\tthis.shutdownController.abort(new Error(\"Subagent registry is shutting down\"));\n\t\tfor (const entry of this.queue.splice(0)) {\n\t\t\tif (entry.agent.capabilityGrant?.state === \"active\") {\n\t\t\t\tentry.agent.capabilityGrant = revokeCapabilityGrant(\n\t\t\t\t\tentry.agent.capabilityGrant,\n\t\t\t\t\t\"shutdown\",\n\t\t\t\t\tthis.now(),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (entry.agent.executionPlan) {\n\t\t\t\tentry.agent.executionPlan = rotateExecutionPlanGeneration(entry.agent.executionPlan);\n\t\t\t}\n\t\t\tentry.agent.state = \"interrupted\";\n\t\t\tclearCurrentTurn(entry.agent);\n\t\t\tentry.resolve(entry.agent);\n\t\t\tthis.running.delete(entry.agent.id);\n\t\t}\n\t\tfor (const id of this.controllers.keys()) {\n\t\t\tconst agent = this.agents.get(id);\n\t\t\tif (agent?.capabilityGrant?.state === \"active\") {\n\t\t\t\tagent.capabilityGrant = revokeCapabilityGrant(\n\t\t\t\t\tagent.capabilityGrant,\n\t\t\t\t\t\"shutdown\",\n\t\t\t\t\tthis.now(),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (agent?.executionPlan) {\n\t\t\t\tagent.executionPlan = rotateExecutionPlanGeneration(agent.executionPlan);\n\t\t\t}\n\t\t}\n\t\tfor (const controller of this.controllers.values()) controller.abort();\n\t\tawait Promise.all([...this.running.values()].map((turn) => turn.catch(() => undefined)));\n\t\tfor (const agent of this.agents.values()) {\n\t\t\tif (agent.state !== \"closed\") {\n\t\t\t\tif (agent.state === \"running\" || agent.state === \"starting\") {\n\t\t\t\t\tagent.state = \"interrupted\";\n\t\t\t\t}\n\t\t\t\tagent.completionRequirements = cancelPendingCompletionRequirements(\n\t\t\t\t\tagent.completionRequirements,\n\t\t\t\t\tagent.state,\n\t\t\t\t\tthis.now(),\n\t\t\t\t);\n\t\t\t\tclearCurrentTurn(agent);\n\t\t\t}\n\t\t}\n\t\tlet shutdownError: unknown;\n\t\ttry {\n\t\t\tawait this.transport.shutdown?.();\n\t\t} catch (error) {\n\t\t\tshutdownError = error;\n\t\t}\n\t\tawait this.changed(true);\n\t\tif (shutdownError) throw shutdownError;\n\t}\n\n\tinspectionCounts(): AgentInspectionCounts {\n\t\tlet activeAgents = 0;\n\t\tlet retainedAgents = 0;\n\t\tfor (const agent of this.agents.values()) {\n\t\t\tif (agent.state === \"starting\" || agent.state === \"running\") activeAgents++;\n\t\t\tif (agent.state !== \"closed\") retainedAgents++;\n\t\t}\n\t\treturn { activeAgents, retainedAgents };\n\t}\n\n\tlistInspection(includeClosed = false): AgentRunInspectionSummary[] {\n\t\treturn [...this.agents.values()]\n\t\t\t.filter((agent) => includeClosed || agent.state !== \"closed\")\n\t\t\t.sort((left, right) => left.createdAt - right.createdAt)\n\t\t\t.map((agent) => this.inspectSummary(agent));\n\t}\n\n\tgetInspection(id: string): AgentRunInspectionDetail | undefined {\n\t\tconst agent = this.findReference(id);\n\t\tif (!agent) return undefined;\n\t\treturn {\n\t\t\t...this.inspectSummary(agent),\n\t\t\tcwd: agent.cwd,\n\t\t\tthinkingLevel: agent.thinkingLevel,\n\t\t\ttimeoutMs: agent.timeoutMs,\n\t\t\tcurrentTimeoutMs: agent.currentTimeoutMs,\n\t\t\tidleTimeoutMs: agent.idleTimeoutMs,\n\t\t\tcurrentIdleTimeoutMs: agent.currentIdleTimeoutMs,\n\t\t\tmaxTurns: agent.maxTurns,\n\t\t\tcurrentMaxTurns: agent.currentMaxTurns,\n\t\t\tmaxToolCalls: agent.maxToolCalls,\n\t\t\tcurrentMaxToolCalls: agent.currentMaxToolCalls,\n\t\t\tcurrentTask: agent.currentTask,\n\t\t\tcurrentRunId: agent.currentRunId,\n\t\t\tcurrentTurnGeneration: agent.currentTurnGeneration,\n\t\t\tcompletionRequirements: (agent.completionRequirements ?? []).map((record) => ({\n\t\t\t\t...record,\n\t\t\t})),\n\t\t\terror: agent.error,\n\t\t\tworkspaceMode: agent.workspaceMode,\n\t\t\tcontextTurns: agent.contextTurns,\n\t\t\tcontextBytes: agent.contextBytes,\n\t\t\tcontextSources: agent.contextSourceIds?.length,\n\t\t\tcontextTruncated: agent.contextTruncated,\n\t\t\tcontract: agent.contract ? structuredClone(agent.contract) : undefined,\n\t\t\tresultFormat: agent.resultFormat,\n\t\t\ttarget: agent.target ? { ...agent.target, trust: { ...agent.target.trust } } : undefined,\n\t\t\tpolicy: agent.policy\n\t\t\t\t? {\n\t\t\t\t\t\tinherited: [...agent.policy.inherited],\n\t\t\t\t\t\toverridden: [...agent.policy.overridden],\n\t\t\t\t\t\tunsupported: [...agent.policy.unsupported],\n\t\t\t\t\t}\n\t\t\t\t: undefined,\n\t\t\tstructuredResult: agent.structuredResult\n\t\t\t\t? copyStructuredResult(agent.structuredResult)\n\t\t\t\t: undefined,\n\t\t\ttermination: agent.termination ? copyTurnTerminationReport(agent.termination) : undefined,\n\t\t\toutcome: agent.outcome ? structuredClone(agent.outcome) : undefined,\n\t\t\texecutionPlan: agent.executionPlan ? copyExecutionPlan(agent.executionPlan) : undefined,\n\t\t\tcapabilityGrant: agent.capabilityGrant ? structuredClone(agent.capabilityGrant) : undefined,\n\t\t\tsemanticSnapshot: agent.semanticSnapshot\n\t\t\t\t? structuredClone(agent.semanticSnapshot)\n\t\t\t\t: undefined,\n\t\t\tsemanticCompatibility: agent.semanticCompatibility\n\t\t\t\t? structuredClone(agent.semanticCompatibility)\n\t\t\t\t: undefined,\n\t\t\ttelemetry: agent.telemetry ? copyTelemetry(agent.telemetry) : undefined,\n\t\t};\n\t}\n\n\tlist(includeClosed = false, rootId?: string): ManagedAgent[] {\n\t\treturn [...this.agents.values()]\n\t\t\t.filter((agent) => !rootId || agent.rootId === rootId)\n\t\t\t.filter((agent) => includeClosed || agent.state !== \"closed\")\n\t\t\t.sort((a, b) => a.createdAt - b.createdAt)\n\t\t\t.map((agent) => this.copy(agent));\n\t}\n\n\tget(reference: string): ManagedAgent | undefined {\n\t\treturn this.resolveAgent(reference);\n\t}\n\n\tresolveAgent(reference: string, senderId = \"root\"): ManagedAgent | undefined {\n\t\tconst agent = this.findReference(reference, senderId);\n\t\treturn agent ? this.copy(agent) : undefined;\n\t}\n\n\treconcileCompletionRequirements(\n\t\tactiveRecords: ReadonlyMap<\n\t\t\tstring,\n\t\t\timport(\"./completion-requirement.js\").CompletionRequirementRecord\n\t\t>,\n\t\tobservedState: boolean,\n\t): void {\n\t\tif (!observedState) return;\n\t\tfor (const agent of this.agents.values()) {\n\t\t\tagent.completionRequirements = (agent.completionRequirements ?? []).flatMap((record) => {\n\t\t\t\tconst restored = activeRecords.get(completionRequirementKey(record));\n\t\t\t\tif (!restored) return [];\n\t\t\t\tif (\n\t\t\t\t\trestored.state === \"pending\" &&\n\t\t\t\t\tagent.state !== \"running\" &&\n\t\t\t\t\tagent.state !== \"starting\"\n\t\t\t\t) {\n\t\t\t\t\treturn [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t...restored,\n\t\t\t\t\t\t\tstate: \"cancelled\" as const,\n\t\t\t\t\t\t\tterminalState: \"interrupted\" as const,\n\t\t\t\t\t\t\tupdatedAt: Math.max(restored.updatedAt, this.now()),\n\t\t\t\t\t\t},\n\t\t\t\t\t];\n\t\t\t\t}\n\t\t\t\treturn [{ ...restored }];\n\t\t\t});\n\t\t}\n\t}\n\n\tlistPendingCompletions(): AgentTurnCompletion[] {\n\t\treturn [...this.agents.values()]\n\t\t\t.flatMap((agent) =>\n\t\t\t\t(agent.pendingCompletions ?? []).map((completion) => ({\n\t\t\t\t\t...completion,\n\t\t\t\t\tagent: this.copy(agent),\n\t\t\t\t})),\n\t\t\t)\n\t\t\t.sort(\n\t\t\t\t(left, right) =>\n\t\t\t\t\tleft.createdAt - right.createdAt ||\n\t\t\t\t\tleft.generation - right.generation ||\n\t\t\t\t\tleft.completionId.localeCompare(right.completionId),\n\t\t\t);\n\t}\n\n\tasync markCompletionDelivered(completionId: string, deliveredAt: number): Promise<void> {\n\t\tconst agent = [...this.agents.values()].find((candidate) =>\n\t\t\tcandidate.pendingCompletions?.some((completion) => completion.completionId === completionId),\n\t\t);\n\t\tif (!agent) return;\n\t\tconst acknowledged = (agent.pendingCompletions ?? []).find(\n\t\t\t(completion) => completion.completionId === completionId,\n\t\t);\n\t\tif (!acknowledged) return;\n\t\tagent.completionRequirements = makeCompletionVisible(\n\t\t\tagent.completionRequirements,\n\t\t\tcompletionId,\n\t\t\tdeliveredAt,\n\t\t);\n\t\tagent.pendingCompletions = (agent.pendingCompletions ?? []).filter(\n\t\t\t(completion) => completion.completionId !== completionId,\n\t\t);\n\t\tif (agent.telemetry) {\n\t\t\tagent.telemetry = {\n\t\t\t\t...agent.telemetry,\n\t\t\t\tupdatedAt: deliveredAt,\n\t\t\t\ttiming: { ...agent.telemetry.timing, completionDeliveredAt: deliveredAt },\n\t\t\t};\n\t\t}\n\t\tagent.updatedAt = Math.max(agent.updatedAt, deliveredAt);\n\t\ttry {\n\t\t\tawait this.changed(true);\n\t\t} catch (error) {\n\t\t\tagent.completionRequirements = (agent.completionRequirements ?? []).map((record) =>\n\t\t\t\trecord.completionId === completionId && record.state === \"visible\"\n\t\t\t\t\t? { ...record, state: \"available\", updatedAt: acknowledged.createdAt }\n\t\t\t\t\t: record,\n\t\t\t);\n\t\t\tif (\n\t\t\t\t!agent.pendingCompletions?.some(\n\t\t\t\t\t(completion) => completion.completionId === acknowledged.completionId,\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tagent.pendingCompletions = [...(agent.pendingCompletions ?? []), acknowledged].sort(\n\t\t\t\t\t(left, right) => left.createdAt - right.createdAt || left.generation - right.generation,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (agent.telemetry?.timing.completionDeliveredAt === deliveredAt) {\n\t\t\t\tconst { completionDeliveredAt: _discarded, ...timing } = agent.telemetry.timing;\n\t\t\t\tagent.telemetry = { ...agent.telemetry, timing };\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync sweepExpired(): Promise<number> {\n\t\tconst removed = this.evictExpired();\n\t\tlet releaseError: unknown;\n\t\ttry {\n\t\t\tawait this.releaseAgents(removed);\n\t\t} catch (error) {\n\t\t\treleaseError = error;\n\t\t}\n\t\tif (removed.length > 0) await this.changed();\n\t\tif (releaseError) throw releaseError;\n\t\treturn removed.length;\n\t}\n\n\tprivate startTurn(\n\t\tagent: ManagedAgent,\n\t\ttask: string,\n\t\tlimits: TurnLimits & { timeoutMs?: number } = {},\n\t\tcompletionRequirement: CompletionRequirementMode = \"background\",\n\t): void {\n\t\tif ((agent.pendingCompletions?.length ?? 0) >= MAX_PENDING_COMPLETIONS_PER_AGENT) {\n\t\t\tthrow new Error(\n\t\t\t\t`Agent ${agent.id} has ${MAX_PENDING_COMPLETIONS_PER_AGENT} undelivered completions; wait for delivery before another turn`,\n\t\t\t);\n\t\t}\n\t\tagent.turnGeneration = (agent.turnGeneration ?? 0) + 1;\n\t\tagent.currentTurnGeneration = agent.turnGeneration;\n\t\tagent.currentRunId = `run:${agent.id}:${randomUUID()}`;\n\t\tif (completionRequirement === \"required\") {\n\t\t\tagent.completionRequirements = beginCompletionRequirement(agent.completionRequirements, {\n\t\t\t\trunId: agent.currentRunId,\n\t\t\t\tgeneration: agent.currentTurnGeneration,\n\t\t\t\tcreatedAt: this.now(),\n\t\t\t});\n\t\t}\n\t\tagent.state = \"starting\";\n\t\tagent.error = undefined;\n\t\tagent.currentTask = task;\n\t\tagent.currentTimeoutMs = limits.timeoutMs ?? agent.timeoutMs;\n\t\tagent.currentIdleTimeoutMs = limits.idleTimeoutMs ?? agent.idleTimeoutMs;\n\t\tagent.currentMaxTurns = limits.maxTurns ?? agent.maxTurns;\n\t\tagent.currentMaxToolCalls = limits.maxToolCalls ?? agent.maxToolCalls;\n\t\tagent.structuredResult = undefined;\n\t\tagent.termination = undefined;\n\t\tagent.outcome = undefined;\n\t\tagent.updatedAt = this.now();\n\t\tagent.telemetry = {\n\t\t\tphase: \"queued\",\n\t\t\tqueuePosition: this.queue.length + 1,\n\t\t\tupdatedAt: agent.updatedAt,\n\t\t\ttiming: { queuedAt: agent.updatedAt },\n\t\t\tbudgetSource: {\n\t\t\t\ttimeout: agent.currentTimeoutMs === undefined ? \"runtime\" : \"explicit\",\n\t\t\t\tidleTimeout: agent.currentIdleTimeoutMs === undefined ? \"runtime\" : \"explicit\",\n\t\t\t\tturnLimit: agent.currentMaxTurns === undefined ? \"runtime\" : \"explicit\",\n\t\t\t\ttoolCallLimit: agent.currentMaxToolCalls === undefined ? \"runtime\" : \"explicit\",\n\t\t\t},\n\t\t};\n\t\tlet resolveQueued!: (agent: ManagedAgent) => void;\n\t\tconst completion = new Promise<ManagedAgent>((resolve) => {\n\t\t\tresolveQueued = resolve;\n\t\t});\n\t\tthis.running.set(agent.id, completion);\n\t\tthis.queue.push({ agent, task, resolve: resolveQueued });\n\t\tthis.updateQueuePositions();\n\t\tvoid this.changed();\n\t\tthis.pumpQueue();\n\t}\n\n\tprivate pumpQueue(): void {\n\t\twhile (this.controllers.size < this.maxActiveTurns && this.queue.length > 0) {\n\t\t\tconst next = this.queue.shift();\n\t\t\tif (!next) return;\n\t\t\tthis.runQueuedTurn(next.agent, next.task, next.resolve);\n\t\t\tthis.updateQueuePositions();\n\t\t}\n\t}\n\n\tprivate runQueuedTurn(\n\t\tagent: ManagedAgent,\n\t\ttask: string,\n\t\tresolveQueued: (agent: ManagedAgent) => void,\n\t): void {\n\t\tif (\n\t\t\tagent.capabilityGrant &&\n\t\t\tagent.executionPlan &&\n\t\t\t!isCapabilityGrantActive(agent.capabilityGrant, agent.executionPlan, this.now())\n\t\t) {\n\t\t\tagent.state = \"failed\";\n\t\t\tagent.error = \"Capability grant expired or no longer matches the accepted plan\";\n\t\t\tagent.outcome = classifyStructuredOutcome(\"failed\", \"capability-grant-invalid\");\n\t\t\tconst recipient = this.completionRecipient(agent);\n\t\t\tconst persistedCompletion = {\n\t\t\t\tcompletionId: `completion:${agent.id}:${randomUUID()}`,\n\t\t\t\t...recipient,\n\t\t\t\trunId: agent.currentRunId ?? `run:${agent.id}:${randomUUID()}`,\n\t\t\t\tgeneration: agent.currentTurnGeneration ?? agent.turnGeneration ?? 1,\n\t\t\t\ttask: truncateUtf8(task, 256).text,\n\t\t\t\toutput: \"\",\n\t\t\t\terror: truncateUtf8(agent.error, 512).text,\n\t\t\t\tcreatedAt: this.completionCreatedAt(),\n\t\t\t};\n\t\t\tagent.completionRequirements = makeCompletionAvailable(agent.completionRequirements, {\n\t\t\t\trunId: persistedCompletion.runId,\n\t\t\t\tgeneration: persistedCompletion.generation,\n\t\t\t\tcompletionId: persistedCompletion.completionId,\n\t\t\t\tterminalState: agent.state,\n\t\t\t\tupdatedAt: persistedCompletion.createdAt,\n\t\t\t});\n\t\t\tagent.pendingCompletions = [...(agent.pendingCompletions ?? []), persistedCompletion];\n\t\t\tthis.enqueueCompletionMessage(agent, persistedCompletion, persistedCompletion.error ?? \"\");\n\t\t\tclearCurrentTurn(agent);\n\t\t\tagent.updatedAt = this.now();\n\t\t\tvoid this.persistTerminalState()\n\t\t\t\t.then(() =>\n\t\t\t\t\tthis.notifyTurnComplete({\n\t\t\t\t\t\t...persistedCompletion,\n\t\t\t\t\t\tagent: this.copy(agent),\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t\t.catch(() => undefined)\n\t\t\t\t.finally(() => {\n\t\t\t\t\tresolveQueued(agent);\n\t\t\t\t\tthis.running.delete(agent.id);\n\t\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tconst controller = new AbortController();\n\t\tthis.controllers.set(agent.id, controller);\n\t\tagent.state = \"running\";\n\t\tagent.updatedAt = this.now();\n\t\tconst startedAt = this.now();\n\t\tconst runId = agent.currentRunId ?? `run:${agent.id}:${randomUUID()}`;\n\t\tconst turnGeneration = agent.currentTurnGeneration ?? agent.turnGeneration ?? 1;\n\t\tconst completionKey = `completion:${agent.id}:${randomUUID()}`;\n\t\tconst acceptedPlanId = agent.executionPlan?.id;\n\t\tlet completionContent = \"\";\n\t\tlet completionOutput = \"\";\n\t\tlet completionError: string | undefined;\n\t\tconst visibleMailboxMessageIds = [...(agent.currentMailboxMessageIds ?? [])];\n\t\tvoid this.transport\n\t\t\t.runTurn(this.copy(agent), task, controller.signal, (progress) => {\n\t\t\t\tagent.telemetry = {\n\t\t\t\t\t...progress,\n\t\t\t\t\tqueuePosition: undefined,\n\t\t\t\t\ttiming: {\n\t\t\t\t\t\tqueuedAt: agent.telemetry?.timing.queuedAt,\n\t\t\t\t\t\t...progress.timing,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t})\n\t\t\t.then(async (outcome) => {\n\t\t\t\tif (visibleMailboxMessageIds.length > 0) {\n\t\t\t\t\tawait this.acknowledgeVisibleMessages(\n\t\t\t\t\t\tagent.id,\n\t\t\t\t\t\tvisibleMailboxMessageIds,\n\t\t\t\t\t\t[],\n\t\t\t\t\t\tthis.now(),\n\t\t\t\t\t).catch(() => undefined);\n\t\t\t\t}\n\t\t\t\tconst output = truncateUtf8(outcome.output, this.maxTurnOutputBytes).text;\n\t\t\t\tconst error = outcome.error\n\t\t\t\t\t? truncateUtf8(outcome.error, this.maxTurnOutputBytes).text\n\t\t\t\t\t: undefined;\n\t\t\t\tagent.history.push({\n\t\t\t\t\trunId,\n\t\t\t\t\tgeneration: turnGeneration,\n\t\t\t\t\ttask,\n\t\t\t\t\toutput,\n\t\t\t\t\tstartedAt,\n\t\t\t\t\tcompletedAt: this.now(),\n\t\t\t\t\texitCode: outcome.exitCode,\n\t\t\t\t\ttruncated: outcome.truncated,\n\t\t\t\t\ttermination: outcome.termination\n\t\t\t\t\t\t? copyTurnTerminationReport(outcome.termination)\n\t\t\t\t\t\t: undefined,\n\t\t\t\t});\n\t\t\t\tagent.history = agent.history.slice(-this.maxHistoryTurns);\n\t\t\t\tagent.structuredResult =\n\t\t\t\t\toutcome.structuredResult ?? parseAnyStructuredSubagentResult(output, agent.resultFormat);\n\t\t\t\tconst malformedStructuredResult =\n\t\t\t\t\tagent.resultFormat !== undefined &&\n\t\t\t\t\tagent.resultFormat !== \"text\" &&\n\t\t\t\t\tagent.structuredResult === undefined;\n\t\t\t\tconst finalizedPartial =\n\t\t\t\t\toutcome.termination?.finalization.status === \"completed\" && output.trim().length > 0;\n\t\t\t\tagent.outcome = outcome.aborted\n\t\t\t\t\t? classifyStructuredOutcome(\"interrupted\", \"transport-aborted\")\n\t\t\t\t\t: malformedStructuredResult\n\t\t\t\t\t\t? classifyStructuredOutcome(\"contract-invalid\", \"malformed-structured-result\")\n\t\t\t\t\t\t: finalizedPartial\n\t\t\t\t\t\t\t? classifyStructuredOutcome(\"partial\", outcome.termination?.reason)\n\t\t\t\t\t\t\t: (outcome.outcome ??\n\t\t\t\t\t\t\t\t(agent.structuredResult?.version === \"pi-subagents:result:v2\"\n\t\t\t\t\t\t\t\t\t? classifyStructuredOutcome(\n\t\t\t\t\t\t\t\t\t\t\tagent.structuredResult.status,\n\t\t\t\t\t\t\t\t\t\t\tagent.structuredResult.reasonCode,\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t: undefined));\n\t\t\t\tconst staleGeneration = Boolean(\n\t\t\t\t\tacceptedPlanId && agent.executionPlan?.id !== acceptedPlanId,\n\t\t\t\t);\n\t\t\t\tif (staleGeneration) {\n\t\t\t\t\tagent.outcome = classifyStructuredOutcome(\"stale\", \"cancelled-generation\");\n\t\t\t\t}\n\t\t\t\tagent.state = staleGeneration\n\t\t\t\t\t? \"stale\"\n\t\t\t\t\t: outcome.aborted\n\t\t\t\t\t\t? \"interrupted\"\n\t\t\t\t\t\t: outcome.exitCode !== 0 && agent.outcome?.status !== \"partial\"\n\t\t\t\t\t\t\t? \"failed\"\n\t\t\t\t\t\t\t: lifecycleStateForOutcome(agent.outcome?.status);\n\t\t\t\tagent.error = error;\n\t\t\t\tif (agent.capabilityGrant?.state === \"active\") {\n\t\t\t\t\tagent.capabilityGrant = revokeCapabilityGrant(\n\t\t\t\t\t\tagent.capabilityGrant,\n\t\t\t\t\t\t\"turn-settled\",\n\t\t\t\t\t\tthis.now(),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tagent.policy = outcome.policy;\n\t\t\t\tagent.telemetry = outcome.telemetry\n\t\t\t\t\t? {\n\t\t\t\t\t\t\t...outcome.telemetry,\n\t\t\t\t\t\t\ttiming: {\n\t\t\t\t\t\t\t\tqueuedAt: agent.telemetry?.timing.queuedAt,\n\t\t\t\t\t\t\t\t...outcome.telemetry.timing,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbudgetSource: outcome.telemetry.budgetSource ?? agent.telemetry?.budgetSource,\n\t\t\t\t\t\t}\n\t\t\t\t\t: agent.telemetry;\n\t\t\t\tagent.termination = outcome.termination\n\t\t\t\t\t? copyTurnTerminationReport(outcome.termination)\n\t\t\t\t\t: undefined;\n\t\t\t\tcompletionOutput = output;\n\t\t\t\tcompletionError = error;\n\t\t\t\tcompletionContent = output || error || `${agent.id} ${agent.state}`;\n\t\t\t\treturn agent;\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tconst staleGeneration = Boolean(\n\t\t\t\t\tacceptedPlanId && agent.executionPlan?.id !== acceptedPlanId,\n\t\t\t\t);\n\t\t\t\tagent.state = staleGeneration\n\t\t\t\t\t? \"stale\"\n\t\t\t\t\t: controller.signal.aborted\n\t\t\t\t\t\t? \"interrupted\"\n\t\t\t\t\t\t: \"failed\";\n\t\t\t\tagent.outcome = classifyStructuredOutcome(\n\t\t\t\t\tstaleGeneration ? \"stale\" : controller.signal.aborted ? \"interrupted\" : \"failed\",\n\t\t\t\t\tstaleGeneration\n\t\t\t\t\t\t? \"cancelled-generation\"\n\t\t\t\t\t\t: controller.signal.aborted\n\t\t\t\t\t\t\t? \"transport-aborted\"\n\t\t\t\t\t\t\t: \"transport-error\",\n\t\t\t\t);\n\t\t\t\tif (agent.capabilityGrant?.state === \"active\") {\n\t\t\t\t\tagent.capabilityGrant = revokeCapabilityGrant(\n\t\t\t\t\t\tagent.capabilityGrant,\n\t\t\t\t\t\t\"turn-failed\",\n\t\t\t\t\t\tthis.now(),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tagent.error = truncateUtf8(\n\t\t\t\t\terror instanceof Error ? error.message : String(error),\n\t\t\t\t\tthis.maxTurnOutputBytes,\n\t\t\t\t).text;\n\t\t\t\tagent.history.push({\n\t\t\t\t\trunId,\n\t\t\t\t\tgeneration: turnGeneration,\n\t\t\t\t\ttask,\n\t\t\t\t\toutput: \"\",\n\t\t\t\t\tstartedAt,\n\t\t\t\t\tcompletedAt: this.now(),\n\t\t\t\t\texitCode: controller.signal.aborted ? 130 : 1,\n\t\t\t\t});\n\t\t\t\tagent.history = agent.history.slice(-this.maxHistoryTurns);\n\t\t\t\tagent.telemetry = {\n\t\t\t\t\t...(agent.telemetry ?? {\n\t\t\t\t\t\tphase: \"failed\",\n\t\t\t\t\t\tupdatedAt: this.now(),\n\t\t\t\t\t\ttiming: { queuedAt: startedAt },\n\t\t\t\t\t}),\n\t\t\t\t\tphase: controller.signal.aborted ? \"interrupted\" : \"failed\",\n\t\t\t\t\tfailurePhase: agent.telemetry?.phase ?? \"running\",\n\t\t\t\t\tupdatedAt: this.now(),\n\t\t\t\t};\n\t\t\t\tcompletionError = agent.error;\n\t\t\t\tcompletionContent = agent.error;\n\t\t\t\treturn agent;\n\t\t\t})\n\t\t\t.finally(async () => {\n\t\t\t\tconst recipient = this.completionRecipient(agent);\n\t\t\t\tconst persistedCompletion = {\n\t\t\t\t\tcompletionId: completionKey,\n\t\t\t\t\t...recipient,\n\t\t\t\t\trunId,\n\t\t\t\t\tgeneration: turnGeneration,\n\t\t\t\t\ttask: truncateUtf8(task, 256).text,\n\t\t\t\t\toutput: truncateUtf8(completionOutput, MAX_TOOL_MESSAGE_BYTES).text,\n\t\t\t\t\terror: completionError ? truncateUtf8(completionError, 512).text : undefined,\n\t\t\t\t\tcreatedAt: this.completionCreatedAt(),\n\t\t\t\t};\n\t\t\t\tagent.completionRequirements = makeCompletionAvailable(agent.completionRequirements, {\n\t\t\t\t\trunId,\n\t\t\t\t\tgeneration: turnGeneration,\n\t\t\t\t\tcompletionId: persistedCompletion.completionId,\n\t\t\t\t\tterminalState: agent.state,\n\t\t\t\t\tupdatedAt: persistedCompletion.createdAt,\n\t\t\t\t});\n\t\t\t\tagent.pendingCompletions = [...(agent.pendingCompletions ?? []), persistedCompletion];\n\t\t\t\tthis.enqueueCompletionMessage(agent, persistedCompletion, completionContent);\n\t\t\t\tclearCurrentTurn(agent);\n\t\t\t\tagent.updatedAt = this.now();\n\t\t\t\tconst persisted = await this.persistTerminalState().then(\n\t\t\t\t\t() => true,\n\t\t\t\t\t() => false,\n\t\t\t\t);\n\t\t\t\tthis.controllers.delete(agent.id);\n\t\t\t\tconst turnCompletion: AgentTurnCompletion = {\n\t\t\t\t\t...persistedCompletion,\n\t\t\t\t\tagent: this.copy(agent),\n\t\t\t\t};\n\t\t\t\tthis.running.delete(agent.id);\n\t\t\t\tresolveQueued(agent);\n\t\t\t\tthis.pumpQueue();\n\t\t\t\tif (persisted) await this.notifyTurnComplete(turnCompletion);\n\t\t\t});\n\t}\n\n\tprivate updateQueuePositions(): void {\n\t\tfor (const [index, entry] of this.queue.entries()) {\n\t\t\tif (!entry.agent.telemetry) continue;\n\t\t\tentry.agent.telemetry = {\n\t\t\t\t...entry.agent.telemetry,\n\t\t\t\tqueuePosition: index + 1,\n\t\t\t\tupdatedAt: this.now(),\n\t\t\t};\n\t\t}\n\t}\n\n\tprivate completionRecipient(\n\t\tagent: ManagedAgent,\n\t): Pick<\n\t\tNonNullable<ManagedAgent[\"pendingCompletions\"]>[number],\n\t\t\"recipientId\" | \"recipientPath\"\n\t> {\n\t\treturn resolveCompletionRecipient(agent, (id) => this.agents.get(id));\n\t}\n\n\tprivate enqueueCompletionMessage(\n\t\tagent: ManagedAgent,\n\t\tcompletion: NonNullable<ManagedAgent[\"pendingCompletions\"]>[number],\n\t\tcontent: string,\n\t): void {\n\t\tif (!completion.recipientId || completion.recipientId === \"root\") return;\n\t\tconst recipient = this.agents.get(completion.recipientId);\n\t\tif (!recipient || recipient.state === \"closed\") return;\n\t\tthis.enqueueMessage(\n\t\t\trecipient,\n\t\t\tcontent || \"(no output)\",\n\t\t\tagent.id,\n\t\t\tcompletion.completionId,\n\t\t\tcompletion.completionId,\n\t\t);\n\t}\n\n\tprivate enqueueMessage(\n\t\trecipient: ManagedAgent,\n\t\tcontent: string,\n\t\tsenderId: string,\n\t\tdeduplicationKey?: string,\n\t\tcompletionId?: string,\n\t): AgentMailboxMessage {\n\t\tif (deduplicationKey) {\n\t\t\tconst existing = recipient.mailbox.find(\n\t\t\t\t(message) => message.deduplicationKey === deduplicationKey && message.senderId === senderId,\n\t\t\t);\n\t\t\tif (existing) return existing;\n\t\t}\n\t\tconst bounded = truncateUtf8(content, this.maxMailboxMessageBytes);\n\t\tconst message: AgentMailboxMessage = {\n\t\t\tid: `msg_${randomUUID()}`,\n\t\t\tsenderId,\n\t\t\trecipientId: recipient.id,\n\t\t\tcontent: bounded.text,\n\t\t\tcreatedAt: this.now(),\n\t\t\tdeduplicationKey,\n\t\t\tcompletionId,\n\t\t};\n\t\trecipient.mailbox.push(message);\n\t\trecipient.mailbox = recipient.mailbox.slice(-this.maxMailboxMessages);\n\t\trecipient.updatedAt = this.now();\n\t\treturn message;\n\t}\n\n\tprivate descendants(id: string): string[] {\n\t\tconst root = this.require(id);\n\t\tconst result: string[] = [];\n\t\tconst visit = (agent: ManagedAgent) => {\n\t\t\tresult.push(agent.id);\n\t\t\tfor (const childId of agent.children) {\n\t\t\t\tconst child = this.agents.get(childId);\n\t\t\t\tif (child) visit(child);\n\t\t\t}\n\t\t};\n\t\tvisit(root);\n\t\treturn result;\n\t}\n\n\tprivate require(reference: string, senderId = \"root\"): ManagedAgent {\n\t\tconst agent = this.findReference(reference, senderId);\n\t\tif (!agent) throw new Error(`Unknown subagent: ${safeTerminalLine(reference, 256)}`);\n\t\treturn agent;\n\t}\n\n\tprivate findReference(reference: string, senderId = \"root\"): ManagedAgent | undefined {\n\t\tconst direct = this.agents.get(reference);\n\t\tif (direct) return direct;\n\t\tconst sender =\n\t\t\tsenderId === \"root\"\n\t\t\t\t? undefined\n\t\t\t\t: (this.agents.get(senderId) ?? this.findByTaskPath(senderId));\n\t\tif (senderId !== \"root\" && !sender) return undefined;\n\t\tlet taskPath: string;\n\t\ttry {\n\t\t\ttaskPath = resolveTaskPath(sender?.taskPath ?? ROOT_TASK_PATH, reference);\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn this.findByTaskPath(taskPath);\n\t}\n\n\tprivate findByTaskPath(taskPath: string): ManagedAgent | undefined {\n\t\treturn [...this.agents.values()].find(\n\t\t\t(agent) => agent.state !== \"closed\" && agent.taskPath === taskPath,\n\t\t);\n\t}\n\n\tprivate reserveRestoredIdentity(\n\t\trecord: ManagedAgent,\n\t\tparentPath: string,\n\t\treservedPaths: Set<string>,\n\t): Pick<ManagedAgent, \"taskName\" | \"taskPath\"> {\n\t\tlet taskName: string | undefined;\n\t\ttry {\n\t\t\ttaskName = record.taskName ? validateTaskName(record.taskName) : undefined;\n\t\t} catch {\n\t\t\ttaskName = undefined;\n\t\t}\n\t\tif (!taskName && record.taskPath) {\n\t\t\ttry {\n\t\t\t\tconst storedPath = validateTaskPath(record.taskPath);\n\t\t\t\tconst storedName = storedPath.slice(storedPath.lastIndexOf(\"/\") + 1);\n\t\t\t\ttaskName = validateTaskName(storedName);\n\t\t\t} catch {\n\t\t\t\ttaskName = undefined;\n\t\t\t}\n\t\t}\n\t\ttaskName ??= deriveTaskName(record.id);\n\t\tlet taskPath = joinTaskPath(parentPath, taskName);\n\t\tif (reservedPaths.has(taskPath)) {\n\t\t\ttaskName = deriveTaskName(record.id);\n\t\t\ttaskPath = joinTaskPath(parentPath, taskName);\n\t\t}\n\t\tif (reservedPaths.has(taskPath)) {\n\t\t\tthrow new Error(`Cannot restore duplicate canonical subagent task path: ${taskPath}`);\n\t\t}\n\t\treservedPaths.add(taskPath);\n\t\treturn { taskName, taskPath };\n\t}\n\n\tprivate assertRequiredCompletionCapacity(mode: CompletionRequirementMode | undefined): void {\n\t\tif (mode !== \"required\") return;\n\t\tconst unresolved = [...this.agents.values()].reduce(\n\t\t\t(sum, agent) => sum + pendingRequiredCompletionCount(agent),\n\t\t\t0,\n\t\t);\n\t\tif (unresolved >= MAX_UNRESOLVED_REQUIRED_COMPLETIONS) {\n\t\t\tthrow new Error(\n\t\t\t\t`Required subagent completion capacity reached (${MAX_UNRESOLVED_REQUIRED_COMPLETIONS}); wait for exact completion visibility or terminalize an existing requirement`,\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate retainedCount(): number {\n\t\treturn [...this.agents.values()].filter((agent) => agent.state !== \"closed\").length;\n\t}\n\n\tprivate completionCreatedAt(): number {\n\t\tthis.lastCompletionAt = Math.max(this.now(), this.lastCompletionAt + 1);\n\t\treturn this.lastCompletionAt;\n\t}\n\n\tprivate evictExpired(): ManagedAgent[] {\n\t\tconst cutoff = this.now() - this.idleTtlMs;\n\t\tconst protectedIds = new Set<string>();\n\t\tfor (const agent of this.agents.values()) {\n\t\t\tif (\n\t\t\t\tagent.state !== \"running\" &&\n\t\t\t\tagent.state !== \"starting\" &&\n\t\t\t\t(agent.pendingCompletions?.length ?? 0) === 0\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tlet current: ManagedAgent | undefined = agent;\n\t\t\twhile (current) {\n\t\t\t\tprotectedIds.add(current.id);\n\t\t\t\tcurrent = current.parentId ? this.agents.get(current.parentId) : undefined;\n\t\t\t}\n\t\t}\n\t\tconst removed: ManagedAgent[] = [];\n\t\tconst candidates = [...this.agents.values()].sort((left, right) => right.depth - left.depth);\n\t\tfor (const agent of candidates) {\n\t\t\tif (protectedIds.has(agent.id) || agent.updatedAt >= cutoff) continue;\n\t\t\tif (agent.children.some((childId) => this.agents.get(childId)?.state !== \"closed\")) continue;\n\t\t\tthis.agents.delete(agent.id);\n\t\t\tif (agent.parentId) {\n\t\t\t\tconst parent = this.agents.get(agent.parentId);\n\t\t\t\tif (parent) parent.children = parent.children.filter((childId) => childId !== agent.id);\n\t\t\t}\n\t\t\tremoved.push(this.copy(agent));\n\t\t}\n\t\treturn removed;\n\t}\n\n\tprivate async releaseAgents(agents: readonly ManagedAgent[]): Promise<void> {\n\t\tif (!this.transport.release || agents.length === 0) return;\n\t\tconst results = await Promise.allSettled(\n\t\t\tagents.map((agent) => this.transport.release?.(agent)),\n\t\t);\n\t\tconst failures = results.flatMap((result) =>\n\t\t\tresult.status === \"rejected\" ? [result.reason] : [],\n\t\t);\n\t\tif (failures.length > 0) {\n\t\t\tthrow new AggregateError(\n\t\t\t\tfailures,\n\t\t\t\t`Failed to release ${failures.length} subagent transport session(s)`,\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate pruneClosedAgents(): void {\n\t\tconst closed = [...this.agents.values()]\n\t\t\t.filter((agent) => agent.state === \"closed\")\n\t\t\t.sort((left, right) => right.updatedAt - left.updatedAt);\n\t\tfor (const agent of closed.slice(this.maxAgents)) this.agents.delete(agent.id);\n\t}\n\n\tprivate async persistTerminalState(): Promise<void> {\n\t\tlet failures = 0;\n\t\tfor (;;) {\n\t\t\ttry {\n\t\t\t\tawait this.changed(true);\n\t\t\t\treturn;\n\t\t\t} catch (error) {\n\t\t\t\tif (this.shutdownController.signal.aborted) throw error;\n\t\t\t\tfailures++;\n\t\t\t\tif (failures === 1) continue;\n\t\t\t\tconst delay = Math.min(\n\t\t\t\t\tINITIAL_PERSISTENCE_RETRY_DELAY_MS * 2 ** (failures - 2),\n\t\t\t\t\tMAX_PERSISTENCE_RETRY_DELAY_MS,\n\t\t\t\t);\n\t\t\t\tawait waitForPersistenceRetry(delay, this.shutdownController.signal);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async notifyTurnComplete(completion: AgentTurnCompletion): Promise<void> {\n\t\ttry {\n\t\t\tawait this.options.onTurnComplete?.(completion);\n\t\t} catch {\n\t\t\t// Completion notifications are best-effort and must not destabilize agent lifecycle.\n\t\t}\n\t}\n\n\tprivate changed(propagateError = false): Promise<void> {\n\t\tconst snapshot = this.list(true);\n\t\tconst next = this.changeQueue.then(async () => {\n\t\t\ttry {\n\t\t\t\tawait this.options.onChange?.(snapshot);\n\t\t\t} catch (error) {\n\t\t\t\tif (propagateError) throw error;\n\t\t\t\t// Non-terminal persistence remains best-effort so lifecycle controls stay usable.\n\t\t\t}\n\t\t});\n\t\tthis.changeQueue = next.catch(() => undefined);\n\t\treturn next;\n\t}\n\n\tprivate inspectSummary(agent: ManagedAgent): AgentRunInspectionSummary {\n\t\tlet unreadMessages = 0;\n\t\tfor (const message of agent.mailbox) {\n\t\t\tif (message.readAt === undefined) unreadMessages++;\n\t\t}\n\t\treturn {\n\t\t\tid: agent.id,\n\t\t\ttaskName: agent.taskName,\n\t\t\ttaskPath: agent.taskPath,\n\t\t\tagent: agent.agent,\n\t\t\tstate: agent.state,\n\t\t\tcreatedAt: agent.createdAt,\n\t\t\tupdatedAt: agent.updatedAt,\n\t\t\thistoryCount: agent.history.length,\n\t\t\tunreadMessages,\n\t\t\tturnGeneration: agent.turnGeneration ?? 0,\n\t\t\tpendingCompletionCount: agent.pendingCompletions?.length ?? 0,\n\t\t\tpendingRequiredCompletionCount: pendingRequiredCompletionCount(agent),\n\t\t};\n\t}\n\n\tprivate copy(agent: ManagedAgent): ManagedAgent {\n\t\treturn {\n\t\t\t...agent,\n\t\t\tchildren: [...agent.children],\n\t\t\tcontextSourceIds: [...(agent.contextSourceIds ?? [])],\n\t\t\tcurrentMailboxMessageIds: agent.currentMailboxMessageIds\n\t\t\t\t? [...agent.currentMailboxMessageIds]\n\t\t\t\t: undefined,\n\t\t\tpendingCompletions: (agent.pendingCompletions ?? []).map((completion) => ({\n\t\t\t\t...completion,\n\t\t\t})),\n\t\t\tcompletionRequirements: (agent.completionRequirements ?? []).map((record) => ({\n\t\t\t\t...record,\n\t\t\t})),\n\t\t\thistory: agent.history.map((turn) => ({ ...turn })),\n\t\t\tmailbox: agent.mailbox.map((message) => ({ ...message })),\n\t\t\tcontract: agent.contract ? structuredClone(agent.contract) : undefined,\n\t\t\ttarget: agent.target ? { ...agent.target, trust: { ...agent.target.trust } } : undefined,\n\t\t\tpolicy: agent.policy\n\t\t\t\t? {\n\t\t\t\t\t\tinherited: [...agent.policy.inherited],\n\t\t\t\t\t\toverridden: [...agent.policy.overridden],\n\t\t\t\t\t\tunsupported: [...agent.policy.unsupported],\n\t\t\t\t\t}\n\t\t\t\t: undefined,\n\t\t\tstructuredResult: agent.structuredResult\n\t\t\t\t? copyStructuredResult(agent.structuredResult)\n\t\t\t\t: undefined,\n\t\t\ttermination: agent.termination ? copyTurnTerminationReport(agent.termination) : undefined,\n\t\t\toutcome: agent.outcome ? structuredClone(agent.outcome) : undefined,\n\t\t\texecutionPlan: agent.executionPlan ? copyExecutionPlan(agent.executionPlan) : undefined,\n\t\t\tcapabilityGrant: agent.capabilityGrant ? structuredClone(agent.capabilityGrant) : undefined,\n\t\t\tsemanticSnapshot: agent.semanticSnapshot\n\t\t\t\t? structuredClone(agent.semanticSnapshot)\n\t\t\t\t: undefined,\n\t\t\tsemanticCompatibility: agent.semanticCompatibility\n\t\t\t\t? structuredClone(agent.semanticCompatibility)\n\t\t\t\t: undefined,\n\t\t\ttelemetry: agent.telemetry ? copyTelemetry(agent.telemetry) : undefined,\n\t\t};\n\t}\n}\n\nfunction lifecycleStateForOutcome(\n\tstatus: import(\"./result-contract.js\").SubagentOutcomeStatus | undefined,\n): AgentLifecycleState {\n\tswitch (status) {\n\t\tcase \"partial\":\n\t\t\treturn \"partial\";\n\t\tcase \"blocked\":\n\t\tcase \"needs-input\":\n\t\tcase \"abstained\":\n\t\tcase \"stale\":\n\t\t\treturn status;\n\t\tcase \"failed\":\n\t\tcase \"contract-invalid\":\n\t\t\treturn \"failed\";\n\t\tcase \"interrupted\":\n\t\t\treturn \"interrupted\";\n\t\tdefault:\n\t\t\treturn \"completed\";\n\t}\n}\n\nfunction copyStructuredResult(value: AnyStructuredSubagentResult): AnyStructuredSubagentResult {\n\treturn structuredClone(value);\n}\n\nfunction copyTelemetry(value: TransportTelemetry): TransportTelemetry {\n\treturn {\n\t\t...value,\n\t\ttiming: { ...value.timing },\n\t\tusage: value.usage ? { ...value.usage } : undefined,\n\t\tbudgetSource: value.budgetSource ? { ...value.budgetSource } : undefined,\n\t};\n}\n", "import type { ManagedAgent, PersistedAgentCompletion } from \"./registry-types.js\";\nimport { ROOT_TASK_PATH } from \"./task-path.js\";\n\nexport type CompletionRecipient = Pick<PersistedAgentCompletion, \"recipientId\" | \"recipientPath\">;\n\nexport function resolveCompletionRecipient(\n\tagent: Pick<ManagedAgent, \"id\" | \"parentId\">,\n\tgetAgent: (\n\t\tid: string,\n\t) => Pick<ManagedAgent, \"id\" | \"parentId\" | \"state\" | \"taskPath\"> | undefined,\n): CompletionRecipient {\n\tconst visited = new Set([agent.id]);\n\tlet parentId = agent.parentId;\n\twhile (parentId && !visited.has(parentId)) {\n\t\tvisited.add(parentId);\n\t\tconst parent = getAgent(parentId);\n\t\tif (!parent) break;\n\t\tif (parent.state !== \"closed\") {\n\t\t\treturn { recipientId: parent.id, recipientPath: parent.taskPath ?? parent.id };\n\t\t}\n\t\tparentId = parent.parentId;\n\t}\n\treturn { recipientId: \"root\", recipientPath: ROOT_TASK_PATH };\n}\n", "import type { AgentMailboxMessage, ManagedAgent, TurnOutcome } from \"./registry.js\";\nimport type { TransportProgressCallback } from \"./transport-types.js\";\n\nexport interface SubagentTransport {\n\treadonly kind: \"subprocess\" | \"in-process\" | \"rpc\" | \"auto\" | \"fake\";\n\trunTurn(\n\t\tagent: ManagedAgent,\n\t\ttask: string,\n\t\tsignal: AbortSignal,\n\t\tonProgress?: TransportProgressCallback,\n\t): Promise<TurnOutcome>;\n\tdeliverMessage?(agent: ManagedAgent, message: AgentMailboxMessage): Promise<boolean>;\n\trelease?(agent: ManagedAgent): Promise<void>;\n\tshutdown?(): Promise<void>;\n}\n\nexport type AgentTurnRunner = (\n\tagent: ManagedAgent,\n\ttask: string,\n\tsignal: AbortSignal,\n\tonProgress?: TransportProgressCallback,\n) => Promise<TurnOutcome>;\n\nexport class FunctionTransport implements SubagentTransport {\n\treadonly kind = \"fake\" as const;\n\n\tconstructor(private readonly runner: AgentTurnRunner) {}\n\n\trunTurn(\n\t\tagent: ManagedAgent,\n\t\ttask: string,\n\t\tsignal: AbortSignal,\n\t\tonProgress?: TransportProgressCallback,\n\t): Promise<TurnOutcome> {\n\t\treturn this.runner(agent, task, signal, onProgress);\n\t}\n}\n\nexport function normalizeTransport(\n\ttransport: SubagentTransport | AgentTurnRunner,\n): SubagentTransport {\n\treturn typeof transport === \"function\" ? new FunctionTransport(transport) : transport;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["message"]
|
|
7
|
+
}
|
package/dist/chunks/{retained-semantic-state-7WXSGRJU.ts → retained-semantic-state-GM75FZGE.ts}
RENAMED
|
@@ -9,8 +9,8 @@ import {
|
|
|
9
9
|
acknowledgeExecutionPlan,
|
|
10
10
|
createExecutionPlan,
|
|
11
11
|
resolveContractTools
|
|
12
|
-
} from "./chunk-
|
|
13
|
-
import "./chunk-
|
|
12
|
+
} from "./chunk-7AAJEUSL.ts";
|
|
13
|
+
import "./chunk-4AQSF7AS.ts";
|
|
14
14
|
|
|
15
15
|
// src/retained-semantic-state.ts
|
|
16
16
|
import * as path from "node:path";
|
|
@@ -78,4 +78,4 @@ async function buildRetainedSemanticState(input) {
|
|
|
78
78
|
export {
|
|
79
79
|
buildRetainedSemanticState
|
|
80
80
|
};
|
|
81
|
-
//# sourceMappingURL=retained-semantic-state-
|
|
81
|
+
//# sourceMappingURL=retained-semantic-state-GM75FZGE.ts.map
|