@narumitw/pi-subagents 2.0.1 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/README.md +21 -8
  2. package/dist/chunks/auto-transport-SY2VHUFH.ts +109 -0
  3. package/dist/chunks/auto-transport-SY2VHUFH.ts.map +7 -0
  4. package/dist/chunks/capability-grant-CGEWOEKE.ts +19 -0
  5. package/dist/chunks/capability-grant-CGEWOEKE.ts.map +7 -0
  6. package/dist/chunks/chunk-434NII74.ts +282 -0
  7. package/dist/chunks/chunk-434NII74.ts.map +7 -0
  8. package/dist/chunks/chunk-47SK2QYC.ts +56 -0
  9. package/dist/chunks/chunk-47SK2QYC.ts.map +7 -0
  10. package/dist/chunks/chunk-6KJ34M6S.ts +159 -0
  11. package/dist/chunks/chunk-6KJ34M6S.ts.map +7 -0
  12. package/dist/chunks/chunk-7OBINKFM.ts +80 -0
  13. package/dist/chunks/chunk-7OBINKFM.ts.map +7 -0
  14. package/dist/chunks/chunk-7QPPBBXZ.ts +335 -0
  15. package/dist/chunks/chunk-7QPPBBXZ.ts.map +7 -0
  16. package/dist/chunks/chunk-AEUYS7JC.ts +73 -0
  17. package/dist/chunks/chunk-AEUYS7JC.ts.map +7 -0
  18. package/dist/chunks/chunk-BFK2Z4ZF.ts +189 -0
  19. package/dist/chunks/chunk-BFK2Z4ZF.ts.map +7 -0
  20. package/dist/chunks/chunk-BOAXY55Y.ts +153 -0
  21. package/dist/chunks/chunk-BOAXY55Y.ts.map +7 -0
  22. package/dist/chunks/chunk-C4L6P266.ts +22 -0
  23. package/dist/chunks/chunk-C4L6P266.ts.map +7 -0
  24. package/dist/chunks/chunk-DPPVEQAM.ts +29 -0
  25. package/dist/chunks/chunk-DPPVEQAM.ts.map +7 -0
  26. package/dist/chunks/chunk-DQMN4OYM.ts +913 -0
  27. package/dist/chunks/chunk-DQMN4OYM.ts.map +7 -0
  28. package/dist/chunks/chunk-DSOOH73Y.ts +238 -0
  29. package/dist/chunks/chunk-DSOOH73Y.ts.map +7 -0
  30. package/dist/chunks/chunk-EFBPISNT.ts +421 -0
  31. package/dist/chunks/chunk-EFBPISNT.ts.map +7 -0
  32. package/dist/chunks/chunk-EWWXFU7N.ts +150 -0
  33. package/dist/chunks/chunk-EWWXFU7N.ts.map +7 -0
  34. package/dist/chunks/chunk-F4L2UVSK.ts +380 -0
  35. package/dist/chunks/chunk-F4L2UVSK.ts.map +7 -0
  36. package/dist/chunks/chunk-F5YWVHQX.ts +1543 -0
  37. package/dist/chunks/chunk-F5YWVHQX.ts.map +7 -0
  38. package/dist/chunks/chunk-G3RSMSXJ.ts +63 -0
  39. package/dist/chunks/chunk-G3RSMSXJ.ts.map +7 -0
  40. package/dist/chunks/chunk-G6VZTCFH.ts +70 -0
  41. package/dist/chunks/chunk-G6VZTCFH.ts.map +7 -0
  42. package/dist/chunks/chunk-H3FP6DLR.ts +160 -0
  43. package/dist/chunks/chunk-H3FP6DLR.ts.map +7 -0
  44. package/dist/chunks/chunk-HA36LPCO.ts +130 -0
  45. package/dist/chunks/chunk-HA36LPCO.ts.map +7 -0
  46. package/dist/chunks/chunk-HKC4ES4B.ts +65 -0
  47. package/dist/chunks/chunk-HKC4ES4B.ts.map +7 -0
  48. package/dist/chunks/chunk-HOP5FXDT.ts +27 -0
  49. package/dist/chunks/chunk-HOP5FXDT.ts.map +7 -0
  50. package/dist/chunks/chunk-I2FAK44T.ts +324 -0
  51. package/dist/chunks/chunk-I2FAK44T.ts.map +7 -0
  52. package/dist/chunks/chunk-IGAMVWFN.ts +139 -0
  53. package/dist/chunks/chunk-IGAMVWFN.ts.map +7 -0
  54. package/dist/chunks/chunk-KMGKCEO4.ts +38 -0
  55. package/dist/chunks/chunk-KMGKCEO4.ts.map +7 -0
  56. package/dist/chunks/chunk-N7BLVXKK.ts +73 -0
  57. package/dist/chunks/chunk-N7BLVXKK.ts.map +7 -0
  58. package/dist/chunks/chunk-NIF42QMF.ts +297 -0
  59. package/dist/chunks/chunk-NIF42QMF.ts.map +7 -0
  60. package/dist/chunks/chunk-O4VO6JUJ.ts +52 -0
  61. package/dist/chunks/chunk-O4VO6JUJ.ts.map +7 -0
  62. package/dist/chunks/chunk-ONDTY4EL.ts +91 -0
  63. package/dist/chunks/chunk-ONDTY4EL.ts.map +7 -0
  64. package/dist/chunks/chunk-OVPHFGKO.ts +1769 -0
  65. package/dist/chunks/chunk-OVPHFGKO.ts.map +7 -0
  66. package/dist/chunks/chunk-P7OH4XMF.ts +60 -0
  67. package/dist/chunks/chunk-P7OH4XMF.ts.map +7 -0
  68. package/dist/chunks/chunk-PSK43Y6A.ts +339 -0
  69. package/dist/chunks/chunk-PSK43Y6A.ts.map +7 -0
  70. package/dist/chunks/chunk-QBORTI4W.ts +468 -0
  71. package/dist/chunks/chunk-QBORTI4W.ts.map +7 -0
  72. package/dist/chunks/chunk-QDVGH2X7.ts +171 -0
  73. package/dist/chunks/chunk-QDVGH2X7.ts.map +7 -0
  74. package/dist/chunks/chunk-RHRQMT7Q.ts +490 -0
  75. package/dist/chunks/chunk-RHRQMT7Q.ts.map +7 -0
  76. package/dist/chunks/chunk-RRR66UWR.ts +28 -0
  77. package/dist/chunks/chunk-RRR66UWR.ts.map +7 -0
  78. package/dist/chunks/chunk-RSUXZD6S.ts +275 -0
  79. package/dist/chunks/chunk-RSUXZD6S.ts.map +7 -0
  80. package/dist/chunks/chunk-RTCVYIZA.ts +221 -0
  81. package/dist/chunks/chunk-RTCVYIZA.ts.map +7 -0
  82. package/dist/chunks/chunk-S2IWVK3J.ts +44 -0
  83. package/dist/chunks/chunk-S2IWVK3J.ts.map +7 -0
  84. package/dist/chunks/chunk-SCZ33MYW.ts +52 -0
  85. package/dist/chunks/chunk-SCZ33MYW.ts.map +7 -0
  86. package/dist/chunks/chunk-SWGQLFSD.ts +60 -0
  87. package/dist/chunks/chunk-SWGQLFSD.ts.map +7 -0
  88. package/dist/chunks/chunk-UMBPMVJW.ts +22 -0
  89. package/dist/chunks/chunk-UMBPMVJW.ts.map +7 -0
  90. package/dist/chunks/chunk-UVFVHIOP.ts +735 -0
  91. package/dist/chunks/chunk-UVFVHIOP.ts.map +7 -0
  92. package/dist/chunks/completion-delivery-YPOWSSV3.ts +16 -0
  93. package/dist/chunks/completion-delivery-YPOWSSV3.ts.map +7 -0
  94. package/dist/chunks/config-status-J4GPWP46.ts +34 -0
  95. package/dist/chunks/config-status-J4GPWP46.ts.map +7 -0
  96. package/dist/chunks/config-ui-3IBMHTQB.ts +1146 -0
  97. package/dist/chunks/config-ui-3IBMHTQB.ts.map +7 -0
  98. package/dist/chunks/consult-NYXVDN5G.ts +518 -0
  99. package/dist/chunks/consult-NYXVDN5G.ts.map +7 -0
  100. package/dist/chunks/context-QDKLVQXE.ts +11 -0
  101. package/dist/chunks/context-QDKLVQXE.ts.map +7 -0
  102. package/dist/chunks/create-stateful-transport-4WKZHRSI.ts +130 -0
  103. package/dist/chunks/create-stateful-transport-4WKZHRSI.ts.map +7 -0
  104. package/dist/chunks/cwd-policy-NB6XZ5GF.ts +17 -0
  105. package/dist/chunks/cwd-policy-NB6XZ5GF.ts.map +7 -0
  106. package/dist/chunks/delegation-contract-WJPT4FVS.ts +24 -0
  107. package/dist/chunks/delegation-contract-WJPT4FVS.ts.map +7 -0
  108. package/dist/chunks/discovery-K25T3SH4.ts +12 -0
  109. package/dist/chunks/discovery-K25T3SH4.ts.map +7 -0
  110. package/dist/chunks/execution-DS2DEIQZ.ts +4034 -0
  111. package/dist/chunks/execution-DS2DEIQZ.ts.map +7 -0
  112. package/dist/chunks/in-process-transport-TEYAWSEC.ts +38 -0
  113. package/dist/chunks/in-process-transport-TEYAWSEC.ts.map +7 -0
  114. package/dist/chunks/inspect-UOQQ3KNL.ts +619 -0
  115. package/dist/chunks/inspect-UOQQ3KNL.ts.map +7 -0
  116. package/dist/chunks/peer-communication-KL36Z6CO.ts +294 -0
  117. package/dist/chunks/peer-communication-KL36Z6CO.ts.map +7 -0
  118. package/dist/chunks/persistence-VSGXAW4P.ts +344 -0
  119. package/dist/chunks/persistence-VSGXAW4P.ts.map +7 -0
  120. package/dist/chunks/registry-E6XPJB7L.ts +1324 -0
  121. package/dist/chunks/registry-E6XPJB7L.ts.map +7 -0
  122. package/dist/chunks/retained-semantic-state-7WXSGRJU.ts +81 -0
  123. package/dist/chunks/retained-semantic-state-7WXSGRJU.ts.map +7 -0
  124. package/dist/chunks/rpc-transport-Y6LA5BOP.ts +1154 -0
  125. package/dist/chunks/rpc-transport-Y6LA5BOP.ts.map +7 -0
  126. package/dist/chunks/runtime-policy-5YELCOVC.ts +15 -0
  127. package/dist/chunks/runtime-policy-5YELCOVC.ts.map +7 -0
  128. package/dist/chunks/semantic-snapshot-WPJ3UAFW.ts +19 -0
  129. package/dist/chunks/semantic-snapshot-WPJ3UAFW.ts.map +7 -0
  130. package/dist/chunks/spawn-idempotency-QGHO2WKC.ts +13 -0
  131. package/dist/chunks/spawn-idempotency-QGHO2WKC.ts.map +7 -0
  132. package/dist/chunks/stateful-lifecycle-JAR6K55H.ts +15 -0
  133. package/dist/chunks/stateful-lifecycle-JAR6K55H.ts.map +7 -0
  134. package/dist/chunks/subprocess-transport-C2XVR25R.ts +158 -0
  135. package/dist/chunks/subprocess-transport-C2XVR25R.ts.map +7 -0
  136. package/dist/chunks/workspace-WDKLN72J.ts +11 -0
  137. package/dist/chunks/workspace-WDKLN72J.ts.map +7 -0
  138. package/dist/index.ts +1057 -0
  139. package/dist/index.ts.map +7 -0
  140. package/package.json +7 -3
  141. package/src/index.ts +1 -1
  142. package/src/settings-reader.ts +208 -0
  143. package/src/settings.ts +22 -187
  144. package/src/stateful-registration.ts +1230 -0
  145. package/src/stateful-safety.ts +1 -1
  146. package/src/stateful.ts +2 -1234
  147. package/src/subagents-extension.ts +307 -0
  148. package/src/subagents.ts +1 -308
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/stateful-agent-view.ts", "../../src/stateful-config.ts", "../../src/stateful-registration.ts", "../../src/stateful-guidance.ts", "../../src/stateful-render.ts", "../../src/stateful-tool-params.ts"],
4
+ "sourcesContent": ["import { MAX_TOOL_MESSAGE_BYTES, truncateUtf8 } from \"./limits.js\";\nimport type { ManagedAgent } from \"./registry.js\";\n\nexport function formatStatefulAgentLine(agent: ManagedAgent, now = Date.now()): string {\n\tconst elapsedSeconds = Math.max(0, Math.floor((now - agent.updatedAt) / 1000));\n\tconst actions =\n\t\tagent.state === \"running\" || agent.state === \"starting\"\n\t\t\t? \"interrupt, close\"\n\t\t\t: agent.state === \"closed\"\n\t\t\t\t? \"inspect\"\n\t\t\t\t: \"send, close\";\n\tconst task = agent.currentTask ? ` \u2014 ${sanitizeStatusLine(agent.currentTask, 80)}` : \"\";\n\tconst unread = agent.mailbox.filter((message) => !message.readAt).length;\n\tconst indent = \" \".repeat(agent.depth);\n\tconst thinking = agent.thinkingLevel ? ` thinking:${agent.thinkingLevel}` : \"\";\n\tconst timeout = agent.currentTimeoutMs ?? agent.timeoutMs;\n\tconst timeoutText = timeout ? ` timeout:${timeout}ms` : \"\";\n\tconst idleTimeout = agent.currentIdleTimeoutMs ?? agent.idleTimeoutMs;\n\tconst idleText = idleTimeout ? ` idle:${idleTimeout}ms` : \"\";\n\tconst maxTurns = agent.currentMaxTurns ?? agent.maxTurns;\n\tconst turnsText = maxTurns ? ` turns:${maxTurns}` : \"\";\n\tconst maxToolCalls = agent.currentMaxToolCalls ?? agent.maxToolCalls;\n\tconst toolsText = maxToolCalls ? ` tools:${maxToolCalls}` : \"\";\n\tconst transport = agent.telemetry?.transport ? ` transport:${agent.telemetry.transport}` : \"\";\n\tconst phase = agent.telemetry?.phase ? ` phase:${agent.telemetry.phase}` : \"\";\n\tconst queued = agent.telemetry?.queuePosition ? ` queue:${agent.telemetry.queuePosition}` : \"\";\n\treturn `${indent}${sanitizeStatusLine(agent.taskPath ?? agent.id, 256)} (${sanitizeStatusLine(agent.id, 128)}) ${sanitizeStatusLine(agent.agent, 128)} ${agent.state} ${elapsedSeconds}s${thinking}${timeoutText}${idleText}${turnsText}${toolsText}${transport}${phase}${queued} unread:${unread} [${actions}]${task}`;\n}\n\nexport function summarizeStatefulAgent(agent: ManagedAgent) {\n\treturn {\n\t\tid: agent.id,\n\t\ttaskName: agent.taskName,\n\t\ttaskPath: agent.taskPath,\n\t\tagent: agent.agent,\n\t\tparentId: agent.parentId,\n\t\trootId: agent.rootId,\n\t\tdepth: agent.depth,\n\t\tchildren: [...agent.children],\n\t\tstate: agent.state,\n\t\tcreatedAt: agent.createdAt,\n\t\tupdatedAt: agent.updatedAt,\n\t\tcwd: agent.cwd,\n\t\tworkspaceMode: agent.workspaceMode ?? \"shared\",\n\t\tthinkingLevel: agent.thinkingLevel,\n\t\ttimeoutMs: agent.timeoutMs,\n\t\tcurrentTimeoutMs: agent.currentTimeoutMs,\n\t\tidleTimeoutMs: agent.idleTimeoutMs,\n\t\tcurrentIdleTimeoutMs: agent.currentIdleTimeoutMs,\n\t\tmaxTurns: agent.maxTurns,\n\t\tcurrentMaxTurns: agent.currentMaxTurns,\n\t\tmaxToolCalls: agent.maxToolCalls,\n\t\tcurrentMaxToolCalls: agent.currentMaxToolCalls,\n\t\tcurrentTask: agent.currentTask\n\t\t\t? truncateUtf8(agent.currentTask, MAX_TOOL_MESSAGE_BYTES).text\n\t\t\t: undefined,\n\t\thistoryCount: agent.history.length,\n\t\tunreadMessages: agent.mailbox.filter((message) => !message.readAt).length,\n\t\tcontext: {\n\t\t\tturns: agent.contextTurns ?? 0,\n\t\t\tsources: agent.contextSourceIds?.length ?? 0,\n\t\t\tbytes: agent.contextBytes ?? 0,\n\t\t\ttruncated: agent.contextTruncated === true,\n\t\t},\n\t\tresultFormat: agent.resultFormat ?? \"text\",\n\t\tstructuredResult: agent.structuredResult,\n\t\ttermination: agent.termination,\n\t\toutcome: agent.outcome,\n\t\texecutionPlan: agent.executionPlan,\n\t\tcapabilityGrant: agent.capabilityGrant,\n\t\tsemanticCompatibility: agent.semanticCompatibility,\n\t\tsemanticSnapshotDigest: agent.semanticSnapshot?.digest,\n\t\ttelemetry: agent.telemetry,\n\t\terror: agent.error ? truncateUtf8(agent.error, MAX_TOOL_MESSAGE_BYTES).text : undefined,\n\t\ttarget: agent.target,\n\t\tpolicy: agent.policy,\n\t};\n}\n\nfunction sanitizeStatusLine(value: string, maxLength: number): string {\n\treturn (\n\t\tvalue\n\t\t\t.slice(0, maxLength)\n\t\t\t// biome-ignore lint/suspicious/noControlCharactersInRegex: Escape untrusted terminal controls.\n\t\t\t.replace(/[\\u0000-\\u001f\\u007f-\\u009f]/gu, \" \")\n\t\t\t.replace(/\\s+/gu, \" \")\n\t\t\t.trim()\n\t);\n}\n", "import type { CompletionDelivery, SubagentTransportKind } from \"./agents/types.js\";\n\nexport function resolveStatefulTransportKind(\n\tvalue: SubagentTransportKind | undefined,\n): SubagentTransportKind {\n\treturn value ?? \"subprocess\";\n}\n\nexport function resolveCompletionDelivery(\n\tvalue: CompletionDelivery | undefined,\n): CompletionDelivery {\n\treturn value ?? \"next-turn\";\n}\n", "/**\n * Stateful registration remains one lifecycle owner so session replacement, persistence,\n * capability revocation, workspace cleanup, and completion delivery cannot reorder.\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport { StringEnum } from \"@earendil-works/pi-ai\";\nimport { defineTool, type ExtensionAPI } from \"@earendil-works/pi-coding-agent\";\nimport { Type } from \"typebox\";\nimport {\n\ttype AgentScope,\n\ttype CompletionDelivery,\n\tisThinkingLevel,\n\ttype SubagentRuntimeSettings,\n\ttype SubagentSettings,\n\ttype SubagentTransportKind,\n\tTHINKING_LEVELS,\n} from \"./agents/types.js\";\nimport type { CompletionDeliveryBroker } from \"./completion-delivery.js\";\nimport type { ContextMode } from \"./context.js\";\nimport type { CreateStatefulTransportOptions } from \"./create-stateful-transport.js\";\nimport { DelegationContractSchema } from \"./delegation-contract.js\";\nimport type { ChildSessionFactory, ParentRuntimeSnapshot } from \"./in-process-transport.js\";\nimport {\n\tDEFAULT_MAX_CONTEXT_BYTES,\n\tMAX_SUBAGENT_TIMEOUT_MS,\n\tMAX_TOOL_MESSAGE_BYTES,\n\ttruncateUtf8,\n} from \"./limits.js\";\nimport type { AgentPersistence } from \"./persistence.js\";\nimport type {\n\tAgentRegistry,\n\tAgentRunInspectionDetail,\n\tAgentRunInspectionSummary,\n\tManagedAgent,\n} from \"./registry.js\";\nimport { SUBAGENT_RESULT_FORMATS, type SubagentResultFormat } from \"./result-contract.js\";\nimport { DEFAULT_DELEGATION_CWD_POLICY } from \"./settings/inspection.js\";\nimport { readSubagentSettings } from \"./settings-reader.js\";\nimport {\n\tassertSpawnIdempotencyKey,\n\tMAX_SPAWN_IDEMPOTENCY_KEY_LENGTH,\n} from \"./spawn-idempotency.js\";\nimport { summarizeStatefulAgent } from \"./stateful-agent-view.js\";\nimport { resolveCompletionDelivery, resolveStatefulTransportKind } from \"./stateful-config.js\";\nimport { createSpawnPromptGuidelines } from \"./stateful-guidance.js\";\nimport { assertCurrentSpawn, waitForOwnedSpawn } from \"./stateful-lifecycle.js\";\nimport { resolveStatefulLimits, type StatefulLimits } from \"./stateful-limits.js\";\nimport { createStatefulToolRenderer } from \"./stateful-render.js\";\nimport { confirmProjectAgent } from \"./stateful-safety.js\";\nimport {\n\tMailboxParamsSchema,\n\tManageParamsSchema,\n\tvalidateMailboxParams,\n\tvalidateManageParams,\n} from \"./stateful-tool-params.js\";\nimport { MAX_TASK_NAME_LENGTH } from \"./task-path.js\";\nimport { MAX_SUBAGENT_TOOL_CALLS, MAX_SUBAGENT_TURNS } from \"./turn-budget.js\";\nimport type { WorkspaceManager } from \"./workspace.js\";\n\ntype CwdPolicyModule = typeof import(\"./cwd-policy.js\");\ntype StateLifecycleModule = typeof import(\"./stateful-lifecycle.js\");\n\ntype StatefulSessionModules = {\n\tbroker: typeof import(\"./completion-delivery.js\");\n\tpeerCommunication: typeof import(\"./peer-communication.js\");\n\tcontext: typeof import(\"./context.js\");\n\ttransport: typeof import(\"./create-stateful-transport.js\");\n\tcwdPolicy: CwdPolicyModule;\n\tpersistence: typeof import(\"./persistence.js\");\n\tregistry: typeof import(\"./registry.js\");\n\tlifecycle: StateLifecycleModule;\n};\n\ntype StatefulSpawnModules = {\n\tagents: typeof import(\"./agents/discovery.js\");\n\tcapabilityGrant: typeof import(\"./capability-grant.js\");\n\tcontext: typeof import(\"./context.js\");\n\tcwdPolicy: CwdPolicyModule;\n\tdelegationContract: typeof import(\"./delegation-contract.js\");\n\truntimePolicy: typeof import(\"./execution/runtime-policy.js\");\n\tretainedSemanticState: typeof import(\"./retained-semantic-state.js\");\n\tsemanticSnapshot: typeof import(\"./semantic-snapshot.js\");\n\tspawnIdempotency: typeof import(\"./spawn-idempotency.js\");\n};\n\nlet statefulSessionModules: Promise<StatefulSessionModules> | undefined;\nlet statefulSpawnModules: Promise<StatefulSpawnModules> | undefined;\nlet workspaceModule: Promise<typeof import(\"./workspace.js\")> | undefined;\n\nfunction loadStatefulSessionModules(): Promise<StatefulSessionModules> {\n\tstatefulSessionModules ??= Promise.all([\n\t\timport(\"./completion-delivery.js\"),\n\t\timport(\"./peer-communication.js\"),\n\t\timport(\"./context.js\"),\n\t\timport(\"./create-stateful-transport.js\"),\n\t\timport(\"./cwd-policy.js\"),\n\t\timport(\"./persistence.js\"),\n\t\timport(\"./registry.js\"),\n\t\timport(\"./stateful-lifecycle.js\"),\n\t])\n\t\t.then(\n\t\t\t([\n\t\t\t\tbroker,\n\t\t\t\tpeerCommunication,\n\t\t\t\tcontext,\n\t\t\t\ttransport,\n\t\t\t\tcwdPolicy,\n\t\t\t\tpersistence,\n\t\t\t\tregistry,\n\t\t\t\tlifecycle,\n\t\t\t]) => ({\n\t\t\t\tbroker,\n\t\t\t\tpeerCommunication,\n\t\t\t\tcontext,\n\t\t\t\ttransport,\n\t\t\t\tcwdPolicy,\n\t\t\t\tpersistence,\n\t\t\t\tregistry,\n\t\t\t\tlifecycle,\n\t\t\t}),\n\t\t)\n\t\t.catch((error: unknown) => {\n\t\t\tstatefulSessionModules = undefined;\n\t\t\tthrow error;\n\t\t});\n\treturn statefulSessionModules;\n}\n\nfunction loadStatefulSpawnModules(): Promise<StatefulSpawnModules> {\n\tstatefulSpawnModules ??= Promise.all([\n\t\timport(\"./agents/discovery.js\"),\n\t\timport(\"./capability-grant.js\"),\n\t\timport(\"./context.js\"),\n\t\timport(\"./cwd-policy.js\"),\n\t\timport(\"./delegation-contract.js\"),\n\t\timport(\"./execution/runtime-policy.js\"),\n\t\timport(\"./retained-semantic-state.js\"),\n\t\timport(\"./semantic-snapshot.js\"),\n\t\timport(\"./spawn-idempotency.js\"),\n\t])\n\t\t.then(\n\t\t\t([\n\t\t\t\tagents,\n\t\t\t\tcapabilityGrant,\n\t\t\t\tcontext,\n\t\t\t\tcwdPolicy,\n\t\t\t\tdelegationContract,\n\t\t\t\truntimePolicy,\n\t\t\t\tretainedSemanticState,\n\t\t\t\tsemanticSnapshot,\n\t\t\t\tspawnIdempotency,\n\t\t\t]) => ({\n\t\t\t\tagents,\n\t\t\t\tcapabilityGrant,\n\t\t\t\tcontext,\n\t\t\t\tcwdPolicy,\n\t\t\t\tdelegationContract,\n\t\t\t\truntimePolicy,\n\t\t\t\tretainedSemanticState,\n\t\t\t\tsemanticSnapshot,\n\t\t\t\tspawnIdempotency,\n\t\t\t}),\n\t\t)\n\t\t.catch((error: unknown) => {\n\t\t\tstatefulSpawnModules = undefined;\n\t\t\tthrow error;\n\t\t});\n\treturn statefulSpawnModules;\n}\n\nasync function loadWorkspaceModule(): Promise<typeof import(\"./workspace.js\")> {\n\tworkspaceModule ??= import(\"./workspace.js\").catch((error: unknown) => {\n\t\tworkspaceModule = undefined;\n\t\tthrow error;\n\t});\n\treturn workspaceModule;\n}\n\nconst ContextModeSchema = Type.Union([\n\tStringEnum([\"none\", \"all\", \"summary\"] as const),\n\tType.Number({ minimum: 1, description: \"Include the most recent N user turns.\" }),\n]);\nconst ScopeSchema = StringEnum([\"user\", \"project\", \"both\"] as const, {\n\tdescription:\n\t\t'Per-invocation custom agent scope for this spawn. Default: \"user\". Use \"project\" for project-local agents or \"both\" for user and project agents; the selected scope is retained for follow-ups.',\n\tdefault: \"user\",\n});\nconst StatefulThinkingLevelSchema = StringEnum(THINKING_LEVELS, {\n\tdescription:\n\t\t\"Optional requested Pi thinking level selected for this task difficulty; retained for every turn of the spawned agent.\",\n});\nconst StatefulTimeoutSchema = Type.Integer({\n\tminimum: 1,\n\tmaximum: MAX_SUBAGENT_TIMEOUT_MS,\n\tdescription:\n\t\t\"Work deadline in milliseconds selected for the task difficulty. On expiry, Pi aborts the work and makes one separately bounded summary attempt. Retained as the agent default.\",\n});\nconst StatefulTurnLimitFields = {\n\tidleTimeoutMs: Type.Optional(\n\t\tType.Integer({\n\t\t\tminimum: 1,\n\t\t\tmaximum: MAX_SUBAGENT_TIMEOUT_MS,\n\t\t\tdescription:\n\t\t\t\t\"Maximum milliseconds without a completed assistant turn or tool result; retained as the agent default.\",\n\t\t}),\n\t),\n\tmaxTurns: Type.Optional(\n\t\tType.Integer({\n\t\t\tminimum: 1,\n\t\t\tmaximum: MAX_SUBAGENT_TURNS,\n\t\t\tdescription: \"Maximum unfinished assistant turns; retained as the agent default.\",\n\t\t}),\n\t),\n\tmaxToolCalls: Type.Optional(\n\t\tType.Integer({\n\t\t\tminimum: 1,\n\t\t\tmaximum: MAX_SUBAGENT_TOOL_CALLS,\n\t\t\tdescription: \"Maximum tool calls; retained as the agent default.\",\n\t\t}),\n\t),\n};\nexport interface StatefulSubagentDependencies {\n\tblockingEnabled?: boolean;\n\tcreateInProcessSession?: ChildSessionFactory;\n\tworkspaceManager?: WorkspaceManager;\n\tsettings?: SubagentRuntimeSettings;\n\tgetSettings?: () => SubagentSettings | undefined;\n\tloadTransport?: CreateStatefulTransportOptions[\"loadTransport\"];\n}\n\nexport interface StatefulSubagentRuntimeStatus {\n\tenabled: boolean;\n\tinitialized: boolean;\n\ttransport: SubagentTransportKind;\n\tcompletionDelivery: CompletionDelivery;\n\tlimits: StatefulLimits;\n\tactiveAgents: number;\n\tretainedAgents: number;\n}\n\nexport interface StatefulSubagentController {\n\tgetCompletionDelivery(): CompletionDelivery;\n\tsetCompletionDelivery(value: CompletionDelivery): void;\n\tsetAgentCatalog(value: string): void;\n\trefreshSettingsGuidance(): void;\n\tgetRuntimeStatus(): StatefulSubagentRuntimeStatus;\n\tlistAgents(includeClosed?: boolean): ManagedAgent[];\n\tlistRunInspection(includeClosed?: boolean): AgentRunInspectionSummary[];\n\tgetRunInspection(agentId: string): AgentRunInspectionDetail | undefined;\n\tclearAgents(): Promise<number>;\n}\n\ninterface StatefulActionToolResult {\n\tcontent: Array<{ type: \"text\"; text: string }>;\n\tdetails: Record<string, unknown>;\n}\n\nexport function registerStatefulSubagents(\n\tpi: ExtensionAPI,\n\tdependencies: StatefulSubagentDependencies = {},\n): StatefulSubagentController {\n\tconst settings = Object.hasOwn(dependencies, \"settings\")\n\t\t? (dependencies.settings ?? {})\n\t\t: (readSubagentSettings()?.stateful ?? {});\n\tconst blockingEnabled = dependencies.blockingEnabled !== false;\n\tconst enabled = settings.enabled !== false;\n\tconst transportKind = resolveStatefulTransportKind(settings.transport);\n\tlet completionDelivery = resolveCompletionDelivery(settings.completionDelivery);\n\tlet runtimeLimits = resolveStatefulLimits(settings);\n\tlet agentCatalog = \"\";\n\tlet completionBroker: CompletionDeliveryBroker | undefined;\n\tlet peerBroker: import(\"./peer-communication.js\").PeerCommunicationBroker | undefined;\n\tlet refreshSpawnToolRegistration: (() => void) | undefined;\n\tlet registry: AgentRegistry | undefined;\n\tlet persistence: AgentPersistence | undefined;\n\tlet sweepTimer: NodeJS.Timeout | undefined;\n\tlet runtimeGeneration = 0;\n\tlet runtimeTransition: Promise<void> = Promise.resolve();\n\tlet workspaceManager = dependencies.workspaceManager;\n\tconst getWorkspaceManager = async () => {\n\t\tif (workspaceManager) return workspaceManager;\n\t\tconst { WorkspaceManager } = await loadWorkspaceModule();\n\t\tworkspaceManager = new WorkspaceManager();\n\t\treturn workspaceManager;\n\t};\n\tconst isolatedAgents = new Map<string, string>();\n\tconst seenMessageIds = new Set<string>();\n\ttype PendingIdempotentSpawn = {\n\t\tgeneration: number;\n\t\trequestHash: string;\n\t\tpromise: Promise<ManagedAgent>;\n\t};\n\tconst pendingIdempotentSpawns = new Map<string, PendingIdempotentSpawn>();\n\tconst parentRuntime: ParentRuntimeSnapshot = { model: undefined, thinkingLevel: \"off\" };\n\tconst getCurrentSettings = () =>\n\t\tdependencies.getSettings ? dependencies.getSettings() : readSubagentSettings();\n\tconst getCurrentStatefulSettings = () =>\n\t\tdependencies.getSettings ? (dependencies.getSettings()?.stateful ?? {}) : settings;\n\n\tconst clearAgents = async (): Promise<number> => {\n\t\tconst generation = runtimeGeneration;\n\t\tconst currentRegistry = registry;\n\t\tconst currentPersistence = persistence;\n\t\tif (!currentRegistry) return 0;\n\t\tconst currentWorkspaceManager = await getWorkspaceManager();\n\t\tconst count = currentRegistry.list().length;\n\t\tconst clear = async () => {\n\t\t\tawait currentRegistry.closeAll();\n\t\t\tif (generation !== runtimeGeneration) return;\n\t\t\tawait currentWorkspaceManager.cleanupAll();\n\t\t\tisolatedAgents.clear();\n\t\t\tseenMessageIds.clear();\n\t\t\tawait currentPersistence?.delete();\n\t\t};\n\t\tconst transition = runtimeTransition.then(clear, clear);\n\t\truntimeTransition = transition.catch(() => undefined);\n\t\tawait transition;\n\t\treturn count;\n\t};\n\tconst controller: StatefulSubagentController = {\n\t\tgetCompletionDelivery() {\n\t\t\treturn completionDelivery;\n\t\t},\n\t\tsetCompletionDelivery(value) {\n\t\t\tcompletionDelivery = value;\n\t\t\tcompletionBroker?.setDelivery(value);\n\t\t\trefreshSpawnToolRegistration?.();\n\t\t},\n\t\tsetAgentCatalog(value) {\n\t\t\tagentCatalog = value;\n\t\t\trefreshSpawnToolRegistration?.();\n\t\t},\n\t\trefreshSettingsGuidance() {\n\t\t\trefreshSpawnToolRegistration?.();\n\t\t},\n\t\tgetRuntimeStatus() {\n\t\t\tconst counts = registry?.inspectionCounts() ?? { activeAgents: 0, retainedAgents: 0 };\n\t\t\treturn {\n\t\t\t\tenabled,\n\t\t\t\tinitialized: registry !== undefined,\n\t\t\t\ttransport: transportKind,\n\t\t\t\tcompletionDelivery,\n\t\t\t\tlimits: { ...runtimeLimits },\n\t\t\t\t...counts,\n\t\t\t};\n\t\t},\n\t\tlistAgents(includeClosed = false) {\n\t\t\treturn registry?.list(includeClosed) ?? [];\n\t\t},\n\t\tlistRunInspection(includeClosed = false) {\n\t\t\treturn registry?.listInspection(includeClosed) ?? [];\n\t\t},\n\t\tgetRunInspection(agentId) {\n\t\t\treturn registry?.getInspection(agentId);\n\t\t},\n\t\tclearAgents,\n\t};\n\tif (!enabled) return controller;\n\n\tconst requireRegistry = () => {\n\t\tif (!registry) throw new Error(\"Stateful subagents are not initialized for this session\");\n\t\treturn registry;\n\t};\n\tpi.on(\"session_start\", async (_event, ctx) => {\n\t\tconst generation = ++runtimeGeneration;\n\t\tcompletionBroker?.close();\n\t\tcompletionBroker = undefined;\n\t\tconst previousPeerBroker = peerBroker;\n\t\tpeerBroker = undefined;\n\t\tif (sweepTimer) clearInterval(sweepTimer);\n\t\tsweepTimer = undefined;\n\t\tconst previousRegistry = registry;\n\t\tregistry = undefined;\n\t\tpersistence = undefined;\n\t\tisolatedAgents.clear();\n\t\tseenMessageIds.clear();\n\t\tpendingIdempotentSpawns.clear();\n\t\tconst initialize = async () => {\n\t\t\tawait previousPeerBroker?.close();\n\t\t\tconst currentWorkspaceManager = await getWorkspaceManager();\n\t\t\tconst modules = await loadStatefulSessionModules();\n\t\t\tconst cleanupErrors = await modules.lifecycle.disposeStatefulRuntime(\n\t\t\t\tpreviousRegistry,\n\t\t\t\tcurrentWorkspaceManager,\n\t\t\t);\n\t\t\tif (generation !== runtimeGeneration) return;\n\t\t\tif (cleanupErrors.length > 0 && ctx.hasUI) {\n\t\t\t\tctx.ui.notify(\n\t\t\t\t\t`Previous subagent runtime cleanup reported ${cleanupErrors.length} error(s).`,\n\t\t\t\t\t\"warning\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tparentRuntime.model = ctx.model;\n\t\t\tparentRuntime.thinkingLevel = normalizeRuntimeThinkingLevel(pi.getThinkingLevel());\n\t\t\tconst sessionSettings = getCurrentStatefulSettings();\n\t\t\tconst nextLimits = resolveStatefulLimits(sessionSettings);\n\t\t\tconst owner =\n\t\t\t\tctx.sessionManager.getSessionId?.() ??\n\t\t\t\tctx.sessionManager.getSessionFile?.() ??\n\t\t\t\t`ephemeral:${ctx.cwd}`;\n\t\t\tconst sessionPersistence = new modules.persistence.AgentPersistence(owner, {\n\t\t\t\tretentionDays: sessionSettings.retentionDays,\n\t\t\t\tmaxStoredAgents: nextLimits.maxStoredAgents,\n\t\t\t});\n\t\t\tlet nextRegistry: AgentRegistry;\n\t\t\tlet transport: import(\"./transport.js\").SubagentTransport;\n\t\t\tconst sessionBroker = new modules.broker.CompletionDeliveryBroker(\n\t\t\t\tpi,\n\t\t\t\tctx,\n\t\t\t\tcompletionDelivery,\n\t\t\t\t{\n\t\t\t\t\tonDeliveryError: (error) => {\n\t\t\t\t\t\tif (!ctx.hasUI) return;\n\t\t\t\t\t\tconst reason = error instanceof Error ? error.message : String(error);\n\t\t\t\t\t\tctx.ui.notify(`Subagent completion delivery failed: ${reason}`, \"warning\");\n\t\t\t\t\t},\n\t\t\t\t\tonAcknowledged: (completions, deliveredAt) => {\n\t\t\t\t\t\tif (generation !== runtimeGeneration) return;\n\t\t\t\t\t\tfor (const completion of completions) {\n\t\t\t\t\t\t\tvoid nextRegistry\n\t\t\t\t\t\t\t\t.markCompletionDelivered(completion.completionId, deliveredAt)\n\t\t\t\t\t\t\t\t.catch((error: unknown) => {\n\t\t\t\t\t\t\t\t\tif (!ctx.hasUI || generation !== runtimeGeneration) return;\n\t\t\t\t\t\t\t\t\tconst reason = error instanceof Error ? error.message : String(error);\n\t\t\t\t\t\t\t\t\tctx.ui.notify(`Subagent completion acknowledgement failed: ${reason}`, \"warning\");\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\t\t\tconst sessionPeerBroker = new modules.peerCommunication.PeerCommunicationBroker({\n\t\t\t\tgetRegistry: () => nextRegistry,\n\t\t\t\tsendRoot: ({ message, senderPath }) => {\n\t\t\t\t\tpi.appendEntry(\"pi-subagent-peer-message\", {\n\t\t\t\t\t\tmessageId: message.id,\n\t\t\t\t\t\tsenderId: message.senderId,\n\t\t\t\t\t\tsenderPath,\n\t\t\t\t\t\tcontent: modules.context.redactPrivateText(message.content),\n\t\t\t\t\t});\n\t\t\t\t\tpi.sendMessage(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcustomType: \"pi-subagent-peer-message\",\n\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t\"Message Type: SUBAGENT_PEER_MESSAGE\",\n\t\t\t\t\t\t\t\t\"Protocol: pi-subagents:v1\",\n\t\t\t\t\t\t\t\t`Message ID: ${message.id}`,\n\t\t\t\t\t\t\t\t`Sender ID: ${message.senderId}`,\n\t\t\t\t\t\t\t\t`Sender Path: ${senderPath}`,\n\t\t\t\t\t\t\t\t\"Payload:\",\n\t\t\t\t\t\t\t\tmessage.content,\n\t\t\t\t\t\t\t].join(\"\\n\"),\n\t\t\t\t\t\t\tdisplay: true,\n\t\t\t\t\t\t\tdetails: { ...message, senderPath },\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ deliverAs: \"steer\", triggerTurn: false },\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tdispatch: (recipient, message) => transport.deliverMessage?.(recipient, message) ?? false,\n\t\t\t});\n\t\t\ttransport = modules.transport.createStatefulTransport({\n\t\t\t\tkind: transportKind,\n\t\t\t\tmodelRegistry: ctx.modelRegistry,\n\t\t\t\tgetParentRuntime: () => ({ ...parentRuntime }),\n\t\t\t\tgetSettings: getCurrentSettings,\n\t\t\t\tcreateInProcessSession: dependencies.createInProcessSession,\n\t\t\t\tpeerRuntime: sessionPeerBroker,\n\t\t\t\tloadTransport: dependencies.loadTransport,\n\t\t\t});\n\t\t\tnextRegistry = new modules.registry.AgentRegistry(transport, {\n\t\t\t\tmaxAgents: nextLimits.maxAgents,\n\t\t\t\tmaxActiveTurns: nextLimits.maxActiveTurns,\n\t\t\t\tmaxDepth: nextLimits.maxDepth,\n\t\t\t\tmaxChildrenPerAgent: nextLimits.maxChildrenPerAgent,\n\t\t\t\tmaxMailboxMessages: sessionSettings.maxMailboxMessages,\n\t\t\t\tmaxMailboxMessageBytes: sessionSettings.maxMailboxMessageBytes,\n\t\t\t\tidleTtlMs: sessionSettings.idleTtlMs,\n\t\t\t\tonChange: async (agents) => {\n\t\t\t\t\tif (generation !== runtimeGeneration) return;\n\t\t\t\t\tawait sessionPersistence.save(agents);\n\t\t\t\t\tif (generation !== runtimeGeneration) return;\n\t\t\t\t\tfor (const agent of agents) {\n\t\t\t\t\t\tfor (const message of agent.mailbox) {\n\t\t\t\t\t\t\tif (seenMessageIds.has(message.id)) continue;\n\t\t\t\t\t\t\tseenMessageIds.add(message.id);\n\t\t\t\t\t\t\tpi.appendEntry(\"pi-subagent-message\", {\n\t\t\t\t\t\t\t\tsenderId: message.senderId,\n\t\t\t\t\t\t\t\trecipientId: message.recipientId,\n\t\t\t\t\t\t\t\tcontent: modules.context.redactPrivateText(message.content).slice(0, 160),\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tagent.state === \"running\" &&\n\t\t\t\t\t\t\t\tmessage.deduplicationKey?.startsWith(\"completion:\")\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tawait transport.deliverMessage?.(agent, {\n\t\t\t\t\t\t\t\t\t\t...message,\n\t\t\t\t\t\t\t\t\t\tcontent: modules.context.redactPrivateText(message.content),\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\t\t// The durable parent mailbox remains the retry path for the next turn.\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (generation !== runtimeGeneration) return;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tonTurnComplete: (completion) => {\n\t\t\t\t\tif (generation === runtimeGeneration && completion.recipientId === \"root\") {\n\t\t\t\t\t\tsessionBroker.enqueue(completion);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t});\n\t\t\tconst persisted = sessionPersistence.load();\n\t\t\tconst orphanCleanupFailures = await modules.lifecycle.cleanupPersistedWorkspaces(\n\t\t\t\tpersisted,\n\t\t\t\tcurrentWorkspaceManager,\n\t\t\t);\n\t\t\tif (generation !== runtimeGeneration) {\n\t\t\t\tsessionBroker.close();\n\t\t\t\tawait sessionPeerBroker.close();\n\t\t\t\tawait modules.lifecycle.disposeStatefulRuntime(nextRegistry, currentWorkspaceManager);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (ctx.hasUI && orphanCleanupFailures > 0) {\n\t\t\t\tctx.ui.notify(\"Some orphaned subagent worktrees could not be cleaned\", \"warning\");\n\t\t\t}\n\t\t\tconst restored = persisted\n\t\t\t\t.filter(\n\t\t\t\t\t(agent) =>\n\t\t\t\t\t\tagent.workspaceMode !== \"worktree\" &&\n\t\t\t\t\t\t((agent.agentScope !== \"project\" && agent.agentScope !== \"both\") ||\n\t\t\t\t\t\t\tctx.isProjectTrusted()),\n\t\t\t\t)\n\t\t\t\t.flatMap((agent) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst target = modules.cwdPolicy.resolveSubagentTarget({\n\t\t\t\t\t\t\tworkspace: ctx.cwd,\n\t\t\t\t\t\t\trequestedCwd: agent.cwd,\n\t\t\t\t\t\t\tcurrentProjectTrusted: ctx.isProjectTrusted(),\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t{ ...agent, cwd: target.cwd, target: modules.cwdPolicy.targetPolicyAudit(target) },\n\t\t\t\t\t\t];\n\t\t\t\t\t} catch {\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\tfor (const agent of restored) {\n\t\t\t\tfor (const message of agent.mailbox) seenMessageIds.add(message.id);\n\t\t\t}\n\t\t\tnextRegistry.restore(restored);\n\t\t\tif (generation !== runtimeGeneration) {\n\t\t\t\tsessionBroker.close();\n\t\t\t\tawait sessionPeerBroker.close();\n\t\t\t\tawait modules.lifecycle.disposeStatefulRuntime(nextRegistry, currentWorkspaceManager);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tregistry = nextRegistry;\n\t\t\tpersistence = sessionPersistence;\n\t\t\tcompletionBroker = sessionBroker;\n\t\t\tpeerBroker = sessionPeerBroker;\n\t\t\tfor (const completion of nextRegistry.listPendingCompletions()) {\n\t\t\t\tif (completion.recipientId === \"root\") sessionBroker.enqueue(completion);\n\t\t\t}\n\t\t\truntimeLimits = nextLimits;\n\t\t\trefreshSpawnToolRegistration?.();\n\t\t\tconst sweepEveryMs = Math.max(\n\t\t\t\t1_000,\n\t\t\t\tMath.min(sessionSettings.idleTtlMs ?? 60 * 60 * 1000, 60_000),\n\t\t\t);\n\t\t\tsweepTimer = setInterval(() => {\n\t\t\t\tvoid nextRegistry.sweepExpired().catch((error: unknown) => {\n\t\t\t\t\tif (!ctx.hasUI || generation !== runtimeGeneration) return;\n\t\t\t\t\tconst reason = error instanceof Error ? error.message : String(error);\n\t\t\t\t\tctx.ui.notify(`Subagent expiry cleanup failed: ${reason}`, \"warning\");\n\t\t\t\t});\n\t\t\t}, sweepEveryMs);\n\t\t\tsweepTimer.unref();\n\t\t};\n\t\tconst transition = runtimeTransition.then(initialize, initialize);\n\t\truntimeTransition = transition.catch(() => undefined);\n\t\tawait transition;\n\t});\n\n\tpi.on(\"agent_start\", () => {\n\t\tcompletionBroker?.onParentTurnStart();\n\t});\n\n\tpi.on(\"context\", (event) => {\n\t\tcompletionBroker?.onParentContext(event.messages);\n\t});\n\n\tpi.on(\"agent_settled\", () => {\n\t\tcompletionBroker?.onParentSettled();\n\t});\n\n\tpi.on(\"model_select\", (event) => {\n\t\tparentRuntime.model = event.model;\n\t});\n\n\tpi.on(\"thinking_level_select\", (event) => {\n\t\tparentRuntime.thinkingLevel = normalizeRuntimeThinkingLevel(event.level);\n\t});\n\n\tpi.on(\"session_shutdown\", async (_event, ctx) => {\n\t\truntimeGeneration++;\n\t\tcompletionBroker?.close();\n\t\tcompletionBroker = undefined;\n\t\tconst previousPeerBroker = peerBroker;\n\t\tpeerBroker = undefined;\n\t\tif (sweepTimer) clearInterval(sweepTimer);\n\t\tsweepTimer = undefined;\n\t\tconst previousRegistry = registry;\n\t\tregistry = undefined;\n\t\tpersistence = undefined;\n\t\tisolatedAgents.clear();\n\t\tseenMessageIds.clear();\n\t\tpendingIdempotentSpawns.clear();\n\t\tconst shutdown = async () => {\n\t\t\tawait previousPeerBroker?.close();\n\t\t\tconst currentWorkspaceManager = await getWorkspaceManager();\n\t\t\tconst { disposeStatefulRuntime } = await import(\"./stateful-lifecycle.js\");\n\t\t\tconst errors = await disposeStatefulRuntime(previousRegistry, currentWorkspaceManager);\n\t\t\tif (errors.length > 0 && ctx.hasUI) {\n\t\t\t\tctx.ui.notify(`Subagent shutdown cleanup reported ${errors.length} error(s).`, \"warning\");\n\t\t\t}\n\t\t};\n\t\tconst transition = runtimeTransition.then(shutdown, shutdown);\n\t\truntimeTransition = transition.catch(() => undefined);\n\t\tawait transition;\n\t});\n\n\tconst baseSpawnDescription = () =>\n\t\t`Start an addressable background subagent with an opaque agentId and canonical taskPath, plus an optional thinking level and execution budgets chosen for the task difficulty, return immediately with an agentId, and receive its completion asynchronously. Detached capacity: ${runtimeLimits.maxAgents} retained agents, ${runtimeLimits.maxActiveTurns} active turns, ${runtimeLimits.maxChildrenPerAgent} direct children per agent, and depth ${runtimeLimits.maxDepth}. Working-directory target policy: ${dependencies.getSettings?.()?.cwdPolicy?.delegation ?? DEFAULT_DELEGATION_CWD_POLICY}. This controls launch targets and protected project resources, not filesystem access or sandboxing.`;\n\tconst spawnTool = defineTool({\n\t\tname: \"subagent_spawn\",\n\t\tlabel: \"Spawn Subagent\",\n\t\tdescription: appendAgentCatalog(baseSpawnDescription(), agentCatalog),\n\t\tpromptSnippet: \"Start a reusable detached subagent; completion is delivered asynchronously\",\n\t\tpromptGuidelines: createSpawnPromptGuidelines(completionDelivery, blockingEnabled),\n\t\tparameters: Type.Object({\n\t\t\tagent: Type.String({ minLength: 1 }),\n\t\t\ttaskName: Type.Optional(\n\t\t\t\tType.String({\n\t\t\t\t\tminLength: 1,\n\t\t\t\t\tmaxLength: MAX_TASK_NAME_LENGTH,\n\t\t\t\t\tpattern: \"^[a-z0-9_]+$\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Canonical path segment for this task; use lowercase letters, digits, and underscores.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\ttask: Type.String({ minLength: 1, maxLength: DEFAULT_MAX_CONTEXT_BYTES }),\n\t\t\tthinkingLevel: Type.Optional(StatefulThinkingLevelSchema),\n\t\t\ttimeoutMs: Type.Optional(StatefulTimeoutSchema),\n\t\t\t...StatefulTurnLimitFields,\n\t\t\tcwd: Type.Optional(Type.String()),\n\t\t\tagentScope: Type.Optional(ScopeSchema),\n\t\t\tconfirmProjectAgents: Type.Optional(Type.Boolean({ default: true })),\n\t\t\tcontext: Type.Optional(ContextModeSchema),\n\t\t\tcontextEntryIds: Type.Optional(\n\t\t\t\tType.Array(Type.String(), { description: \"Optional selected session entry IDs.\" }),\n\t\t\t),\n\t\t\tparentId: Type.Optional(\n\t\t\t\tType.String({ description: \"Optional parent agent ID or canonical task path.\" }),\n\t\t\t),\n\t\t\tallowConcurrentWrites: Type.Optional(\n\t\t\t\tType.Boolean({\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Deprecated compatibility field; shared-workspace concurrency is allowed by default.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\tworkspaceMode: Type.Optional(\n\t\t\t\tStringEnum([\"shared\", \"worktree\"] as const, {\n\t\t\t\t\tdescription: \"Use the shared workspace (default) or an opt-in disposable Git worktree.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\tcontract: Type.Optional(DelegationContractSchema),\n\t\t\tidempotencyKey: Type.Optional(\n\t\t\t\tType.String({\n\t\t\t\t\tminLength: 1,\n\t\t\t\t\tmaxLength: MAX_SPAWN_IDEMPOTENCY_KEY_LENGTH,\n\t\t\t\t\tdescription: \"Reuse the same retained agent for an exact accepted spawn retry.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\tresultFormat: Type.Optional(\n\t\t\t\tStringEnum(SUBAGENT_RESULT_FORMATS, {\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Use text (default), structured-v1, or the evidence-preserving structured-v2 completion contract.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t}),\n\t\t...createStatefulToolRenderer(\"spawn\"),\n\t\tasync execute(_id, params, signal, _update, ctx) {\n\t\t\tconst generation = runtimeGeneration;\n\t\t\tconst capturedRegistry = registry;\n\t\t\tlet modules: StatefulSpawnModules;\n\t\t\ttry {\n\t\t\t\tmodules = await loadStatefulSpawnModules();\n\t\t\t} catch (error) {\n\t\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\tlet currentWorkspaceManager: WorkspaceManager;\n\t\t\ttry {\n\t\t\t\tcurrentWorkspaceManager = await getWorkspaceManager();\n\t\t\t} catch (error) {\n\t\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\tconst scope = (params.agentScope ?? \"user\") as AgentScope;\n\t\t\tconst resultFormat = (params.resultFormat ?? \"text\") as SubagentResultFormat;\n\t\t\tconst contract = modules.delegationContract.normalizeDelegationContract(params.contract);\n\t\t\tif (params.contract !== undefined && !contract) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"subagent_spawn contract must be a valid pi-subagents:delegation:v2 object\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tmodules.runtimePolicy.assertSubagentDepthAllowed();\n\t\t\tassertSpawnIdempotencyKey(params.idempotencyKey);\n\t\t\tconst currentSettings = getCurrentSettings();\n\t\t\tconst target = modules.cwdPolicy.resolveSubagentTarget({\n\t\t\t\tworkspace: ctx.cwd,\n\t\t\t\trequestedCwd: params.cwd,\n\t\t\t\tcurrentProjectTrusted: ctx.isProjectTrusted(),\n\t\t\t});\n\t\t\tmodules.cwdPolicy.assertDelegationTargetAllowed(\n\t\t\t\ttarget,\n\t\t\t\tcurrentSettings?.cwdPolicy?.delegation ?? DEFAULT_DELEGATION_CWD_POLICY,\n\t\t\t);\n\t\t\tconst cwd = target.cwd;\n\t\t\tconst mode = resolveSpawnContextMode(params.context, params.contextEntryIds);\n\t\t\tconst snapshot = modules.context.buildContextSnapshot(\n\t\t\t\tctx.sessionManager.getBranch(),\n\t\t\t\tmode,\n\t\t\t\tDEFAULT_MAX_CONTEXT_BYTES,\n\t\t\t\tparams.contextEntryIds,\n\t\t\t);\n\t\t\tif ((scope === \"project\" || scope === \"both\") && !ctx.isProjectTrusted()) {\n\t\t\t\tthrow new Error(\"Project-local subagent definitions require a trusted project\");\n\t\t\t}\n\t\t\tconst resolvedAgents = modules.agents.discoverAgents(cwd, scope, currentSettings).agents;\n\t\t\tconst resolvedAgent = resolvedAgents.find((agent) => agent.name === params.agent);\n\t\t\tif (!resolvedAgent) {\n\t\t\t\tconst available = resolvedAgents.map((agent) => agent.name).join(\", \") || \"none\";\n\t\t\t\tthrow new Error(`Unknown subagent ${params.agent}. Available agents: ${available}`);\n\t\t\t}\n\t\t\tconst targetSnapshot = modules.cwdPolicy.targetPolicyAudit(target);\n\t\t\tconst { executionPlan, semanticSnapshot } =\n\t\t\t\tawait modules.retainedSemanticState.buildRetainedSemanticState({\n\t\t\t\t\tagent: resolvedAgent,\n\t\t\t\t\tcontract,\n\t\t\t\t\ttarget: targetSnapshot,\n\t\t\t\t\tcwd,\n\t\t\t\t\tworkspaceMode: params.workspaceMode === \"worktree\" ? \"worktree\" : \"shared\",\n\t\t\t\t\ttransport: transportKind,\n\t\t\t\t\tresultFormat,\n\t\t\t\t\tthinkingLevel: params.thinkingLevel,\n\t\t\t\t\ttimeoutMs: params.timeoutMs,\n\t\t\t\t\ttaskGeneration: 1,\n\t\t\t\t});\n\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\tconst requestHash = modules.spawnIdempotency.hashSpawnRequest({\n\t\t\t\tagent: params.agent,\n\t\t\t\ttaskName: params.taskName,\n\t\t\t\ttask: params.task,\n\t\t\t\tcwd,\n\t\t\t\tagentScope: scope,\n\t\t\t\tthinkingLevel: params.thinkingLevel,\n\t\t\t\ttimeoutMs: params.timeoutMs,\n\t\t\t\tidleTimeoutMs: params.idleTimeoutMs,\n\t\t\t\tmaxTurns: params.maxTurns,\n\t\t\t\tmaxToolCalls: params.maxToolCalls,\n\t\t\t\tparentId: params.parentId,\n\t\t\t\tcontext: snapshot.text || undefined,\n\t\t\t\tcontextSourceIds: snapshot.sourceIds,\n\t\t\t\tworkspaceMode: params.workspaceMode ?? \"shared\",\n\t\t\t\tallowConcurrentWrites: params.allowConcurrentWrites ?? false,\n\t\t\t\tcontract,\n\t\t\t\tresultFormat,\n\t\t\t});\n\t\t\tif (!capturedRegistry) {\n\t\t\t\tthrow new Error(\"Stateful subagents are not initialized for this session\");\n\t\t\t}\n\t\t\tconst ownedRegistry = capturedRegistry;\n\t\t\tconst retained = ownedRegistry.findBySpawnIdempotencyKey(params.idempotencyKey, requestHash);\n\t\t\tif (retained) return result(retained, `Reused ${retained.agent} as ${retained.id}.`);\n\t\t\tconst foundPending = params.idempotencyKey\n\t\t\t\t? pendingIdempotentSpawns.get(params.idempotencyKey)\n\t\t\t\t: undefined;\n\t\t\tif (\n\t\t\t\tparams.idempotencyKey &&\n\t\t\t\tfoundPending &&\n\t\t\t\tfoundPending.generation !== generation &&\n\t\t\t\tpendingIdempotentSpawns.get(params.idempotencyKey) === foundPending\n\t\t\t) {\n\t\t\t\tpendingIdempotentSpawns.delete(params.idempotencyKey);\n\t\t\t}\n\t\t\tconst pending = foundPending?.generation === generation ? foundPending : undefined;\n\t\t\tif (pending) {\n\t\t\t\tif (pending.requestHash !== requestHash) {\n\t\t\t\t\tthrow new Error(\"The subagent_spawn idempotencyKey is pending with different parameters\");\n\t\t\t\t}\n\t\t\t\tconst agent = await waitForOwnedSpawn(pending.promise, signal);\n\t\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\t\treturn result(agent, `Reused ${agent.agent} as ${agent.id}.`);\n\t\t\t}\n\t\t\tlet resolvePending: ((agent: ManagedAgent) => void) | undefined;\n\t\t\tlet rejectPending: ((error: unknown) => void) | undefined;\n\t\t\tlet ownedPending: PendingIdempotentSpawn | undefined;\n\t\t\tif (params.idempotencyKey) {\n\t\t\t\tconst promise = new Promise<ManagedAgent>((resolve, reject) => {\n\t\t\t\t\tresolvePending = resolve;\n\t\t\t\t\trejectPending = reject;\n\t\t\t\t});\n\t\t\t\tvoid promise.catch(() => undefined);\n\t\t\t\townedPending = { generation, requestHash, promise };\n\t\t\t\tpendingIdempotentSpawns.set(params.idempotencyKey, ownedPending);\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait confirmProjectAgent(\n\t\t\t\t\tparams.agent,\n\t\t\t\t\tscope,\n\t\t\t\t\tparams.confirmProjectAgents ?? true,\n\t\t\t\t\tctx,\n\t\t\t\t\tcwd,\n\t\t\t\t\tcurrentSettings,\n\t\t\t\t);\n\t\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\t\tif (params.workspaceMode === \"worktree\" && resolvedAgent.source === \"project\") {\n\t\t\t\t\tthrow new Error(\"Project-local subagent definitions cannot run in a detached worktree\");\n\t\t\t\t}\n\t\t\t\tconst requestedCwd = cwd;\n\t\t\t\tconst workspaceOwner = `pending-${randomUUID()}`;\n\t\t\t\tconst workspace =\n\t\t\t\t\tparams.workspaceMode === \"worktree\"\n\t\t\t\t\t\t? await currentWorkspaceManager.create(workspaceOwner, requestedCwd)\n\t\t\t\t\t\t: undefined;\n\t\t\t\ttry {\n\t\t\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (workspace) await currentWorkspaceManager.cleanup(workspaceOwner);\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\tlet agent: ManagedAgent | undefined;\n\t\t\t\ttry {\n\t\t\t\t\tconst capabilityGrant = modules.capabilityGrant.issueCapabilityGrant(\n\t\t\t\t\t\texecutionPlan,\n\t\t\t\t\t\tDate.now(),\n\t\t\t\t\t\tMath.max(1, (params.timeoutMs ?? resolvedAgent.timeoutMs ?? 600_000) + 60_000),\n\t\t\t\t\t);\n\t\t\t\t\tagent = await ownedRegistry.spawn({\n\t\t\t\t\t\tagent: params.agent,\n\t\t\t\t\t\ttaskName: params.taskName,\n\t\t\t\t\t\ttask: params.task,\n\t\t\t\t\t\tcwd: workspace?.path ?? requestedCwd,\n\t\t\t\t\t\tagentScope: scope,\n\t\t\t\t\t\tthinkingLevel: params.thinkingLevel,\n\t\t\t\t\t\ttimeoutMs: params.timeoutMs,\n\t\t\t\t\t\tidleTimeoutMs: params.idleTimeoutMs,\n\t\t\t\t\t\tmaxTurns: params.maxTurns,\n\t\t\t\t\t\tmaxToolCalls: params.maxToolCalls,\n\t\t\t\t\t\tparentId: params.parentId,\n\t\t\t\t\t\tcontext: snapshot.text || undefined,\n\t\t\t\t\t\tcontextSourceIds: snapshot.sourceIds,\n\t\t\t\t\t\tcontextTruncated: snapshot.truncated,\n\t\t\t\t\t\tcontextTurns: snapshot.turns,\n\t\t\t\t\t\tcontextBytes: Buffer.byteLength(snapshot.text, \"utf8\"),\n\t\t\t\t\t\tworkspaceMode: workspace ? \"worktree\" : undefined,\n\t\t\t\t\t\tspawnIdempotencyKey: params.idempotencyKey,\n\t\t\t\t\t\tspawnRequestHash: params.idempotencyKey ? requestHash : undefined,\n\t\t\t\t\t\tcontract,\n\t\t\t\t\t\tresultFormat: resultFormat === \"text\" ? undefined : resultFormat,\n\t\t\t\t\t\texecutionPlan,\n\t\t\t\t\t\tcapabilityGrant,\n\t\t\t\t\t\tsemanticSnapshot,\n\t\t\t\t\t\tsemanticCompatibility: { status: \"compatible\", changedComponents: [] },\n\t\t\t\t\t\ttarget: targetSnapshot,\n\t\t\t\t\t});\n\t\t\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (agent) await ownedRegistry.closeTree(agent.id).catch(() => undefined);\n\t\t\t\t\tif (workspace) await currentWorkspaceManager.cleanup(workspaceOwner);\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\tif (!agent) throw new Error(\"Subagent spawn completed without a retained agent\");\n\t\t\t\tif (workspace && agent.cwd === workspace.path) isolatedAgents.set(agent.id, workspaceOwner);\n\t\t\t\telse if (workspace) await currentWorkspaceManager.cleanup(workspaceOwner);\n\t\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\t\tresolvePending?.(agent);\n\t\t\t\tconst deliveryNote =\n\t\t\t\t\tcompletionDelivery === \"auto-resume\"\n\t\t\t\t\t\t? \"Auto-resume will request synthesis after completion.\"\n\t\t\t\t\t\t: \"The current response must not depend on the result because next-turn delivery will not wake an idle root.\";\n\t\t\t\treturn result(\n\t\t\t\t\tagent,\n\t\t\t\t\t`Spawned ${agent.agent} as ${agent.taskPath ?? agent.id} (${agent.id}). Continue the identified non-overlapping local work immediately; do not merely announce the spawn or end while useful local work remains. Only an explicit user-requested specialist model, tool-profile, or isolation exception may lack concurrent local work. ${deliveryNote} Do not poll for progress.`,\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\trejectPending?.(error);\n\t\t\t\tthrow error;\n\t\t\t} finally {\n\t\t\t\tif (\n\t\t\t\t\tparams.idempotencyKey &&\n\t\t\t\t\townedPending &&\n\t\t\t\t\tpendingIdempotentSpawns.get(params.idempotencyKey) === ownedPending\n\t\t\t\t) {\n\t\t\t\t\tpendingIdempotentSpawns.delete(params.idempotencyKey);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t});\n\trefreshSpawnToolRegistration = () => {\n\t\tspawnTool.description = appendAgentCatalog(baseSpawnDescription(), agentCatalog);\n\t\tspawnTool.promptGuidelines = createSpawnPromptGuidelines(completionDelivery, blockingEnabled);\n\t\tpi.registerTool(spawnTool);\n\t};\n\trefreshSpawnToolRegistration();\n\n\tpi.registerTool({\n\t\tname: \"subagent_send\",\n\t\tlabel: \"Send Subagent Follow-up\",\n\t\tdescription:\n\t\t\t\"Send follow-up work to a reusable retained subagent and start a new turn. Semantic resource skew requires explicit revalidation. Use subagent_mailbox for queue-only messages.\",\n\t\tpromptSnippet: \"Start a new detached follow-up turn on a retained subagent\",\n\t\tparameters: Type.Object({\n\t\t\tagentId: Type.String({ description: \"Retained agent ID or canonical task path.\" }),\n\t\t\ttask: Type.String({ minLength: 1, maxLength: DEFAULT_MAX_CONTEXT_BYTES }),\n\t\t\ttimeoutMs: Type.Optional(\n\t\t\t\tType.Integer({\n\t\t\t\t\tminimum: 1,\n\t\t\t\t\tmaximum: MAX_SUBAGENT_TIMEOUT_MS,\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Optional work deadline for this follow-up turn. On expiry, Pi aborts the work and makes one separately bounded summary attempt.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\t...StatefulTurnLimitFields,\n\t\t\trevalidate: Type.Optional(\n\t\t\t\tType.Boolean({\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Accept the current semantic resource snapshot after a reported mismatch before starting this follow-up.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\tallowConcurrentWrites: Type.Optional(\n\t\t\t\tType.Boolean({\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Deprecated compatibility field; shared-workspace concurrency is allowed by default.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t}),\n\t\t...createStatefulToolRenderer(\"send\"),\n\t\tasync execute(_id, params, signal, _update, ctx) {\n\t\t\tconst generation = runtimeGeneration;\n\t\t\tconst ownedRegistry = requireRegistry();\n\t\t\tlet modules: StatefulSpawnModules;\n\t\t\ttry {\n\t\t\t\tmodules = await loadStatefulSpawnModules();\n\t\t\t} catch (error) {\n\t\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\tconst currentSettings = getCurrentSettings();\n\t\t\tconst existing = ownedRegistry.get(params.agentId);\n\t\t\tif (!existing) throw new Error(`Unknown subagent: ${params.agentId}`);\n\t\t\tconst currentAgent = modules.agents\n\t\t\t\t.discoverAgents(existing.cwd, existing.agentScope ?? \"user\", currentSettings)\n\t\t\t\t.agents.find((agent) => agent.name === existing.agent);\n\t\t\tif (!currentAgent) throw new Error(`Unknown retained subagent definition: ${existing.agent}`);\n\t\t\tconst resolvedFollowUpTarget =\n\t\t\t\texisting.workspaceMode === \"worktree\"\n\t\t\t\t\t? undefined\n\t\t\t\t\t: modules.cwdPolicy.resolveSubagentTarget({\n\t\t\t\t\t\t\tworkspace: ctx.cwd,\n\t\t\t\t\t\t\trequestedCwd: existing.cwd,\n\t\t\t\t\t\t\tcurrentProjectTrusted: ctx.isProjectTrusted(),\n\t\t\t\t\t\t});\n\t\t\tif (resolvedFollowUpTarget) {\n\t\t\t\tmodules.cwdPolicy.assertDelegationTargetAllowed(\n\t\t\t\t\tresolvedFollowUpTarget,\n\t\t\t\t\tcurrentSettings?.cwdPolicy?.delegation ?? DEFAULT_DELEGATION_CWD_POLICY,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (existing.workspaceMode === \"worktree\" && !existing.target) {\n\t\t\t\tthrow new Error(\"Retained worktree is missing its trusted target snapshot\");\n\t\t\t}\n\t\t\tconst currentTarget =\n\t\t\t\texisting.workspaceMode === \"worktree\" && existing.target\n\t\t\t\t\t? existing.target\n\t\t\t\t\t: modules.cwdPolicy.targetPolicyAudit(\n\t\t\t\t\t\t\tresolvedFollowUpTarget as NonNullable<typeof resolvedFollowUpTarget>,\n\t\t\t\t\t\t);\n\t\t\tconst { executionPlan: currentPlan, semanticSnapshot: currentSnapshot } =\n\t\t\t\tawait modules.retainedSemanticState.buildRetainedSemanticState({\n\t\t\t\t\tagent: currentAgent,\n\t\t\t\t\tcontract: existing.contract,\n\t\t\t\t\ttarget: currentTarget,\n\t\t\t\t\tcwd: existing.cwd,\n\t\t\t\t\tworkspaceMode: existing.workspaceMode === \"worktree\" ? \"worktree\" : \"shared\",\n\t\t\t\t\ttransport: transportKind,\n\t\t\t\t\tresultFormat: existing.resultFormat ?? \"text\",\n\t\t\t\t\tthinkingLevel: existing.thinkingLevel,\n\t\t\t\t\ttimeoutMs: params.timeoutMs ?? existing.timeoutMs,\n\t\t\t\t\ttaskGeneration: (existing.executionPlan?.taskGeneration ?? 0) + 1,\n\t\t\t\t\tcancellationLineage: [\n\t\t\t\t\t\t...(existing.executionPlan?.cancellationLineage ?? []),\n\t\t\t\t\t\t...(existing.state === \"interrupted\" && existing.executionPlan?.id\n\t\t\t\t\t\t\t? [existing.executionPlan.id]\n\t\t\t\t\t\t\t: []),\n\t\t\t\t\t],\n\t\t\t\t});\n\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\tconst compatibility = existing.semanticSnapshot\n\t\t\t\t? modules.semanticSnapshot.evaluateSemanticCompatibility(\n\t\t\t\t\t\texisting.semanticSnapshot,\n\t\t\t\t\t\tcurrentSnapshot,\n\t\t\t\t\t)\n\t\t\t\t: { status: \"warning\" as const, changedComponents: [\"legacy-missing-snapshot\"] };\n\t\t\tif (\n\t\t\t\t(compatibility.status === \"needs-revalidation\" || compatibility.status === \"rejected\") &&\n\t\t\t\tparams.revalidate !== true\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Subagent semantic resources changed; retry with revalidate: true after reviewing: ${compatibility.changedComponents.join(\", \")}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait confirmProjectAgent(\n\t\t\t\texisting.agent,\n\t\t\t\texisting.agentScope ?? \"user\",\n\t\t\t\tfalse,\n\t\t\t\tctx,\n\t\t\t\texisting.cwd,\n\t\t\t\tcurrentSettings,\n\t\t\t);\n\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\tconst currentGrant = modules.capabilityGrant.issueCapabilityGrant(\n\t\t\t\tcurrentPlan,\n\t\t\t\tDate.now(),\n\t\t\t\tMath.max(1, (params.timeoutMs ?? existing.timeoutMs ?? 600_000) + 60_000),\n\t\t\t);\n\t\t\tawait ownedRegistry.updateSemanticState(\n\t\t\t\texisting.id,\n\t\t\t\tcurrentPlan,\n\t\t\t\tcurrentGrant,\n\t\t\t\tcurrentSnapshot,\n\t\t\t\tparams.revalidate === true && compatibility.status !== \"compatible\"\n\t\t\t\t\t? { status: \"warning\", changedComponents: compatibility.changedComponents }\n\t\t\t\t\t: compatibility,\n\t\t\t);\n\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\tconst agent = await ownedRegistry.followUp(params.agentId, params.task, {\n\t\t\t\ttimeoutMs: params.timeoutMs,\n\t\t\t\tidleTimeoutMs: params.idleTimeoutMs,\n\t\t\t\tmaxTurns: params.maxTurns,\n\t\t\t\tmaxToolCalls: params.maxToolCalls,\n\t\t\t});\n\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\treturn result(agent, `Started follow-up for ${agent.id}.`);\n\t\t},\n\t});\n\n\tpi.registerTool({\n\t\tname: \"subagent_manage\",\n\t\tlabel: \"Manage Subagents\",\n\t\tdescription:\n\t\t\t\"Interrupt active work while keeping an agent reusable, or close agents and release their resources. Use subagent_inspect for every read-only list, detail, status, and diagnostic operation.\",\n\t\tpromptSnippet: \"Interrupt or close retained detached subagents\",\n\t\tparameters: ManageParamsSchema,\n\t\t...createStatefulToolRenderer(\"manage\"),\n\t\tasync execute(_id, params, signal): Promise<StatefulActionToolResult> {\n\t\t\tconst generation = runtimeGeneration;\n\t\t\tconst ownedRegistry = requireRegistry();\n\t\t\tlet currentWorkspaceManager: WorkspaceManager;\n\t\t\ttry {\n\t\t\t\tcurrentWorkspaceManager = await getWorkspaceManager();\n\t\t\t} catch (error) {\n\t\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\tconst ownedAgent = (agentId: string): ManagedAgent => {\n\t\t\t\tconst value = ownedRegistry.get(agentId);\n\t\t\t\tif (!value) throw new Error(`Unknown subagent: ${agentId}`);\n\t\t\t\treturn value;\n\t\t\t};\n\t\t\tconst operation = validateManageParams(params);\n\t\t\tconst agentId = operation.agentId;\n\t\t\tif (operation.action === \"interrupt\") {\n\t\t\t\tif (operation.subtree) {\n\t\t\t\t\tconst agents = await ownedRegistry.interruptTree(agentId);\n\t\t\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: `Interrupted ${agents.length} active agent(s).` }],\n\t\t\t\t\t\tdetails: {\n\t\t\t\t\t\t\tagent: summarizeStatefulAgent(ownedAgent(agentId)),\n\t\t\t\t\t\t\tagents: agents.map(summarizeStatefulAgent),\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tconst agent = await ownedRegistry.interrupt(agentId);\n\t\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\t\treturn result(agent, `Interrupted ${agent.id}; it remains reusable.`);\n\t\t\t}\n\t\t\tconst existing = ownedRegistry.get(agentId);\n\t\t\tif (existing?.state === \"closed\" && !operation.subtree) {\n\t\t\t\tconst pendingOwner = isolatedAgents.get(existing.id);\n\t\t\t\tif (pendingOwner) await currentWorkspaceManager.cleanup(pendingOwner);\n\t\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\t\tisolatedAgents.delete(existing.id);\n\t\t\t\treturn result(existing, `Closed ${existing.id}.`);\n\t\t\t}\n\t\t\tif (operation.subtree) {\n\t\t\t\tlet agents: ManagedAgent[];\n\t\t\t\ttry {\n\t\t\t\t\tagents = await ownedRegistry.closeTree(agentId);\n\t\t\t\t} finally {\n\t\t\t\t\tawait cleanupClosedWorkspaces(ownedRegistry, isolatedAgents, currentWorkspaceManager);\n\t\t\t\t}\n\t\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: `Closed ${agents.length} agent(s).` }],\n\t\t\t\t\tdetails: {\n\t\t\t\t\t\tagent: summarizeStatefulAgent(ownedAgent(agentId)),\n\t\t\t\t\t\tagents: agents.map(summarizeStatefulAgent),\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t\tlet agent: ManagedAgent;\n\t\t\ttry {\n\t\t\t\tagent = await ownedRegistry.close(agentId);\n\t\t\t} finally {\n\t\t\t\tawait cleanupClosedWorkspaces(ownedRegistry, isolatedAgents, currentWorkspaceManager);\n\t\t\t}\n\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\treturn result(agent, `Closed ${agent.id}.`);\n\t\t},\n\t});\n\n\tpi.registerTool({\n\t\tname: \"subagent_mailbox\",\n\t\tlabel: \"Subagent Mailbox\",\n\t\tdescription:\n\t\t\t\"Queue a bounded message without starting a turn, or read unread mailbox messages. Read acknowledges returned messages by default; use subagent_inspect for metadata-only unread counts.\",\n\t\tpromptSnippet: \"Send or read queue-only detached-subagent mailbox messages\",\n\t\tparameters: MailboxParamsSchema,\n\t\t...createStatefulToolRenderer(\"mailbox\"),\n\t\tasync execute(_id, params, signal): Promise<StatefulActionToolResult> {\n\t\t\tconst generation = runtimeGeneration;\n\t\t\tconst ownedRegistry = requireRegistry();\n\t\t\tconst operation = validateMailboxParams(params);\n\t\t\tif (operation.action === \"send\") {\n\t\t\t\tconst message = await ownedRegistry.sendMessage(\n\t\t\t\t\toperation.agentId,\n\t\t\t\t\toperation.message,\n\t\t\t\t\toperation.senderId,\n\t\t\t\t\toperation.deduplicationKey,\n\t\t\t\t);\n\t\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: `Queued ${message.id} for ${message.recipientId}.` }],\n\t\t\t\t\tdetails: { message },\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst messages = await ownedRegistry.readMessages(\n\t\t\t\toperation.agentId,\n\t\t\t\toperation.acknowledge,\n\t\t\t\toperation.limit,\n\t\t\t);\n\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\tconst summaries = messages.map((message) => ({\n\t\t\t\t...message,\n\t\t\t\tcontent: truncateUtf8(message.content, MAX_TOOL_MESSAGE_BYTES).text,\n\t\t\t}));\n\t\t\tconst text = summaries.length\n\t\t\t\t? summaries\n\t\t\t\t\t\t.map((message) => `${message.id} from ${message.senderId}: ${message.content}`)\n\t\t\t\t\t\t.join(\"\\n\")\n\t\t\t\t: \"No unread messages.\";\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: truncateUtf8(text, DEFAULT_MAX_CONTEXT_BYTES).text }],\n\t\t\t\tdetails: { messages: summaries },\n\t\t\t};\n\t\t},\n\t});\n\n\treturn controller;\n}\n\nfunction normalizeContextMode(value: \"none\" | \"all\" | \"summary\" | number | undefined): ContextMode {\n\tif (value === undefined) return \"none\";\n\tif (value === \"none\" || value === \"all\" || value === \"summary\") return value;\n\treturn Math.max(1, Math.floor(value));\n}\n\nexport function resolveSpawnContextMode(\n\tvalue: \"none\" | \"all\" | \"summary\" | number | undefined,\n\tcontextEntryIds: readonly string[] | undefined,\n): ContextMode {\n\tif (value === undefined && contextEntryIds !== undefined) return \"all\";\n\treturn normalizeContextMode(value);\n}\n\nasync function cleanupClosedWorkspaces(\n\tregistry: AgentRegistry,\n\tisolatedAgents: Map<string, string>,\n\tworkspaceManager: WorkspaceManager,\n): Promise<void> {\n\tfor (const [agentId, owner] of [...isolatedAgents]) {\n\t\tif (registry.get(agentId)?.state !== \"closed\") continue;\n\t\tawait workspaceManager.cleanup(owner);\n\t\tisolatedAgents.delete(agentId);\n\t}\n}\n\nfunction appendAgentCatalog(baseDescription: string, catalog: string): string {\n\treturn catalog ? `${baseDescription}\\n\\n${catalog}` : baseDescription;\n}\n\nfunction result(agent: ManagedAgent, text: string) {\n\treturn {\n\t\tcontent: [{ type: \"text\" as const, text }],\n\t\tdetails: { agent: summarizeStatefulAgent(agent) },\n\t};\n}\n\nfunction normalizeRuntimeThinkingLevel(value: string): ParentRuntimeSnapshot[\"thinkingLevel\"] {\n\treturn isThinkingLevel(value) ? value : \"off\";\n}\n", "import type { CompletionDelivery } from \"./agents/types.js\";\n\nexport function createSpawnPromptGuidelines(\n\tcompletionDelivery: CompletionDelivery,\n\tblockingEnabled = true,\n): string[] {\n\tconst deliveryGuidance =\n\t\tcompletionDelivery === \"auto-resume\"\n\t\t\t? blockingEnabled\n\t\t\t\t? \"With subagent_spawn completion delivery set to auto-resume, prefer one subagent_spawn for broad asynchronous research or consequential independent review that covers related branches even when the final answer depends on its result; do not choose blocking parallel fan-out merely to keep delegation in the same turn.\"\n\t\t\t\t: \"With subagent_spawn completion delivery set to auto-resume, prefer one subagent_spawn for broad asynchronous research or consequential independent review that covers related branches even when the final answer depends on its result.\"\n\t\t\t: blockingEnabled\n\t\t\t\t? \"With subagent_spawn completion delivery set to next-turn (the default), prefer one subagent_spawn for broad asynchronous research or consequential independent review only when the current response does not depend on its result; use the blocking subagent when the final answer depends on the detached result.\"\n\t\t\t\t: \"With subagent_spawn completion delivery set to next-turn (the default), use subagent_spawn only when the current response does not depend on its result; complete final-answer-dependent work directly because an idle root is not awakened.\";\n\treturn [\n\t\t\"Do not use subagent_spawn for simple or critical-path work that the main agent can perform directly. The main agent retains overall planning, immediate critical-path work, integration, final verification, and the final answer.\",\n\t\t\"Before one ordinary subagent_spawn, identify concrete useful non-overlapping main-agent work you can start immediately and a supported completion integration path. If none exists, perform the task directly instead of calling subagent_spawn.\",\n\t\t\"Give subagent_spawn a concise unique taskName using lowercase letters, digits, and underscores so the retained agent has a stable canonical task path.\",\n\t\t\"Set subagent_spawn thinkingLevel to the lowest sufficient thinking level for the delegated task: use off or minimal for extraction, formatting, or mechanical work; low for straightforward bounded work; medium for ordinary multi-step research or implementation; high for complex debugging, design, review, or cross-file analysis; xhigh for highly ambiguous, cross-system, or high-risk analysis; and max only for the hardest tasks when quality clearly outweighs latency and cost. Omit subagent_spawn thinkingLevel only to preserve the agent or child default.\",\n\t\t\"Set subagent_spawn timeoutMs to the shortest realistic work deadline for the task difficulty; use idleTimeoutMs for stalled work and maxTurns or maxToolCalls to stop repeated work without progress. Split oversized tasks instead of extending budgets merely to compensate for broad scope. Omit these fields only to preserve the retained agent or configured defaults.\",\n\t\tdeliveryGuidance,\n\t\t\"Keep ordinary review in the main agent with a review skill and deterministic checks; use subagent_spawn for detached review only when consequential independent verification has concrete parallel value.\",\n\t\t\"Use a single subagent_spawn for a bounded implementation slice with clear ownership only when it can run beside the identified main-agent work.\",\n\t\t\"Use a single subagent_spawn without concurrent main-agent work only for an explicit user-requested specialist model, tool profile, or isolation boundary.\",\n\t\t...(blockingEnabled\n\t\t\t? [\n\t\t\t\t\t\"Use the blocking subagent instead of subagent_spawn when synchronous output is required before the main agent can continue and waiting is intentional; queued steering cannot be processed until that blocking call returns.\",\n\t\t\t\t\t\"When subagent_spawn fits the completion-delivery policy, do not choose a blocking parallel subagent merely to keep delegation in the same turn.\",\n\t\t\t\t]\n\t\t\t: []),\n\t\t\"Add another subagent_spawn only for truly independent work with safe workspace concurrency and disjoint write ownership; shared workspaces permit concurrent writes by default, so use workspaceMode worktree when repository isolation is required. The main agent still owns integration.\",\n\t\t\"After subagent_spawn returns, immediately continue the identified local task; do not merely announce the spawn, wait, poll, or end the response while useful local work remains.\",\n\t\t'Consume and synthesize available subagent_spawn completion messages; use subagent_manage with action \"interrupt\" or \"close\" for agents that are no longer needed.',\n\t\t'Completion from subagent_spawn is delivered automatically. Do not poll with subagent_inspect or subagent_mailbox action \"read\", repeatedly check progress, or duplicate the delegated work.',\n\t];\n}\n", "import type { AgentToolResult } from \"@earendil-works/pi-agent-core\";\nimport type { Theme, ToolRenderResultOptions } from \"@earendil-works/pi-coding-agent\";\nimport { Text } from \"@earendil-works/pi-tui\";\nimport {\n\tCOLLAPSED_LIST_LIMIT,\n\texpansionHint,\n\ttype RenderStatus,\n\trecordList,\n\trecordValue,\n\trenderFallbackResult,\n\tsafeBlock,\n\tsafeLine,\n\tstatusBadge,\n\tstringValue,\n\ttype ToolRendererContext,\n\ttextResult,\n\ttoolHeader,\n} from \"./render-common.js\";\n\nexport type StatefulRenderTool = \"spawn\" | \"send\" | \"manage\" | \"mailbox\";\n\nexport function createStatefulToolRenderer(tool: StatefulRenderTool) {\n\treturn {\n\t\trenderCall(args: unknown, theme: Theme) {\n\t\t\treturn renderStatefulCall(tool, recordValue(args) ?? {}, theme);\n\t\t},\n\t\trenderResult(\n\t\t\tresult: AgentToolResult<unknown>,\n\t\t\toptions: ToolRenderResultOptions,\n\t\t\ttheme: Theme,\n\t\t\tcontext: ToolRendererContext<unknown>,\n\t\t) {\n\t\t\treturn renderStatefulResult(tool, result, options, theme, context);\n\t\t},\n\t};\n}\n\nfunction renderStatefulCall(tool: StatefulRenderTool, args: Record<string, unknown>, theme: Theme) {\n\tif (tool === \"spawn\") {\n\t\tconst metadata = [\n\t\t\t`[${safeLine(args.agentScope, \"user\", 64)}]`,\n\t\t\t\"detached\",\n\t\t\tsafeLine(args.workspaceMode, \"shared\", 64),\n\t\t];\n\t\tif (typeof args.thinkingLevel === \"string\") metadata.push(`thinking:${args.thinkingLevel}`);\n\t\tif (typeof args.timeoutMs === \"number\") metadata.push(`timeout:${args.timeoutMs}ms`);\n\t\tif (typeof args.idleTimeoutMs === \"number\") metadata.push(`idle:${args.idleTimeoutMs}ms`);\n\t\tif (typeof args.maxTurns === \"number\") metadata.push(`turns:${args.maxTurns}`);\n\t\tif (typeof args.maxToolCalls === \"number\") metadata.push(`tools:${args.maxToolCalls}`);\n\t\treturn new Text(\n\t\t\t[\n\t\t\t\ttoolHeader(theme, \"subagent_spawn\", args.agent, metadata),\n\t\t\t\t` ${theme.fg(\"dim\", safeLine(args.task, \"...\", 2 * 1024))}`,\n\t\t\t].join(\"\\n\"),\n\t\t\t0,\n\t\t\t0,\n\t\t);\n\t}\n\tif (tool === \"send\") {\n\t\tconst metadata = [\"follow-up\"];\n\t\tif (typeof args.timeoutMs === \"number\") metadata.push(`timeout:${args.timeoutMs}ms`);\n\t\tif (typeof args.idleTimeoutMs === \"number\") metadata.push(`idle:${args.idleTimeoutMs}ms`);\n\t\tif (typeof args.maxTurns === \"number\") metadata.push(`turns:${args.maxTurns}`);\n\t\tif (typeof args.maxToolCalls === \"number\") metadata.push(`tools:${args.maxToolCalls}`);\n\t\treturn new Text(\n\t\t\t[\n\t\t\t\ttoolHeader(theme, \"subagent_send\", args.agentId, metadata),\n\t\t\t\t` ${theme.fg(\"dim\", safeLine(args.task, \"...\", 2 * 1024))}`,\n\t\t\t].join(\"\\n\"),\n\t\t\t0,\n\t\t\t0,\n\t\t);\n\t}\n\tif (tool === \"manage\") {\n\t\tconst metadata: string[] = [];\n\t\tif (typeof args.agentId === \"string\") metadata.push(`id:${safeLine(args.agentId, \"\", 256)}`);\n\t\tif (args.subtree === true) metadata.push(\"subtree\");\n\t\treturn new Text(toolHeader(theme, \"subagent_manage\", args.action, metadata), 0, 0);\n\t}\n\tconst metadata = [`id:${safeLine(args.agentId, \"...\", 256)}`];\n\tif (args.action === \"read\") {\n\t\tmetadata.push(args.acknowledge === false ? \"leave unread\" : \"acknowledge\");\n\t}\n\tconst lines = [toolHeader(theme, \"subagent_mailbox\", args.action, metadata)];\n\tif (args.action === \"send\") {\n\t\tlines.push(` ${theme.fg(\"dim\", safeLine(args.message, \"...\", 2 * 1024))}`);\n\t}\n\treturn new Text(lines.join(\"\\n\"), 0, 0);\n}\n\nfunction renderStatefulResult(\n\ttool: StatefulRenderTool,\n\tresult: AgentToolResult<unknown>,\n\toptions: ToolRenderResultOptions,\n\ttheme: Theme,\n\tcontext: ToolRendererContext<unknown>,\n) {\n\tconst details = recordValue(result.details);\n\tconst args = recordValue(context.args) ?? {};\n\tif (!details) return renderFallbackResult(result, options, theme, context.isError);\n\tif (tool === \"spawn\" || tool === \"send\") {\n\t\tconst agent = recordValue(details.agent);\n\t\tif (!agent) return renderFallbackResult(result, options, theme, context.isError);\n\t\treturn new Text(renderAgentResult(agent, result, options.expanded, theme), 0, 0);\n\t}\n\tif (tool === \"manage\") {\n\t\treturn new Text(renderManageResult(args, details, result, options.expanded, theme), 0, 0);\n\t}\n\treturn new Text(renderMailboxResult(args, details, options.expanded, theme), 0, 0);\n}\n\nfunction renderAgentResult(\n\tagent: Record<string, unknown>,\n\tresult: AgentToolResult<unknown>,\n\texpanded: boolean,\n\ttheme: Theme,\n): string {\n\tconst state = safeLine(agent.state, \"unknown\", 128);\n\tconst lines = [\n\t\t`${statusBadge(theme, lifecycleStatus(state))} \u00B7 ${theme.fg(\"accent\", safeLine(agent.id, \"agent\", 256))} \u00B7 ${theme.fg(\"toolOutput\", safeLine(agent.agent, \"subagent\", 256))} \u00B7 ${theme.fg(\"muted\", state)}`,\n\t];\n\tconst thinking = stringValue(agent.thinkingLevel);\n\tconst timeout =\n\t\ttypeof agent.currentTimeoutMs === \"number\"\n\t\t\t? agent.currentTimeoutMs\n\t\t\t: typeof agent.timeoutMs === \"number\"\n\t\t\t\t? agent.timeoutMs\n\t\t\t\t: 0;\n\tconst idleTimeout =\n\t\ttypeof agent.currentIdleTimeoutMs === \"number\"\n\t\t\t? agent.currentIdleTimeoutMs\n\t\t\t: typeof agent.idleTimeoutMs === \"number\"\n\t\t\t\t? agent.idleTimeoutMs\n\t\t\t\t: 0;\n\tconst maxTurns =\n\t\ttypeof agent.currentMaxTurns === \"number\"\n\t\t\t? agent.currentMaxTurns\n\t\t\t: typeof agent.maxTurns === \"number\"\n\t\t\t\t? agent.maxTurns\n\t\t\t\t: 0;\n\tconst maxToolCalls =\n\t\ttypeof agent.currentMaxToolCalls === \"number\"\n\t\t\t? agent.currentMaxToolCalls\n\t\t\t: typeof agent.maxToolCalls === \"number\"\n\t\t\t\t? agent.maxToolCalls\n\t\t\t\t: 0;\n\tconst unread = typeof agent.unreadMessages === \"number\" ? agent.unreadMessages : 0;\n\tif (thinking || timeout || idleTimeout || maxTurns || maxToolCalls || unread > 0) {\n\t\tlines.push(\n\t\t\ttheme.fg(\n\t\t\t\t\"dim\",\n\t\t\t\t[\n\t\t\t\t\tthinking && `thinking:${safeLine(thinking, \"\", 128)}`,\n\t\t\t\t\ttimeout && `timeout:${timeout}ms`,\n\t\t\t\t\tidleTimeout && `idle:${idleTimeout}ms`,\n\t\t\t\t\tmaxTurns && `turns:${maxTurns}`,\n\t\t\t\t\tmaxToolCalls && `tools:${maxToolCalls}`,\n\t\t\t\t\tunread > 0 && `unread:${unread}`,\n\t\t\t\t]\n\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t.join(\" \u00B7 \"),\n\t\t\t),\n\t\t);\n\t}\n\tif (expanded) {\n\t\tconst task = safeBlock(agent.currentTask, \"\", 2 * 1024).trim();\n\t\tconst error = safeBlock(agent.error, \"\", 2 * 1024).trim();\n\t\tif (task) lines.push(theme.fg(\"dim\", `task: ${task}`));\n\t\tif (error) lines.push(theme.fg(\"error\", `error: ${error}`));\n\t\tconst content = safeBlock(textResult(result), \"\", 8 * 1024).trim();\n\t\tif (content) lines.push(theme.fg(\"toolOutput\", content));\n\t} else lines.push(expansionHint());\n\treturn lines.join(\"\\n\");\n}\n\nfunction renderManageResult(\n\targs: Record<string, unknown>,\n\tdetails: Record<string, unknown>,\n\tresult: AgentToolResult<unknown>,\n\texpanded: boolean,\n\ttheme: Theme,\n): string {\n\tconst action = safeLine(args.action, \"action\", 128);\n\tconst agents = recordList(details.agents);\n\tconst primary = recordValue(details.agent);\n\tif (action === \"list\") {\n\t\tconst lines = [\n\t\t\t`${statusBadge(theme, \"completed\")} \u00B7 list \u00B7 ${agents.length} agent${agents.length === 1 ? \"\" : \"s\"}`,\n\t\t];\n\t\tconst selected = expanded ? agents : agents.slice(0, COLLAPSED_LIST_LIMIT);\n\t\tfor (const agent of selected) lines.push(formatAgentLine(agent, theme, expanded));\n\t\tif (agents.length === 0) lines.push(theme.fg(\"muted\", \"(no retained agents)\"));\n\t\tif (agents.length > selected.length)\n\t\t\tlines.push(theme.fg(\"muted\", `\u2026 ${agents.length - selected.length} omitted`));\n\t\tif (!expanded && agents.length > 0) lines.push(expansionHint());\n\t\treturn lines.join(\"\\n\");\n\t}\n\n\tconst subtree = args.subtree === true;\n\tconst affected = subtree ? agents.length : agents.length > 0 ? agents.length : primary ? 1 : 0;\n\tconst status: RenderStatus = action === \"interrupt\" ? \"interrupted\" : \"closed\";\n\tconst lines = [\n\t\t`${statusBadge(theme, status)} \u00B7 ${affected} agent${affected === 1 ? \"\" : \"s\"}${subtree ? theme.fg(\"muted\", \" \u00B7 subtree\") : \"\"}`,\n\t];\n\tconst selected = agents.length > 0 ? agents : !subtree && primary ? [primary] : [];\n\tfor (const agent of expanded ? selected : selected.slice(0, COLLAPSED_LIST_LIMIT)) {\n\t\tlines.push(formatAgentLine(agent, theme, expanded));\n\t}\n\tif (selected.length === 0) {\n\t\tconst content = safeBlock(textResult(result), \"(no output)\", 8 * 1024);\n\t\tlines.push(theme.fg(\"toolOutput\", content));\n\t}\n\tif (!expanded && selected.length > 0) lines.push(expansionHint());\n\treturn lines.join(\"\\n\");\n}\n\nfunction renderMailboxResult(\n\targs: Record<string, unknown>,\n\tdetails: Record<string, unknown>,\n\texpanded: boolean,\n\ttheme: Theme,\n): string {\n\tconst action = safeLine(args.action, \"action\", 64);\n\tif (action === \"send\") {\n\t\tconst message = recordValue(details.message);\n\t\tif (!message) return `${statusBadge(theme, \"completed\")} \u00B7 Queued message`;\n\t\tconst lines = [\n\t\t\t`${theme.fg(\"success\", \"\u2713\")} ${theme.fg(\"success\", \"Queued\")} \u00B7 ${theme.fg(\"accent\", safeLine(message.id, \"message\", 256))} \u00B7 ${theme.fg(\"muted\", `to ${safeLine(message.recipientId, safeLine(args.agentId), 256)}`)}`,\n\t\t];\n\t\tif (expanded) {\n\t\t\tlines.push(theme.fg(\"toolOutput\", safeBlock(message.content, \"(empty message)\", 2 * 1024)));\n\t\t} else lines.push(expansionHint());\n\t\treturn lines.join(\"\\n\");\n\t}\n\n\tconst messages = recordList(details.messages);\n\tconst acknowledged = args.acknowledge === false ? \"left unread\" : \"acknowledged\";\n\tconst lines = [\n\t\t`${statusBadge(theme, \"completed\")} \u00B7 ${messages.length} message${messages.length === 1 ? \"\" : \"s\"} \u00B7 ${acknowledged}`,\n\t];\n\tconst selected = expanded ? messages : messages.slice(0, COLLAPSED_LIST_LIMIT);\n\tfor (const message of selected) {\n\t\tconst content = expanded\n\t\t\t? safeBlock(message.content, \"(empty message)\", 2 * 1024)\n\t\t\t: safeLine(message.content, \"(empty message)\", 512);\n\t\tlines.push(\n\t\t\t`${theme.fg(\"muted\", \"\u2022 \")}${theme.fg(\"accent\", safeLine(message.id, \"message\", 256))} ${theme.fg(\"muted\", `from ${safeLine(message.senderId, \"unknown\", 256)}: `)}${theme.fg(\"toolOutput\", content)}`,\n\t\t);\n\t}\n\tif (messages.length === 0) lines.push(theme.fg(\"muted\", \"(no unread messages)\"));\n\tif (messages.length > selected.length)\n\t\tlines.push(theme.fg(\"muted\", `\u2026 ${messages.length - selected.length} omitted`));\n\tif (!expanded && messages.length > 0) lines.push(expansionHint());\n\treturn lines.join(\"\\n\");\n}\n\nfunction formatAgentLine(agent: Record<string, unknown>, theme: Theme, expanded: boolean): string {\n\tconst unread = typeof agent.unreadMessages === \"number\" ? agent.unreadMessages : 0;\n\tconst lines = [\n\t\t`${theme.fg(\"muted\", \"\u2022 \")}${theme.fg(\"accent\", safeLine(agent.id, \"agent\", 256))} ${theme.fg(\"toolOutput\", safeLine(agent.agent, \"subagent\", 256))} ${theme.fg(\"muted\", safeLine(agent.state, \"unknown\", 128))}${unread > 0 ? theme.fg(\"warning\", ` \u00B7 unread:${unread}`) : \"\"}`,\n\t];\n\tif (expanded) {\n\t\tconst task = safeBlock(agent.currentTask, \"\", 2 * 1024).trim();\n\t\tconst error = safeBlock(agent.error, \"\", 2 * 1024).trim();\n\t\tif (task) lines.push(` ${theme.fg(\"dim\", `task: ${task}`)}`);\n\t\tif (error) lines.push(` ${theme.fg(\"error\", `error: ${error}`)}`);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nfunction lifecycleStatus(state: string): RenderStatus {\n\tswitch (state) {\n\t\tcase \"starting\":\n\t\t\treturn \"starting\";\n\t\tcase \"running\":\n\t\t\treturn \"running\";\n\t\tcase \"idle\":\n\t\t\treturn \"idle\";\n\t\tcase \"blocked\":\n\t\tcase \"needs-input\":\n\t\tcase \"abstained\":\n\t\tcase \"stale\":\n\t\t\treturn \"warning\";\n\t\tcase \"failed\":\n\t\t\treturn \"failed\";\n\t\tcase \"interrupted\":\n\t\t\treturn \"interrupted\";\n\t\tcase \"closed\":\n\t\t\treturn \"closed\";\n\t\tdefault:\n\t\t\treturn \"completed\";\n\t}\n}\n", "import { StringEnum } from \"@earendil-works/pi-ai\";\nimport { Type } from \"typebox\";\n\nconst MANAGE_ACTIONS = [\"interrupt\", \"close\"] as const;\nconst MAILBOX_ACTIONS = [\"send\", \"read\"] as const;\nconst MAX_MAILBOX_MESSAGE_LENGTH = 16 * 1024;\n\nexport const ManageParamsSchema = Type.Object(\n\t{\n\t\taction: StringEnum(MANAGE_ACTIONS, {\n\t\t\tdescription: \"Interrupt active work or close an agent and release its resources.\",\n\t\t}),\n\t\tagentId: Type.Optional(\n\t\t\tType.String({\n\t\t\t\tminLength: 1,\n\t\t\t\tdescription: \"Required agent ID or canonical task path for interrupt and close.\",\n\t\t\t}),\n\t\t),\n\t\tsubtree: Type.Optional(\n\t\t\tType.Boolean({\n\t\t\t\tdefault: false,\n\t\t\t\tdescription: \"Interrupt or close the target and all descendants child-first.\",\n\t\t\t}),\n\t\t),\n\t},\n\t{ additionalProperties: false },\n);\n\nexport const MailboxParamsSchema = Type.Object(\n\t{\n\t\taction: StringEnum(MAILBOX_ACTIONS, {\n\t\t\tdescription: \"Use send for queue-only delivery or read to inspect unread mailbox messages.\",\n\t\t}),\n\t\tagentId: Type.String({\n\t\t\tminLength: 1,\n\t\t\tdescription: \"Mailbox owner or recipient agent ID or canonical task path.\",\n\t\t}),\n\t\tmessage: Type.Optional(\n\t\t\tType.String({\n\t\t\t\tminLength: 1,\n\t\t\t\tmaxLength: MAX_MAILBOX_MESSAGE_LENGTH,\n\t\t\t\tdescription: \"Message content required by send; sending does not start a turn.\",\n\t\t\t}),\n\t\t),\n\t\tsenderId: Type.Optional(\n\t\t\tType.String({ description: \"Optional sender agent ID or canonical task path.\" }),\n\t\t),\n\t\tdeduplicationKey: Type.Optional(\n\t\t\tType.String({ maxLength: 256, description: \"Optional idempotency key for send.\" }),\n\t\t),\n\t\tacknowledge: Type.Optional(\n\t\t\tType.Boolean({ default: true, description: \"Mark returned read messages as acknowledged.\" }),\n\t\t),\n\t\tlimit: Type.Optional(\n\t\t\tType.Number({ minimum: 1, maximum: 20, default: 20, description: \"Maximum messages.\" }),\n\t\t),\n\t},\n\t{ additionalProperties: false },\n);\n\nexport type ValidatedManageParams = {\n\taction: \"interrupt\" | \"close\";\n\tagentId: string;\n\tsubtree?: boolean;\n};\n\nexport type ValidatedMailboxParams =\n\t| {\n\t\t\taction: \"send\";\n\t\t\tagentId: string;\n\t\t\tmessage: string;\n\t\t\tsenderId?: string;\n\t\t\tdeduplicationKey?: string;\n\t }\n\t| { action: \"read\"; agentId: string; acknowledge?: boolean; limit?: number };\n\nexport function validateManageParams(params: unknown): ValidatedManageParams {\n\tconst values = parameterRecord(params, \"subagent_manage\");\n\tassertKnownKeys(\"subagent_manage\", values, [\"action\", \"agentId\", \"subtree\"]);\n\tconst action = values.action;\n\tif (action === \"list\") {\n\t\tthrow new Error(\n\t\t\t'subagent_manage no longer supports \"list\"; use subagent_inspect action \"list_runs\"',\n\t\t);\n\t}\n\tif (\n\t\ttypeof action !== \"string\" ||\n\t\t!MANAGE_ACTIONS.includes(action as (typeof MANAGE_ACTIONS)[number])\n\t) {\n\t\tthrow new Error(`subagent_manage action must be one of: ${MANAGE_ACTIONS.join(\", \")}`);\n\t}\n\tassertRequiredString(\"subagent_manage\", action, values, \"agentId\");\n\tassertOptionalBoolean(\"subagent_manage\", action, values, \"subtree\");\n\treturn {\n\t\taction,\n\t\tagentId: values.agentId,\n\t\t...(values.subtree === undefined ? {} : { subtree: values.subtree }),\n\t} as ValidatedManageParams;\n}\n\nexport function validateMailboxParams(params: unknown): ValidatedMailboxParams {\n\tconst values = parameterRecord(params, \"subagent_mailbox\");\n\tassertKnownKeys(\"subagent_mailbox\", values, [\n\t\t\"action\",\n\t\t\"agentId\",\n\t\t\"message\",\n\t\t\"senderId\",\n\t\t\"deduplicationKey\",\n\t\t\"acknowledge\",\n\t\t\"limit\",\n\t]);\n\tconst action = values.action;\n\tif (\n\t\ttypeof action !== \"string\" ||\n\t\t!MAILBOX_ACTIONS.includes(action as (typeof MAILBOX_ACTIONS)[number])\n\t) {\n\t\tthrow new Error(`subagent_mailbox action must be one of: ${MAILBOX_ACTIONS.join(\", \")}`);\n\t}\n\tif (action === \"send\") {\n\t\tassertRequiredString(\"subagent_mailbox\", action, values, \"agentId\");\n\t\tassertRequiredString(\"subagent_mailbox\", action, values, \"message\");\n\t\tconst message = values.message as string;\n\t\tif (message.length > MAX_MAILBOX_MESSAGE_LENGTH) {\n\t\t\tthrow new Error(\n\t\t\t\t`subagent_mailbox action \"send\" requires message at most ${MAX_MAILBOX_MESSAGE_LENGTH} characters`,\n\t\t\t);\n\t\t}\n\t\tassertOptionalString(\"subagent_mailbox\", action, values, \"senderId\");\n\t\tassertOptionalString(\"subagent_mailbox\", action, values, \"deduplicationKey\");\n\t\tif (typeof values.deduplicationKey === \"string\" && values.deduplicationKey.length > 256) {\n\t\t\tthrow new Error(\n\t\t\t\t'subagent_mailbox action \"send\" requires deduplicationKey at most 256 characters',\n\t\t\t);\n\t\t}\n\t\treturn {\n\t\t\taction,\n\t\t\tagentId: values.agentId,\n\t\t\tmessage,\n\t\t\t...(values.senderId === undefined ? {} : { senderId: values.senderId }),\n\t\t\t...(values.deduplicationKey === undefined\n\t\t\t\t? {}\n\t\t\t\t: { deduplicationKey: values.deduplicationKey }),\n\t\t} as ValidatedMailboxParams;\n\t}\n\tassertRequiredString(\"subagent_mailbox\", action, values, \"agentId\");\n\tassertOptionalBoolean(\"subagent_mailbox\", action, values, \"acknowledge\");\n\tif (\n\t\tvalues.limit !== undefined &&\n\t\t(typeof values.limit !== \"number\" ||\n\t\t\t!Number.isFinite(values.limit) ||\n\t\t\tvalues.limit < 1 ||\n\t\t\tvalues.limit > 20)\n\t) {\n\t\tthrow new Error('subagent_mailbox action \"read\" requires limit between 1 and 20');\n\t}\n\treturn {\n\t\taction,\n\t\tagentId: values.agentId,\n\t\t...(values.acknowledge === undefined ? {} : { acknowledge: values.acknowledge }),\n\t\t...(values.limit === undefined ? {} : { limit: values.limit }),\n\t} as ValidatedMailboxParams;\n}\n\nfunction parameterRecord(params: unknown, toolName: string): Record<string, unknown> {\n\tif (!params || typeof params !== \"object\" || Array.isArray(params)) {\n\t\tthrow new Error(`${toolName} parameters must be an object`);\n\t}\n\treturn params as Record<string, unknown>;\n}\n\nfunction assertKnownKeys(\n\ttoolName: string,\n\tvalues: Record<string, unknown>,\n\tallowed: readonly string[],\n): void {\n\tconst unexpected = Object.keys(values).find(\n\t\t(key) => values[key] !== undefined && !allowed.includes(key),\n\t);\n\tif (unexpected) throw new Error(`${toolName} does not accept ${unexpected}`);\n}\n\nfunction assertRequiredString(\n\ttoolName: string,\n\taction: string,\n\tvalues: Record<string, unknown>,\n\tkey: string,\n): void {\n\tconst value = values[key];\n\tif (value === undefined) throw new Error(`${toolName} action \"${action}\" requires ${key}`);\n\tif (typeof value !== \"string\" || value.length === 0) {\n\t\tthrow new Error(`${toolName} action \"${action}\" requires ${key} to be a non-empty string`);\n\t}\n}\n\nfunction assertOptionalString(\n\ttoolName: string,\n\taction: string,\n\tvalues: Record<string, unknown>,\n\tkey: string,\n): void {\n\tif (values[key] !== undefined && typeof values[key] !== \"string\") {\n\t\tthrow new Error(`${toolName} action \"${action}\" requires ${key} to be a string`);\n\t}\n}\n\nfunction assertOptionalBoolean(\n\ttoolName: string,\n\taction: string,\n\tvalues: Record<string, unknown>,\n\tkey: string,\n): void {\n\tif (values[key] !== undefined && typeof values[key] !== \"boolean\") {\n\t\tthrow new Error(`${toolName} action \"${action}\" requires ${key} to be a boolean`);\n\t}\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["StringEnum", "Type", "result", "metadata", "lines", "selected", "Type", "StringEnum", "agent", "agentId"]
7
+ }
@@ -0,0 +1,63 @@
1
+ // @generated by scripts/build-runtime.mjs; do not edit.
2
+ // @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader.
3
+ import {
4
+ formatTimeoutCheckpoint
5
+ } from "./chunk-RTCVYIZA.js";
6
+ import {
7
+ appendResultInstruction
8
+ } from "./chunk-RSUXZD6S.js";
9
+ import {
10
+ DEFAULT_MAX_CONTEXT_BYTES,
11
+ redactPrivateText,
12
+ truncateUtf8
13
+ } from "./chunk-H3FP6DLR.js";
14
+
15
+ // src/timeout-finalization.ts
16
+ var DEFAULT_TIMEOUT_FINALIZATION_MS = 45e3;
17
+ function resolveTimeoutFinalizationMs(workTimeoutMs, override) {
18
+ const requested = override ?? Math.min(workTimeoutMs, DEFAULT_TIMEOUT_FINALIZATION_MS);
19
+ if (!Number.isFinite(requested) || requested < 1) {
20
+ throw new Error("Timeout finalization deadline must be a positive finite number");
21
+ }
22
+ return Math.min(Math.floor(requested), DEFAULT_TIMEOUT_FINALIZATION_MS);
23
+ }
24
+ function buildTimeoutFinalizationPrompt(evidence, maxBytes = DEFAULT_MAX_CONTEXT_BYTES) {
25
+ const activity = (evidence.recentActivity ?? []).slice(-10).map(
26
+ (item) => item.type === "text" ? `- Assistant note: ${redactPrivateText(item.text)}` : `- Tool activity: ${redactPrivateText(item.name)}`
27
+ ).join("\n");
28
+ const prompt = [
29
+ terminationHeading(evidence.terminationReason),
30
+ "Do not continue investigating, call tools, modify files, or retry the original task.",
31
+ "Return a concise summary of only verified findings and completed evidence already available.",
32
+ "Explicitly label unfinished or unverified areas.",
33
+ `Original task:
34
+ ${redactPrivateText(evidence.task)}`,
35
+ evidence.partialOutput ? `Partial assistant output:
36
+ ${redactPrivateText(evidence.partialOutput)}` : "Partial assistant output: (none)",
37
+ evidence.checkpoint ? `Deterministic progress checkpoint:
38
+ ${formatTimeoutCheckpoint(evidence.checkpoint)}` : void 0,
39
+ activity ? `Recent bounded activity:
40
+ ${activity}` : "Recent bounded activity: (none)"
41
+ ].filter((value) => Boolean(value)).join("\n\n");
42
+ return truncateUtf8(appendResultInstruction(prompt, evidence.resultFormat, maxBytes), maxBytes).text;
43
+ }
44
+ function terminationHeading(reason) {
45
+ switch (reason) {
46
+ case "idle_timeout":
47
+ return "The idle deadline expired and the active work was aborted.";
48
+ case "turn_limit":
49
+ return "The assistant-turn budget was exhausted and the active work was aborted.";
50
+ case "tool_call_limit":
51
+ return "The tool-call budget was exhausted and the active work was aborted.";
52
+ case "orchestration_timeout":
53
+ return "The orchestration deadline expired and the active work was aborted.";
54
+ default:
55
+ return "Work deadline expired and the active work was aborted.";
56
+ }
57
+ }
58
+
59
+ export {
60
+ resolveTimeoutFinalizationMs,
61
+ buildTimeoutFinalizationPrompt
62
+ };
63
+ //# sourceMappingURL=chunk-G3RSMSXJ.ts.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/timeout-finalization.ts"],
4
+ "sourcesContent": ["import { redactPrivateText } from \"./context.js\";\nimport { DEFAULT_MAX_CONTEXT_BYTES, truncateUtf8 } from \"./limits.js\";\nimport { appendResultInstruction, type SubagentResultFormat } from \"./result-contract.js\";\nimport type { RecentActivityItem } from \"./runner.js\";\nimport {\n\tformatTimeoutCheckpoint,\n\ttype TimeoutCheckpoint,\n\ttype TurnTerminationReason,\n} from \"./timeout-checkpoint.js\";\n\nexport const DEFAULT_TIMEOUT_FINALIZATION_MS = 45_000;\n\nexport interface TimeoutFinalizationEvidence {\n\ttask: string;\n\tpartialOutput?: string;\n\trecentActivity?: readonly RecentActivityItem[];\n\tcheckpoint?: TimeoutCheckpoint;\n\tterminationReason?: TurnTerminationReason;\n\tresultFormat?: SubagentResultFormat;\n}\n\nexport function resolveTimeoutFinalizationMs(workTimeoutMs: number, override?: number): number {\n\tconst requested = override ?? Math.min(workTimeoutMs, DEFAULT_TIMEOUT_FINALIZATION_MS);\n\tif (!Number.isFinite(requested) || requested < 1) {\n\t\tthrow new Error(\"Timeout finalization deadline must be a positive finite number\");\n\t}\n\treturn Math.min(Math.floor(requested), DEFAULT_TIMEOUT_FINALIZATION_MS);\n}\n\nexport function buildTimeoutFinalizationPrompt(\n\tevidence: TimeoutFinalizationEvidence,\n\tmaxBytes = DEFAULT_MAX_CONTEXT_BYTES,\n): string {\n\tconst activity = (evidence.recentActivity ?? [])\n\t\t.slice(-10)\n\t\t.map((item) =>\n\t\t\titem.type === \"text\"\n\t\t\t\t? `- Assistant note: ${redactPrivateText(item.text)}`\n\t\t\t\t: `- Tool activity: ${redactPrivateText(item.name)}`,\n\t\t)\n\t\t.join(\"\\n\");\n\tconst prompt = [\n\t\tterminationHeading(evidence.terminationReason),\n\t\t\"Do not continue investigating, call tools, modify files, or retry the original task.\",\n\t\t\"Return a concise summary of only verified findings and completed evidence already available.\",\n\t\t\"Explicitly label unfinished or unverified areas.\",\n\t\t`Original task:\\n${redactPrivateText(evidence.task)}`,\n\t\tevidence.partialOutput\n\t\t\t? `Partial assistant output:\\n${redactPrivateText(evidence.partialOutput)}`\n\t\t\t: \"Partial assistant output: (none)\",\n\t\tevidence.checkpoint\n\t\t\t? `Deterministic progress checkpoint:\\n${formatTimeoutCheckpoint(evidence.checkpoint)}`\n\t\t\t: undefined,\n\t\tactivity ? `Recent bounded activity:\\n${activity}` : \"Recent bounded activity: (none)\",\n\t]\n\t\t.filter((value): value is string => Boolean(value))\n\t\t.join(\"\\n\\n\");\n\treturn truncateUtf8(appendResultInstruction(prompt, evidence.resultFormat, maxBytes), maxBytes)\n\t\t.text;\n}\n\nfunction terminationHeading(reason: TurnTerminationReason | undefined): string {\n\tswitch (reason) {\n\t\tcase \"idle_timeout\":\n\t\t\treturn \"The idle deadline expired and the active work was aborted.\";\n\t\tcase \"turn_limit\":\n\t\t\treturn \"The assistant-turn budget was exhausted and the active work was aborted.\";\n\t\tcase \"tool_call_limit\":\n\t\t\treturn \"The tool-call budget was exhausted and the active work was aborted.\";\n\t\tcase \"orchestration_timeout\":\n\t\t\treturn \"The orchestration deadline expired and the active work was aborted.\";\n\t\tdefault:\n\t\t\treturn \"Work deadline expired and the active work was aborted.\";\n\t}\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;AAUO,IAAM,kCAAkC;AAWxC,SAAS,6BAA6B,eAAuB,UAA2B;AAC9F,QAAM,YAAY,YAAY,KAAK,IAAI,eAAe,+BAA+B;AACrF,MAAI,CAAC,OAAO,SAAS,SAAS,KAAK,YAAY,GAAG;AACjD,UAAM,IAAI,MAAM,gEAAgE;AAAA,EACjF;AACA,SAAO,KAAK,IAAI,KAAK,MAAM,SAAS,GAAG,+BAA+B;AACvE;AAEO,SAAS,+BACf,UACA,WAAW,2BACF;AACT,QAAM,YAAY,SAAS,kBAAkB,CAAC,GAC5C,MAAM,GAAG,EACT;AAAA,IAAI,CAAC,SACL,KAAK,SAAS,SACX,qBAAqB,kBAAkB,KAAK,IAAI,CAAC,KACjD,oBAAoB,kBAAkB,KAAK,IAAI,CAAC;AAAA,EACpD,EACC,KAAK,IAAI;AACX,QAAM,SAAS;AAAA,IACd,mBAAmB,SAAS,iBAAiB;AAAA,IAC7C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAmB,kBAAkB,SAAS,IAAI,CAAC;AAAA,IACnD,SAAS,gBACN;AAAA,EAA8B,kBAAkB,SAAS,aAAa,CAAC,KACvE;AAAA,IACH,SAAS,aACN;AAAA,EAAuC,wBAAwB,SAAS,UAAU,CAAC,KACnF;AAAA,IACH,WAAW;AAAA,EAA6B,QAAQ,KAAK;AAAA,EACtD,EACE,OAAO,CAAC,UAA2B,QAAQ,KAAK,CAAC,EACjD,KAAK,MAAM;AACb,SAAO,aAAa,wBAAwB,QAAQ,SAAS,cAAc,QAAQ,GAAG,QAAQ,EAC5F;AACH;AAEA,SAAS,mBAAmB,QAAmD;AAC9E,UAAQ,QAAQ;AAAA,IACf,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,IACR;AACC,aAAO;AAAA,EACT;AACD;",
6
+ "names": []
7
+ }
@@ -0,0 +1,70 @@
1
+ // @generated by scripts/build-runtime.mjs; do not edit.
2
+ // @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader.
3
+
4
+ // src/prompt-resources.ts
5
+ import {
6
+ DefaultResourceLoader,
7
+ getAgentDir,
8
+ SettingsManager
9
+ } from "@earendil-works/pi-coding-agent";
10
+
11
+ // src/prompt-source-safety.ts
12
+ import * as fs from "node:fs";
13
+ import * as path from "node:path";
14
+ import { CONFIG_DIR_NAME } from "@earendil-works/pi-coding-agent";
15
+ function assertPiPromptSourcesAreReadableFiles(cwd, agentDir, projectTrusted, fileNames) {
16
+ for (const fileName of fileNames) {
17
+ const candidates = [
18
+ ...projectTrusted ? [path.join(cwd, CONFIG_DIR_NAME, fileName)] : [],
19
+ path.join(agentDir, fileName)
20
+ ];
21
+ for (const candidate of candidates) {
22
+ const status = promptSourceStatus(candidate);
23
+ if (status === "missing") continue;
24
+ if (status === "invalid") {
25
+ throw new Error(`Pi ${fileName} prompt source must be a readable regular file`);
26
+ }
27
+ break;
28
+ }
29
+ }
30
+ }
31
+ function promptSourceStatus(filePath) {
32
+ let descriptor;
33
+ try {
34
+ descriptor = fs.openSync(filePath, fs.constants.O_RDONLY | fs.constants.O_NONBLOCK);
35
+ return fs.fstatSync(descriptor).isFile() ? "regular" : "invalid";
36
+ } catch (error) {
37
+ const code = error && typeof error === "object" && "code" in error ? error.code : void 0;
38
+ return code === "ENOENT" || code === "ENOTDIR" ? "missing" : "invalid";
39
+ } finally {
40
+ if (descriptor !== void 0) fs.closeSync(descriptor);
41
+ }
42
+ }
43
+
44
+ // src/prompt-resources.ts
45
+ async function resolvePiPromptResources(cwd, projectTrusted, agentDir = getAgentDir()) {
46
+ assertPiPromptSourcesAreReadableFiles(cwd, agentDir, projectTrusted, [
47
+ "SYSTEM.md",
48
+ "APPEND_SYSTEM.md"
49
+ ]);
50
+ const loader = new DefaultResourceLoader({
51
+ cwd,
52
+ agentDir,
53
+ settingsManager: SettingsManager.inMemory({}, { projectTrusted }),
54
+ noExtensions: true,
55
+ noSkills: true,
56
+ noPromptTemplates: true,
57
+ noThemes: true,
58
+ noContextFiles: true
59
+ });
60
+ await loader.reload();
61
+ return {
62
+ systemPrompt: loader.getSystemPrompt(),
63
+ appendSystemPromptPaths: loader.getAppendSystemPromptSources().map((source) => source.path)
64
+ };
65
+ }
66
+
67
+ export {
68
+ resolvePiPromptResources
69
+ };
70
+ //# sourceMappingURL=chunk-G6VZTCFH.ts.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/prompt-resources.ts", "../../src/prompt-source-safety.ts"],
4
+ "sourcesContent": ["import {\n\tDefaultResourceLoader,\n\tgetAgentDir,\n\tSettingsManager,\n} from \"@earendil-works/pi-coding-agent\";\nimport { assertPiPromptSourcesAreReadableFiles } from \"./prompt-source-safety.js\";\n\nexport interface PiPromptResources {\n\tsystemPrompt?: string;\n\tappendSystemPromptPaths: string[];\n}\n\n/** Resolve Pi-owned prompt files without loading target packages, extensions, or settings. */\nexport async function resolvePiPromptResources(\n\tcwd: string,\n\tprojectTrusted: boolean,\n\tagentDir = getAgentDir(),\n): Promise<PiPromptResources> {\n\tassertPiPromptSourcesAreReadableFiles(cwd, agentDir, projectTrusted, [\n\t\t\"SYSTEM.md\",\n\t\t\"APPEND_SYSTEM.md\",\n\t]);\n\tconst loader = new DefaultResourceLoader({\n\t\tcwd,\n\t\tagentDir,\n\t\tsettingsManager: SettingsManager.inMemory({}, { projectTrusted }),\n\t\tnoExtensions: true,\n\t\tnoSkills: true,\n\t\tnoPromptTemplates: true,\n\t\tnoThemes: true,\n\t\tnoContextFiles: true,\n\t});\n\tawait loader.reload();\n\treturn {\n\t\tsystemPrompt: loader.getSystemPrompt(),\n\t\tappendSystemPromptPaths: loader.getAppendSystemPromptSources().map((source) => source.path),\n\t};\n}\n", "import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { CONFIG_DIR_NAME } from \"@earendil-works/pi-coding-agent\";\n\nexport type PiPromptFileName = \"SYSTEM.md\" | \"APPEND_SYSTEM.md\";\n\n/**\n * Prevent Pi's synchronous prompt loader from opening a selected directory, FIFO, socket, device,\n * or unreadable source. Candidate order mirrors core only as a preflight guard; core still resolves\n * and loads the prompt after this check.\n */\nexport function assertPiPromptSourcesAreReadableFiles(\n\tcwd: string,\n\tagentDir: string,\n\tprojectTrusted: boolean,\n\tfileNames: readonly PiPromptFileName[],\n): void {\n\tfor (const fileName of fileNames) {\n\t\tconst candidates = [\n\t\t\t...(projectTrusted ? [path.join(cwd, CONFIG_DIR_NAME, fileName)] : []),\n\t\t\tpath.join(agentDir, fileName),\n\t\t];\n\t\tfor (const candidate of candidates) {\n\t\t\tconst status = promptSourceStatus(candidate);\n\t\t\tif (status === \"missing\") continue;\n\t\t\tif (status === \"invalid\") {\n\t\t\t\tthrow new Error(`Pi ${fileName} prompt source must be a readable regular file`);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t}\n}\n\nfunction promptSourceStatus(filePath: string): \"missing\" | \"regular\" | \"invalid\" {\n\tlet descriptor: number | undefined;\n\ttry {\n\t\tdescriptor = fs.openSync(filePath, fs.constants.O_RDONLY | fs.constants.O_NONBLOCK);\n\t\treturn fs.fstatSync(descriptor).isFile() ? \"regular\" : \"invalid\";\n\t} catch (error) {\n\t\tconst code =\n\t\t\terror && typeof error === \"object\" && \"code\" in error\n\t\t\t\t? (error as { code?: unknown }).code\n\t\t\t\t: undefined;\n\t\treturn code === \"ENOENT\" || code === \"ENOTDIR\" ? \"missing\" : \"invalid\";\n\t} finally {\n\t\tif (descriptor !== undefined) fs.closeSync(descriptor);\n\t}\n}\n"],
5
+ "mappings": ";;;;AAAA;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,OACM;;;ACJP,YAAY,QAAQ;AACpB,YAAY,UAAU;AACtB,SAAS,uBAAuB;AASzB,SAAS,sCACf,KACA,UACA,gBACA,WACO;AACP,aAAW,YAAY,WAAW;AACjC,UAAM,aAAa;AAAA,MAClB,GAAI,iBAAiB,CAAM,UAAK,KAAK,iBAAiB,QAAQ,CAAC,IAAI,CAAC;AAAA,MAC/D,UAAK,UAAU,QAAQ;AAAA,IAC7B;AACA,eAAW,aAAa,YAAY;AACnC,YAAM,SAAS,mBAAmB,SAAS;AAC3C,UAAI,WAAW,UAAW;AAC1B,UAAI,WAAW,WAAW;AACzB,cAAM,IAAI,MAAM,MAAM,QAAQ,gDAAgD;AAAA,MAC/E;AACA;AAAA,IACD;AAAA,EACD;AACD;AAEA,SAAS,mBAAmB,UAAqD;AAChF,MAAI;AACJ,MAAI;AACH,iBAAgB,YAAS,UAAa,aAAU,WAAc,aAAU,UAAU;AAClF,WAAU,aAAU,UAAU,EAAE,OAAO,IAAI,YAAY;AAAA,EACxD,SAAS,OAAO;AACf,UAAM,OACL,SAAS,OAAO,UAAU,YAAY,UAAU,QAC5C,MAA6B,OAC9B;AACJ,WAAO,SAAS,YAAY,SAAS,YAAY,YAAY;AAAA,EAC9D,UAAE;AACD,QAAI,eAAe,OAAW,CAAG,aAAU,UAAU;AAAA,EACtD;AACD;;;ADlCA,eAAsB,yBACrB,KACA,gBACA,WAAW,YAAY,GACM;AAC7B,wCAAsC,KAAK,UAAU,gBAAgB;AAAA,IACpE;AAAA,IACA;AAAA,EACD,CAAC;AACD,QAAM,SAAS,IAAI,sBAAsB;AAAA,IACxC;AAAA,IACA;AAAA,IACA,iBAAiB,gBAAgB,SAAS,CAAC,GAAG,EAAE,eAAe,CAAC;AAAA,IAChE,cAAc;AAAA,IACd,UAAU;AAAA,IACV,mBAAmB;AAAA,IACnB,UAAU;AAAA,IACV,gBAAgB;AAAA,EACjB,CAAC;AACD,QAAM,OAAO,OAAO;AACpB,SAAO;AAAA,IACN,cAAc,OAAO,gBAAgB;AAAA,IACrC,yBAAyB,OAAO,6BAA6B,EAAE,IAAI,CAAC,WAAW,OAAO,IAAI;AAAA,EAC3F;AACD;",
6
+ "names": []
7
+ }
@@ -0,0 +1,160 @@
1
+ // @generated by scripts/build-runtime.mjs; do not edit.
2
+ // @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader.
3
+
4
+ // src/context.ts
5
+ import { createHash } from "node:crypto";
6
+
7
+ // src/limits.ts
8
+ import { DEFAULT_MAX_BYTES } from "@earendil-works/pi-coding-agent";
9
+ var DEFAULT_MAX_OUTPUT_BYTES = DEFAULT_MAX_BYTES;
10
+ var DEFAULT_MAX_STDERR_BYTES = 16 * 1024;
11
+ var DEFAULT_MAX_CONTEXT_BYTES = DEFAULT_MAX_BYTES;
12
+ var MAX_SUBAGENT_TIMEOUT_MS = 2147483647;
13
+ var DEFAULT_MAX_PARALLEL_TASKS = 8;
14
+ var MAX_CONFIGURABLE_PARALLEL_TASKS = 64;
15
+ var MAX_BLOCKING_PARALLEL_CONCURRENCY = 4;
16
+ var DEFAULT_MAX_MESSAGES = 200;
17
+ var MAX_TOOL_MESSAGE_BYTES = 2 * 1024;
18
+ var TRUNCATION_MARKER = "\n\u2026 [truncated by pi-subagents]";
19
+ var TAIL_TRUNCATION_MARKER = "\u2026 [truncated by pi-subagents]\n";
20
+ function normalizeByteLimit(maxBytes) {
21
+ if (maxBytes === Number.POSITIVE_INFINITY) return Number.MAX_SAFE_INTEGER;
22
+ if (!Number.isFinite(maxBytes)) return 0;
23
+ return Math.max(0, Math.floor(maxBytes));
24
+ }
25
+ function truncateUtf8(text, maxBytes) {
26
+ const limit = normalizeByteLimit(maxBytes);
27
+ const originalBytes = Buffer.byteLength(text, "utf8");
28
+ if (originalBytes <= limit) return { text, truncated: false, originalBytes };
29
+ if (limit === 0) return { text: "", truncated: true, originalBytes };
30
+ const marker = Buffer.from(TRUNCATION_MARKER, "utf8");
31
+ if (marker.length >= limit) {
32
+ return {
33
+ text: Buffer.from(text, "utf8").subarray(0, limit).toString("utf8").replace(/�+$/g, ""),
34
+ truncated: true,
35
+ originalBytes
36
+ };
37
+ }
38
+ const prefix = Buffer.from(text, "utf8").subarray(0, limit - marker.length).toString("utf8").replace(/�+$/g, "");
39
+ return { text: `${prefix}${TRUNCATION_MARKER}`, truncated: true, originalBytes };
40
+ }
41
+ function truncateUtf8Tail(text, maxBytes) {
42
+ const limit = normalizeByteLimit(maxBytes);
43
+ const bytes = Buffer.from(text, "utf8");
44
+ const originalBytes = bytes.length;
45
+ if (originalBytes <= limit) return { text, truncated: false, originalBytes };
46
+ if (limit === 0) return { text: "", truncated: true, originalBytes };
47
+ const marker = Buffer.from(TAIL_TRUNCATION_MARKER, "utf8");
48
+ if (marker.length >= limit) {
49
+ return {
50
+ text: bytes.subarray(originalBytes - limit).toString("utf8").replace(/^�+/g, ""),
51
+ truncated: true,
52
+ originalBytes
53
+ };
54
+ }
55
+ const suffix = bytes.subarray(originalBytes - (limit - marker.length)).toString("utf8").replace(/^�+/g, "");
56
+ return { text: `${TAIL_TRUNCATION_MARKER}${suffix}`, truncated: true, originalBytes };
57
+ }
58
+ function appendBounded(current, addition, maxBytes) {
59
+ return truncateUtf8(current + addition, maxBytes);
60
+ }
61
+
62
+ // src/context.ts
63
+ function textParts(content) {
64
+ if (typeof content === "string") return content;
65
+ if (!Array.isArray(content)) return "";
66
+ return content.filter(
67
+ (part) => Boolean(
68
+ part && typeof part === "object" && part.type === "text" && typeof part.text === "string"
69
+ )
70
+ ).map((part) => part.text).join("\n");
71
+ }
72
+ function redactPrivateText(text) {
73
+ const tagPattern = /<\/?private>/gi;
74
+ let redacted = "";
75
+ let cursor = 0;
76
+ let depth = 0;
77
+ for (const match of text.matchAll(tagPattern)) {
78
+ const tag = match[0].toLowerCase();
79
+ const index = match.index ?? cursor;
80
+ if (depth === 0) redacted += text.slice(cursor, index);
81
+ if (tag === "<private>") {
82
+ if (depth === 0) redacted += "[private content omitted]";
83
+ depth++;
84
+ } else if (depth > 0) {
85
+ depth--;
86
+ } else {
87
+ redacted += match[0];
88
+ }
89
+ cursor = index + match[0].length;
90
+ }
91
+ if (depth === 0) redacted += text.slice(cursor);
92
+ return redacted.split("\n").filter((line) => !line.includes("[subagent-private]")).join("\n");
93
+ }
94
+ function buildContextSnapshot(entries, mode, maxBytes = DEFAULT_MAX_CONTEXT_BYTES, selectedSourceIds) {
95
+ if (mode === "none") return { text: "", turns: 0, truncated: false, sourceIds: [] };
96
+ const messages = [];
97
+ for (const entry of entries) {
98
+ if (!entry || typeof entry !== "object") continue;
99
+ const candidate = entry;
100
+ const message = candidate.type === "message" ? candidate.message : candidate;
101
+ if (message?.role !== "user" && message?.role !== "assistant") continue;
102
+ const text = redactPrivateText(textParts(message.content));
103
+ if (text.trim()) {
104
+ const sourceId = candidate.id ?? createHash("sha256").update(`${message.role}\0${text}`).digest("hex").slice(0, 16);
105
+ messages.push({ role: message.role, text, sourceId });
106
+ }
107
+ }
108
+ const seenSourceIds = /* @__PURE__ */ new Set();
109
+ const uniqueMessages = messages.filter((message) => {
110
+ if (seenSourceIds.has(message.sourceId)) return false;
111
+ seenSourceIds.add(message.sourceId);
112
+ return true;
113
+ });
114
+ const selectedSet = selectedSourceIds ? new Set(selectedSourceIds) : void 0;
115
+ const eligible = selectedSet ? uniqueMessages.filter((message) => selectedSet.has(message.sourceId)) : uniqueMessages;
116
+ const turnLimit = typeof mode === "number" ? Math.max(1, Math.floor(mode)) : Number.POSITIVE_INFINITY;
117
+ let userTurns = 0;
118
+ let start = eligible.length;
119
+ for (let index = eligible.length - 1; index >= 0; index--) {
120
+ if (eligible[index].role === "user") userTurns++;
121
+ if (userTurns > turnLimit) break;
122
+ start = index;
123
+ }
124
+ const selected = eligible.slice(start);
125
+ const raw = mode === "summary" && selected.length > 4 ? [
126
+ `## Earlier context checkpoint
127
+ ${truncateUtf8(
128
+ selected.slice(0, -4).map((message) => `${message.role}: ${message.text}`).join("\n"),
129
+ Math.floor(maxBytes / 3)
130
+ ).text}`,
131
+ ...selected.slice(-4).map((message) => `## ${message.role}
132
+ ${message.text}`)
133
+ ].join("\n\n") : selected.map((message) => `## ${message.role}
134
+ ${message.text}`).join("\n\n");
135
+ const bounded = mode === "summary" ? truncateUtf8Tail(raw, maxBytes) : truncateUtf8(raw, maxBytes);
136
+ return {
137
+ text: bounded.text,
138
+ turns: selected.filter((message) => message.role === "user").length,
139
+ truncated: bounded.truncated,
140
+ sourceIds: selected.map((message) => message.sourceId)
141
+ };
142
+ }
143
+
144
+ export {
145
+ DEFAULT_MAX_OUTPUT_BYTES,
146
+ DEFAULT_MAX_STDERR_BYTES,
147
+ DEFAULT_MAX_CONTEXT_BYTES,
148
+ MAX_SUBAGENT_TIMEOUT_MS,
149
+ DEFAULT_MAX_PARALLEL_TASKS,
150
+ MAX_CONFIGURABLE_PARALLEL_TASKS,
151
+ MAX_BLOCKING_PARALLEL_CONCURRENCY,
152
+ DEFAULT_MAX_MESSAGES,
153
+ MAX_TOOL_MESSAGE_BYTES,
154
+ TRUNCATION_MARKER,
155
+ truncateUtf8,
156
+ appendBounded,
157
+ redactPrivateText,
158
+ buildContextSnapshot
159
+ };
160
+ //# sourceMappingURL=chunk-H3FP6DLR.ts.map