@narumitw/pi-subagents 2.0.6 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/README.md +171 -60
  2. package/dist/chunks/{auto-transport-SY2VHUFH.ts → auto-transport-FUUKFDIG.ts} +6 -6
  3. package/dist/chunks/{capability-grant-CGEWOEKE.ts → capability-grant-PR72SWWS.ts} +4 -4
  4. package/dist/chunks/{chunk-CBP76ARQ.ts → chunk-2LMJU25E.ts} +172 -74
  5. package/dist/chunks/chunk-2LMJU25E.ts.map +7 -0
  6. package/dist/chunks/{chunk-DPPVEQAM.ts → chunk-4AQSF7AS.ts} +1 -1
  7. package/dist/chunks/chunk-4AQSF7AS.ts.map +7 -0
  8. package/dist/chunks/chunk-6H6TBBED.ts +108 -0
  9. package/dist/chunks/chunk-6H6TBBED.ts.map +7 -0
  10. package/dist/chunks/{chunk-YBUWBRF7.ts → chunk-6NSJVPXX.ts} +6 -16
  11. package/dist/chunks/{chunk-YBUWBRF7.ts.map → chunk-6NSJVPXX.ts.map} +2 -2
  12. package/dist/chunks/{chunk-DSOOH73Y.ts → chunk-7AAJEUSL.ts} +3 -3
  13. package/dist/chunks/{chunk-DSOOH73Y.ts.map → chunk-7AAJEUSL.ts.map} +2 -2
  14. package/dist/chunks/{chunk-7QPPBBXZ.ts → chunk-D4CR7T73.ts} +21 -3
  15. package/dist/chunks/chunk-D4CR7T73.ts.map +7 -0
  16. package/dist/chunks/{chunk-NIF42QMF.ts → chunk-FEVPWRMU.ts} +7 -4
  17. package/dist/chunks/chunk-FEVPWRMU.ts.map +7 -0
  18. package/dist/chunks/{chunk-S2IWVK3J.ts → chunk-ILEQ27AL.ts} +3 -2
  19. package/dist/chunks/chunk-ILEQ27AL.ts.map +7 -0
  20. package/dist/chunks/{chunk-DQMN4OYM.ts → chunk-ITVWPNU4.ts} +12 -106
  21. package/dist/chunks/chunk-ITVWPNU4.ts.map +7 -0
  22. package/dist/chunks/{chunk-QDVGH2X7.ts → chunk-IWC32VPY.ts} +2 -1
  23. package/dist/chunks/{chunk-QDVGH2X7.ts.map → chunk-IWC32VPY.ts.map} +2 -2
  24. package/dist/chunks/{chunk-I2FAK44T.ts → chunk-JSZIP73U.ts} +48 -10
  25. package/dist/chunks/chunk-JSZIP73U.ts.map +7 -0
  26. package/dist/chunks/{chunk-ZHTNCZIA.ts → chunk-JU6LUNLP.ts} +2 -2
  27. package/dist/chunks/{chunk-PSK43Y6A.ts → chunk-LASD73CM.ts} +2 -2
  28. package/dist/chunks/{chunk-C4L6P266.ts → chunk-LEOYDZI3.ts} +1 -1
  29. package/dist/chunks/{chunk-C4L6P266.ts.map → chunk-LEOYDZI3.ts.map} +2 -2
  30. package/dist/chunks/{chunk-H3BFJ7HJ.ts → chunk-LL4LP2T7.ts} +5 -5
  31. package/dist/chunks/chunk-N2T5IN4X.ts +18 -0
  32. package/dist/chunks/chunk-N2T5IN4X.ts.map +7 -0
  33. package/dist/chunks/chunk-NLT67IZS.ts +322 -0
  34. package/dist/chunks/chunk-NLT67IZS.ts.map +7 -0
  35. package/dist/chunks/{chunk-G3RSMSXJ.ts → chunk-NTRPLF46.ts} +1 -1
  36. package/dist/chunks/chunk-NTRPLF46.ts.map +7 -0
  37. package/dist/chunks/{chunk-EFBPISNT.ts → chunk-PBZMBTNJ.ts} +104 -103
  38. package/dist/chunks/chunk-PBZMBTNJ.ts.map +7 -0
  39. package/dist/chunks/{chunk-SCZ33MYW.ts → chunk-PGLSFLYW.ts} +2 -2
  40. package/dist/chunks/{chunk-O4VO6JUJ.ts → chunk-TM2R67J3.ts} +3 -3
  41. package/dist/chunks/{chunk-QBORTI4W.ts → chunk-TMZRHIIK.ts} +32 -3
  42. package/dist/chunks/chunk-TMZRHIIK.ts.map +7 -0
  43. package/dist/chunks/chunk-TZ34IQ3M.ts +59 -0
  44. package/dist/chunks/chunk-TZ34IQ3M.ts.map +7 -0
  45. package/dist/chunks/{chunk-7OBINKFM.ts → chunk-VDG7LTYE.ts} +11 -11
  46. package/dist/chunks/chunk-VDG7LTYE.ts.map +7 -0
  47. package/dist/chunks/{chunk-AEUYS7JC.ts → chunk-X4NMONPE.ts} +1 -1
  48. package/dist/chunks/chunk-X4NMONPE.ts.map +7 -0
  49. package/dist/chunks/{chunk-HKC4ES4B.ts → chunk-YPJEN6NU.ts} +2 -2
  50. package/dist/chunks/{chunk-434NII74.ts → chunk-YU53SHA7.ts} +54 -8
  51. package/dist/chunks/chunk-YU53SHA7.ts.map +7 -0
  52. package/dist/chunks/{completion-delivery-YPOWSSV3.ts → completion-delivery-RSJU6BXL.ts} +5 -4
  53. package/dist/chunks/{config-status-J4GPWP46.ts → config-status-FKGDECZ3.ts} +7 -6
  54. package/dist/chunks/{config-ui-2YUCUEBM.ts → config-ui-ABHYNGQ7.ts} +297 -231
  55. package/dist/chunks/config-ui-ABHYNGQ7.ts.map +7 -0
  56. package/dist/chunks/{consult-IV7UBNQQ.ts → consult-LJU3IQY5.ts} +14 -13
  57. package/dist/chunks/consult-LJU3IQY5.ts.map +7 -0
  58. package/dist/chunks/{create-stateful-transport-ZP3IXNV3.ts → create-stateful-transport-JWC2EFYL.ts} +6 -6
  59. package/dist/chunks/{delegation-contract-WJPT4FVS.ts → delegation-contract-LA56I5DT.ts} +2 -2
  60. package/dist/chunks/{discovery-K25T3SH4.ts → discovery-MIFB2U4Y.ts} +3 -3
  61. package/dist/chunks/{execution-LA7HN5YF.ts → execution-Q2JZLKJA.ts} +19 -16
  62. package/dist/chunks/execution-Q2JZLKJA.ts.map +7 -0
  63. package/dist/chunks/{in-process-transport-4RF3J6XK.ts → in-process-transport-HJ6TZXC3.ts} +9 -9
  64. package/dist/chunks/{inspect-XV2QALMR.ts → inspect-UH2TKH6E.ts} +25 -10
  65. package/dist/chunks/inspect-UH2TKH6E.ts.map +7 -0
  66. package/dist/chunks/{persistence-VSGXAW4P.ts → persistence-UY3PY6E5.ts} +11 -7
  67. package/dist/chunks/persistence-UY3PY6E5.ts.map +7 -0
  68. package/dist/chunks/{registry-E6XPJB7L.ts → registry-BT54L6CY.ts} +136 -15
  69. package/dist/chunks/registry-BT54L6CY.ts.map +7 -0
  70. package/dist/chunks/{retained-semantic-state-7WXSGRJU.ts → retained-semantic-state-GM75FZGE.ts} +3 -3
  71. package/dist/chunks/{rpc-transport-NEHBHWX4.ts → rpc-transport-7R7DVCEB.ts} +12 -16
  72. package/dist/chunks/rpc-transport-7R7DVCEB.ts.map +7 -0
  73. package/dist/chunks/{spawn-idempotency-QGHO2WKC.ts → spawn-idempotency-BNHOSMZW.ts} +2 -2
  74. package/dist/chunks/{subprocess-transport-NSHOGDC4.ts → subprocess-transport-VHZJRBTW.ts} +15 -14
  75. package/dist/chunks/subprocess-transport-VHZJRBTW.ts.map +7 -0
  76. package/dist/chunks/usage-recording-store-CW3EH2SZ.ts +164 -0
  77. package/dist/chunks/usage-recording-store-CW3EH2SZ.ts.map +7 -0
  78. package/dist/index.ts +682 -82
  79. package/dist/index.ts.map +3 -3
  80. package/docs/async-runtime-protocol.md +83 -0
  81. package/docs/implementation-notes/pi-subagents-capability-matrix.md +62 -0
  82. package/docs/implementation-notes/pi-subagents-current-direction.md +99 -0
  83. package/docs/implementation-notes/pi-subagents-rpc-v1.md +153 -0
  84. package/docs/pi-subagents-diagrams.md +183 -0
  85. package/package.json +9 -8
  86. package/src/agents/types.ts +2 -0
  87. package/src/async-subagent-benchmark.ts +532 -0
  88. package/src/completion-delivery.ts +71 -4
  89. package/src/completion-render.ts +1 -0
  90. package/src/completion-requirement.ts +479 -0
  91. package/src/config-registration.ts +5 -5
  92. package/src/config-status.ts +66 -70
  93. package/src/config-ui.ts +244 -150
  94. package/src/consult-registration.ts +4 -12
  95. package/src/consult-resources.ts +1 -1
  96. package/src/consult.ts +3 -8
  97. package/src/delegation-contract.ts +55 -9
  98. package/src/execution-plan.ts +1 -1
  99. package/src/execution-ui.ts +40 -29
  100. package/src/execution.ts +2 -3
  101. package/src/inspect.ts +24 -1
  102. package/src/orchestration-metrics.ts +1 -1
  103. package/src/panel-execution.ts +2 -3
  104. package/src/panel-failure.ts +1 -1
  105. package/src/panel-render.ts +1 -1
  106. package/src/parallel-limit-ui.ts +6 -5
  107. package/src/params.ts +2 -1
  108. package/src/persistence.ts +9 -0
  109. package/src/process-control.ts +43 -0
  110. package/src/registry-types.ts +5 -0
  111. package/src/registry.ts +162 -18
  112. package/src/render.ts +2 -1
  113. package/src/rpc-transport.ts +1 -1
  114. package/src/runner-outcome.ts +1 -1
  115. package/src/runner-result.ts +1 -1
  116. package/src/runner-types.ts +102 -0
  117. package/src/runner.ts +11 -192
  118. package/src/session-guidance-contract.ts +309 -0
  119. package/src/settings/inspection.ts +27 -0
  120. package/src/settings/schema.ts +9 -0
  121. package/src/settings-reader.ts +7 -0
  122. package/src/settings.ts +20 -0
  123. package/src/spawn-idempotency.ts +5 -0
  124. package/src/stateful-agent-view.ts +15 -19
  125. package/src/stateful-guidance.ts +11 -18
  126. package/src/stateful-limit-ui.ts +23 -20
  127. package/src/stateful-limits.ts +10 -10
  128. package/src/stateful-registration.ts +126 -36
  129. package/src/stateful-render.ts +27 -2
  130. package/src/subagent-details.ts +43 -0
  131. package/src/subagents-extension.ts +116 -68
  132. package/src/subagents.ts +2 -0
  133. package/src/subprocess-transport.ts +2 -1
  134. package/src/supervision.ts +2 -1
  135. package/src/timeout-finalization.ts +1 -1
  136. package/src/tool-schema-compatibility.ts +73 -0
  137. package/src/transport-types.ts +6 -0
  138. package/src/transport-ui.ts +18 -46
  139. package/src/usage-recording-config.ts +13 -0
  140. package/src/usage-recording-store.ts +183 -0
  141. package/src/usage-recording.ts +478 -0
  142. package/src/verification-harness.ts +1 -1
  143. package/src/workflow-ui.ts +17 -9
  144. package/dist/chunks/chunk-434NII74.ts.map +0 -7
  145. package/dist/chunks/chunk-7OBINKFM.ts.map +0 -7
  146. package/dist/chunks/chunk-7QPPBBXZ.ts.map +0 -7
  147. package/dist/chunks/chunk-AEUYS7JC.ts.map +0 -7
  148. package/dist/chunks/chunk-CBP76ARQ.ts.map +0 -7
  149. package/dist/chunks/chunk-DPPVEQAM.ts.map +0 -7
  150. package/dist/chunks/chunk-DQMN4OYM.ts.map +0 -7
  151. package/dist/chunks/chunk-EFBPISNT.ts.map +0 -7
  152. package/dist/chunks/chunk-G3RSMSXJ.ts.map +0 -7
  153. package/dist/chunks/chunk-I2FAK44T.ts.map +0 -7
  154. package/dist/chunks/chunk-NIF42QMF.ts.map +0 -7
  155. package/dist/chunks/chunk-QBORTI4W.ts.map +0 -7
  156. package/dist/chunks/chunk-S2IWVK3J.ts.map +0 -7
  157. package/dist/chunks/config-ui-2YUCUEBM.ts.map +0 -7
  158. package/dist/chunks/consult-IV7UBNQQ.ts.map +0 -7
  159. package/dist/chunks/execution-LA7HN5YF.ts.map +0 -7
  160. package/dist/chunks/inspect-XV2QALMR.ts.map +0 -7
  161. package/dist/chunks/persistence-VSGXAW4P.ts.map +0 -7
  162. package/dist/chunks/registry-E6XPJB7L.ts.map +0 -7
  163. package/dist/chunks/rpc-transport-NEHBHWX4.ts.map +0 -7
  164. package/dist/chunks/subprocess-transport-NSHOGDC4.ts.map +0 -7
  165. /package/dist/chunks/{auto-transport-SY2VHUFH.ts.map → auto-transport-FUUKFDIG.ts.map} +0 -0
  166. /package/dist/chunks/{capability-grant-CGEWOEKE.ts.map → capability-grant-PR72SWWS.ts.map} +0 -0
  167. /package/dist/chunks/{chunk-ZHTNCZIA.ts.map → chunk-JU6LUNLP.ts.map} +0 -0
  168. /package/dist/chunks/{chunk-PSK43Y6A.ts.map → chunk-LASD73CM.ts.map} +0 -0
  169. /package/dist/chunks/{chunk-H3BFJ7HJ.ts.map → chunk-LL4LP2T7.ts.map} +0 -0
  170. /package/dist/chunks/{chunk-SCZ33MYW.ts.map → chunk-PGLSFLYW.ts.map} +0 -0
  171. /package/dist/chunks/{chunk-O4VO6JUJ.ts.map → chunk-TM2R67J3.ts.map} +0 -0
  172. /package/dist/chunks/{chunk-HKC4ES4B.ts.map → chunk-YPJEN6NU.ts.map} +0 -0
  173. /package/dist/chunks/{completion-delivery-YPOWSSV3.ts.map → completion-delivery-RSJU6BXL.ts.map} +0 -0
  174. /package/dist/chunks/{config-status-J4GPWP46.ts.map → config-status-FKGDECZ3.ts.map} +0 -0
  175. /package/dist/chunks/{create-stateful-transport-ZP3IXNV3.ts.map → create-stateful-transport-JWC2EFYL.ts.map} +0 -0
  176. /package/dist/chunks/{delegation-contract-WJPT4FVS.ts.map → delegation-contract-LA56I5DT.ts.map} +0 -0
  177. /package/dist/chunks/{discovery-K25T3SH4.ts.map → discovery-MIFB2U4Y.ts.map} +0 -0
  178. /package/dist/chunks/{in-process-transport-4RF3J6XK.ts.map → in-process-transport-HJ6TZXC3.ts.map} +0 -0
  179. /package/dist/chunks/{retained-semantic-state-7WXSGRJU.ts.map → retained-semantic-state-GM75FZGE.ts.map} +0 -0
  180. /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-HKC4ES4B.ts";
