@narumitw/pi-subagents 2.1.4 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (312) hide show
  1. package/README.md +187 -1228
  2. package/dist/child-communication-bridge.ts +136 -0
  3. package/dist/child-communication-bridge.ts.map +7 -0
  4. package/dist/chunks/chunk-UKTWUQRM.js +667 -0
  5. package/dist/chunks/chunk-UKTWUQRM.js.map +7 -0
  6. package/dist/index.ts +1448 -1614
  7. package/dist/index.ts.map +4 -4
  8. package/docs/design-principles.md +31 -0
  9. package/docs/ipc-transport-idea.md +103 -0
  10. package/docs/tools.md +109 -0
  11. package/package.json +11 -19
  12. package/src/broker-credentials.ts +71 -0
  13. package/src/child-communication-bridge.ts +153 -0
  14. package/src/child-communication-tools.ts +147 -0
  15. package/src/completion-renderer.ts +60 -0
  16. package/src/index.ts +1 -1
  17. package/src/message-broker.ts +628 -0
  18. package/src/model-output.ts +42 -0
  19. package/src/process.ts +688 -0
  20. package/src/runtime.ts +538 -0
  21. package/src/subagents.ts +33 -34
  22. package/src/tools.ts +416 -0
  23. package/src/types.ts +85 -0
  24. package/src/widget.ts +130 -0
  25. package/dist/chunks/auto-transport-FUUKFDIG.ts +0 -109
  26. package/dist/chunks/auto-transport-FUUKFDIG.ts.map +0 -7
  27. package/dist/chunks/capability-grant-PR72SWWS.ts +0 -19
  28. package/dist/chunks/capability-grant-PR72SWWS.ts.map +0 -7
  29. package/dist/chunks/child-peer-bridge.ts +0 -108
  30. package/dist/chunks/child-peer-bridge.ts.map +0 -7
  31. package/dist/chunks/chunk-2LMJU25E.ts +0 -1641
  32. package/dist/chunks/chunk-2LMJU25E.ts.map +0 -7
  33. package/dist/chunks/chunk-47SK2QYC.ts +0 -56
  34. package/dist/chunks/chunk-47SK2QYC.ts.map +0 -7
  35. package/dist/chunks/chunk-4AQSF7AS.ts +0 -29
  36. package/dist/chunks/chunk-4AQSF7AS.ts.map +0 -7
  37. package/dist/chunks/chunk-5DGRMKNV.ts +0 -126
  38. package/dist/chunks/chunk-5DGRMKNV.ts.map +0 -7
  39. package/dist/chunks/chunk-6H6TBBED.ts +0 -108
  40. package/dist/chunks/chunk-6H6TBBED.ts.map +0 -7
  41. package/dist/chunks/chunk-6KJ34M6S.ts +0 -159
  42. package/dist/chunks/chunk-6KJ34M6S.ts.map +0 -7
  43. package/dist/chunks/chunk-6NSJVPXX.ts +0 -480
  44. package/dist/chunks/chunk-6NSJVPXX.ts.map +0 -7
  45. package/dist/chunks/chunk-7AAJEUSL.ts +0 -238
  46. package/dist/chunks/chunk-7AAJEUSL.ts.map +0 -7
  47. package/dist/chunks/chunk-BFK2Z4ZF.ts +0 -189
  48. package/dist/chunks/chunk-BFK2Z4ZF.ts.map +0 -7
  49. package/dist/chunks/chunk-BOAXY55Y.ts +0 -153
  50. package/dist/chunks/chunk-BOAXY55Y.ts.map +0 -7
  51. package/dist/chunks/chunk-D4CR7T73.ts +0 -353
  52. package/dist/chunks/chunk-D4CR7T73.ts.map +0 -7
  53. package/dist/chunks/chunk-FEVPWRMU.ts +0 -300
  54. package/dist/chunks/chunk-FEVPWRMU.ts.map +0 -7
  55. package/dist/chunks/chunk-G6VZTCFH.ts +0 -70
  56. package/dist/chunks/chunk-G6VZTCFH.ts.map +0 -7
  57. package/dist/chunks/chunk-H3FP6DLR.ts +0 -160
  58. package/dist/chunks/chunk-H3FP6DLR.ts.map +0 -7
  59. package/dist/chunks/chunk-HA36LPCO.ts +0 -130
  60. package/dist/chunks/chunk-HA36LPCO.ts.map +0 -7
  61. package/dist/chunks/chunk-HOP5FXDT.ts +0 -27
  62. package/dist/chunks/chunk-HOP5FXDT.ts.map +0 -7
  63. package/dist/chunks/chunk-IGAMVWFN.ts +0 -139
  64. package/dist/chunks/chunk-IGAMVWFN.ts.map +0 -7
  65. package/dist/chunks/chunk-ILEQ27AL.ts +0 -45
  66. package/dist/chunks/chunk-ILEQ27AL.ts.map +0 -7
  67. package/dist/chunks/chunk-ITVWPNU4.ts +0 -819
  68. package/dist/chunks/chunk-ITVWPNU4.ts.map +0 -7
  69. package/dist/chunks/chunk-IWC32VPY.ts +0 -172
  70. package/dist/chunks/chunk-IWC32VPY.ts.map +0 -7
  71. package/dist/chunks/chunk-JSZIP73U.ts +0 -362
  72. package/dist/chunks/chunk-JSZIP73U.ts.map +0 -7
  73. package/dist/chunks/chunk-JU6LUNLP.ts +0 -380
  74. package/dist/chunks/chunk-JU6LUNLP.ts.map +0 -7
  75. package/dist/chunks/chunk-KMGKCEO4.ts +0 -38
  76. package/dist/chunks/chunk-KMGKCEO4.ts.map +0 -7
  77. package/dist/chunks/chunk-LASD73CM.ts +0 -339
  78. package/dist/chunks/chunk-LASD73CM.ts.map +0 -7
  79. package/dist/chunks/chunk-LEOYDZI3.ts +0 -22
  80. package/dist/chunks/chunk-LEOYDZI3.ts.map +0 -7
  81. package/dist/chunks/chunk-LL4LP2T7.ts +0 -737
  82. package/dist/chunks/chunk-LL4LP2T7.ts.map +0 -7
  83. package/dist/chunks/chunk-N2T5IN4X.ts +0 -18
  84. package/dist/chunks/chunk-N2T5IN4X.ts.map +0 -7
  85. package/dist/chunks/chunk-N7BLVXKK.ts +0 -73
  86. package/dist/chunks/chunk-N7BLVXKK.ts.map +0 -7
  87. package/dist/chunks/chunk-NLT67IZS.ts +0 -322
  88. package/dist/chunks/chunk-NLT67IZS.ts.map +0 -7
  89. package/dist/chunks/chunk-NTRPLF46.ts +0 -63
  90. package/dist/chunks/chunk-NTRPLF46.ts.map +0 -7
  91. package/dist/chunks/chunk-ONDTY4EL.ts +0 -91
  92. package/dist/chunks/chunk-ONDTY4EL.ts.map +0 -7
  93. package/dist/chunks/chunk-OVPHFGKO.ts +0 -1769
  94. package/dist/chunks/chunk-OVPHFGKO.ts.map +0 -7
  95. package/dist/chunks/chunk-P7OH4XMF.ts +0 -60
  96. package/dist/chunks/chunk-P7OH4XMF.ts.map +0 -7
  97. package/dist/chunks/chunk-PBZMBTNJ.ts +0 -422
  98. package/dist/chunks/chunk-PBZMBTNJ.ts.map +0 -7
  99. package/dist/chunks/chunk-PGLSFLYW.ts +0 -52
  100. package/dist/chunks/chunk-PGLSFLYW.ts.map +0 -7
  101. package/dist/chunks/chunk-RRR66UWR.ts +0 -28
  102. package/dist/chunks/chunk-RRR66UWR.ts.map +0 -7
  103. package/dist/chunks/chunk-RSUXZD6S.ts +0 -275
  104. package/dist/chunks/chunk-RSUXZD6S.ts.map +0 -7
  105. package/dist/chunks/chunk-RTCVYIZA.ts +0 -221
  106. package/dist/chunks/chunk-RTCVYIZA.ts.map +0 -7
  107. package/dist/chunks/chunk-RY2AEGMZ.ts +0 -34
  108. package/dist/chunks/chunk-RY2AEGMZ.ts.map +0 -7
  109. package/dist/chunks/chunk-SWGQLFSD.ts +0 -60
  110. package/dist/chunks/chunk-SWGQLFSD.ts.map +0 -7
  111. package/dist/chunks/chunk-TM2R67J3.ts +0 -52
  112. package/dist/chunks/chunk-TM2R67J3.ts.map +0 -7
  113. package/dist/chunks/chunk-TMZRHIIK.ts +0 -497
  114. package/dist/chunks/chunk-TMZRHIIK.ts.map +0 -7
  115. package/dist/chunks/chunk-TZ34IQ3M.ts +0 -59
  116. package/dist/chunks/chunk-TZ34IQ3M.ts.map +0 -7
  117. package/dist/chunks/chunk-UMBPMVJW.ts +0 -22
  118. package/dist/chunks/chunk-UMBPMVJW.ts.map +0 -7
  119. package/dist/chunks/chunk-VDG7LTYE.ts +0 -80
  120. package/dist/chunks/chunk-VDG7LTYE.ts.map +0 -7
  121. package/dist/chunks/chunk-X4NMONPE.ts +0 -73
  122. package/dist/chunks/chunk-X4NMONPE.ts.map +0 -7
  123. package/dist/chunks/chunk-YPJEN6NU.ts +0 -65
  124. package/dist/chunks/chunk-YPJEN6NU.ts.map +0 -7
  125. package/dist/chunks/chunk-YU53SHA7.ts +0 -328
  126. package/dist/chunks/chunk-YU53SHA7.ts.map +0 -7
  127. package/dist/chunks/completion-delivery-RSJU6BXL.ts +0 -17
  128. package/dist/chunks/completion-delivery-RSJU6BXL.ts.map +0 -7
  129. package/dist/chunks/config-status-FKGDECZ3.ts +0 -35
  130. package/dist/chunks/config-status-FKGDECZ3.ts.map +0 -7
  131. package/dist/chunks/config-ui-ABHYNGQ7.ts +0 -1212
  132. package/dist/chunks/config-ui-ABHYNGQ7.ts.map +0 -7
  133. package/dist/chunks/consult-LJU3IQY5.ts +0 -519
  134. package/dist/chunks/consult-LJU3IQY5.ts.map +0 -7
  135. package/dist/chunks/context-QDKLVQXE.ts +0 -11
  136. package/dist/chunks/context-QDKLVQXE.ts.map +0 -7
  137. package/dist/chunks/create-stateful-transport-JWC2EFYL.ts +0 -130
  138. package/dist/chunks/create-stateful-transport-JWC2EFYL.ts.map +0 -7
  139. package/dist/chunks/cwd-policy-NB6XZ5GF.ts +0 -17
  140. package/dist/chunks/cwd-policy-NB6XZ5GF.ts.map +0 -7
  141. package/dist/chunks/delegation-contract-LA56I5DT.ts +0 -24
  142. package/dist/chunks/delegation-contract-LA56I5DT.ts.map +0 -7
  143. package/dist/chunks/discovery-MIFB2U4Y.ts +0 -12
  144. package/dist/chunks/discovery-MIFB2U4Y.ts.map +0 -7
  145. package/dist/chunks/execution-Q2JZLKJA.ts +0 -4037
  146. package/dist/chunks/execution-Q2JZLKJA.ts.map +0 -7
  147. package/dist/chunks/in-process-transport-HJ6TZXC3.ts +0 -39
  148. package/dist/chunks/in-process-transport-HJ6TZXC3.ts.map +0 -7
  149. package/dist/chunks/inspect-UH2TKH6E.ts +0 -634
  150. package/dist/chunks/inspect-UH2TKH6E.ts.map +0 -7
  151. package/dist/chunks/peer-communication-KL36Z6CO.ts +0 -294
  152. package/dist/chunks/peer-communication-KL36Z6CO.ts.map +0 -7
  153. package/dist/chunks/persistence-UY3PY6E5.ts +0 -348
  154. package/dist/chunks/persistence-UY3PY6E5.ts.map +0 -7
  155. package/dist/chunks/registry-BT54L6CY.ts +0 -1445
  156. package/dist/chunks/registry-BT54L6CY.ts.map +0 -7
  157. package/dist/chunks/retained-semantic-state-GM75FZGE.ts +0 -81
  158. package/dist/chunks/retained-semantic-state-GM75FZGE.ts.map +0 -7
  159. package/dist/chunks/rpc-transport-7R7DVCEB.ts +0 -1222
  160. package/dist/chunks/rpc-transport-7R7DVCEB.ts.map +0 -7
  161. package/dist/chunks/runtime-policy-5YELCOVC.ts +0 -15
  162. package/dist/chunks/runtime-policy-5YELCOVC.ts.map +0 -7
  163. package/dist/chunks/semantic-snapshot-WPJ3UAFW.ts +0 -19
  164. package/dist/chunks/semantic-snapshot-WPJ3UAFW.ts.map +0 -7
  165. package/dist/chunks/spawn-idempotency-BNHOSMZW.ts +0 -13
  166. package/dist/chunks/spawn-idempotency-BNHOSMZW.ts.map +0 -7
  167. package/dist/chunks/stateful-lifecycle-JAR6K55H.ts +0 -15
  168. package/dist/chunks/stateful-lifecycle-JAR6K55H.ts.map +0 -7
  169. package/dist/chunks/subprocess-transport-VHZJRBTW.ts +0 -160
  170. package/dist/chunks/subprocess-transport-VHZJRBTW.ts.map +0 -7
  171. package/dist/chunks/usage-recording-store-CW3EH2SZ.ts +0 -164
  172. package/dist/chunks/usage-recording-store-CW3EH2SZ.ts.map +0 -7
  173. package/dist/chunks/workspace-WDKLN72J.ts +0 -11
  174. package/dist/chunks/workspace-WDKLN72J.ts.map +0 -7
  175. package/docs/async-runtime-protocol.md +0 -84
  176. package/docs/implementation-notes/pi-subagents-capability-matrix.md +0 -62
  177. package/docs/implementation-notes/pi-subagents-current-direction.md +0 -99
  178. package/docs/implementation-notes/pi-subagents-rpc-v1.md +0 -139
  179. package/docs/pi-subagents-diagrams.md +0 -183
  180. package/src/adaptive-scheduler.ts +0 -224
  181. package/src/admission-policy.ts +0 -78
  182. package/src/agent-projection.ts +0 -53
  183. package/src/agents/built-ins.ts +0 -71
  184. package/src/agents/catalog.ts +0 -241
  185. package/src/agents/discovery.ts +0 -265
  186. package/src/agents/types.ts +0 -100
  187. package/src/agents.ts +0 -51
  188. package/src/auto-transport.ts +0 -121
  189. package/src/blocking-status.ts +0 -63
  190. package/src/cached-module-loader.ts +0 -18
  191. package/src/capabilities.ts +0 -145
  192. package/src/capability-grant.ts +0 -115
  193. package/src/capability-router.ts +0 -107
  194. package/src/child-peer-bridge.ts +0 -124
  195. package/src/child-peer-tools.ts +0 -132
  196. package/src/completion-delivery.ts +0 -409
  197. package/src/completion-render.ts +0 -190
  198. package/src/completion-requirement.ts +0 -479
  199. package/src/completion-routing.ts +0 -24
  200. package/src/config-registration.ts +0 -114
  201. package/src/config-status.ts +0 -217
  202. package/src/config-ui.ts +0 -983
  203. package/src/consult-policy.ts +0 -15
  204. package/src/consult-registration.ts +0 -125
  205. package/src/consult-render.ts +0 -194
  206. package/src/consult-resources.ts +0 -51
  207. package/src/consult-tool.ts +0 -95
  208. package/src/consult.ts +0 -566
  209. package/src/context.ts +0 -126
  210. package/src/create-stateful-transport.ts +0 -157
  211. package/src/cwd-policy.ts +0 -183
  212. package/src/delegation-contract.ts +0 -463
  213. package/src/execution/budget.ts +0 -56
  214. package/src/execution/runtime-policy.ts +0 -19
  215. package/src/execution-plan.ts +0 -322
  216. package/src/execution-ui.ts +0 -259
  217. package/src/execution.ts +0 -1679
  218. package/src/in-process-transport.ts +0 -941
  219. package/src/inspect-registration.ts +0 -64
  220. package/src/inspect-render.ts +0 -334
  221. package/src/inspect-tool.ts +0 -45
  222. package/src/inspect.ts +0 -769
  223. package/src/integration-controller.ts +0 -98
  224. package/src/limits.ts +0 -75
  225. package/src/orchestration-metrics.ts +0 -116
  226. package/src/outcome.ts +0 -61
  227. package/src/panel-child-group.ts +0 -35
  228. package/src/panel-contract.ts +0 -343
  229. package/src/panel-evidence.ts +0 -59
  230. package/src/panel-execution.ts +0 -769
  231. package/src/panel-failure.ts +0 -56
  232. package/src/panel-planning.ts +0 -175
  233. package/src/panel-presets.ts +0 -3
  234. package/src/panel-prompts.ts +0 -132
  235. package/src/panel-reconciliation.ts +0 -57
  236. package/src/panel-render.ts +0 -103
  237. package/src/parallel-limit-ui.ts +0 -113
  238. package/src/params.ts +0 -278
  239. package/src/peer-communication.ts +0 -352
  240. package/src/peer-transport.ts +0 -49
  241. package/src/persistence.ts +0 -522
  242. package/src/pi-args.ts +0 -43
  243. package/src/pi-invocation.ts +0 -168
  244. package/src/process-control.ts +0 -43
  245. package/src/prompt-resources.ts +0 -38
  246. package/src/prompt-source-safety.ts +0 -48
  247. package/src/protocol.ts +0 -76
  248. package/src/registry-types.ts +0 -204
  249. package/src/registry.ts +0 -1698
  250. package/src/render-common.ts +0 -252
  251. package/src/render.ts +0 -704
  252. package/src/result-contract.ts +0 -431
  253. package/src/retained-semantic-state.ts +0 -100
  254. package/src/rpc-timeout-finalization.ts +0 -207
  255. package/src/rpc-transport-metadata.ts +0 -65
  256. package/src/rpc-transport.ts +0 -1035
  257. package/src/rpc-turn-capture.ts +0 -217
  258. package/src/runner-outcome.ts +0 -31
  259. package/src/runner-result.ts +0 -55
  260. package/src/runner-types.ts +0 -102
  261. package/src/runner-usage.ts +0 -48
  262. package/src/runner.ts +0 -866
  263. package/src/safe-text.ts +0 -67
  264. package/src/semantic-snapshot.ts +0 -214
  265. package/src/session-guidance-contract.ts +0 -399
  266. package/src/settings/inspection.ts +0 -302
  267. package/src/settings/schema.ts +0 -195
  268. package/src/settings-reader.ts +0 -215
  269. package/src/settings.ts +0 -452
  270. package/src/spawn-idempotency.ts +0 -68
  271. package/src/stateful-agent-view.ts +0 -85
  272. package/src/stateful-config.ts +0 -13
  273. package/src/stateful-guidance.ts +0 -29
  274. package/src/stateful-lifecycle.ts +0 -74
  275. package/src/stateful-limit-ui.ts +0 -249
  276. package/src/stateful-limits.ts +0 -96
  277. package/src/stateful-prompt.ts +0 -49
  278. package/src/stateful-registration.ts +0 -1320
  279. package/src/stateful-render.ts +0 -318
  280. package/src/stateful-safety.ts +0 -47
  281. package/src/stateful-tool-params.ts +0 -215
  282. package/src/stateful.ts +0 -12
  283. package/src/subagent-details.ts +0 -43
  284. package/src/subagents-extension.ts +0 -372
  285. package/src/subprocess-transport.ts +0 -145
  286. package/src/supervision.ts +0 -104
  287. package/src/task-path.ts +0 -65
  288. package/src/timeout-checkpoint.ts +0 -305
  289. package/src/timeout-finalization.ts +0 -75
  290. package/src/tool-schema-compatibility.ts +0 -73
  291. package/src/transport-types.ts +0 -74
  292. package/src/transport-ui.ts +0 -135
  293. package/src/transport.ts +0 -43
  294. package/src/turn-budget.ts +0 -109
  295. package/src/usage-format.ts +0 -42
  296. package/src/usage-recording-config.ts +0 -13
  297. package/src/usage-recording-store.ts +0 -183
  298. package/src/usage-recording.ts +0 -478
  299. package/src/verification-harness.ts +0 -516
  300. package/src/verification-policy.ts +0 -67
  301. package/src/verification-receipt.ts +0 -275
  302. package/src/verified-execution-benchmark.ts +0 -86
  303. package/src/verified-execution-contract.ts +0 -191
  304. package/src/verified-execution-schema.ts +0 -32
  305. package/src/work-item-ledger.ts +0 -1404
  306. package/src/work-item-persistence.ts +0 -254
  307. package/src/workflow-completion-controller.ts +0 -397
  308. package/src/workflow-planning.ts +0 -172
  309. package/src/workflow-tree-identity.ts +0 -289
  310. package/src/workflow-ui.ts +0 -69
  311. package/src/workflow-verification.ts +0 -296
  312. package/src/workspace.ts +0 -174
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/in-process-transport.ts"],
4
- "sourcesContent": ["import type { Api, Model } from \"@earendil-works/pi-ai\";\nimport {\n\ttype AgentSessionServices,\n\tgetAgentDir,\n\ttype ModelRegistry,\n\ttype ModelRuntime,\n\tSessionManager,\n\tSettingsManager,\n} from \"@earendil-works/pi-coding-agent\";\nimport { discoverAgents } from \"./agents/discovery.js\";\nimport type { AgentConfig, SubagentThinkingLevel } from \"./agents/types.js\";\nimport { formatPeerMessage } from \"./child-peer-tools.js\";\nimport { redactPrivateText } from \"./context.js\";\nimport { appendDelegationContract } from \"./delegation-contract.js\";\nimport { resolveDefaultSubagentTimeoutMs } from \"./execution/runtime-policy.js\";\nimport { DEFAULT_MAX_CONTEXT_BYTES, DEFAULT_MAX_OUTPUT_BYTES, truncateUtf8 } from \"./limits.js\";\nimport {\n\tCHILD_PEER_TOOL_NAMES,\n\tcreateInProcessPeerExtension,\n\ttype PeerTransportRuntime,\n} from \"./peer-transport.js\";\nimport { resolvePiPromptResources } from \"./prompt-resources.js\";\nimport type { AgentMailboxMessage, AgentTurn, ManagedAgent, TurnOutcome } from \"./registry.js\";\nimport { appendResultInstruction } from \"./result-contract.js\";\nimport { safeTerminalLine } from \"./safe-text.js\";\nimport { readSubagentSettings } from \"./settings.js\";\nimport {\n\tformatTimeoutCheckpoint,\n\tformatTurnTerminationMessage,\n\tjournalMessages,\n\tTimeoutProgressJournal,\n\tTURN_TERMINATION_VERSION,\n\ttype TurnTerminationReport,\n} from \"./timeout-checkpoint.js\";\nimport {\n\tbuildTimeoutFinalizationPrompt,\n\tresolveTimeoutFinalizationMs,\n} from \"./timeout-finalization.js\";\nimport type { SubagentTransport } from \"./transport.js\";\nimport type { TransportProgressCallback, TransportTelemetry } from \"./transport-types.js\";\nimport { TurnBudgetMonitor, type TurnBudgetStop, type TurnLimits } from \"./turn-budget.js\";\n\nconst BUILT_IN_TOOL_NAMES = new Set([\"read\", \"bash\", \"edit\", \"write\", \"grep\", \"find\", \"ls\"]);\nconst DEFAULT_ABORT_GRACE_MS = 5_000;\n\ninterface ChildModelRuntime {\n\tgetModel(provider: string, modelId: string): Model<Api> | undefined;\n\tregisterProvider(provider: string, config: unknown): void;\n\tregisterNativeProvider?(provider: unknown): void;\n\tsetRuntimeApiKey(provider: string, apiKey: string): Promise<void> | void;\n}\n\ninterface CodingAgentRuntimeModule {\n\tcreateAgentSessionFromServices?: typeof import(\"@earendil-works/pi-coding-agent\").createAgentSessionFromServices;\n\tcreateAgentSessionServices?: typeof import(\"@earendil-works/pi-coding-agent\").createAgentSessionServices;\n\tresolveCliModel?: typeof import(\"@earendil-works/pi-coding-agent\").resolveCliModel;\n}\n\ninterface CoreModelSupport {\n\tmodelRuntime: ModelRuntime;\n\tresolveCliModel: typeof import(\"@earendil-works/pi-coding-agent\").resolveCliModel;\n}\n\ninterface CoreSessionSupport {\n\tcreateAgentSessionFromServices: typeof import(\"@earendil-works/pi-coding-agent\").createAgentSessionFromServices;\n\tcreateAgentSessionServices: typeof import(\"@earendil-works/pi-coding-agent\").createAgentSessionServices;\n\tresolveCliModel: typeof import(\"@earendil-works/pi-coding-agent\").resolveCliModel;\n}\n\ninterface RegisteredProviderRegistry {\n\tgetRegisteredProviderConfig?(provider: string): unknown;\n\tgetRegisteredProviderIds?(): readonly string[];\n\tgetRegisteredNativeProvider?(provider: string): unknown;\n}\n\nexport interface ParentRuntimeSnapshot {\n\tmodel: Model<Api> | undefined;\n\tthinkingLevel: SubagentThinkingLevel;\n}\n\nexport interface ChildSession {\n\treadonly sessionId: string;\n\treadonly messages: readonly unknown[];\n\treadonly provider?: string;\n\treadonly model?: string;\n\treadonly thinkingLevel?: SubagentThinkingLevel;\n\tprompt(text: string): Promise<void>;\n\tsteer?(text: string): Promise<void>;\n\tsubscribe(listener: (event: unknown) => void): () => void;\n\tabort(): Promise<void>;\n\tdispose(): void;\n\tgetActiveToolNames(): string[];\n}\n\nexport interface ChildSessionCreateOptions {\n\tagent: ManagedAgent;\n\tagentConfig: AgentConfig;\n\tcontext?: string;\n\thistory: AgentTurn[];\n\tmodelRegistry: ModelRegistry;\n\tparentRuntime: ParentRuntimeSnapshot;\n\ttools?: string[];\n\tpeerRuntime?: PeerTransportRuntime;\n}\n\nexport type ChildSessionFactory = (options: ChildSessionCreateOptions) => Promise<ChildSession>;\n\nexport interface InProcessTransportOptions {\n\tmodelRegistry: ModelRegistry;\n\tgetParentRuntime: () => ParentRuntimeSnapshot;\n\tcreateSession?: ChildSessionFactory;\n\tdiscoverAgent?: (agent: ManagedAgent) => AgentConfig | undefined;\n\tdefaultTimeoutMs?: number;\n\tabortGraceMs?: number;\n\ttimeoutFinalizationMs?: number;\n\tpeerRuntime?: PeerTransportRuntime;\n}\n\ninterface ChildSessionRecord {\n\tsession: ChildSession;\n\tunsubscribe: () => void;\n\tlastOutput: string;\n\tdisposed: boolean;\n}\n\ntype PromptSettlement =\n\t| { kind: \"completed\" }\n\t| { kind: \"failed\"; error: unknown }\n\t| { kind: \"timeout\" }\n\t| { kind: \"limit\"; stop: TurnBudgetStop }\n\t| { kind: \"aborted\" };\n\nexport class InProcessTransport implements SubagentTransport {\n\treadonly kind = \"in-process\" as const;\n\tprivate readonly sessions = new Map<string, ChildSessionRecord>();\n\tprivate readonly createSession: ChildSessionFactory;\n\tprivate readonly discoverAgent: (agent: ManagedAgent) => AgentConfig | undefined;\n\tprivate readonly defaultTimeoutMs: number;\n\tprivate readonly abortGraceMs: number;\n\n\tconstructor(private readonly options: InProcessTransportOptions) {\n\t\tthis.createSession = options.createSession ?? createSdkChildSession;\n\t\tthis.discoverAgent =\n\t\t\toptions.discoverAgent ??\n\t\t\t((agent) =>\n\t\t\t\tdiscoverAgents(agent.cwd, agent.agentScope ?? \"user\", readSubagentSettings()).agents.find(\n\t\t\t\t\t(candidate) => candidate.name === agent.agent,\n\t\t\t\t));\n\t\tthis.defaultTimeoutMs = options.defaultTimeoutMs ?? resolveDefaultSubagentTimeoutMs();\n\t\tthis.abortGraceMs = options.abortGraceMs ?? DEFAULT_ABORT_GRACE_MS;\n\t}\n\n\tasync runTurn(\n\t\tagent: ManagedAgent,\n\t\ttask: string,\n\t\tsignal: AbortSignal,\n\t\tonProgress?: TransportProgressCallback,\n\t): Promise<TurnOutcome> {\n\t\tconst startedAt = Date.now();\n\t\tlet telemetry: TransportTelemetry = {\n\t\t\ttransport: \"in-process\",\n\t\t\tphase: \"starting\",\n\t\t\tupdatedAt: startedAt,\n\t\t\ttiming: { startedAt, transportStartedAt: startedAt },\n\t\t};\n\t\tconst publish = (patch: Partial<TransportTelemetry>) => {\n\t\t\ttelemetry = {\n\t\t\t\t...telemetry,\n\t\t\t\t...patch,\n\t\t\t\ttiming: { ...telemetry.timing, ...patch.timing },\n\t\t\t\tupdatedAt: Date.now(),\n\t\t\t};\n\t\t\tonProgress?.({ ...telemetry, timing: { ...telemetry.timing } });\n\t\t};\n\t\tpublish({});\n\t\tif (signal.aborted) {\n\t\t\tpublish({ phase: \"interrupted\", failurePhase: \"starting\" });\n\t\t\treturn { ...interruptedOutcome(\"\"), telemetry };\n\t\t}\n\t\tconst agentConfig = this.discoverAgent(agent);\n\t\tif (!agentConfig) {\n\t\t\tpublish({ phase: \"failed\", failurePhase: \"starting\" });\n\t\t\treturn {\n\t\t\t\toutput: \"\",\n\t\t\t\texitCode: 1,\n\t\t\t\terror: `Unknown subagent: ${agent.agent}`,\n\t\t\t\ttelemetry,\n\t\t\t};\n\t\t}\n\t\tlet tools: string[] | undefined;\n\t\ttry {\n\t\t\ttools = validateInProcessTools(agent.executionPlan?.effectiveTools ?? agentConfig.tools);\n\t\t} catch (error) {\n\t\t\tpublish({ phase: \"failed\", failurePhase: \"starting\" });\n\t\t\treturn { output: \"\", exitCode: 1, error: errorMessage(error), telemetry };\n\t\t}\n\t\tlet record: ChildSessionRecord;\n\t\ttry {\n\t\t\trecord = await this.getOrCreate(agent, agentConfig, tools);\n\t\t} catch (error) {\n\t\t\tpublish({ phase: \"failed\", failurePhase: \"starting\" });\n\t\t\treturn { output: \"\", exitCode: 1, error: errorMessage(error), telemetry };\n\t\t}\n\t\tpublish({\n\t\t\tphase: \"ready\",\n\t\t\tprovider: record.session.provider,\n\t\t\tmodel: record.session.model,\n\t\t\tthinkingLevel: record.session.thinkingLevel,\n\t\t\ttiming: { readyAt: Date.now() },\n\t\t});\n\t\tif (signal.aborted) {\n\t\t\tawait this.releaseById(agent.id).catch(() => undefined);\n\t\t\tpublish({ phase: \"interrupted\", failurePhase: \"ready\" });\n\t\t\treturn { ...interruptedOutcome(\"\"), telemetry };\n\t\t}\n\t\tconst prompt = buildCurrentTurnPrompt(agent, task);\n\t\tconst timeoutMs =\n\t\t\tagent.currentTimeoutMs ?? agent.timeoutMs ?? agentConfig.timeoutMs ?? this.defaultTimeoutMs;\n\t\tconst startingMessageCount = record.session.messages.length;\n\t\trecord.lastOutput = \"\";\n\t\tpublish({ phase: \"running\", timing: { promptAcceptedAt: Date.now() } });\n\t\tconst settlement = await this.runPrompt(record, prompt, signal, timeoutMs, {\n\t\t\tidleTimeoutMs: agent.currentIdleTimeoutMs ?? agent.idleTimeoutMs,\n\t\t\tmaxTurns: agent.currentMaxTurns ?? agent.maxTurns,\n\t\t\tmaxToolCalls: agent.currentMaxToolCalls ?? agent.maxToolCalls,\n\t\t});\n\t\tconst final = latestAssistant(record.session.messages.slice(startingMessageCount));\n\t\tconst output = truncateUtf8(final.output || record.lastOutput, DEFAULT_MAX_OUTPUT_BYTES);\n\t\tconst truncated = output.truncated || agent.contextTruncated;\n\t\tconst policy = inProcessPolicy(agentConfig, agent);\n\t\tconst settledAt = Date.now();\n\t\tif (signal.aborted && (settlement.kind === \"timeout\" || settlement.kind === \"limit\")) {\n\t\t\tpublish({ phase: \"interrupted\", failurePhase: \"running\", timing: { settledAt } });\n\t\t\treturn {\n\t\t\t\t...interruptedOutcome(output.text),\n\t\t\t\ttruncated,\n\t\t\t\tpolicy,\n\t\t\t\ttelemetry,\n\t\t\t};\n\t\t}\n\n\t\tswitch (settlement.kind) {\n\t\t\tcase \"completed\":\n\t\t\t\tpublish({\n\t\t\t\t\tphase: final.stopReason === \"error\" ? \"failed\" : \"settled\",\n\t\t\t\t\ttiming: { settledAt },\n\t\t\t\t});\n\t\t\t\tif (final.stopReason === \"error\") {\n\t\t\t\t\treturn {\n\t\t\t\t\t\toutput: output.text,\n\t\t\t\t\t\texitCode: 1,\n\t\t\t\t\t\ttruncated,\n\t\t\t\t\t\terror: final.error || \"In-process subagent returned an error\",\n\t\t\t\t\t\tpolicy,\n\t\t\t\t\t\ttelemetry,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif (final.stopReason === \"aborted\") {\n\t\t\t\t\tpublish({ phase: \"interrupted\", failurePhase: \"running\" });\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...interruptedOutcome(output.text),\n\t\t\t\t\t\ttruncated,\n\t\t\t\t\t\tpolicy,\n\t\t\t\t\t\ttelemetry,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\toutput: output.text,\n\t\t\t\t\texitCode: 0,\n\t\t\t\t\ttruncated,\n\t\t\t\t\tpolicy,\n\t\t\t\t\ttelemetry,\n\t\t\t\t};\n\t\t\tcase \"failed\":\n\t\t\t\tpublish({ phase: \"failed\", failurePhase: \"running\", timing: { settledAt } });\n\t\t\t\treturn {\n\t\t\t\t\toutput: output.text,\n\t\t\t\t\texitCode: 1,\n\t\t\t\t\ttruncated,\n\t\t\t\t\terror: errorMessage(settlement.error),\n\t\t\t\t\tpolicy,\n\t\t\t\t\ttelemetry,\n\t\t\t\t};\n\t\t\tcase \"timeout\":\n\t\t\tcase \"limit\": {\n\t\t\t\tconst stop =\n\t\t\t\t\tsettlement.kind === \"limit\"\n\t\t\t\t\t\t? settlement.stop\n\t\t\t\t\t\t: ({ reason: \"work_timeout\", limit: timeoutMs } as const);\n\t\t\t\tconst journal = new TimeoutProgressJournal();\n\t\t\t\tjournalMessages(journal, record.session.messages.slice(startingMessageCount));\n\t\t\t\tconst termination: TurnTerminationReport = {\n\t\t\t\t\tversion: TURN_TERMINATION_VERSION,\n\t\t\t\t\treason: stop.reason,\n\t\t\t\t\tlimit: stop.limit,\n\t\t\t\t\tcheckpoint: journal.checkpoint(task, output.text),\n\t\t\t\t\tfinalization: { attempted: false, status: \"skipped\", durationMs: 0 },\n\t\t\t\t};\n\t\t\t\tlet finalizedOutput = output.text || formatTimeoutCheckpoint(termination.checkpoint);\n\t\t\t\tlet finalizationError: string | undefined;\n\t\t\t\tif (!signal.aborted && this.sessions.get(agent.id) === record) {\n\t\t\t\t\tpublish({ phase: \"finalizing\", failurePhase: \"running\" });\n\t\t\t\t\tconst summaryStart = record.session.messages.length;\n\t\t\t\t\tconst finalizationStartedAt = Date.now();\n\t\t\t\t\trecord.lastOutput = \"\";\n\t\t\t\t\tconst summarySettlement = await this.runPrompt(\n\t\t\t\t\t\trecord,\n\t\t\t\t\t\tbuildTimeoutFinalizationPrompt({\n\t\t\t\t\t\t\ttask,\n\t\t\t\t\t\t\tpartialOutput: output.text,\n\t\t\t\t\t\t\tcheckpoint: termination.checkpoint,\n\t\t\t\t\t\t\tterminationReason: stop.reason,\n\t\t\t\t\t\t\tresultFormat: agent.resultFormat,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tresolveTimeoutFinalizationMs(timeoutMs, this.options.timeoutFinalizationMs),\n\t\t\t\t\t);\n\t\t\t\t\tconst summary = latestAssistant(record.session.messages.slice(summaryStart));\n\t\t\t\t\tconst boundedSummary = truncateUtf8(\n\t\t\t\t\t\tsummary.output || record.lastOutput,\n\t\t\t\t\t\tDEFAULT_MAX_OUTPUT_BYTES,\n\t\t\t\t\t);\n\t\t\t\t\tif (\n\t\t\t\t\t\tsummarySettlement.kind === \"completed\" &&\n\t\t\t\t\t\tsummary.stopReason !== \"error\" &&\n\t\t\t\t\t\tboundedSummary.text.trim()\n\t\t\t\t\t) {\n\t\t\t\t\t\tfinalizedOutput = boundedSummary.text;\n\t\t\t\t\t\ttermination.finalization = {\n\t\t\t\t\t\t\tattempted: true,\n\t\t\t\t\t\t\tstatus: \"completed\",\n\t\t\t\t\t\t\tdurationMs: Date.now() - finalizationStartedAt,\n\t\t\t\t\t\t};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfinalizationError =\n\t\t\t\t\t\t\tsummarySettlement.kind === \"failed\"\n\t\t\t\t\t\t\t\t? errorMessage(summarySettlement.error)\n\t\t\t\t\t\t\t\t: `timeout summary ${summarySettlement.kind}`;\n\t\t\t\t\t\ttermination.finalization = {\n\t\t\t\t\t\t\tattempted: true,\n\t\t\t\t\t\t\tstatus: summarySettlement.kind === \"timeout\" ? \"timed_out\" : \"failed\",\n\t\t\t\t\t\t\tdurationMs: Date.now() - finalizationStartedAt,\n\t\t\t\t\t\t\terror: finalizationError,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpublish({ phase: \"failed\", failurePhase: \"running\", timing: { settledAt: Date.now() } });\n\t\t\t\treturn {\n\t\t\t\t\toutput: finalizedOutput,\n\t\t\t\t\texitCode: 124,\n\t\t\t\t\ttruncated,\n\t\t\t\t\terror: [\n\t\t\t\t\t\tformatTurnTerminationMessage(stop.reason, stop.limit, \"In-process subagent\"),\n\t\t\t\t\t\tfinalizationError,\n\t\t\t\t\t]\n\t\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t\t.join(\"; \"),\n\t\t\t\t\tpolicy,\n\t\t\t\t\ttermination,\n\t\t\t\t\ttelemetry,\n\t\t\t\t};\n\t\t\t}\n\t\t\tcase \"aborted\":\n\t\t\t\tpublish({ phase: \"interrupted\", failurePhase: \"running\", timing: { settledAt } });\n\t\t\t\treturn {\n\t\t\t\t\t...interruptedOutcome(output.text),\n\t\t\t\t\ttruncated,\n\t\t\t\t\tpolicy,\n\t\t\t\t\ttelemetry,\n\t\t\t\t};\n\t\t}\n\t}\n\n\tasync deliverMessage(agent: ManagedAgent, message: AgentMailboxMessage): Promise<boolean> {\n\t\tconst record = this.sessions.get(agent.id);\n\t\tif (!record || record.disposed || !record.session.steer) return false;\n\t\tawait record.session.steer(formatPeerMessage(message));\n\t\treturn true;\n\t}\n\n\tasync release(agent: ManagedAgent): Promise<void> {\n\t\tawait this.releaseById(agent.id);\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\tconst agentIds = [...this.sessions.keys()];\n\t\tconst results = await Promise.allSettled(agentIds.map((agentId) => this.releaseById(agentId)));\n\t\tconst failures = results.flatMap((result) =>\n\t\t\tresult.status === \"rejected\" ? [result.reason] : [],\n\t\t);\n\t\tif (failures.length > 0) {\n\t\t\tthrow new AggregateError(\n\t\t\t\tfailures,\n\t\t\t\t`Failed to dispose ${failures.length} in-process subagent session(s)`,\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate async releaseById(agentId: string): Promise<void> {\n\t\tconst record = this.sessions.get(agentId);\n\t\tif (!record) return;\n\t\tthis.sessions.delete(agentId);\n\t\tthis.options.peerRuntime?.revoke(agentId);\n\t\tif (record.disposed) return;\n\t\trecord.disposed = true;\n\t\tconst failures: unknown[] = [];\n\t\ttry {\n\t\t\trecord.unsubscribe();\n\t\t} catch (error) {\n\t\t\tfailures.push(error);\n\t\t}\n\t\tif (record.session.messages.length > 0) {\n\t\t\tawait settleWithin(record.session.abort(), this.abortGraceMs);\n\t\t}\n\t\ttry {\n\t\t\trecord.session.dispose();\n\t\t} catch (error) {\n\t\t\tfailures.push(error);\n\t\t}\n\t\tif (failures.length > 0) {\n\t\t\tthrow new AggregateError(\n\t\t\t\tfailures,\n\t\t\t\t`Failed to release in-process subagent ${agentId}: ${failures.map(errorMessage).join(\"; \")}`,\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate async getOrCreate(\n\t\tagent: ManagedAgent,\n\t\tagentConfig: AgentConfig,\n\t\ttools: string[] | undefined,\n\t): Promise<ChildSessionRecord> {\n\t\tconst existing = this.sessions.get(agent.id);\n\t\tif (existing) return existing;\n\t\tconst session = await this.createSession({\n\t\t\tagent,\n\t\t\tagentConfig,\n\t\t\tcontext: agent.context,\n\t\t\thistory: agent.history.map((turn) => ({ ...turn })),\n\t\t\tmodelRegistry: this.options.modelRegistry,\n\t\t\tparentRuntime: this.options.getParentRuntime(),\n\t\t\ttools,\n\t\t\tpeerRuntime: this.options.peerRuntime,\n\t\t});\n\t\tconst record: ChildSessionRecord = {\n\t\t\tsession,\n\t\t\tlastOutput: \"\",\n\t\t\tdisposed: false,\n\t\t\tunsubscribe: () => undefined,\n\t\t};\n\t\ttry {\n\t\t\trecord.unsubscribe = session.subscribe((event) => {\n\t\t\t\tconst message = eventMessage(event);\n\t\t\t\tif (!message) return;\n\t\t\t\tconst output = assistantText(message);\n\t\t\t\tif (output) record.lastOutput = truncateUtf8(output, DEFAULT_MAX_OUTPUT_BYTES).text;\n\t\t\t});\n\t\t} catch (error) {\n\t\t\trecord.disposed = true;\n\t\t\ttry {\n\t\t\t\tsession.dispose();\n\t\t\t} catch {\n\t\t\t\t// Preserve the subscription failure, which explains why creation was rejected.\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t\tthis.sessions.set(agent.id, record);\n\t\treturn record;\n\t}\n\n\tprivate async runPrompt(\n\t\trecord: ChildSessionRecord,\n\t\tprompt: string,\n\t\tsignal: AbortSignal,\n\t\ttimeoutMs: number,\n\t\tlimits: TurnLimits = {},\n\t): Promise<PromptSettlement> {\n\t\tif (signal.aborted) return { kind: \"aborted\" };\n\t\tlet timeout: NodeJS.Timeout | undefined;\n\t\tlet abortHandler: (() => void) | undefined;\n\t\tlet resolveLimit!: (settlement: PromptSettlement) => void;\n\t\tconst limitSettlement = new Promise<PromptSettlement>((resolve) => {\n\t\t\tresolveLimit = resolve;\n\t\t});\n\t\tconst monitor = new TurnBudgetMonitor({\n\t\t\t...limits,\n\t\t\tonExceeded: (stop) => resolveLimit({ kind: \"limit\", stop }),\n\t\t});\n\t\tconst unsubscribeBudget = record.session.subscribe((event) => {\n\t\t\tconst type = childEventType(event);\n\t\t\tif (type === \"tool_execution_end\") monitor.recordActivity();\n\t\t\tif (type !== \"message_end\") return;\n\t\t\tconst message = eventMessage(event);\n\t\t\tif (!message || typeof message !== \"object\" || Array.isArray(message)) return;\n\t\t\tconst value = message as Record<string, unknown>;\n\t\t\tif (value.role === \"toolResult\") {\n\t\t\t\tmonitor.recordActivity();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (value.role !== \"assistant\") return;\n\t\t\tmonitor.recordToolCalls(assistantToolCallCount(value.content));\n\t\t\tmonitor.recordAssistantTurn(\n\t\t\t\ttypeof value.stopReason === \"string\" ? value.stopReason : undefined,\n\t\t\t);\n\t\t});\n\t\tconst promptSettlement: Promise<PromptSettlement> = Promise.resolve()\n\t\t\t.then(() => {\n\t\t\t\tif (signal.aborted) throw new Error(\"In-process subagent prompt aborted before start\");\n\t\t\t\treturn record.session.prompt(prompt);\n\t\t\t})\n\t\t\t.then(() => ({ kind: \"completed\" as const }))\n\t\t\t.catch((error: unknown) => ({ kind: \"failed\" as const, error }));\n\t\tconst timeoutSettlement = new Promise<PromptSettlement>((resolve) => {\n\t\t\ttimeout = setTimeout(() => resolve({ kind: \"timeout\" }), timeoutMs);\n\t\t});\n\t\tconst abortSettlement = new Promise<PromptSettlement>((resolve) => {\n\t\t\tabortHandler = () => resolve({ kind: \"aborted\" });\n\t\t\tsignal.addEventListener(\"abort\", abortHandler, { once: true });\n\t\t\tif (signal.aborted) abortHandler();\n\t\t});\n\t\tconst settlement = await Promise.race([\n\t\t\tpromptSettlement,\n\t\t\ttimeoutSettlement,\n\t\t\tabortSettlement,\n\t\t\tlimitSettlement,\n\t\t]);\n\t\tif (timeout) clearTimeout(timeout);\n\t\tif (abortHandler) signal.removeEventListener(\"abort\", abortHandler);\n\t\ttry {\n\t\t\tunsubscribeBudget();\n\t\t} catch {\n\t\t\t// The owning record's unsubscribe/dispose path remains authoritative.\n\t\t}\n\t\tmonitor.dispose();\n\t\tif (\n\t\t\tsettlement.kind === \"timeout\" ||\n\t\t\tsettlement.kind === \"limit\" ||\n\t\t\tsettlement.kind === \"aborted\"\n\t\t) {\n\t\t\tconst [, settledAfterAbort] = await Promise.all([\n\t\t\t\tsettleWithin(record.session.abort(), this.abortGraceMs),\n\t\t\t\tcompletesWithin(promptSettlement, this.abortGraceMs),\n\t\t\t]);\n\t\t\tif (!settledAfterAbort) this.discardRecord(record);\n\t\t}\n\t\treturn settlement;\n\t}\n\n\tprivate discardRecord(record: ChildSessionRecord): void {\n\t\tfor (const [agentId, candidate] of this.sessions) {\n\t\t\tif (candidate === record) this.sessions.delete(agentId);\n\t\t}\n\t\tif (record.disposed) return;\n\t\trecord.disposed = true;\n\t\trecord.unsubscribe();\n\t\trecord.session.dispose();\n\t}\n}\n\nexport function validateInProcessTools(tools: string[] | undefined): string[] | undefined {\n\tif (tools === undefined) return undefined;\n\tconst unique = [...new Set(tools)];\n\tconst unsupported = unique.filter((tool) => !BUILT_IN_TOOL_NAMES.has(tool));\n\tif (unsupported.length > 0) {\n\t\tthrow new Error(\n\t\t\t`In-process subagents cannot load extension/custom tools: ${unsupported.map((tool) => safeTerminalLine(tool, 256)).join(\", \")}. Use stateful.transport \"subprocess\" for this agent.`,\n\t\t);\n\t}\n\treturn unique;\n}\n\nexport async function createSdkChildSession(\n\toptions: ChildSessionCreateOptions,\n): Promise<ChildSession> {\n\tconst agentDir = getAgentDir();\n\tconst projectTrusted =\n\t\toptions.agent.target?.trust.projectTrusted ??\n\t\t(options.agent.agentScope === \"project\" || options.agent.agentScope === \"both\");\n\tconst { services, support: coreSupport } = await prepareInProcessServices(\n\t\toptions.agent.cwd,\n\t\tagentDir,\n\t\toptions.agentConfig.systemPrompt,\n\t\tprojectTrusted,\n\t\toptions.peerRuntime\n\t\t\t? createInProcessPeerExtension(options.peerRuntime, options.agent.id)\n\t\t\t: undefined,\n\t);\n\tcopyRegisteredProviders(\n\t\toptions.modelRegistry as unknown as RegisteredProviderRegistry,\n\t\tservices.modelRuntime as unknown as ChildModelRuntime,\n\t);\n\tconst modelSupport: CoreModelSupport = {\n\t\tmodelRuntime: services.modelRuntime,\n\t\tresolveCliModel: coreSupport.resolveCliModel,\n\t};\n\tconst resolved = await resolveChildModel(options, modelSupport);\n\tawait transferChildModelAuth(options.modelRegistry, resolved.model, services.modelRuntime);\n\tconst model = resolved.model;\n\tconst sessionManager = SessionManager.inMemory(options.agent.cwd);\n\tseedChildSessionManager(sessionManager, options, model);\n\tconst selectedTools =\n\t\toptions.tools === undefined\n\t\t\t? undefined\n\t\t\t: options.peerRuntime\n\t\t\t\t? [...options.tools, ...CHILD_PEER_TOOL_NAMES]\n\t\t\t\t: options.tools;\n\tconst created = await coreSupport.createAgentSessionFromServices({\n\t\tservices,\n\t\tsessionManager,\n\t\tmodel,\n\t\tthinkingLevel: resolved.thinkingLevel,\n\t\ttools: selectedTools,\n\t\tnoTools: selectedTools?.length === 0 ? \"all\" : undefined,\n\t});\n\tconst session = created.session;\n\tif (selectedTools !== undefined) {\n\t\tconst active = session.getActiveToolNames();\n\t\tconst expected = [...selectedTools].sort();\n\t\tif (\n\t\t\tactive.length !== expected.length ||\n\t\t\t[...active].sort().some((name, index) => name !== expected[index])\n\t\t) {\n\t\t\tsession.dispose();\n\t\t\tthrow new Error(\n\t\t\t\t`In-process child activated an unexpected tool set (${active.join(\", \") || \"none\"}); use stateful.transport \"subprocess\".`,\n\t\t\t);\n\t\t}\n\t}\n\treturn {\n\t\tget sessionId() {\n\t\t\treturn session.sessionId;\n\t\t},\n\t\tget messages() {\n\t\t\treturn session.messages;\n\t\t},\n\t\tget provider() {\n\t\t\treturn session.model?.provider;\n\t\t},\n\t\tget model() {\n\t\t\treturn session.model?.id;\n\t\t},\n\t\tget thinkingLevel() {\n\t\t\treturn session.thinkingLevel;\n\t\t},\n\t\tprompt: (text) => session.prompt(text),\n\t\tsteer: (text) => session.steer(text),\n\t\tsubscribe: (listener) => session.subscribe((event) => listener(event)),\n\t\tabort: () => session.abort(),\n\t\tdispose: () => session.dispose(),\n\t\tgetActiveToolNames: () => session.getActiveToolNames(),\n\t};\n}\n\nasync function loadCoreSessionSupport(): Promise<CoreSessionSupport | undefined> {\n\tconst codingAgentModule = (await import(\n\t\t\"@earendil-works/pi-coding-agent\"\n\t)) as unknown as CodingAgentRuntimeModule;\n\tif (\n\t\t!codingAgentModule.createAgentSessionFromServices ||\n\t\t!codingAgentModule.createAgentSessionServices ||\n\t\t!codingAgentModule.resolveCliModel\n\t) {\n\t\treturn undefined;\n\t}\n\treturn {\n\t\tcreateAgentSessionFromServices: codingAgentModule.createAgentSessionFromServices,\n\t\tcreateAgentSessionServices: codingAgentModule.createAgentSessionServices,\n\t\tresolveCliModel: codingAgentModule.resolveCliModel,\n\t};\n}\n\nasync function transferChildModelAuth(\n\tmodelRegistry: ModelRegistry,\n\tmodel: Model<Api>,\n\tmodelRuntime: ModelRuntime,\n): Promise<void> {\n\tconst auth = await modelRegistry.getApiKeyAndHeaders(model);\n\tif (auth.ok && auth.apiKey) await modelRuntime.setRuntimeApiKey(model.provider, auth.apiKey);\n}\n\nexport function copyRegisteredProviders(\n\tregisteredProviders: RegisteredProviderRegistry,\n\tmodelRuntime: ChildModelRuntime,\n): void {\n\tfor (const provider of registeredProviders.getRegisteredProviderIds?.() ?? []) {\n\t\tconst config = registeredProviders.getRegisteredProviderConfig?.(provider);\n\t\tif (config !== undefined) {\n\t\t\tmodelRuntime.registerProvider(provider, config);\n\t\t\tcontinue;\n\t\t}\n\t\tconst nativeProvider = registeredProviders.getRegisteredNativeProvider?.(provider);\n\t\tif (nativeProvider) modelRuntime.registerNativeProvider?.(nativeProvider);\n\t}\n}\n\nexport async function resolveChildModel(\n\toptions: ChildSessionCreateOptions,\n\tsupport?: CoreModelSupport,\n): Promise<{\n\tmodel: Model<Api>;\n\tthinkingLevel: SubagentThinkingLevel;\n}> {\n\tif (!support) throw unsupportedInProcessCoreError();\n\tlet model = options.parentRuntime.model;\n\tlet modelThinkingLevel: SubagentThinkingLevel | undefined;\n\tif (options.agentConfig.model !== undefined) {\n\t\tconst requested = options.agentConfig.model.trim();\n\t\tif (!requested) throw new Error(\"In-process subagent model cannot be empty\");\n\t\tconst resolved = support.resolveCliModel({\n\t\t\tcliModel: requested,\n\t\t\tmodelRuntime: support.modelRuntime,\n\t\t});\n\t\tif (resolved.error) throw new Error(resolved.error);\n\t\tif (!resolved.model)\n\t\t\tthrow new Error(`Unable to resolve in-process subagent model ${requested}`);\n\t\tmodel = resolved.model;\n\t\tmodelThinkingLevel = resolved.thinkingLevel;\n\t}\n\tif (!model) model = options.modelRegistry.getAvailable()[0];\n\tif (!model)\n\t\tthrow new Error(\"No model with configured authentication is available for in-process subagent\");\n\tmodel = support.modelRuntime.getModel(model.provider, model.id) ?? model;\n\treturn {\n\t\tmodel,\n\t\tthinkingLevel:\n\t\t\toptions.agent.thinkingLevel ??\n\t\t\toptions.agentConfig.thinkingLevel ??\n\t\t\tmodelThinkingLevel ??\n\t\t\toptions.parentRuntime.thinkingLevel,\n\t};\n}\n\nfunction unsupportedInProcessCoreError(): Error {\n\treturn new Error(\n\t\t'In-process subagents require Pi core createAgentSessionServices, createAgentSessionFromServices, and resolveCliModel support; set stateful.transport to \"subprocess\".',\n\t);\n}\n\nasync function prepareInProcessServices(\n\tcwd: string,\n\tagentDir: string,\n\tagentSystemPrompt: string,\n\tprojectTrusted: boolean,\n\tpeerExtension?: import(\"@earendil-works/pi-coding-agent\").ExtensionFactory,\n): Promise<{ services: AgentSessionServices; support: CoreSessionSupport }> {\n\tconst promptResources = await resolvePiPromptResources(cwd, projectTrusted, agentDir);\n\tconst settingsManager = SettingsManager.create(cwd, agentDir, { projectTrusted });\n\tconst support = await loadCoreSessionSupport();\n\tif (!support) throw unsupportedInProcessCoreError();\n\tconst services = await support.createAgentSessionServices({\n\t\tcwd,\n\t\tagentDir,\n\t\tsettingsManager,\n\t\tresourceLoaderOptions: {\n\t\t\tnoExtensions: true,\n\t\t\t...(peerExtension ? { extensionFactories: [peerExtension] } : {}),\n\t\t\tappendSystemPrompt: [\n\t\t\t\t...promptResources.appendSystemPromptPaths,\n\t\t\t\t...(agentSystemPrompt.trim() ? [agentSystemPrompt] : []),\n\t\t\t],\n\t\t},\n\t});\n\treturn { services, support };\n}\n\nexport async function createInProcessServices(\n\tcwd: string,\n\tagentDir: string,\n\tagentSystemPrompt: string,\n\tprojectTrusted = false,\n): Promise<AgentSessionServices> {\n\treturn (await prepareInProcessServices(cwd, agentDir, agentSystemPrompt, projectTrusted))\n\t\t.services;\n}\n\nexport function seedChildSessionManager(\n\tsessionManager: SessionManager,\n\toptions: ChildSessionCreateOptions,\n\tmodel: Model<Api>,\n): void {\n\tlet timestamp = Date.now() - (options.history.length * 2 + 1);\n\tif (options.context?.trim()) {\n\t\tsessionManager.appendMessage({\n\t\t\trole: \"user\",\n\t\t\tcontent: `Parent context:\\n${redactPrivateText(options.context)}`,\n\t\t\ttimestamp: timestamp++,\n\t\t});\n\t}\n\tfor (const turn of options.history) {\n\t\tsessionManager.appendMessage({\n\t\t\trole: \"user\",\n\t\t\tcontent: redactPrivateText(turn.task),\n\t\t\ttimestamp: timestamp++,\n\t\t});\n\t\tsessionManager.appendMessage({\n\t\t\trole: \"assistant\",\n\t\t\tcontent: [{ type: \"text\", text: redactPrivateText(turn.output) }],\n\t\t\tapi: model.api,\n\t\t\tprovider: model.provider,\n\t\t\tmodel: model.id,\n\t\t\tusage: {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t\ttotalTokens: 0,\n\t\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t\t},\n\t\t\tstopReason: turn.exitCode === 0 ? \"stop\" : \"error\",\n\t\t\ttimestamp: timestamp++,\n\t\t});\n\t}\n}\n\nexport function buildCurrentTurnPrompt(agent: ManagedAgent, task: string): string {\n\tconst ids = new Set(agent.currentMailboxMessageIds ?? []);\n\tconst messages = agent.mailbox\n\t\t.filter((message) => ids.has(message.id))\n\t\t.slice(-20)\n\t\t.map((message) =>\n\t\t\tformatPeerMessage({ ...message, content: redactPrivateText(message.content) }),\n\t\t)\n\t\t.join(\"\\n\\n\");\n\tconst base = messages\n\t\t? `${redactPrivateText(task)}\\n\\nMailbox messages:\\n${messages}`\n\t\t: redactPrivateText(task);\n\tconst contracted = appendDelegationContract(base, agent.contract, DEFAULT_MAX_CONTEXT_BYTES);\n\treturn truncateUtf8(\n\t\tappendResultInstruction(contracted.text, agent.resultFormat),\n\t\tDEFAULT_MAX_CONTEXT_BYTES,\n\t).text;\n}\n\nfunction latestAssistant(messages: readonly unknown[]): {\n\toutput: string;\n\tstopReason?: string;\n\terror?: string;\n} {\n\tfor (let index = messages.length - 1; index >= 0; index--) {\n\t\tconst message = messages[index];\n\t\tif (!message || typeof message !== \"object\") continue;\n\t\tconst candidate = message as { role?: string; stopReason?: string; errorMessage?: string };\n\t\tif (candidate.role !== \"assistant\") continue;\n\t\treturn {\n\t\t\toutput: assistantText(message),\n\t\t\tstopReason: candidate.stopReason,\n\t\t\terror: candidate.errorMessage,\n\t\t};\n\t}\n\treturn { output: \"\" };\n}\n\nfunction childEventType(event: unknown): string | undefined {\n\tif (!event || typeof event !== \"object\" || Array.isArray(event)) return undefined;\n\tconst type = (event as { type?: unknown }).type;\n\treturn typeof type === \"string\" ? type : undefined;\n}\n\nfunction assistantToolCallCount(content: unknown): number {\n\tif (!Array.isArray(content)) return 0;\n\treturn content.filter(\n\t\t(part) =>\n\t\t\tpart &&\n\t\t\ttypeof part === \"object\" &&\n\t\t\t!Array.isArray(part) &&\n\t\t\t(part as { type?: unknown }).type === \"toolCall\",\n\t).length;\n}\n\nfunction eventMessage(event: unknown): unknown {\n\tif (!event || typeof event !== \"object\") return undefined;\n\tconst candidate = event as { type?: string; message?: unknown };\n\treturn candidate.type === \"message_update\" || candidate.type === \"message_end\"\n\t\t? candidate.message\n\t\t: undefined;\n}\n\nfunction assistantText(message: unknown): string {\n\tif (!message || typeof message !== \"object\") return \"\";\n\tconst content = (message as { content?: unknown }).content;\n\tif (typeof content === \"string\") return content;\n\tif (!Array.isArray(content)) return \"\";\n\treturn content\n\t\t.filter((part): part is { type: \"text\"; text: string } =>\n\t\t\tBoolean(\n\t\t\t\tpart &&\n\t\t\t\t\ttypeof part === \"object\" &&\n\t\t\t\t\t(part as { type?: unknown }).type === \"text\" &&\n\t\t\t\t\ttypeof (part as { text?: unknown }).text === \"string\",\n\t\t\t),\n\t\t)\n\t\t.map((part) => part.text)\n\t\t.join(\"\\n\");\n}\n\nfunction interruptedOutcome(output: string): TurnOutcome {\n\treturn { output, exitCode: 130, aborted: true, error: \"In-process subagent was aborted\" };\n}\n\nfunction inProcessPolicy(\n\tagentConfig: AgentConfig,\n\tmanagedAgent: ManagedAgent,\n): NonNullable<TurnOutcome[\"policy\"]> {\n\treturn {\n\t\tinherited: [\"modelRegistry\", \"authentication\", \"cwdResources\"],\n\t\toverridden: [\n\t\t\t...(agentConfig.model ? [\"model\"] : []),\n\t\t\t...(managedAgent.thinkingLevel || agentConfig.thinkingLevel ? [\"thinkingLevel\"] : []),\n\t\t\t...(agentConfig.tools ? [\"tools\"] : []),\n\t\t],\n\t\tunsupported: [\"approvalPolicy\", \"sandboxProfile\", \"providerHeaders\", \"extensionState\"],\n\t};\n}\n\nasync function settleWithin(promise: Promise<unknown>, timeoutMs: number): Promise<void> {\n\tawait completesWithin(\n\t\tpromise.catch(() => undefined),\n\t\ttimeoutMs,\n\t);\n}\n\nasync function completesWithin(promise: Promise<unknown>, timeoutMs: number): Promise<boolean> {\n\tlet timeout: NodeJS.Timeout | undefined;\n\ttry {\n\t\treturn await Promise.race([\n\t\t\tpromise.then(() => true),\n\t\t\tnew Promise<boolean>((resolve) => {\n\t\t\t\ttimeout = setTimeout(() => resolve(false), timeoutMs);\n\t\t\t}),\n\t\t]);\n\t} finally {\n\t\tif (timeout) clearTimeout(timeout);\n\t}\n}\n\nfunction errorMessage(error: unknown): string {\n\treturn truncateUtf8(\n\t\terror instanceof Error ? error.message : String(error),\n\t\tDEFAULT_MAX_OUTPUT_BYTES,\n\t).text;\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,18 +0,0 @@
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/usage-recording-config.ts
5
- var USAGE_RECORDING_DIRECTORY = "pi-subagents-usage";
6
- var USAGE_RECORDING_RETENTION_DAYS = 30;
7
- var USAGE_RECORDING_STUDY_ID = "pi-subagents-surface-v1";
8
- function resolveUsageRecordingEnabled(settings) {
9
- return settings?.enabled === true;
10
- }
11
-
12
- export {
13
- USAGE_RECORDING_DIRECTORY,
14
- USAGE_RECORDING_RETENTION_DAYS,
15
- USAGE_RECORDING_STUDY_ID,
16
- resolveUsageRecordingEnabled
17
- };
18
- //# sourceMappingURL=chunk-N2T5IN4X.ts.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/usage-recording-config.ts"],
4
- "sourcesContent": ["export const USAGE_RECORDING_DIRECTORY = \"pi-subagents-usage\";\nexport const USAGE_RECORDING_RETENTION_DAYS = 30;\nexport const USAGE_RECORDING_STUDY_ID = \"pi-subagents-surface-v1\";\n\nexport interface SubagentUsageRecordingSettings {\n\tenabled?: boolean;\n}\n\nexport function resolveUsageRecordingEnabled(\n\tsettings: SubagentUsageRecordingSettings | undefined,\n): boolean {\n\treturn settings?.enabled === true;\n}\n"],
5
- "mappings": ";;;;AAAO,IAAM,4BAA4B;AAClC,IAAM,iCAAiC;AACvC,IAAM,2BAA2B;AAMjC,SAAS,6BACf,UACU;AACV,SAAO,UAAU,YAAY;AAC9B;",
6
- "names": []
7
- }
@@ -1,73 +0,0 @@
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/task-path.ts
5
- import { createHash } from "node:crypto";
6
- var ROOT_TASK_PATH = "/root";
7
- var MAX_TASK_NAME_LENGTH = 128;
8
- var MAX_TASK_PATH_LENGTH = 2048;
9
- var TASK_NAME_PATTERN = /^[a-z0-9_]+$/u;
10
- function validateTaskName(value) {
11
- if (!value) throw new Error("Subagent taskName must not be empty");
12
- if (value === "root" || value === "." || value === "..") {
13
- throw new Error(`Subagent taskName ${JSON.stringify(value)} is reserved`);
14
- }
15
- if (value.length > MAX_TASK_NAME_LENGTH) {
16
- throw new Error(`Subagent taskName cannot exceed ${MAX_TASK_NAME_LENGTH} characters`);
17
- }
18
- if (value.includes("/")) throw new Error("Subagent taskName must not contain `/`");
19
- if (!TASK_NAME_PATTERN.test(value)) {
20
- throw new Error(
21
- "Subagent taskName must use only lowercase ASCII letters, digits, and underscores"
22
- );
23
- }
24
- return value;
25
- }
26
- function validateTaskPath(value) {
27
- if (!value.startsWith(`${ROOT_TASK_PATH}/`) && value !== ROOT_TASK_PATH) {
28
- throw new Error("Canonical subagent task paths must start with `/root`");
29
- }
30
- if (value.length > MAX_TASK_PATH_LENGTH) {
31
- throw new Error(
32
- `Canonical subagent task paths cannot exceed ${MAX_TASK_PATH_LENGTH} characters`
33
- );
34
- }
35
- if (value.endsWith("/") || value.includes("//")) {
36
- throw new Error("Canonical subagent task paths must not contain empty segments");
37
- }
38
- for (const segment of value.slice(ROOT_TASK_PATH.length + 1).split("/")) {
39
- if (segment) validateTaskName(segment);
40
- }
41
- return value;
42
- }
43
- function joinTaskPath(parentPath, taskName) {
44
- const parent = validateTaskPath(parentPath);
45
- const name = validateTaskName(taskName);
46
- return validateTaskPath(`${parent}/${name}`);
47
- }
48
- function resolveTaskPath(senderPath, reference) {
49
- if (!reference) throw new Error("Subagent task path reference must not be empty");
50
- if (reference.startsWith("/")) return validateTaskPath(reference);
51
- const sender = validateTaskPath(senderPath);
52
- if (reference.endsWith("/")) {
53
- throw new Error("Relative subagent task paths must not end with `/`");
54
- }
55
- let path = sender;
56
- for (const segment of reference.split("/")) path = joinTaskPath(path, segment);
57
- return path;
58
- }
59
- function deriveTaskName(agentId) {
60
- const digest = createHash("sha256").update(agentId).digest("hex").slice(0, 32);
61
- return `agent_${digest}`;
62
- }
63
-
64
- export {
65
- ROOT_TASK_PATH,
66
- MAX_TASK_NAME_LENGTH,
67
- validateTaskName,
68
- validateTaskPath,
69
- joinTaskPath,
70
- resolveTaskPath,
71
- deriveTaskName
72
- };
73
- //# sourceMappingURL=chunk-N7BLVXKK.ts.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/task-path.ts"],
4
- "sourcesContent": ["import { createHash } from \"node:crypto\";\n\nexport const ROOT_TASK_PATH = \"/root\";\nexport const MAX_TASK_NAME_LENGTH = 128;\nexport const MAX_TASK_PATH_LENGTH = 2_048;\n\nconst TASK_NAME_PATTERN = /^[a-z0-9_]+$/u;\n\nexport function validateTaskName(value: string): string {\n\tif (!value) throw new Error(\"Subagent taskName must not be empty\");\n\tif (value === \"root\" || value === \".\" || value === \"..\") {\n\t\tthrow new Error(`Subagent taskName ${JSON.stringify(value)} is reserved`);\n\t}\n\tif (value.length > MAX_TASK_NAME_LENGTH) {\n\t\tthrow new Error(`Subagent taskName cannot exceed ${MAX_TASK_NAME_LENGTH} characters`);\n\t}\n\tif (value.includes(\"/\")) throw new Error(\"Subagent taskName must not contain `/`\");\n\tif (!TASK_NAME_PATTERN.test(value)) {\n\t\tthrow new Error(\n\t\t\t\"Subagent taskName must use only lowercase ASCII letters, digits, and underscores\",\n\t\t);\n\t}\n\treturn value;\n}\n\nexport function validateTaskPath(value: string): string {\n\tif (!value.startsWith(`${ROOT_TASK_PATH}/`) && value !== ROOT_TASK_PATH) {\n\t\tthrow new Error(\"Canonical subagent task paths must start with `/root`\");\n\t}\n\tif (value.length > MAX_TASK_PATH_LENGTH) {\n\t\tthrow new Error(\n\t\t\t`Canonical subagent task paths cannot exceed ${MAX_TASK_PATH_LENGTH} characters`,\n\t\t);\n\t}\n\tif (value.endsWith(\"/\") || value.includes(\"//\")) {\n\t\tthrow new Error(\"Canonical subagent task paths must not contain empty segments\");\n\t}\n\tfor (const segment of value.slice(ROOT_TASK_PATH.length + 1).split(\"/\")) {\n\t\tif (segment) validateTaskName(segment);\n\t}\n\treturn value;\n}\n\nexport function joinTaskPath(parentPath: string, taskName: string): string {\n\tconst parent = validateTaskPath(parentPath);\n\tconst name = validateTaskName(taskName);\n\treturn validateTaskPath(`${parent}/${name}`);\n}\n\nexport function resolveTaskPath(senderPath: string, reference: string): string {\n\tif (!reference) throw new Error(\"Subagent task path reference must not be empty\");\n\tif (reference.startsWith(\"/\")) return validateTaskPath(reference);\n\tconst sender = validateTaskPath(senderPath);\n\tif (reference.endsWith(\"/\")) {\n\t\tthrow new Error(\"Relative subagent task paths must not end with `/`\");\n\t}\n\tlet path = sender;\n\tfor (const segment of reference.split(\"/\")) path = joinTaskPath(path, segment);\n\treturn path;\n}\n\nexport function deriveTaskName(agentId: string): string {\n\tconst digest = createHash(\"sha256\").update(agentId).digest(\"hex\").slice(0, 32);\n\treturn `agent_${digest}`;\n}\n"],
5
- "mappings": ";;;;AAAA,SAAS,kBAAkB;AAEpB,IAAM,iBAAiB;AACvB,IAAM,uBAAuB;AAC7B,IAAM,uBAAuB;AAEpC,IAAM,oBAAoB;AAEnB,SAAS,iBAAiB,OAAuB;AACvD,MAAI,CAAC,MAAO,OAAM,IAAI,MAAM,qCAAqC;AACjE,MAAI,UAAU,UAAU,UAAU,OAAO,UAAU,MAAM;AACxD,UAAM,IAAI,MAAM,qBAAqB,KAAK,UAAU,KAAK,CAAC,cAAc;AAAA,EACzE;AACA,MAAI,MAAM,SAAS,sBAAsB;AACxC,UAAM,IAAI,MAAM,mCAAmC,oBAAoB,aAAa;AAAA,EACrF;AACA,MAAI,MAAM,SAAS,GAAG,EAAG,OAAM,IAAI,MAAM,wCAAwC;AACjF,MAAI,CAAC,kBAAkB,KAAK,KAAK,GAAG;AACnC,UAAM,IAAI;AAAA,MACT;AAAA,IACD;AAAA,EACD;AACA,SAAO;AACR;AAEO,SAAS,iBAAiB,OAAuB;AACvD,MAAI,CAAC,MAAM,WAAW,GAAG,cAAc,GAAG,KAAK,UAAU,gBAAgB;AACxE,UAAM,IAAI,MAAM,uDAAuD;AAAA,EACxE;AACA,MAAI,MAAM,SAAS,sBAAsB;AACxC,UAAM,IAAI;AAAA,MACT,+CAA+C,oBAAoB;AAAA,IACpE;AAAA,EACD;AACA,MAAI,MAAM,SAAS,GAAG,KAAK,MAAM,SAAS,IAAI,GAAG;AAChD,UAAM,IAAI,MAAM,+DAA+D;AAAA,EAChF;AACA,aAAW,WAAW,MAAM,MAAM,eAAe,SAAS,CAAC,EAAE,MAAM,GAAG,GAAG;AACxE,QAAI,QAAS,kBAAiB,OAAO;AAAA,EACtC;AACA,SAAO;AACR;AAEO,SAAS,aAAa,YAAoB,UAA0B;AAC1E,QAAM,SAAS,iBAAiB,UAAU;AAC1C,QAAM,OAAO,iBAAiB,QAAQ;AACtC,SAAO,iBAAiB,GAAG,MAAM,IAAI,IAAI,EAAE;AAC5C;AAEO,SAAS,gBAAgB,YAAoB,WAA2B;AAC9E,MAAI,CAAC,UAAW,OAAM,IAAI,MAAM,gDAAgD;AAChF,MAAI,UAAU,WAAW,GAAG,EAAG,QAAO,iBAAiB,SAAS;AAChE,QAAM,SAAS,iBAAiB,UAAU;AAC1C,MAAI,UAAU,SAAS,GAAG,GAAG;AAC5B,UAAM,IAAI,MAAM,oDAAoD;AAAA,EACrE;AACA,MAAI,OAAO;AACX,aAAW,WAAW,UAAU,MAAM,GAAG,EAAG,QAAO,aAAa,MAAM,OAAO;AAC7E,SAAO;AACR;AAEO,SAAS,eAAe,SAAyB;AACvD,QAAM,SAAS,WAAW,QAAQ,EAAE,OAAO,OAAO,EAAE,OAAO,KAAK,EAAE,MAAM,GAAG,EAAE;AAC7E,SAAO,SAAS,MAAM;AACvB;",
6
- "names": []
7
- }
@@ -1,322 +0,0 @@
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
- DEFAULT_MAX_CONTEXT_BYTES,
5
- truncateUtf8
6
- } from "./chunk-H3FP6DLR.ts";
7
-
8
- // src/completion-requirement.ts
9
- import { StringEnum } from "@earendil-works/pi-ai";
10
- var COMPLETION_REQUIREMENT_MODES = ["background", "required"];
11
- var CompletionRequirementModeSchema = StringEnum(COMPLETION_REQUIREMENT_MODES, {
12
- description: "Mark this exact turn as background (default) or required for the parent final answer. Required results are tracked until their exact completion becomes visible, but current Pi versions do not provide a hard pre-display final-answer barrier.",
13
- default: "background"
14
- });
15
- var COMPLETION_REQUIREMENT_VERSION = "pi-subagents:completion-requirement:v1";
16
- var COMPLETION_REQUIREMENT_CONTEXT_TYPE = "pi-subagent-required-completions";
17
- var COMPLETION_REQUIREMENT_TRANSITION_TYPE = "pi-subagent-required-completion-transition";
18
- var COMPLETION_REQUIREMENT_TRANSITION_VERSION = "pi-subagents:completion-requirement-transition:v1";
19
- var MAX_REQUIREMENTS_PER_AGENT = 20;
20
- var MAX_UNRESOLVED_REQUIRED_COMPLETIONS = 64;
21
- function beginCompletionRequirement(records, input) {
22
- const retained = (records ?? []).filter(
23
- (record) => record.runId !== input.runId || record.generation !== input.generation
24
- );
25
- retained.push({
26
- version: COMPLETION_REQUIREMENT_VERSION,
27
- runId: input.runId,
28
- generation: input.generation,
29
- state: "pending",
30
- createdAt: input.createdAt,
31
- updatedAt: input.createdAt
32
- });
33
- return retained.slice(-MAX_REQUIREMENTS_PER_AGENT);
34
- }
35
- function makeCompletionAvailable(records, input) {
36
- return updateExact(records, input.runId, input.generation, (record) => ({
37
- ...record,
38
- state: "available",
39
- completionId: input.completionId,
40
- terminalState: input.terminalState,
41
- updatedAt: input.updatedAt
42
- }));
43
- }
44
- function makeCompletionVisible(records, completionId, updatedAt) {
45
- if (!records?.some((record) => record.completionId === completionId)) {
46
- return records?.map((record) => ({ ...record }));
47
- }
48
- return records.map(
49
- (record) => record.completionId === completionId ? { ...record, state: "visible", updatedAt } : { ...record }
50
- );
51
- }
52
- function cancelPendingCompletionRequirements(records, terminalState, updatedAt) {
53
- if (!records?.some((record) => record.state === "pending")) {
54
- return records?.map((record) => ({ ...record }));
55
- }
56
- return records.map(
57
- (record) => record.state === "pending" ? {
58
- ...record,
59
- state: "cancelled",
60
- terminalState,
61
- updatedAt
62
- } : { ...record }
63
- );
64
- }
65
- function requirementForCompletion(agent, completionId) {
66
- return agent.completionRequirements?.find((record) => record.completionId === completionId);
67
- }
68
- function completionRequirementKey(record) {
69
- return `${record.runId}\0${record.generation}`;
70
- }
71
- function completionRequirementsFromBranch(entries) {
72
- const records = /* @__PURE__ */ new Map();
73
- let observedState = false;
74
- for (const entry of entries) {
75
- if (!entry || typeof entry !== "object" || Array.isArray(entry)) continue;
76
- const candidate = entry;
77
- const message = candidate.type === "message" && candidate.message && typeof candidate.message === "object" ? candidate.message : candidate;
78
- if (message.role === "toolResult" && ["subagent_spawn", "subagent_send", "subagent_await", "subagent_manage"].includes(
79
- String(message.toolName)
80
- )) {
81
- observedState = true;
82
- const details2 = message.details;
83
- if (!details2 || typeof details2 !== "object" || Array.isArray(details2)) continue;
84
- const detailsRecord = details2;
85
- const agents = [
86
- detailsRecord.agent,
87
- ...Array.isArray(detailsRecord.agents) ? detailsRecord.agents : []
88
- ];
89
- for (const agent of agents) {
90
- if (!agent || typeof agent !== "object" || Array.isArray(agent)) continue;
91
- const requirements = agent.completionRequirements;
92
- if (!Array.isArray(requirements)) continue;
93
- for (const requirement of requirements) {
94
- if (isCompletionRequirementRecord(requirement)) {
95
- records.set(completionRequirementKey(requirement), { ...requirement });
96
- }
97
- }
98
- }
99
- continue;
100
- }
101
- if (message.role === "custom" && message.customType === COMPLETION_REQUIREMENT_TRANSITION_TYPE) {
102
- const details2 = message.details;
103
- if (!details2 || typeof details2 !== "object" || Array.isArray(details2)) continue;
104
- const detailRecord2 = details2;
105
- if (detailRecord2.version !== COMPLETION_REQUIREMENT_TRANSITION_VERSION) continue;
106
- const requirements = Array.isArray(detailRecord2.records) ? detailRecord2.records : [];
107
- for (const requirement of requirements) {
108
- if (!isCompletionRequirementRecord(requirement) || requirement.state !== "cancelled") {
109
- continue;
110
- }
111
- observedState = true;
112
- records.set(completionRequirementKey(requirement), { ...requirement });
113
- }
114
- continue;
115
- }
116
- if (message.role !== "custom" || message.customType !== "pi-subagent-completion") continue;
117
- const details = message.details;
118
- if (!details || typeof details !== "object" || Array.isArray(details)) continue;
119
- const detailRecord = details;
120
- const completionRecords = Array.isArray(detailRecord.completions) ? detailRecord.completions : [detailRecord];
121
- for (const completion of completionRecords) {
122
- if (!completion || typeof completion !== "object" || Array.isArray(completion)) continue;
123
- const requirement = completion.completionRequirement;
124
- if (!isCompletionRequirementRecord(requirement)) continue;
125
- records.set(completionRequirementKey(requirement), {
126
- ...requirement,
127
- state: "visible"
128
- });
129
- }
130
- }
131
- return { observedState, records, keys: new Set(records.keys()) };
132
- }
133
- function pendingRequiredCompletionCount(agent) {
134
- return (agent.completionRequirements ?? []).filter(
135
- (record) => record.state === "pending" || record.state === "available"
136
- ).length;
137
- }
138
- function createRequiredCompletionTransition(messages, agents) {
139
- const summarized = leadingSummaryBoundary(messages) > 0;
140
- const state = modelRequirementState(agents);
141
- const visible = completionRequirementsFromBranch(messages).records;
142
- const records = state.records.filter((record) => {
143
- if (record.state !== "cancelled") return false;
144
- const retained = visible.get(completionRequirementKey(record));
145
- if (modelRequirementStateMatches(retained, record)) return false;
146
- return !summarized || retained !== void 0;
147
- });
148
- if (records.length === 0) return void 0;
149
- return {
150
- role: "custom",
151
- customType: COMPLETION_REQUIREMENT_TRANSITION_TYPE,
152
- content: requiredCompletionTransitionContent(records, state.omittedCancelled),
153
- display: false,
154
- details: {
155
- version: COMPLETION_REQUIREMENT_TRANSITION_VERSION,
156
- records: records.map((record) => ({ ...record }))
157
- },
158
- timestamp: 0
159
- };
160
- }
161
- function reconcileRequiredCompletionContext(messages, agents, restorationPredecessors = [], restoredBoundaryContent) {
162
- const existing = messages.filter(isRequiredCompletionContextMessage);
163
- const withoutPrior = messages.filter((message) => !isRequiredCompletionContextMessage(message));
164
- const state = modelRequirementState(agents);
165
- const summaryBoundary = leadingSummaryBoundary(withoutPrior);
166
- const currentContent = state.records.length > 0 && !hasModelVisibleRequirementState(withoutPrior, state.records) ? requiredCompletionContextContent(state.records, state.omittedCancelled) : void 0;
167
- const content = summaryBoundary > 0 ? restoredBoundaryContent ?? currentContent : void 0;
168
- let insertionBoundary = summaryBoundary;
169
- while (insertionBoundary < withoutPrior.length) {
170
- const predecessor = withoutPrior[insertionBoundary];
171
- if (predecessor?.role !== "custom" || !restorationPredecessors.includes(predecessor.customType)) {
172
- break;
173
- }
174
- insertionBoundary += 1;
175
- }
176
- if (content !== void 0 && existing.length === 1 && messages[insertionBoundary] === existing[0] && existing[0]?.content === content && hasCompletionRequirementContextVersion(existing[0])) {
177
- return messages;
178
- }
179
- if (existing.length === 0 && content === void 0) return messages;
180
- if (content === void 0) return withoutPrior;
181
- return [
182
- ...withoutPrior.slice(0, insertionBoundary),
183
- {
184
- role: "custom",
185
- customType: COMPLETION_REQUIREMENT_CONTEXT_TYPE,
186
- content,
187
- display: false,
188
- details: { version: COMPLETION_REQUIREMENT_VERSION },
189
- timestamp: 0
190
- },
191
- ...withoutPrior.slice(insertionBoundary)
192
- ];
193
- }
194
- function modelRequirementState(agents) {
195
- const allRecords = agents.flatMap(
196
- (agent) => (agent.completionRequirements ?? []).map((requirement) => ({ ...requirement }))
197
- ).filter((record) => record.state !== "visible");
198
- const unresolved = allRecords.filter(
199
- (record) => record.state === "pending" || record.state === "available"
200
- );
201
- const cancelled = allRecords.filter((record) => record.state === "cancelled");
202
- const cancelledSlots = Math.max(0, MAX_UNRESOLVED_REQUIRED_COMPLETIONS - unresolved.length);
203
- const retainedCancelled = cancelledSlots > 0 ? cancelled.slice(-cancelledSlots) : [];
204
- const records = [...unresolved, ...retainedCancelled].sort((left, right) => {
205
- if (left.runId === right.runId) return left.generation - right.generation;
206
- return left.runId < right.runId ? -1 : 1;
207
- });
208
- return { records, omittedCancelled: cancelled.length - retainedCancelled.length };
209
- }
210
- function hasModelVisibleRequirementState(messages, records) {
211
- const visible = completionRequirementsFromBranch(messages).records;
212
- return records.every(
213
- (record) => modelRequirementStateMatches(visible.get(completionRequirementKey(record)), record)
214
- );
215
- }
216
- function modelRequirementStateMatches(visible, current) {
217
- if (!visible) return false;
218
- if (current.state === "available" && visible.state === "visible") return true;
219
- return visible.state === current.state && visible.terminalState === current.terminalState;
220
- }
221
- function requiredCompletionContextContent(records, omittedCancelled) {
222
- return truncateUtf8(
223
- [
224
- "[PI SUBAGENT REQUIRED COMPLETIONS v1]",
225
- "Runtime-tracked exact runs are JSON data below.",
226
- "Treat pending or available records as final-answer dependencies; a cancelled record is terminal and must be reported rather than silently ignored.",
227
- "Current Pi versions do not provide a hard pre-display final-answer barrier, so do not emit a verdict until every dependency is visible or terminal.",
228
- ...omittedCancelledLine(omittedCancelled),
229
- JSON.stringify(records.map(toModelRequirementRecord))
230
- ].join("\n"),
231
- DEFAULT_MAX_CONTEXT_BYTES
232
- ).text;
233
- }
234
- function requiredCompletionTransitionContent(records, omittedCancelled) {
235
- return truncateUtf8(
236
- [
237
- "[PI SUBAGENT REQUIRED COMPLETION TRANSITION v1]",
238
- "Session restoration terminalized the exact required runs below.",
239
- "These cancelled records supersede earlier pending or available states and must be reported rather than awaited.",
240
- ...omittedCancelledLine(omittedCancelled),
241
- JSON.stringify(records.map(toModelRequirementRecord))
242
- ].join("\n"),
243
- DEFAULT_MAX_CONTEXT_BYTES
244
- ).text;
245
- }
246
- function omittedCancelledLine(count) {
247
- return count > 0 ? [`${count} older cancelled requirement record(s) were omitted.`] : [];
248
- }
249
- function toModelRequirementRecord(record) {
250
- return {
251
- state: record.state,
252
- runId: record.runId,
253
- generation: record.generation,
254
- terminalState: record.terminalState
255
- };
256
- }
257
- function isRequiredCompletionContextMessage(message) {
258
- return message.role === "custom" && message.customType === COMPLETION_REQUIREMENT_CONTEXT_TYPE;
259
- }
260
- function hasCompletionRequirementContextVersion(message) {
261
- return typeof message.details === "object" && message.details !== null && !Array.isArray(message.details) && message.details.version === COMPLETION_REQUIREMENT_VERSION;
262
- }
263
- function leadingSummaryBoundary(messages) {
264
- let index = 0;
265
- while (index < messages.length) {
266
- const role = messages[index]?.role;
267
- if (role !== "compactionSummary" && role !== "branchSummary") break;
268
- index += 1;
269
- }
270
- return index;
271
- }
272
- function isCompletionRequirementRecord(value) {
273
- if (!value || typeof value !== "object" || Array.isArray(value)) return false;
274
- const record = value;
275
- const state = String(record.state);
276
- const hasCompletion = typeof record.completionId === "string" && record.completionId.length > 0;
277
- const hasTerminalState = isAgentLifecycleState(record.terminalState);
278
- const transitionShapeValid = state === "pending" ? record.completionId === void 0 && record.terminalState === void 0 : state === "available" || state === "visible" ? hasCompletion && hasTerminalState : state === "cancelled" && record.completionId === void 0 && hasTerminalState;
279
- return transitionShapeValid && record.version === COMPLETION_REQUIREMENT_VERSION && typeof record.runId === "string" && record.runId.length > 0 && record.runId.length <= 256 && typeof record.generation === "number" && Number.isSafeInteger(record.generation) && record.generation >= 1 && ["pending", "available", "visible", "cancelled"].includes(state) && typeof record.createdAt === "number" && Number.isFinite(record.createdAt) && typeof record.updatedAt === "number" && Number.isFinite(record.updatedAt) && record.updatedAt >= record.createdAt && (record.completionId === void 0 || typeof record.completionId === "string" && record.completionId.length <= 256) && (record.terminalState === void 0 || isAgentLifecycleState(record.terminalState));
280
- }
281
- function updateExact(records, runId, generation, update) {
282
- if (!records?.some((record) => record.runId === runId && record.generation === generation)) {
283
- return records?.map((record) => ({ ...record }));
284
- }
285
- return records.map(
286
- (record) => record.runId === runId && record.generation === generation ? update(record) : { ...record }
287
- );
288
- }
289
- function isAgentLifecycleState(value) {
290
- return [
291
- "starting",
292
- "running",
293
- "idle",
294
- "completed",
295
- "partial",
296
- "blocked",
297
- "needs-input",
298
- "abstained",
299
- "stale",
300
- "interrupted",
301
- "failed",
302
- "closed"
303
- ].includes(String(value));
304
- }
305
-
306
- export {
307
- CompletionRequirementModeSchema,
308
- COMPLETION_REQUIREMENT_CONTEXT_TYPE,
309
- MAX_UNRESOLVED_REQUIRED_COMPLETIONS,
310
- beginCompletionRequirement,
311
- makeCompletionAvailable,
312
- makeCompletionVisible,
313
- cancelPendingCompletionRequirements,
314
- requirementForCompletion,
315
- completionRequirementKey,
316
- completionRequirementsFromBranch,
317
- pendingRequiredCompletionCount,
318
- createRequiredCompletionTransition,
319
- reconcileRequiredCompletionContext,
320
- isCompletionRequirementRecord
321
- };
322
- //# sourceMappingURL=chunk-NLT67IZS.ts.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/completion-requirement.ts"],
4
- "sourcesContent": ["import { StringEnum } from \"@earendil-works/pi-ai\";\nimport type { ContextEvent } from \"@earendil-works/pi-coding-agent\";\nimport { DEFAULT_MAX_CONTEXT_BYTES, truncateUtf8 } from \"./limits.js\";\nimport type { AgentLifecycleState, ManagedAgent } from \"./registry-types.js\";\n\nexport const COMPLETION_REQUIREMENT_MODES = [\"background\", \"required\"] as const;\nexport type CompletionRequirementMode = (typeof COMPLETION_REQUIREMENT_MODES)[number];\n\nexport const CompletionRequirementModeSchema = StringEnum(COMPLETION_REQUIREMENT_MODES, {\n\tdescription:\n\t\t\"Mark this exact turn as background (default) or required for the parent final answer. Required results are tracked until their exact completion becomes visible, but current Pi versions do not provide a hard pre-display final-answer barrier.\",\n\tdefault: \"background\",\n});\n\nexport const COMPLETION_REQUIREMENT_VERSION = \"pi-subagents:completion-requirement:v1\" as const;\nexport const COMPLETION_REQUIREMENT_CONTEXT_TYPE = \"pi-subagent-required-completions\";\nexport const COMPLETION_REQUIREMENT_TRANSITION_TYPE = \"pi-subagent-required-completion-transition\";\nexport const COMPLETION_REQUIREMENT_TRANSITION_VERSION =\n\t\"pi-subagents:completion-requirement-transition:v1\" as const;\nconst MAX_REQUIREMENTS_PER_AGENT = 20;\nexport const MAX_UNRESOLVED_REQUIRED_COMPLETIONS = 64;\n\nexport type CompletionRequirementState = \"pending\" | \"available\" | \"visible\" | \"cancelled\";\n\nexport interface CompletionRequirementRecord {\n\tversion: typeof COMPLETION_REQUIREMENT_VERSION;\n\trunId: string;\n\tgeneration: number;\n\tstate: CompletionRequirementState;\n\tcreatedAt: number;\n\tupdatedAt: number;\n\tcompletionId?: string;\n\tterminalState?: AgentLifecycleState;\n}\n\nexport function beginCompletionRequirement(\n\trecords: readonly CompletionRequirementRecord[] | undefined,\n\tinput: { runId: string; generation: number; createdAt: number },\n): CompletionRequirementRecord[] {\n\tconst retained = (records ?? []).filter(\n\t\t(record) => record.runId !== input.runId || record.generation !== input.generation,\n\t);\n\tretained.push({\n\t\tversion: COMPLETION_REQUIREMENT_VERSION,\n\t\trunId: input.runId,\n\t\tgeneration: input.generation,\n\t\tstate: \"pending\",\n\t\tcreatedAt: input.createdAt,\n\t\tupdatedAt: input.createdAt,\n\t});\n\treturn retained.slice(-MAX_REQUIREMENTS_PER_AGENT);\n}\n\nexport function makeCompletionAvailable(\n\trecords: readonly CompletionRequirementRecord[] | undefined,\n\tinput: {\n\t\trunId: string;\n\t\tgeneration: number;\n\t\tcompletionId: string;\n\t\tterminalState: AgentLifecycleState;\n\t\tupdatedAt: number;\n\t},\n): CompletionRequirementRecord[] | undefined {\n\treturn updateExact(records, input.runId, input.generation, (record) => ({\n\t\t...record,\n\t\tstate: \"available\",\n\t\tcompletionId: input.completionId,\n\t\tterminalState: input.terminalState,\n\t\tupdatedAt: input.updatedAt,\n\t}));\n}\n\nexport function makeCompletionVisible(\n\trecords: readonly CompletionRequirementRecord[] | undefined,\n\tcompletionId: string,\n\tupdatedAt: number,\n): CompletionRequirementRecord[] | undefined {\n\tif (!records?.some((record) => record.completionId === completionId)) {\n\t\treturn records?.map((record) => ({ ...record }));\n\t}\n\treturn records.map((record) =>\n\t\trecord.completionId === completionId\n\t\t\t? { ...record, state: \"visible\" as const, updatedAt }\n\t\t\t: { ...record },\n\t);\n}\n\nexport function cancelPendingCompletionRequirements(\n\trecords: readonly CompletionRequirementRecord[] | undefined,\n\tterminalState: AgentLifecycleState,\n\tupdatedAt: number,\n): CompletionRequirementRecord[] | undefined {\n\tif (!records?.some((record) => record.state === \"pending\")) {\n\t\treturn records?.map((record) => ({ ...record }));\n\t}\n\treturn records.map((record) =>\n\t\trecord.state === \"pending\"\n\t\t\t? {\n\t\t\t\t\t...record,\n\t\t\t\t\tstate: \"cancelled\" as const,\n\t\t\t\t\tterminalState,\n\t\t\t\t\tupdatedAt,\n\t\t\t\t}\n\t\t\t: { ...record },\n\t);\n}\n\nexport function requirementForCompletion(\n\tagent: Pick<ManagedAgent, \"completionRequirements\">,\n\tcompletionId: string,\n): CompletionRequirementRecord | undefined {\n\treturn agent.completionRequirements?.find((record) => record.completionId === completionId);\n}\n\nexport interface BranchCompletionRequirementState {\n\tobservedState: boolean;\n\trecords: Map<string, CompletionRequirementRecord>;\n\tkeys: Set<string>;\n}\n\nexport function completionRequirementKey(\n\trecord: Pick<CompletionRequirementRecord, \"runId\" | \"generation\">,\n): string {\n\treturn `${record.runId}\\u0000${record.generation}`;\n}\n\nexport function completionRequirementsFromBranch(\n\tentries: readonly unknown[],\n): BranchCompletionRequirementState {\n\tconst records = new Map<string, CompletionRequirementRecord>();\n\tlet observedState = false;\n\tfor (const entry of entries) {\n\t\tif (!entry || typeof entry !== \"object\" || Array.isArray(entry)) continue;\n\t\tconst candidate = entry as Record<string, unknown>;\n\t\tconst message =\n\t\t\tcandidate.type === \"message\" && candidate.message && typeof candidate.message === \"object\"\n\t\t\t\t? (candidate.message as Record<string, unknown>)\n\t\t\t\t: candidate;\n\t\tif (\n\t\t\tmessage.role === \"toolResult\" &&\n\t\t\t[\"subagent_spawn\", \"subagent_send\", \"subagent_await\", \"subagent_manage\"].includes(\n\t\t\t\tString(message.toolName),\n\t\t\t)\n\t\t) {\n\t\t\tobservedState = true;\n\t\t\tconst details = message.details;\n\t\t\tif (!details || typeof details !== \"object\" || Array.isArray(details)) continue;\n\t\t\tconst detailsRecord = details as Record<string, unknown>;\n\t\t\tconst agents = [\n\t\t\t\tdetailsRecord.agent,\n\t\t\t\t...(Array.isArray(detailsRecord.agents) ? detailsRecord.agents : []),\n\t\t\t];\n\t\t\tfor (const agent of agents) {\n\t\t\t\tif (!agent || typeof agent !== \"object\" || Array.isArray(agent)) continue;\n\t\t\t\tconst requirements = (agent as Record<string, unknown>).completionRequirements;\n\t\t\t\tif (!Array.isArray(requirements)) continue;\n\t\t\t\tfor (const requirement of requirements) {\n\t\t\t\t\tif (isCompletionRequirementRecord(requirement)) {\n\t\t\t\t\t\trecords.set(completionRequirementKey(requirement), { ...requirement });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (\n\t\t\tmessage.role === \"custom\" &&\n\t\t\tmessage.customType === COMPLETION_REQUIREMENT_TRANSITION_TYPE\n\t\t) {\n\t\t\tconst details = message.details;\n\t\t\tif (!details || typeof details !== \"object\" || Array.isArray(details)) continue;\n\t\t\tconst detailRecord = details as Record<string, unknown>;\n\t\t\tif (detailRecord.version !== COMPLETION_REQUIREMENT_TRANSITION_VERSION) continue;\n\t\t\tconst requirements = Array.isArray(detailRecord.records) ? detailRecord.records : [];\n\t\t\tfor (const requirement of requirements) {\n\t\t\t\tif (!isCompletionRequirementRecord(requirement) || requirement.state !== \"cancelled\") {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tobservedState = true;\n\t\t\t\trecords.set(completionRequirementKey(requirement), { ...requirement });\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (message.role !== \"custom\" || message.customType !== \"pi-subagent-completion\") continue;\n\t\tconst details = message.details;\n\t\tif (!details || typeof details !== \"object\" || Array.isArray(details)) continue;\n\t\tconst detailRecord = details as Record<string, unknown>;\n\t\tconst completionRecords = Array.isArray(detailRecord.completions)\n\t\t\t? detailRecord.completions\n\t\t\t: [detailRecord];\n\t\tfor (const completion of completionRecords) {\n\t\t\tif (!completion || typeof completion !== \"object\" || Array.isArray(completion)) continue;\n\t\t\tconst requirement = (completion as Record<string, unknown>).completionRequirement;\n\t\t\tif (!isCompletionRequirementRecord(requirement)) continue;\n\t\t\trecords.set(completionRequirementKey(requirement), {\n\t\t\t\t...requirement,\n\t\t\t\tstate: \"visible\",\n\t\t\t});\n\t\t}\n\t}\n\treturn { observedState, records, keys: new Set(records.keys()) };\n}\n\nexport function pendingRequiredCompletionCount(\n\tagent: Pick<ManagedAgent, \"completionRequirements\">,\n): number {\n\treturn (agent.completionRequirements ?? []).filter(\n\t\t(record) => record.state === \"pending\" || record.state === \"available\",\n\t).length;\n}\n\nexport function createRequiredCompletionTransition(\n\tmessages: ContextEvent[\"messages\"],\n\tagents: readonly ManagedAgent[],\n) {\n\tconst summarized = leadingSummaryBoundary(messages) > 0;\n\tconst state = modelRequirementState(agents);\n\tconst visible = completionRequirementsFromBranch(messages).records;\n\tconst records = state.records.filter((record) => {\n\t\tif (record.state !== \"cancelled\") return false;\n\t\tconst retained = visible.get(completionRequirementKey(record));\n\t\tif (modelRequirementStateMatches(retained, record)) return false;\n\t\treturn !summarized || retained !== undefined;\n\t});\n\tif (records.length === 0) return undefined;\n\treturn {\n\t\trole: \"custom\" as const,\n\t\tcustomType: COMPLETION_REQUIREMENT_TRANSITION_TYPE,\n\t\tcontent: requiredCompletionTransitionContent(records, state.omittedCancelled),\n\t\tdisplay: false,\n\t\tdetails: {\n\t\t\tversion: COMPLETION_REQUIREMENT_TRANSITION_VERSION,\n\t\t\trecords: records.map((record) => ({ ...record })),\n\t\t},\n\t\ttimestamp: 0,\n\t};\n}\n\nexport function reconcileRequiredCompletionContext(\n\tmessages: ContextEvent[\"messages\"],\n\tagents: readonly ManagedAgent[],\n\trestorationPredecessors: readonly string[] = [],\n\trestoredBoundaryContent?: string,\n): ContextEvent[\"messages\"] {\n\tconst existing = messages.filter(isRequiredCompletionContextMessage);\n\tconst withoutPrior = messages.filter((message) => !isRequiredCompletionContextMessage(message));\n\tconst state = modelRequirementState(agents);\n\tconst summaryBoundary = leadingSummaryBoundary(withoutPrior);\n\tconst currentContent =\n\t\tstate.records.length > 0 && !hasModelVisibleRequirementState(withoutPrior, state.records)\n\t\t\t? requiredCompletionContextContent(state.records, state.omittedCancelled)\n\t\t\t: undefined;\n\tconst content = summaryBoundary > 0 ? (restoredBoundaryContent ?? currentContent) : undefined;\n\tlet insertionBoundary = summaryBoundary;\n\twhile (insertionBoundary < withoutPrior.length) {\n\t\tconst predecessor = withoutPrior[insertionBoundary];\n\t\tif (\n\t\t\tpredecessor?.role !== \"custom\" ||\n\t\t\t!restorationPredecessors.includes(predecessor.customType)\n\t\t) {\n\t\t\tbreak;\n\t\t}\n\t\tinsertionBoundary += 1;\n\t}\n\tif (\n\t\tcontent !== undefined &&\n\t\texisting.length === 1 &&\n\t\tmessages[insertionBoundary] === existing[0] &&\n\t\texisting[0]?.content === content &&\n\t\thasCompletionRequirementContextVersion(existing[0])\n\t) {\n\t\treturn messages;\n\t}\n\tif (existing.length === 0 && content === undefined) return messages;\n\tif (content === undefined) return withoutPrior;\n\treturn [\n\t\t...withoutPrior.slice(0, insertionBoundary),\n\t\t{\n\t\t\trole: \"custom\",\n\t\t\tcustomType: COMPLETION_REQUIREMENT_CONTEXT_TYPE,\n\t\t\tcontent,\n\t\t\tdisplay: false,\n\t\t\tdetails: { version: COMPLETION_REQUIREMENT_VERSION },\n\t\t\ttimestamp: 0,\n\t\t},\n\t\t...withoutPrior.slice(insertionBoundary),\n\t];\n}\n\ninterface ModelRequirementRecord {\n\tstate: CompletionRequirementState;\n\trunId: string;\n\tgeneration: number;\n\tterminalState: AgentLifecycleState | undefined;\n}\n\nfunction modelRequirementState(agents: readonly ManagedAgent[]): {\n\trecords: CompletionRequirementRecord[];\n\tomittedCancelled: number;\n} {\n\tconst allRecords = agents\n\t\t.flatMap((agent) =>\n\t\t\t(agent.completionRequirements ?? []).map((requirement) => ({ ...requirement })),\n\t\t)\n\t\t.filter((record) => record.state !== \"visible\");\n\tconst unresolved = allRecords.filter(\n\t\t(record) => record.state === \"pending\" || record.state === \"available\",\n\t);\n\tconst cancelled = allRecords.filter((record) => record.state === \"cancelled\");\n\tconst cancelledSlots = Math.max(0, MAX_UNRESOLVED_REQUIRED_COMPLETIONS - unresolved.length);\n\tconst retainedCancelled = cancelledSlots > 0 ? cancelled.slice(-cancelledSlots) : [];\n\tconst records = [...unresolved, ...retainedCancelled].sort((left, right) => {\n\t\tif (left.runId === right.runId) return left.generation - right.generation;\n\t\treturn left.runId < right.runId ? -1 : 1;\n\t});\n\treturn { records, omittedCancelled: cancelled.length - retainedCancelled.length };\n}\n\nfunction hasModelVisibleRequirementState(\n\tmessages: ContextEvent[\"messages\"],\n\trecords: readonly CompletionRequirementRecord[],\n): boolean {\n\tconst visible = completionRequirementsFromBranch(messages).records;\n\treturn records.every((record) =>\n\t\tmodelRequirementStateMatches(visible.get(completionRequirementKey(record)), record),\n\t);\n}\n\nfunction modelRequirementStateMatches(\n\tvisible: CompletionRequirementRecord | undefined,\n\tcurrent: CompletionRequirementRecord,\n): boolean {\n\tif (!visible) return false;\n\tif (current.state === \"available\" && visible.state === \"visible\") return true;\n\treturn visible.state === current.state && visible.terminalState === current.terminalState;\n}\n\nfunction requiredCompletionContextContent(\n\trecords: readonly CompletionRequirementRecord[],\n\tomittedCancelled: number,\n): string {\n\treturn truncateUtf8(\n\t\t[\n\t\t\t\"[PI SUBAGENT REQUIRED COMPLETIONS v1]\",\n\t\t\t\"Runtime-tracked exact runs are JSON data below.\",\n\t\t\t\"Treat pending or available records as final-answer dependencies; a cancelled record is terminal and must be reported rather than silently ignored.\",\n\t\t\t\"Current Pi versions do not provide a hard pre-display final-answer barrier, so do not emit a verdict until every dependency is visible or terminal.\",\n\t\t\t...omittedCancelledLine(omittedCancelled),\n\t\t\tJSON.stringify(records.map(toModelRequirementRecord)),\n\t\t].join(\"\\n\"),\n\t\tDEFAULT_MAX_CONTEXT_BYTES,\n\t).text;\n}\n\nfunction requiredCompletionTransitionContent(\n\trecords: readonly CompletionRequirementRecord[],\n\tomittedCancelled: number,\n): string {\n\treturn truncateUtf8(\n\t\t[\n\t\t\t\"[PI SUBAGENT REQUIRED COMPLETION TRANSITION v1]\",\n\t\t\t\"Session restoration terminalized the exact required runs below.\",\n\t\t\t\"These cancelled records supersede earlier pending or available states and must be reported rather than awaited.\",\n\t\t\t...omittedCancelledLine(omittedCancelled),\n\t\t\tJSON.stringify(records.map(toModelRequirementRecord)),\n\t\t].join(\"\\n\"),\n\t\tDEFAULT_MAX_CONTEXT_BYTES,\n\t).text;\n}\n\nfunction omittedCancelledLine(count: number): string[] {\n\treturn count > 0 ? [`${count} older cancelled requirement record(s) were omitted.`] : [];\n}\n\nfunction toModelRequirementRecord(record: CompletionRequirementRecord): ModelRequirementRecord {\n\treturn {\n\t\tstate: record.state,\n\t\trunId: record.runId,\n\t\tgeneration: record.generation,\n\t\tterminalState: record.terminalState,\n\t};\n}\n\ntype RequiredCompletionContextMessage = Extract<\n\tContextEvent[\"messages\"][number],\n\t{ role: \"custom\" }\n> & { content: string };\n\nfunction isRequiredCompletionContextMessage(\n\tmessage: ContextEvent[\"messages\"][number],\n): message is RequiredCompletionContextMessage {\n\treturn message.role === \"custom\" && message.customType === COMPLETION_REQUIREMENT_CONTEXT_TYPE;\n}\n\nfunction hasCompletionRequirementContextVersion(\n\tmessage: RequiredCompletionContextMessage,\n): boolean {\n\treturn (\n\t\ttypeof message.details === \"object\" &&\n\t\tmessage.details !== null &&\n\t\t!Array.isArray(message.details) &&\n\t\t(message.details as Record<string, unknown>).version === COMPLETION_REQUIREMENT_VERSION\n\t);\n}\n\nfunction leadingSummaryBoundary(messages: ContextEvent[\"messages\"]): number {\n\tlet index = 0;\n\twhile (index < messages.length) {\n\t\tconst role = messages[index]?.role;\n\t\tif (role !== \"compactionSummary\" && role !== \"branchSummary\") break;\n\t\tindex += 1;\n\t}\n\treturn index;\n}\n\nexport function isCompletionRequirementRecord(\n\tvalue: unknown,\n): value is CompletionRequirementRecord {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n\tconst record = value as Record<string, unknown>;\n\tconst state = String(record.state);\n\tconst hasCompletion = typeof record.completionId === \"string\" && record.completionId.length > 0;\n\tconst hasTerminalState = isAgentLifecycleState(record.terminalState);\n\tconst transitionShapeValid =\n\t\tstate === \"pending\"\n\t\t\t? record.completionId === undefined && record.terminalState === undefined\n\t\t\t: state === \"available\" || state === \"visible\"\n\t\t\t\t? hasCompletion && hasTerminalState\n\t\t\t\t: state === \"cancelled\" && record.completionId === undefined && hasTerminalState;\n\treturn (\n\t\ttransitionShapeValid &&\n\t\trecord.version === COMPLETION_REQUIREMENT_VERSION &&\n\t\ttypeof record.runId === \"string\" &&\n\t\trecord.runId.length > 0 &&\n\t\trecord.runId.length <= 256 &&\n\t\ttypeof record.generation === \"number\" &&\n\t\tNumber.isSafeInteger(record.generation) &&\n\t\trecord.generation >= 1 &&\n\t\t[\"pending\", \"available\", \"visible\", \"cancelled\"].includes(state) &&\n\t\ttypeof record.createdAt === \"number\" &&\n\t\tNumber.isFinite(record.createdAt) &&\n\t\ttypeof record.updatedAt === \"number\" &&\n\t\tNumber.isFinite(record.updatedAt) &&\n\t\trecord.updatedAt >= record.createdAt &&\n\t\t(record.completionId === undefined ||\n\t\t\t(typeof record.completionId === \"string\" && record.completionId.length <= 256)) &&\n\t\t(record.terminalState === undefined || isAgentLifecycleState(record.terminalState))\n\t);\n}\n\nfunction updateExact(\n\trecords: readonly CompletionRequirementRecord[] | undefined,\n\trunId: string,\n\tgeneration: number,\n\tupdate: (record: CompletionRequirementRecord) => CompletionRequirementRecord,\n): CompletionRequirementRecord[] | undefined {\n\tif (!records?.some((record) => record.runId === runId && record.generation === generation)) {\n\t\treturn records?.map((record) => ({ ...record }));\n\t}\n\treturn records.map((record) =>\n\t\trecord.runId === runId && record.generation === generation ? update(record) : { ...record },\n\t);\n}\n\nfunction isAgentLifecycleState(value: unknown): value is AgentLifecycleState {\n\treturn [\n\t\t\"starting\",\n\t\t\"running\",\n\t\t\"idle\",\n\t\t\"completed\",\n\t\t\"partial\",\n\t\t\"blocked\",\n\t\t\"needs-input\",\n\t\t\"abstained\",\n\t\t\"stale\",\n\t\t\"interrupted\",\n\t\t\"failed\",\n\t\t\"closed\",\n\t].includes(String(value));\n}\n"],
5
- "mappings": "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",
6
- "names": ["details", "detailRecord"]
7
- }