9
+ } from "./chunk-YPJEN6NU.ts";
10
10
  import {
11
11
  copyExecutionPlan,
12
12
  rotateExecutionPlanGeneration
13
- } from "./chunk-DSOOH73Y.ts";
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-7OBINKFM.ts";
37
- import "./chunk-DPPVEQAM.ts";
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-NLT67IZS.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
- agent.outcome = outcome.outcome ?? (outcome.aborted ? classifyStructuredOutcome("interrupted", "transport-aborted") : agent.structuredResult?.version === "pi-subagents:result:v2" ? classifyStructuredOutcome(
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
- ) : agent.resultFormat !== void 0 && agent.resultFormat !== "text" && agent.structuredResult === void 0 ? classifyStructuredOutcome("contract-invalid", "malformed-structured-result") : void 0);
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-E6XPJB7L.ts.map
1445
+ //# sourceMappingURL=registry-BT54L6CY.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
+ }
@@ -9,8 +9,8 @@ import {
9
9
  acknowledgeExecutionPlan,
10
10
  createExecutionPlan,
11
11
  resolveContractTools
12
- } from "./chunk-DSOOH73Y.ts";
13
- import "./chunk-DPPVEQAM.ts";
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-7WXSGRJU.ts.map
81
+ //# sourceMappingURL=retained-semantic-state-GM75FZGE.ts.map