effect-agent 0.1.0-beta.164 → 0.1.0-beta.165

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 (285) hide show
  1. package/dist/{Admin-Vhz6NdaH.d.mts → Admin-CbwoQEm8.d.mts} +24 -24
  2. package/dist/{Agent-BMATXYsI.mjs → Agent-B0WrUcHy.mjs} +9 -9
  3. package/dist/Agent-B0WrUcHy.mjs.map +1 -0
  4. package/dist/{Agent-ZfnNCQXs.d.mts → Agent-D0fbFT2d.d.mts} +27 -24
  5. package/dist/{AgentError-Bn1ytXRD.d.mts → AgentError-BMqPzIVt.d.mts} +3 -3
  6. package/dist/{AgentPolicy-B4oH8TbG.d.mts → AgentPolicy-CclAEpHn.d.mts} +2 -2
  7. package/dist/{AgentRuntime-D1MmB_0z.d.mts → AgentRuntime-BM36roNi.d.mts} +44 -30
  8. package/dist/{AgentRuntime-Q50HloUc.mjs → AgentRuntime-BTfPyMXN.mjs} +91 -30
  9. package/dist/AgentRuntime-BTfPyMXN.mjs.map +1 -0
  10. package/dist/{AgentUpdates-DMJ-_xow.d.mts → AgentUpdates-DksV4D0A.d.mts} +6 -3
  11. package/dist/{ContextCompactor-BoKQOjr5.d.mts → ContextCompactor-DLpX-HUG.d.mts} +18 -12
  12. package/dist/{ContextWindow-DRQ5Mbm2.d.mts → ContextWindow-aGZOPIPq.d.mts} +24 -22
  13. package/dist/{Digest-COAt3Orl.d.mts → Digest-3l_02jaM.d.mts} +2 -2
  14. package/dist/{DurableAgentRuntime-BTMOgDl_.mjs → DurableAgentRuntime-CWmWREPj.mjs} +11 -11
  15. package/dist/{DurableAgentRuntime-BTMOgDl_.mjs.map → DurableAgentRuntime-CWmWREPj.mjs.map} +1 -1
  16. package/dist/{DurableStep-Cry_iol4.d.mts → DurableStep-CTqx6DOV.d.mts} +13 -11
  17. package/dist/{EventSource-CtS0RBM7.d.mts → EventSource-D29Jsj5U.d.mts} +3 -3
  18. package/dist/{FailureDiagnostic-BElLOoED.mjs → FailureDiagnostic-D9oW23Cn.mjs} +16 -10
  19. package/dist/FailureDiagnostic-D9oW23Cn.mjs.map +1 -0
  20. package/dist/{FailureDiagnostic-CaAkzGHL.d.mts → FailureDiagnostic-DvHruCSJ.d.mts} +10 -9
  21. package/dist/InMemory.d.mts +28 -5
  22. package/dist/InMemory.mjs +37 -4
  23. package/dist/InMemory.mjs.map +1 -1
  24. package/dist/{Messaging-CICd_CSi.d.mts → Messaging-BbuaphiQ.d.mts} +6 -6
  25. package/dist/{Messaging-7VXQnWI3.d.mts → Messaging-DF_IWnxV.d.mts} +5 -5
  26. package/dist/{MessagingHost-DXwWnrMh.d.mts → MessagingHost-Bfbfkx6f.d.mts} +13 -12
  27. package/dist/{MessagingHost-DfsbMPvq.mjs → MessagingHost-DJZJZILu.mjs} +4 -3
  28. package/dist/MessagingHost-DJZJZILu.mjs.map +1 -0
  29. package/dist/{Output-CY7NZByV.d.mts → Output-UsQKiPhz.d.mts} +4 -4
  30. package/dist/{PreparedInputAdmission-CS_zlCvD.d.mts → PreparedInputAdmission-DXvjTe4U.d.mts} +6 -6
  31. package/dist/{Receipt-BAHyigAF.d.mts → Receipt-BkM21Qiu.d.mts} +2 -2
  32. package/dist/{Records-Bm4Qt70a.d.mts → Records-CAQktL0z.d.mts} +8 -8
  33. package/dist/{RunEvent-D0aepYwN.d.mts → RunEvent-B3CRIqIC.d.mts} +5 -5
  34. package/dist/{RunEventSink-9CUdI9Ar.d.mts → RunEventSink-sDXDkrAl.d.mts} +9 -7
  35. package/dist/{RunJournal-D8Vvf_io.mjs → RunJournal-NRgq1PNe.mjs} +3 -3
  36. package/dist/{RunJournal-D8Vvf_io.mjs.map → RunJournal-NRgq1PNe.mjs.map} +1 -1
  37. package/dist/{RunOptions-BHmBa05n.d.mts → RunOptions-CkSZSuIh.d.mts} +87 -83
  38. package/dist/{RunPolicyUsage-CUudVtg_.d.mts → RunPolicyUsage-QmYVw9z8.d.mts} +2 -2
  39. package/dist/{Schedule-Bi_XVKLF.d.mts → Schedule-rEIiYnRq.d.mts} +4 -4
  40. package/dist/{Subagent-Cxvuaius.mjs → Subagent-C-fyHbcp.mjs} +5 -5
  41. package/dist/{Subagent-Cxvuaius.mjs.map → Subagent-C-fyHbcp.mjs.map} +1 -1
  42. package/dist/{Subagent-D59om8SR.d.mts → Subagent-t3pJDZMN.d.mts} +15 -15
  43. package/dist/{SubagentContract-tyN9v-Jv.d.mts → SubagentContract-DdPzxYQj.d.mts} +3 -2
  44. package/dist/{SubagentHost-VTyf_wEF.d.mts → SubagentHost-CXFlEpj0.d.mts} +19 -16
  45. package/dist/{Subscription-nbSNY6Hs.d.mts → Subscription-BJj-R-6V.d.mts} +8 -8
  46. package/dist/{SubscriptionInput-DbXnOMS2.d.mts → SubscriptionInput-DyQtODg2.d.mts} +3 -3
  47. package/dist/Thread-DT8RTLIQ.d.mts +117 -0
  48. package/dist/{ThreadHistory-FD-o4TsR.d.mts → ThreadHistory-DQ-IC1hU.d.mts} +12 -9
  49. package/dist/{ToolBroker-DWs4tZra.d.mts → ToolBroker-DXwv2aUT.d.mts} +14 -12
  50. package/dist/{ToolExposure-UCN12eCd.d.mts → ToolExposure-BsaSH15e.d.mts} +5 -4
  51. package/dist/{ToolExposure-r2eOWk4F.d.mts → ToolExposure-Ckg3-sTf.d.mts} +3 -2
  52. package/dist/{ToolExposure-9uF_Yo0T.mjs → ToolExposure-DBATXxmL.mjs} +2 -2
  53. package/dist/ToolExposure-DBATXxmL.mjs.map +1 -0
  54. package/dist/{ToolExposure-C93U1sPu.mjs → ToolExposure-hTJT2ekj.mjs} +3 -2
  55. package/dist/ToolExposure-hTJT2ekj.mjs.map +1 -0
  56. package/dist/ToolExposure.d.mts +2 -2
  57. package/dist/ToolExposure.mjs +2 -2
  58. package/dist/{ToolResult-BKdqWRff.d.mts → ToolResult-DqyEhJLF.d.mts} +2 -2
  59. package/dist/{Usage-BNjPR7Zr.d.mts → Usage-CzZJ6A2n.d.mts} +3 -2
  60. package/dist/{Worker-XEBYxRQv.d.mts → Worker-DH5SAVIK.d.mts} +7 -7
  61. package/dist/{Worker-CfwzMZEK.mjs → Worker-DZjdMjZn.mjs} +3 -3
  62. package/dist/Worker-DZjdMjZn.mjs.map +1 -0
  63. package/dist/{WorkerAdmission-BVbSB8_A.mjs → WorkerAdmission-DJ76C2b-.mjs} +4 -4
  64. package/dist/{WorkerAdmission-BVbSB8_A.mjs.map → WorkerAdmission-DJ76C2b-.mjs.map} +1 -1
  65. package/dist/{agent-registration-BIOzAej4.mjs → agent-registration-D1dWV7KK.mjs} +3 -3
  66. package/dist/{agent-registration-BIOzAej4.mjs.map → agent-registration-D1dWV7KK.mjs.map} +1 -1
  67. package/dist/capabilities/BrowserUse.d.mts +1 -1
  68. package/dist/capabilities/BrowserUse.mjs +1 -1
  69. package/dist/capabilities/CodeMode.d.mts +2 -2
  70. package/dist/capabilities/CodeMode.mjs +3 -3
  71. package/dist/capabilities/Commands.d.mts +1 -1
  72. package/dist/capabilities/ContextTools.d.mts +2 -2
  73. package/dist/capabilities/ContextTools.mjs +1 -1
  74. package/dist/capabilities/Mcp.d.mts +1 -1
  75. package/dist/capabilities/Mcp.mjs +1 -1
  76. package/dist/capabilities/McpClient.d.mts +1 -1
  77. package/dist/capabilities/McpClient.mjs +1 -1
  78. package/dist/capabilities/MemoryNotes.d.mts +2 -2
  79. package/dist/capabilities/MemoryNotes.mjs +1 -1
  80. package/dist/capabilities/Messaging.d.mts +2 -2
  81. package/dist/capabilities/Messaging.mjs +3 -3
  82. package/dist/capabilities/ModelContext.d.mts +1 -1
  83. package/dist/capabilities/Redaction.d.mts +1 -1
  84. package/dist/capabilities/RunHooks.d.mts +7 -6
  85. package/dist/capabilities/RunHooks.mjs +2 -1
  86. package/dist/capabilities/RunHooks.mjs.map +1 -1
  87. package/dist/capabilities/SemanticMemory.d.mts +1 -1
  88. package/dist/capabilities/SemanticMemory.mjs +1 -1
  89. package/dist/capabilities/Subagent.d.mts +3 -3
  90. package/dist/capabilities/Subagent.mjs +2 -2
  91. package/dist/capabilities/SubagentReservations.d.mts +64 -60
  92. package/dist/capabilities/SubagentReservations.mjs +6 -1
  93. package/dist/capabilities/SubagentReservations.mjs.map +1 -1
  94. package/dist/capabilities/ToolDiscovery.d.mts +2 -2
  95. package/dist/capabilities/ToolDiscovery.mjs +3 -3
  96. package/dist/capabilities/WebCapture.d.mts +1 -1
  97. package/dist/capabilities/WebCapture.mjs +1 -1
  98. package/dist/capabilities/WebSearch.d.mts +1 -1
  99. package/dist/capabilities/WebSearch.mjs +1 -1
  100. package/dist/{compaction-BQK4MUg3.mjs → compaction-FDJhjbzH.mjs} +4 -3
  101. package/dist/compaction-FDJhjbzH.mjs.map +1 -0
  102. package/dist/core/Agent.d.mts +1 -1
  103. package/dist/core/Agent.mjs +1 -1
  104. package/dist/core/AgentError.d.mts +1 -1
  105. package/dist/core/AgentError.mjs +4 -4
  106. package/dist/core/AgentError.mjs.map +1 -1
  107. package/dist/core/AgentPolicy.d.mts +1 -1
  108. package/dist/core/AgentUpdates.d.mts +1 -1
  109. package/dist/core/AgentUpdates.mjs +5 -1
  110. package/dist/core/AgentUpdates.mjs.map +1 -1
  111. package/dist/core/FailureDiagnostic.d.mts +1 -1
  112. package/dist/core/FailureDiagnostic.mjs +1 -1
  113. package/dist/core/IdGenerator.d.mts +3 -1
  114. package/dist/core/IdGenerator.mjs +8 -5
  115. package/dist/core/IdGenerator.mjs.map +1 -1
  116. package/dist/core/Receipt.d.mts +1 -1
  117. package/dist/core/Receipt.mjs +1 -1
  118. package/dist/core/Receipt.mjs.map +1 -1
  119. package/dist/core/RunEvent.d.mts +1 -1
  120. package/dist/core/RunEvent.mjs +2 -2
  121. package/dist/core/RunEvent.mjs.map +1 -1
  122. package/dist/core/RunPolicyUsage.d.mts +1 -1
  123. package/dist/core/RunPolicyUsage.mjs +1 -1
  124. package/dist/core/RunPolicyUsage.mjs.map +1 -1
  125. package/dist/core/SubagentContract.d.mts +1 -1
  126. package/dist/core/SubagentContract.mjs +2 -1
  127. package/dist/core/SubagentContract.mjs.map +1 -1
  128. package/dist/core/Thread.d.mts +2 -2
  129. package/dist/core/Thread.mjs +82 -33
  130. package/dist/core/Thread.mjs.map +1 -1
  131. package/dist/core/ToolResult.d.mts +1 -1
  132. package/dist/core/ToolResult.mjs +1 -1
  133. package/dist/core/ToolResult.mjs.map +1 -1
  134. package/dist/core/Usage.d.mts +1 -1
  135. package/dist/core/Usage.mjs +2 -1
  136. package/dist/core/Usage.mjs.map +1 -1
  137. package/dist/core/Worker.d.mts +2 -2
  138. package/dist/core/Worker.mjs +1 -1
  139. package/dist/durable/ActivityStore.d.mts +1 -1
  140. package/dist/durable/Admin.d.mts +1 -1
  141. package/dist/durable/AgentRegistration.d.mts +1 -1
  142. package/dist/durable/AgentRegistration.mjs +1 -1
  143. package/dist/durable/Certification.d.mts +1 -1
  144. package/dist/durable/CommittedActivity.d.mts +3 -3
  145. package/dist/durable/Digest.d.mts +1 -1
  146. package/dist/durable/DurableAgentRuntime.d.mts +2 -2
  147. package/dist/durable/DurableAgentRuntime.mjs +2 -2
  148. package/dist/durable/EventSource.d.mts +1 -1
  149. package/dist/durable/GitHubWorkflowSource.d.mts +4 -4
  150. package/dist/durable/GitHubWorkflowSource.mjs +1 -1
  151. package/dist/durable/LifecyclePublication.d.mts +1 -1
  152. package/dist/durable/LifecyclePublication.mjs +1 -1
  153. package/dist/durable/MessageDelivery.d.mts +9 -9
  154. package/dist/durable/MessageDelivery.mjs +2 -2
  155. package/dist/durable/MessageDeliveryStoreConformance.d.mts +28 -28
  156. package/dist/durable/MessageDeliveryStoreConformance.mjs +1 -1
  157. package/dist/durable/PersistentHistory.d.mts +2 -2
  158. package/dist/durable/PersistentHistory.mjs +2 -2
  159. package/dist/durable/PreparedInputAdmission.d.mts +1 -1
  160. package/dist/durable/PreparedInputAdmission.mjs +1 -1
  161. package/dist/durable/Records.d.mts +1 -1
  162. package/dist/durable/Records.mjs +5 -5
  163. package/dist/durable/Recovery.d.mts +1 -1
  164. package/dist/durable/RunJournal.d.mts +1 -1
  165. package/dist/durable/RunJournal.mjs +1 -1
  166. package/dist/durable/Schedule.d.mts +1 -1
  167. package/dist/durable/Schedule.mjs +1 -1
  168. package/dist/durable/ScheduleStoreConformance.d.mts +1 -1
  169. package/dist/durable/ScheduleTransition.d.mts +1 -1
  170. package/dist/durable/Scheduling.d.mts +4 -4
  171. package/dist/durable/SubmissionLedger.d.mts +2 -2
  172. package/dist/durable/SubmissionLedger.mjs +3 -3
  173. package/dist/durable/SubmissionLedgerConformance.d.mts +2 -2
  174. package/dist/durable/SubmissionLedgerConformance.mjs +3 -3
  175. package/dist/durable/SubmissionStatus.d.mts +1 -1
  176. package/dist/durable/Subscription.d.mts +1 -1
  177. package/dist/durable/Subscription.mjs +1 -1
  178. package/dist/durable/SubscriptionInput.d.mts +1 -1
  179. package/dist/durable/SubscriptionInput.mjs +1 -1
  180. package/dist/durable/SubscriptionStoreConformance.d.mts +1 -1
  181. package/dist/durable/SubscriptionTools.d.mts +7 -7
  182. package/dist/durable/SubscriptionTools.mjs +1 -1
  183. package/dist/durable/SubscriptionTransition.d.mts +1 -1
  184. package/dist/durable/Subscriptions.d.mts +7 -7
  185. package/dist/durable/ThreadContextHistory.d.mts +1 -1
  186. package/dist/durable/ThreadContextHistoryProjection.d.mts +1 -1
  187. package/dist/durable/ThreadContextHistoryProjection.mjs +2 -2
  188. package/dist/durable/ThreadInvariants.d.mts +2 -2
  189. package/dist/durable/ThreadInvariants.mjs +1 -1
  190. package/dist/durable/ThreadProjection.d.mts +1 -1
  191. package/dist/durable/ThreadProjectionMaintenance.d.mts +1 -1
  192. package/dist/durable/ThreadStore.d.mts +1 -1
  193. package/dist/durable/ThreadStore.mjs +1 -1
  194. package/dist/durable/ThreadStoreConformance.d.mts +1 -1
  195. package/dist/durable/ThreadStoreConformance.mjs +1 -1
  196. package/dist/durable/WorkerAdmission.d.mts +6 -6
  197. package/dist/durable/WorkerAdmission.mjs +1 -1
  198. package/dist/durable/WorkerHost.d.mts +7 -7
  199. package/dist/durable/WorkerHost.mjs +1 -1
  200. package/dist/engine/AgentRuntime.d.mts +1 -1
  201. package/dist/engine/AgentRuntime.mjs +1 -1
  202. package/dist/engine/Compaction.d.mts +1 -1
  203. package/dist/engine/Compaction.mjs +1 -1
  204. package/dist/engine/ContextCompactor.d.mts +1 -1
  205. package/dist/engine/ContextCompactor.mjs +8 -3
  206. package/dist/engine/ContextCompactor.mjs.map +1 -1
  207. package/dist/engine/ContextWindow.d.mts +1 -1
  208. package/dist/engine/ContextWindow.mjs +3 -1
  209. package/dist/engine/ContextWindow.mjs.map +1 -1
  210. package/dist/engine/DurableStep.d.mts +1 -1
  211. package/dist/engine/DurableStep.mjs +2 -1
  212. package/dist/engine/DurableStep.mjs.map +1 -1
  213. package/dist/engine/MessagingHost.d.mts +1 -1
  214. package/dist/engine/MessagingHost.mjs +1 -1
  215. package/dist/engine/Output.d.mts +1 -1
  216. package/dist/engine/Output.mjs +1 -1
  217. package/dist/engine/RunEventSink.d.mts +1 -1
  218. package/dist/engine/RunEventSink.mjs +2 -1
  219. package/dist/engine/RunEventSink.mjs.map +1 -1
  220. package/dist/engine/RunOptions.d.mts +1 -1
  221. package/dist/engine/RunOptions.mjs +5 -2
  222. package/dist/engine/RunOptions.mjs.map +1 -1
  223. package/dist/engine/SubagentHost.d.mts +1 -1
  224. package/dist/engine/SubagentHost.mjs +4 -2
  225. package/dist/engine/SubagentHost.mjs.map +1 -1
  226. package/dist/engine/ThreadHistory.d.mts +1 -1
  227. package/dist/engine/ThreadHistory.mjs +12 -10
  228. package/dist/engine/ThreadHistory.mjs.map +1 -1
  229. package/dist/engine/ToolBroker.d.mts +1 -1
  230. package/dist/engine/ToolBroker.mjs +2 -1
  231. package/dist/engine/ToolBroker.mjs.map +1 -1
  232. package/dist/index.d.mts +34 -34
  233. package/dist/index.mjs +9 -9
  234. package/dist/{output-contract-DS-S8mTv.mjs → output-contract-DUNIO6as.mjs} +4 -3
  235. package/dist/output-contract-DUNIO6as.mjs.map +1 -0
  236. package/package.json +1 -1
  237. package/src/InMemory.ts +61 -2
  238. package/src/capabilities/RunHooks.ts +6 -3
  239. package/src/capabilities/SubagentReservations.ts +7 -1
  240. package/src/core/Agent.ts +3 -8
  241. package/src/core/AgentError.ts +1 -1
  242. package/src/core/AgentUpdates.ts +5 -1
  243. package/src/core/FailureDiagnostic.ts +6 -8
  244. package/src/core/IdGenerator.ts +5 -2
  245. package/src/core/Messaging.ts +1 -1
  246. package/src/core/Receipt.ts +1 -1
  247. package/src/core/RunEvent.ts +1 -1
  248. package/src/core/RunPolicyUsage.ts +1 -1
  249. package/src/core/SubagentContract.ts +2 -1
  250. package/src/core/Thread.ts +163 -61
  251. package/src/core/ToolExposure.ts +2 -1
  252. package/src/core/ToolResult.ts +1 -1
  253. package/src/core/Usage.ts +2 -1
  254. package/src/core/Worker.ts +1 -1
  255. package/src/core/internal/agent-updates.ts +3 -2
  256. package/src/core/internal/message-status.ts +1 -1
  257. package/src/core/internal/strict-schema.ts +3 -1
  258. package/src/engine/ContextCompactor.ts +8 -2
  259. package/src/engine/ContextWindow.ts +4 -1
  260. package/src/engine/DurableStep.ts +2 -1
  261. package/src/engine/MessagingHost.ts +2 -1
  262. package/src/engine/RunEventSink.ts +2 -1
  263. package/src/engine/RunOptions.ts +5 -1
  264. package/src/engine/SubagentHost.ts +3 -1
  265. package/src/engine/ThreadHistory.ts +20 -10
  266. package/src/engine/ToolBroker.ts +2 -1
  267. package/src/engine/ToolExposure.ts +2 -1
  268. package/src/engine/internal/agent-runtime.ts +41 -49
  269. package/src/engine/internal/bounded-value.ts +2 -1
  270. package/src/engine/internal/compaction.ts +3 -2
  271. package/src/engine/internal/output-contract.ts +3 -2
  272. package/src/engine/internal/primitive-delta.ts +51 -10
  273. package/src/engine/internal/tool-derivative.ts +5 -1
  274. package/src/engine/internal/tool-exposure.ts +5 -2
  275. package/src/engine/internal/tool-telemetry.ts +12 -13
  276. package/dist/Agent-BMATXYsI.mjs.map +0 -1
  277. package/dist/AgentRuntime-Q50HloUc.mjs.map +0 -1
  278. package/dist/FailureDiagnostic-BElLOoED.mjs.map +0 -1
  279. package/dist/MessagingHost-DfsbMPvq.mjs.map +0 -1
  280. package/dist/Thread-DOBQ0QUY.d.mts +0 -96
  281. package/dist/ToolExposure-9uF_Yo0T.mjs.map +0 -1
  282. package/dist/ToolExposure-C93U1sPu.mjs.map +0 -1
  283. package/dist/Worker-CfwzMZEK.mjs.map +0 -1
  284. package/dist/compaction-BQK4MUg3.mjs.map +0 -1
  285. package/dist/output-contract-DS-S8mTv.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"RunHooks.mjs","names":["ConversationStore"],"sources":["../../src/capabilities/RunHooks.ts"],"sourcesContent":["import { Clock, DateTime, Effect, Schema } from \"effect\";\nimport type { Prompt } from \"effect/unstable/ai\";\n\nimport {\n type ThreadEncodingError,\n type ThreadHistoryDiverged,\n type ThreadLimitExceeded,\n type ThreadNotFound,\n toPrompt,\n Store as ConversationStore,\n} from \"../core/Thread.ts\";\nimport {\n type PreparedRunContext,\n type RunApprovalDecision,\n type RunApprovalHook,\n type RunApprovalRequest,\n type RunBudgetHook,\n type RunContextHook,\n type RunContextRequest,\n type RunInputHook,\n type RunOptions,\n type RunSchedulingHook,\n} from \"../engine/RunOptions.ts\";\nimport {\n type ApprovalAudit,\n type ApprovalAuditLimitExceeded,\n type ApprovalDecisionMismatch,\n ApprovalRequestDraft,\n type ApprovalResolver,\n type ApprovalResolverError,\n makeApprovalRequest,\n requestApproval,\n} from \"./Approval.ts\";\nimport { type BudgetExceeded, UsageDelta, type UsageBudgetNode } from \"./Budget.ts\";\nimport type { RunCommandQueue } from \"./Commands.ts\";\nimport type { RedactionError, Redactor } from \"./Redaction.ts\";\n\n/** Capability policy could not be normalized into the bounded approval request Schema. */\nexport class ApprovalAdapterError extends Schema.TaggedError<ApprovalAdapterError>()(\n \"ApprovalAdapterError\",\n { message: Schema.String },\n) {}\n\n/** Engine usage data did not satisfy the non-negative budget delta Schema. */\nexport class BudgetAdapterError extends Schema.TaggedError<BudgetAdapterError>()(\n \"BudgetAdapterError\",\n { message: Schema.String },\n) {}\n\n/** Adapt the richer audited FIFO commands to the engine's safe-seam input hook. */\nexport const toRunInputHook = (queue: RunCommandQueue): RunInputHook<never, never> => ({\n drain: (policy) =>\n queue.drain(policy).pipe(\n Effect.map((commands) =>\n commands.map((command) => ({\n kind: command._tag === \"SteeringCommand\" ? (\"steering\" as const) : (\"follow-up\" as const),\n input: command.content,\n })),\n ),\n ),\n end: () => queue.shutdown,\n});\n\n/** Explicit policy needed to turn a native Effect AI approval request into an audit request. */\nexport interface RunApprovalAdapterPolicy {\n readonly expiresInMillis: number;\n readonly risk: ApprovalRequestDraft[\"risk\"];\n readonly denial: ApprovalRequestDraft[\"denial\"];\n readonly actionSummary: (request: RunApprovalRequest) => string;\n readonly resourceTargets: (request: RunApprovalRequest) => ReadonlyArray<string>;\n}\n\n/** Adapt native Effect AI approval parts through structural redaction, audit, and timeout policy. */\nexport const toRunApprovalHook = (\n policy: RunApprovalAdapterPolicy,\n): RunApprovalHook<\n | ApprovalResolverError\n | ApprovalAuditLimitExceeded\n | ApprovalDecisionMismatch\n | ApprovalAdapterError\n | RedactionError,\n ApprovalResolver | ApprovalAudit | Redactor\n> => ({\n request: (engineRequest) =>\n Effect.gen(function* () {\n const validatedPolicy = yield* Schema.decodeEffect(RunApprovalAdapterPolicySchema)(\n policy,\n ).pipe(\n Effect.mapError((error) =>\n ApprovalAdapterError.make({\n message: `Approval adapter policy is invalid: ${error.message}`,\n }),\n ),\n );\n\n const now = yield* Clock.currentTimeMillis;\n\n const metadata = yield* Effect.try({\n try: () => ({\n actionSummary: policy.actionSummary(engineRequest),\n resourceTargets: policy.resourceTargets(engineRequest),\n }),\n catch: () =>\n ApprovalAdapterError.make({\n message: \"Approval policy failed while describing the native Tool request\",\n }),\n });\n\n const draft = yield* Schema.decodeEffect(ApprovalRequestDraft)({\n requestId: engineRequest.request.approvalId,\n runId: engineRequest.runId,\n threadId: engineRequest.threadId,\n toolCallId: engineRequest.toolCallId,\n toolName: engineRequest.toolName,\n actionSummary: metadata.actionSummary,\n resourceTargets: metadata.resourceTargets,\n risk: validatedPolicy.risk,\n expiresAt: DateTime.formatIso(\n DateTime.toUtc(DateTime.makeUnsafe(now + validatedPolicy.expiresInMillis)),\n ),\n denial: validatedPolicy.denial,\n }).pipe(\n Effect.mapError((error) =>\n ApprovalAdapterError.make({\n message: `Approval adapter policy is invalid: ${error.message}`,\n }),\n ),\n );\n\n const request = yield* makeApprovalRequest(draft, engineRequest.parameters);\n const decision = yield* requestApproval(request);\n\n if (decision._tag === \"ApprovalApproved\") {\n return { _tag: \"approved\" as const };\n }\n if (decision.timedOut && request.denial === \"recoverable\") {\n return {\n _tag: \"unresolved\" as const,\n reason: decision.reason,\n };\n }\n\n return {\n _tag: \"denied\" as const,\n reason: decision.reason,\n };\n }),\n});\n\n/**\n * Durable variant of `toRunApprovalHook` (P5 plan §2.6): the durable coordinator consults this\n * delegate for policy-AUTO decisions only, after its recorded-decision lookup misses. It reuses\n * the exact P2 approval stack — `ApprovalRequestDraft` policy metadata, structural redaction,\n * audit sink, expiry/timeout policy — but differs in two durable-specific ways:\n *\n * 1. The capability services (`ApprovalResolver | ApprovalAudit | Redactor`) are captured up\n * front, so the returned hook is `RunApprovalHook<never, never>` — the shape the\n * coordinator's `DurableApprovalResolver` reference accepts without leaking capability\n * requirements into the durable runtime Layer.\n * 2. It FAILS CLOSED into `unresolved`: any adapter, audit, redaction, or resolver failure\n * defers the decision to the durable suspension + `resolveApproval` path instead of\n * approving, denying, or crashing the Attempt on a transient policy fault. Explicit\n * policy denials (including the P2 timeout-denial for `denial: \"terminal\"`) still deny.\n */\nexport const toDurableRunApprovalHook = Effect.fn(\"toDurableRunApprovalHook\")(function* (\n policy: RunApprovalAdapterPolicy,\n): Effect.fn.Return<\n RunApprovalHook<never, never>,\n never,\n ApprovalResolver | ApprovalAudit | Redactor\n> {\n const services = yield* Effect.context<ApprovalResolver | ApprovalAudit | Redactor>();\n const hook = toRunApprovalHook(policy);\n\n return {\n request: (request) =>\n hook.request(request).pipe(\n Effect.provideContext(services),\n Effect.catch((error) =>\n Effect.succeed<RunApprovalDecision>({\n _tag: \"unresolved\",\n reason: `Approval delegation failed (${error._tag}); the decision defers to the durable resolveApproval path`,\n }),\n ),\n ),\n };\n});\n\n/** Adapt one hierarchical budget node to the engine's usage accounting seam. */\nexport const toRunBudgetHook = (\n budget: UsageBudgetNode,\n): RunBudgetHook<BudgetExceeded | BudgetAdapterError, never> => ({\n guard: budget.guard,\n consume: (delta) =>\n Schema.decodeEffect(UsageDelta)({\n modelCalls: delta.modelCalls,\n inputTokens: delta.inputTokens,\n outputTokens: delta.outputTokens,\n cacheReadInputTokens: Math.max(0, delta.usage.inputTokens.cacheRead ?? 0),\n cacheWriteInputTokens: Math.max(0, delta.usage.inputTokens.cacheWrite ?? 0),\n toolCalls: delta.toolCalls,\n costMicrousd: delta.costMicrousd,\n }).pipe(\n Effect.mapError((error) =>\n BudgetAdapterError.make({\n message: `Engine usage delta is invalid: ${error.message}`,\n }),\n ),\n Effect.flatMap((usage) => budget.consume(usage)),\n Effect.asVoid,\n ),\n});\n\nexport type ThreadAdapterError =\n | ThreadNotFound\n | ThreadLimitExceeded\n | ThreadEncodingError\n | ThreadHistoryDiverged;\n\n/**\n * Advanced integration for an existing Thread.Store snapshot. Ordinary Runs automatically\n * retain history through ThreadHistory.layer; use this helper only for explicit snapshot hooks.\n * Share that Layer's Thread.Store owner. PersistentHistory rejects these competing hooks.\n * The snapshot is explicit initial Prompt data. Each inline onHistory call immediately records\n * its append-only suffix, including updates from Runs that later fail or are interrupted. Writes\n * already made remain in the snapshot. Callback errors stop the Run as ThreadAdapterError;\n * snapshot lookup can fail with ThreadNotFound before execution.\n * Native Effect AI parts and provider options are preserved without a role/text projection.\n * For retaining only successful Runs, provide ThreadHistory through PersistentHistory.layer\n * with a memory or SQLite store instead. This adapter does not provide durable recovery.\n */\nexport const toRunThreadOptions = Effect.fn(\"toRunThreadOptions\")(function* (\n threadId: import(\"../core/Identifiers.ts\").ThreadId,\n runId: import(\"../core/Identifiers.ts\").RunId,\n): Effect.fn.Return<\n Pick<RunOptions<ThreadAdapterError>, \"threadId\" | \"history\" | \"onHistory\">,\n ThreadNotFound,\n ConversationStore\n> {\n const threads = yield* ConversationStore;\n const snapshot = yield* threads.snapshot(threadId);\n\n return {\n threadId,\n history: toPrompt(snapshot),\n onHistory: (history) => threads.recordHistory(threadId, runId, history).pipe(Effect.asVoid),\n };\n});\n\n/** Prompt transform used by the adapter; the engine retains the authoritative source separately. */\nexport interface EnginePromptTransform<Error = never, Requirements = never> {\n readonly prepare: (\n source: Prompt.Prompt,\n request: RunContextRequest,\n ) => Effect.Effect<Prompt.Prompt, Error, Requirements>;\n}\n\n/** Adapt a prompt-only context transform without granting it authority over engine source history. */\nexport const toRunContextHook = <Error, Requirements>(\n transform: EnginePromptTransform<Error, Requirements>,\n): RunContextHook<Error, Requirements> => ({\n prepare: (request): Effect.Effect<PreparedRunContext, Error, Requirements> =>\n transform.prepare(request.source, request).pipe(Effect.map((prompt) => ({ prompt }))),\n});\n\n/** Scheduling values are structurally aligned and only reduce finite concurrency. */\nexport const toRunSchedulingHook = (\n runOverride: RunSchedulingHook[\"runOverride\"],\n toolRequiresSequential?: (toolName: string) => boolean,\n): RunSchedulingHook => ({\n runOverride,\n ...(toolRequiresSequential === undefined ? {} : { toolRequiresSequential }),\n});\n\n/** Validate policy configuration at adapter construction boundaries. */\nexport const RunApprovalAdapterPolicySchema = Schema.Struct({\n expiresInMillis: Schema.Int.check(Schema.isGreaterThan(0)),\n risk: Schema.Literals([\"low\", \"medium\", \"high\", \"critical\"]),\n denial: Schema.Literals([\"terminal\", \"recoverable\"]),\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"RunHooks.mjs","names":["ConversationStore"],"sources":["../../src/capabilities/RunHooks.ts"],"sourcesContent":["import { Clock, DateTime, Effect, Schema } from \"effect\";\nimport type { Prompt } from \"effect/unstable/ai\";\n\nimport {\n type ThreadEncodingError,\n type ThreadHistoryDiverged,\n type ThreadLimitExceeded,\n type ThreadNotFound,\n type ThreadOwnershipError,\n toPrompt,\n Store as ConversationStore,\n} from \"../core/Thread.ts\";\nimport {\n type PreparedRunContext,\n type RunApprovalDecision,\n type RunApprovalHook,\n type RunApprovalRequest,\n type RunBudgetHook,\n type RunContextHook,\n type RunContextRequest,\n type RunInputHook,\n type RunOptions,\n type RunSchedulingHook,\n} from \"../engine/RunOptions.ts\";\nimport {\n type ApprovalAudit,\n type ApprovalAuditLimitExceeded,\n type ApprovalDecisionMismatch,\n ApprovalRequestDraft,\n type ApprovalResolver,\n type ApprovalResolverError,\n makeApprovalRequest,\n requestApproval,\n} from \"./Approval.ts\";\nimport { type BudgetExceeded, UsageDelta, type UsageBudgetNode } from \"./Budget.ts\";\nimport type { RunCommandQueue } from \"./Commands.ts\";\nimport type { RedactionError, Redactor } from \"./Redaction.ts\";\n\n/** Capability policy could not be normalized into the bounded approval request Schema. */\nexport class ApprovalAdapterError extends Schema.TaggedError<ApprovalAdapterError>()(\n \"ApprovalAdapterError\",\n { message: Schema.String },\n) {}\n\n/** Engine usage data did not satisfy the non-negative budget delta Schema. */\nexport class BudgetAdapterError extends Schema.TaggedError<BudgetAdapterError>()(\n \"BudgetAdapterError\",\n { message: Schema.String },\n) {}\n\n/** Adapt the richer audited FIFO commands to the engine's safe-seam input hook. */\nexport const toRunInputHook = (queue: RunCommandQueue): RunInputHook<never, never> => ({\n drain: (policy) =>\n queue.drain(policy).pipe(\n Effect.map((commands) =>\n commands.map((command) => ({\n kind: command._tag === \"SteeringCommand\" ? (\"steering\" as const) : (\"follow-up\" as const),\n input: command.content,\n })),\n ),\n ),\n end: () => queue.shutdown,\n});\n\n/** Explicit policy needed to turn a native Effect AI approval request into an audit request. */\nexport interface RunApprovalAdapterPolicy {\n readonly expiresInMillis: number;\n readonly risk: ApprovalRequestDraft[\"risk\"];\n readonly denial: ApprovalRequestDraft[\"denial\"];\n readonly actionSummary: (request: RunApprovalRequest) => string;\n readonly resourceTargets: (request: RunApprovalRequest) => ReadonlyArray<string>;\n}\n\n/** Adapt native Effect AI approval parts through structural redaction, audit, and timeout policy. */\nexport const toRunApprovalHook = (\n policy: RunApprovalAdapterPolicy,\n): RunApprovalHook<\n | ApprovalResolverError\n | ApprovalAuditLimitExceeded\n | ApprovalDecisionMismatch\n | ApprovalAdapterError\n | RedactionError,\n ApprovalResolver | ApprovalAudit | Redactor\n> => ({\n request: (engineRequest) =>\n Effect.gen(function* () {\n const validatedPolicy = yield* Schema.decodeEffect(RunApprovalAdapterPolicySchema)(\n policy,\n ).pipe(\n Effect.mapError((error) =>\n ApprovalAdapterError.make({\n message: `Approval adapter policy is invalid: ${error.message}`,\n }),\n ),\n );\n\n const now = yield* Clock.currentTimeMillis;\n\n const metadata = yield* Effect.try({\n try: () => ({\n actionSummary: policy.actionSummary(engineRequest),\n resourceTargets: policy.resourceTargets(engineRequest),\n }),\n catch: () =>\n ApprovalAdapterError.make({\n message: \"Approval policy failed while describing the native Tool request\",\n }),\n });\n\n const draft = yield* Schema.decodeEffect(ApprovalRequestDraft)({\n requestId: engineRequest.request.approvalId,\n runId: engineRequest.runId,\n threadId: engineRequest.threadId,\n toolCallId: engineRequest.toolCallId,\n toolName: engineRequest.toolName,\n actionSummary: metadata.actionSummary,\n resourceTargets: metadata.resourceTargets,\n risk: validatedPolicy.risk,\n expiresAt: DateTime.formatIso(\n DateTime.toUtc(DateTime.makeUnsafe(now + validatedPolicy.expiresInMillis)),\n ),\n denial: validatedPolicy.denial,\n }).pipe(\n Effect.mapError((error) =>\n ApprovalAdapterError.make({\n message: `Approval adapter policy is invalid: ${error.message}`,\n }),\n ),\n );\n\n const request = yield* makeApprovalRequest(draft, engineRequest.parameters);\n const decision = yield* requestApproval(request);\n\n if (decision._tag === \"ApprovalApproved\") {\n return { _tag: \"approved\" as const };\n }\n if (decision.timedOut && request.denial === \"recoverable\") {\n return {\n _tag: \"unresolved\" as const,\n reason: decision.reason,\n };\n }\n\n return {\n _tag: \"denied\" as const,\n reason: decision.reason,\n };\n }),\n});\n\n/**\n * Durable variant of `toRunApprovalHook` (P5 plan §2.6): the durable coordinator consults this\n * delegate for policy-AUTO decisions only, after its recorded-decision lookup misses. It reuses\n * the exact P2 approval stack — `ApprovalRequestDraft` policy metadata, structural redaction,\n * audit sink, expiry/timeout policy — but differs in two durable-specific ways:\n *\n * 1. The capability services (`ApprovalResolver | ApprovalAudit | Redactor`) are captured up\n * front, so the returned hook is `RunApprovalHook<never, never>` — the shape the\n * coordinator's `DurableApprovalResolver` reference accepts without leaking capability\n * requirements into the durable runtime Layer.\n * 2. It FAILS CLOSED into `unresolved`: any adapter, audit, redaction, or resolver failure\n * defers the decision to the durable suspension + `resolveApproval` path instead of\n * approving, denying, or crashing the Attempt on a transient policy fault. Explicit\n * policy denials (including the P2 timeout-denial for `denial: \"terminal\"`) still deny.\n */\nexport const toDurableRunApprovalHook = Effect.fn(\"toDurableRunApprovalHook\")(function* (\n policy: RunApprovalAdapterPolicy,\n): Effect.fn.Return<\n RunApprovalHook<never, never>,\n never,\n ApprovalResolver | ApprovalAudit | Redactor\n> {\n const services = yield* Effect.context<ApprovalResolver | ApprovalAudit | Redactor>();\n const hook = toRunApprovalHook(policy);\n\n return {\n request: (request) =>\n hook.request(request).pipe(\n Effect.provideContext(services),\n Effect.catch((error) =>\n Effect.succeed<RunApprovalDecision>({\n _tag: \"unresolved\",\n reason: `Approval delegation failed (${error._tag}); the decision defers to the durable resolveApproval path`,\n }),\n ),\n ),\n };\n});\n\n/** Adapt one hierarchical budget node to the engine's usage accounting seam. */\nexport const toRunBudgetHook = (\n budget: UsageBudgetNode,\n): RunBudgetHook<BudgetExceeded | BudgetAdapterError, never> => ({\n guard: budget.guard,\n consume: (delta) =>\n Schema.decodeEffect(UsageDelta)({\n modelCalls: delta.modelCalls,\n inputTokens: delta.inputTokens,\n outputTokens: delta.outputTokens,\n cacheReadInputTokens: Math.max(0, delta.usage.inputTokens.cacheRead ?? 0),\n cacheWriteInputTokens: Math.max(0, delta.usage.inputTokens.cacheWrite ?? 0),\n toolCalls: delta.toolCalls,\n costMicrousd: delta.costMicrousd,\n }).pipe(\n Effect.mapError((error) =>\n BudgetAdapterError.make({\n message: `Engine usage delta is invalid: ${error.message}`,\n }),\n ),\n Effect.flatMap((usage) => budget.consume(usage)),\n Effect.asVoid,\n ),\n});\n\nexport type ThreadAdapterError =\n | ThreadNotFound\n | ThreadLimitExceeded\n | ThreadEncodingError\n | ThreadHistoryDiverged\n | ThreadOwnershipError;\n\n/**\n * Advanced integration for an existing Thread.Store snapshot. Ordinary Runs automatically\n * retain history through ThreadHistory.layer; use this helper only for explicit snapshot hooks.\n * Share that Layer's Thread.Store owner. PersistentHistory rejects these competing hooks.\n * The snapshot is explicit initial Prompt data. Each inline onHistory call immediately records\n * its append-only suffix, including updates from Runs that later fail or are interrupted. Writes\n * already made remain in the snapshot. Callback errors stop the Run as ThreadAdapterError;\n * snapshot lookup can fail with ThreadNotFound or ThreadOwnershipError before execution.\n * Construct scoped hooks inside InMemory.scoped; captured callbacks retain that owner.\n * Native Effect AI parts and provider options are preserved without a role/text projection.\n * For retaining only successful Runs, provide ThreadHistory through PersistentHistory.layer\n * with a memory or SQLite store instead. This adapter does not provide durable recovery.\n */\nexport const toRunThreadOptions = Effect.fn(\"toRunThreadOptions\")(function* (\n threadId: import(\"../core/Identifiers.ts\").ThreadId,\n runId: import(\"../core/Identifiers.ts\").RunId,\n): Effect.fn.Return<\n Pick<RunOptions<ThreadAdapterError>, \"threadId\" | \"history\" | \"onHistory\">,\n ThreadNotFound | ThreadOwnershipError,\n ConversationStore\n> {\n const threads = yield* ConversationStore;\n const snapshot = yield* threads.snapshot(threadId);\n\n return {\n threadId,\n history: toPrompt(snapshot),\n onHistory: (history) => threads.recordHistory(threadId, runId, history).pipe(Effect.asVoid),\n };\n});\n\n/** Prompt transform used by the adapter; the engine retains the authoritative source separately. */\nexport interface EnginePromptTransform<Error = never, Requirements = never> {\n readonly prepare: (\n source: Prompt.Prompt,\n request: RunContextRequest,\n ) => Effect.Effect<Prompt.Prompt, Error, Requirements>;\n}\n\n/** Adapt a prompt-only context transform without granting it authority over engine source history. */\nexport const toRunContextHook = <Error, Requirements>(\n transform: EnginePromptTransform<Error, Requirements>,\n): RunContextHook<Error, Requirements> => ({\n prepare: (request): Effect.Effect<PreparedRunContext, Error, Requirements> =>\n transform.prepare(request.source, request).pipe(Effect.map((prompt) => ({ prompt }))),\n});\n\n/** Scheduling values are structurally aligned and only reduce finite concurrency. */\nexport const toRunSchedulingHook = (\n runOverride: RunSchedulingHook[\"runOverride\"],\n toolRequiresSequential?: (toolName: string) => boolean,\n): RunSchedulingHook => ({\n runOverride,\n ...(toolRequiresSequential === undefined ? {} : { toolRequiresSequential }),\n});\n\n/** Validate policy configuration at adapter construction boundaries. */\nexport const RunApprovalAdapterPolicySchema = Schema.Struct({\n expiresInMillis: Schema.Int.check(Schema.isGreaterThan(0)),\n risk: Schema.Literals([\"low\", \"medium\", \"high\", \"critical\"]),\n denial: Schema.Literals([\"terminal\", \"recoverable\"]),\n});\n"],"mappings":"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"}
@@ -4,8 +4,8 @@ import { MemoryKey, MemoryReader, MemoryStorageError } from "../core/MemoryStore
4
4
  import { MemoryAccess } from "../core/MemoryRevalidation.mjs";
5
5
  import { MemoryIndexError, SemanticMemoryIndex } from "../core/SemanticMemoryIndex.mjs";
6
6
  import { SemanticMemoryError } from "../core/SemanticMemoryRevalidation.mjs";
7
- import { EmbeddingModel } from "effect/unstable/ai";
8
7
  import { Crypto, Effect, Schema } from "effect";
8
+ import { EmbeddingModel } from "effect/unstable/ai";
9
9
  declare namespace SemanticMemory_d_exports {
10
10
  export { SemanticIndexLimits, SemanticIndexResult, SemanticQueryLimits, SemanticQueryResult, indexMemorySource, querySemanticMemory };
11
11
  }
@@ -5,8 +5,8 @@ import { MemoryDocument, MemoryKey, MemoryReader, MemoryStorageError } from "../
5
5
  import { MemoryAccess } from "../core/MemoryRevalidation.mjs";
6
6
  import { MemoryIndexError, MemoryIndexQuery, MemoryIndexSearch, MemoryIndexSource, SemanticMemoryChunk, SemanticMemoryIndex, SemanticMemoryProfile } from "../core/SemanticMemoryIndex.mjs";
7
7
  import { SemanticCandidateLimits, SemanticMemoryError, revalidateSemanticMemoryCandidates } from "../core/SemanticMemoryRevalidation.mjs";
8
- import { EmbeddingModel } from "effect/unstable/ai";
9
8
  import { Clock, Crypto, Effect, Encoding, Schema } from "effect";
9
+ import { EmbeddingModel } from "effect/unstable/ai";
10
10
  //#region src/capabilities/SemanticMemory.ts
11
11
  var SemanticMemory_exports = /* @__PURE__ */ __exportAll({
12
12
  SemanticIndexLimits: () => SemanticIndexLimits,
@@ -1,4 +1,4 @@
1
- import { c as SubagentExecutionFailureClassification, l as SubagentGrant, s as SubagentExecutionFailure } from "../SubagentContract-tyN9v-Jv.mjs";
2
- import { o as WorkerCompletion, p as WorkerReport } from "../Worker-XEBYxRQv.mjs";
3
- import { A as list, C as BackgroundTools, D as cancel, E as awaitWorker, F as SubagentPolicyInput, I as SubagentPrestartDenied, L as SubagentProjectionFailure, M as start, N as stop, O as followUp, P as SubagentPolicy, R as delegationAllocationFromPolicy, S as BackgroundOptions, T as WorkerObservation, _ as SubagentTools, a as SubagentDelegation, b as layer, c as SubagentFailureMode, d as SubagentResult, f as SubagentResultContext, g as SubagentToolFailure, h as SubagentTool, i as SubagentDefineOptions, j as observe, k as inspect, l as SubagentLayerRequirements, m as SubagentRuntimeOptions, n as SubagentContainedFailure, o as SubagentDurableAccounting, p as SubagentReturnModeFailure, r as SubagentDeclarationOptions, s as SubagentDurableOptions, t as SubagentChildRunFailure, u as SubagentPrepareContext, w as Worker, x as make, y as background, z as delegationCapsFromPolicy } from "../Subagent-D59om8SR.mjs";
1
+ import { c as SubagentExecutionFailureClassification, l as SubagentGrant, s as SubagentExecutionFailure } from "../SubagentContract-DdPzxYQj.mjs";
2
+ import { o as WorkerCompletion, p as WorkerReport } from "../Worker-DH5SAVIK.mjs";
3
+ import { A as list, C as BackgroundTools, D as cancel, E as awaitWorker, F as SubagentPolicyInput, I as SubagentPrestartDenied, L as SubagentProjectionFailure, M as start, N as stop, O as followUp, P as SubagentPolicy, R as delegationAllocationFromPolicy, S as BackgroundOptions, T as WorkerObservation, _ as SubagentTools, a as SubagentDelegation, b as layer, c as SubagentFailureMode, d as SubagentResult, f as SubagentResultContext, g as SubagentToolFailure, h as SubagentTool, i as SubagentDefineOptions, j as observe, k as inspect, l as SubagentLayerRequirements, m as SubagentRuntimeOptions, n as SubagentContainedFailure, o as SubagentDurableAccounting, p as SubagentReturnModeFailure, r as SubagentDeclarationOptions, s as SubagentDurableOptions, t as SubagentChildRunFailure, u as SubagentPrepareContext, w as Worker, x as make, y as background, z as delegationCapsFromPolicy } from "../Subagent-t3pJDZMN.mjs";
4
4
  export { type BackgroundOptions, type BackgroundTools, SubagentChildRunFailure, SubagentContainedFailure, SubagentDeclarationOptions, SubagentDefineOptions, SubagentDelegation, SubagentDurableAccounting, SubagentDurableOptions, SubagentExecutionFailure, SubagentExecutionFailureClassification, SubagentFailureMode, SubagentGrant, SubagentLayerRequirements, SubagentPolicy, type SubagentPolicyInput, SubagentPrepareContext, SubagentPrestartDenied, SubagentProjectionFailure, SubagentResult, SubagentResultContext, SubagentReturnModeFailure, SubagentRuntimeOptions, SubagentTool, SubagentToolFailure, SubagentTools, Worker, WorkerCompletion, WorkerObservation, WorkerReport, awaitWorker as await, background, cancel, delegationAllocationFromPolicy, delegationCapsFromPolicy, followUp, inspect, layer, list, make, observe, start, stop };
@@ -1,5 +1,5 @@
1
1
  import { SubagentExecutionFailure, SubagentExecutionFailureClassification, SubagentGrant } from "../core/SubagentContract.mjs";
2
- import { o as WorkerCompletion, p as WorkerReport } from "../Worker-CfwzMZEK.mjs";
2
+ import { o as WorkerCompletion, p as WorkerReport } from "../Worker-DZjdMjZn.mjs";
3
3
  import "./SubagentReservations.mjs";
4
- import { _ as SubagentPolicy, a as layer, b as delegationAllocationFromPolicy, c as WorkerObservation, d as followUp, f as inspect, g as stop, h as start, i as background, l as awaitWorker, m as observe, n as SubagentResult, o as make, p as list, s as Worker, t as SubagentDurableAccounting, u as cancel, v as SubagentPrestartDenied, x as delegationCapsFromPolicy, y as SubagentProjectionFailure } from "../Subagent-Cxvuaius.mjs";
4
+ import { _ as SubagentPolicy, a as layer, b as delegationAllocationFromPolicy, c as WorkerObservation, d as followUp, f as inspect, g as stop, h as start, i as background, l as awaitWorker, m as observe, n as SubagentResult, o as make, p as list, s as Worker, t as SubagentDurableAccounting, u as cancel, v as SubagentPrestartDenied, x as delegationCapsFromPolicy, y as SubagentProjectionFailure } from "../Subagent-C-fyHbcp.mjs";
5
5
  export { SubagentDurableAccounting, SubagentExecutionFailure, SubagentExecutionFailureClassification, SubagentGrant, SubagentPolicy, SubagentPrestartDenied, SubagentProjectionFailure, SubagentResult, Worker, WorkerCompletion, WorkerObservation, WorkerReport, awaitWorker as await, background, cancel, delegationAllocationFromPolicy, delegationCapsFromPolicy, followUp, inspect, layer, list, make, observe, start, stop };
@@ -1,6 +1,10 @@
1
1
  import { d as ToolCallId, s as RunId } from "../Identifiers-CN2s30fF.mjs";
2
- import { d as SubagentReservationAmounts, o as SubagentDelegationCaps } from "../SubagentContract-tyN9v-Jv.mjs";
3
- import { Context, Effect, Layer, Schema, Scope } from "effect";
2
+ import { d as SubagentReservationAmounts, o as SubagentDelegationCaps } from "../SubagentContract-DdPzxYQj.mjs";
3
+ import * as Schema$1 from "effect/Schema";
4
+ import * as Context$1 from "effect/Context";
5
+ import * as Effect$1 from "effect/Effect";
6
+ import * as Layer$1 from "effect/Layer";
7
+ import { Scope } from "effect";
4
8
  declare namespace SubagentReservations_d_exports {
5
9
  export { BudgetReservationId, SubagentAvailableAmounts, SubagentBudgetDimension, SubagentBudgetExhausted, SubagentObservedUsage, SubagentParentBudgetActive, SubagentParentBudgetConflict, SubagentParentBudgetUnknown, SubagentParentBudgetView, SubagentReservationConflict, SubagentReservationRequest, SubagentReservationStatus, SubagentReservationUnknown, SubagentReservationView, SubagentReservations, SubagentReservationsMemoryLive, makeBudgetReservationId };
6
10
  }
@@ -12,52 +16,52 @@ declare namespace SubagentReservations_d_exports {
12
16
  * Component encoding escapes `:`; the mapping is injective for every
13
17
  * `(parentRunId, parentToolCallId)` pair.
14
18
  */
15
- export declare const BudgetReservationId: Schema.brand<Schema.NonEmptyString, "@effect-agent/capabilities/BudgetReservationId">;
19
+ export declare const BudgetReservationId: Schema$1.brand<Schema$1.NonEmptyString, "@effect-agent/capabilities/BudgetReservationId">;
16
20
  export type BudgetReservationId = typeof BudgetReservationId.Type;
17
21
  /** Derive the stable reservation identity of one Subagent Invocation. */
18
22
  export declare const makeBudgetReservationId: (parentRunId: RunId, parentToolCallId: ToolCallId) => BudgetReservationId;
19
23
  /** One enforced hierarchical delegation budget dimension. */
20
- export declare const SubagentBudgetDimension: Schema.Literals<readonly ["total-child-invocations", "concurrent-children", "turns", "tool-calls", "duration", "input-tokens", "output-tokens", "cost", "result-bytes"]>;
24
+ export declare const SubagentBudgetDimension: Schema$1.Literals<readonly ["total-child-invocations", "concurrent-children", "turns", "tool-calls", "duration", "input-tokens", "output-tokens", "cost", "result-bytes"]>;
21
25
  export type SubagentBudgetDimension = typeof SubagentBudgetDimension.Type;
22
- declare const SubagentObservedUsage_base: Schema.Class<SubagentObservedUsage, Schema.Struct<{
23
- readonly turns: Schema.optionalKey<Schema.Natural>;
24
- readonly toolCalls: Schema.optionalKey<Schema.Natural>;
25
- readonly durationMillis: Schema.optionalKey<Schema.Natural>;
26
- readonly inputTokens: Schema.optionalKey<Schema.Natural>;
27
- readonly outputTokens: Schema.optionalKey<Schema.Natural>;
28
- readonly costMicrousd: Schema.optionalKey<Schema.Natural>;
29
- readonly resultBytes: Schema.optionalKey<Schema.Natural>;
26
+ declare const SubagentObservedUsage_base: Schema$1.Class<SubagentObservedUsage, Schema$1.Struct<{
27
+ readonly turns: Schema$1.optionalKey<Schema$1.Natural>;
28
+ readonly toolCalls: Schema$1.optionalKey<Schema$1.Natural>;
29
+ readonly durationMillis: Schema$1.optionalKey<Schema$1.Natural>;
30
+ readonly inputTokens: Schema$1.optionalKey<Schema$1.Natural>;
31
+ readonly outputTokens: Schema$1.optionalKey<Schema$1.Natural>;
32
+ readonly costMicrousd: Schema$1.optionalKey<Schema$1.Natural>;
33
+ readonly resultBytes: Schema$1.optionalKey<Schema$1.Natural>;
30
34
  }>, {}>;
31
35
  /** Observed child usage. An absent dimension was never reported and settles conservatively. */
32
36
  export declare class SubagentObservedUsage extends SubagentObservedUsage_base {}
33
- declare const SubagentAvailableAmounts_base: Schema.Class<SubagentAvailableAmounts, Schema.Struct<{
34
- readonly turns: Schema.optionalKey<Schema.Natural>;
35
- readonly toolCalls: Schema.optionalKey<Schema.Natural>;
36
- readonly durationMillis: Schema.optionalKey<Schema.Natural>;
37
- readonly inputTokens: Schema.optionalKey<Schema.Natural>;
38
- readonly outputTokens: Schema.optionalKey<Schema.Natural>;
39
- readonly costMicrousd: Schema.optionalKey<Schema.Natural>;
40
- readonly resultBytes: Schema.optionalKey<Schema.Natural>;
37
+ declare const SubagentAvailableAmounts_base: Schema$1.Class<SubagentAvailableAmounts, Schema$1.Struct<{
38
+ readonly turns: Schema$1.optionalKey<Schema$1.Natural>;
39
+ readonly toolCalls: Schema$1.optionalKey<Schema$1.Natural>;
40
+ readonly durationMillis: Schema$1.optionalKey<Schema$1.Natural>;
41
+ readonly inputTokens: Schema$1.optionalKey<Schema$1.Natural>;
42
+ readonly outputTokens: Schema$1.optionalKey<Schema$1.Natural>;
43
+ readonly costMicrousd: Schema$1.optionalKey<Schema$1.Natural>;
44
+ readonly resultBytes: Schema$1.optionalKey<Schema$1.Natural>;
41
45
  }>, {}>;
42
46
  /** Remaining delegable allocation per configured dimension. Absent means not configured. */
43
47
  export declare class SubagentAvailableAmounts extends SubagentAvailableAmounts_base {}
44
48
  /** Reservation lifecycle: absent → reserved → releasePending → released. */
45
- export declare const SubagentReservationStatus: Schema.Literals<readonly ["reserved", "releasePending", "released"]>;
49
+ export declare const SubagentReservationStatus: Schema$1.Literals<readonly ["reserved", "releasePending", "released"]>;
46
50
  export type SubagentReservationStatus = typeof SubagentReservationStatus.Type;
47
- declare const SubagentReservationRequest_base: Schema.Class<SubagentReservationRequest, Schema.Struct<{
48
- readonly parentRunId: Schema.brand<Schema.NonEmptyString, "@effect-agent/core/RunId">;
49
- readonly parentToolCallId: Schema.brand<Schema.NonEmptyString, "@effect-agent/core/ToolCallId">;
51
+ declare const SubagentReservationRequest_base: Schema$1.Class<SubagentReservationRequest, Schema$1.Struct<{
52
+ readonly parentRunId: Schema$1.brand<Schema$1.NonEmptyString, "@effect-agent/core/RunId">;
53
+ readonly parentToolCallId: Schema$1.brand<Schema$1.NonEmptyString, "@effect-agent/core/ToolCallId">;
50
54
  readonly allocation: typeof SubagentReservationAmounts;
51
55
  /** Additional invocation slots held for this child's entire subtree. */
52
- readonly descendantInvocations: Schema.optionalKey<Schema.Natural>;
56
+ readonly descendantInvocations: Schema$1.optionalKey<Schema$1.Natural>;
53
57
  }>, {}>;
54
58
  /** All-or-nothing allocation request for one Subagent Invocation. */
55
59
  export declare class SubagentReservationRequest extends SubagentReservationRequest_base {}
56
- declare const SubagentReservationView_base: Schema.Class<SubagentReservationView, Schema.Struct<{
57
- readonly reservationId: Schema.brand<Schema.NonEmptyString, "@effect-agent/capabilities/BudgetReservationId">;
58
- readonly parentRunId: Schema.brand<Schema.NonEmptyString, "@effect-agent/core/RunId">;
59
- readonly parentToolCallId: Schema.brand<Schema.NonEmptyString, "@effect-agent/core/ToolCallId">;
60
- readonly status: Schema.Literals<readonly ["reserved", "releasePending", "released"]>;
60
+ declare const SubagentReservationView_base: Schema$1.Class<SubagentReservationView, Schema$1.Struct<{
61
+ readonly reservationId: Schema$1.brand<Schema$1.NonEmptyString, "@effect-agent/capabilities/BudgetReservationId">;
62
+ readonly parentRunId: Schema$1.brand<Schema$1.NonEmptyString, "@effect-agent/core/RunId">;
63
+ readonly parentToolCallId: Schema$1.brand<Schema$1.NonEmptyString, "@effect-agent/core/ToolCallId">;
64
+ readonly status: Schema$1.Literals<readonly ["reserved", "releasePending", "released"]>;
61
65
  readonly allocated: typeof SubagentReservationAmounts;
62
66
  readonly observedConsumed: typeof SubagentObservedUsage;
63
67
  readonly coveredConsumed: typeof SubagentReservationAmounts;
@@ -66,59 +70,59 @@ declare const SubagentReservationView_base: Schema.Class<SubagentReservationView
66
70
  }>, {}>;
67
71
  /** Accounting snapshot of one reservation: allocated, observed, covered, released, and overrun. */
68
72
  export declare class SubagentReservationView extends SubagentReservationView_base {}
69
- declare const SubagentParentBudgetView_base: Schema.Class<SubagentParentBudgetView, Schema.Struct<{
70
- readonly parentRunId: Schema.brand<Schema.NonEmptyString, "@effect-agent/core/RunId">;
73
+ declare const SubagentParentBudgetView_base: Schema$1.Class<SubagentParentBudgetView, Schema$1.Struct<{
74
+ readonly parentRunId: Schema$1.brand<Schema$1.NonEmptyString, "@effect-agent/core/RunId">;
71
75
  readonly caps: typeof SubagentDelegationCaps;
72
- readonly totalChildInvocations: Schema.Natural;
76
+ readonly totalChildInvocations: Schema$1.Natural;
73
77
  readonly available: typeof SubagentAvailableAmounts;
74
78
  readonly cumulativeOverrun: typeof SubagentReservationAmounts;
75
- readonly reservations: Schema.$Array<typeof SubagentReservationView>;
79
+ readonly reservations: Schema$1.$Array<typeof SubagentReservationView>;
76
80
  }>, {}>;
77
81
  /** Aggregate parent delegation budget snapshot including every reservation it owns. */
78
82
  export declare class SubagentParentBudgetView extends SubagentParentBudgetView_base {}
79
- declare const SubagentBudgetExhausted_base: Schema.Class<SubagentBudgetExhausted, Schema.TaggedStruct<"SubagentBudgetExhausted", {
80
- readonly parentRunId: Schema.brand<Schema.NonEmptyString, "@effect-agent/core/RunId">;
81
- readonly dimension: Schema.Literals<readonly ["total-child-invocations", "concurrent-children", "turns", "tool-calls", "duration", "input-tokens", "output-tokens", "cost", "result-bytes"]>;
82
- readonly limitValue: Schema.Natural;
83
- readonly observedValue: Schema.Natural;
83
+ declare const SubagentBudgetExhausted_base: Schema$1.Class<SubagentBudgetExhausted, Schema$1.TaggedStruct<"SubagentBudgetExhausted", {
84
+ readonly parentRunId: Schema$1.brand<Schema$1.NonEmptyString, "@effect-agent/core/RunId">;
85
+ readonly dimension: Schema$1.Literals<readonly ["total-child-invocations", "concurrent-children", "turns", "tool-calls", "duration", "input-tokens", "output-tokens", "cost", "result-bytes"]>;
86
+ readonly limitValue: Schema$1.Natural;
87
+ readonly observedValue: Schema$1.Natural;
84
88
  }>, import("effect/Cause").YieldableError>;
85
89
  /** All-or-nothing admission failed: one dimension cannot cover the requested allocation. */
86
90
  export declare class SubagentBudgetExhausted extends SubagentBudgetExhausted_base {}
87
- declare const SubagentReservationConflict_base: Schema.Class<SubagentReservationConflict, Schema.TaggedStruct<"SubagentReservationConflict", {
88
- readonly reservationId: Schema.brand<Schema.NonEmptyString, "@effect-agent/capabilities/BudgetReservationId">;
91
+ declare const SubagentReservationConflict_base: Schema$1.Class<SubagentReservationConflict, Schema$1.TaggedStruct<"SubagentReservationConflict", {
92
+ readonly reservationId: Schema$1.brand<Schema$1.NonEmptyString, "@effect-agent/capabilities/BudgetReservationId">;
89
93
  readonly existingAllocation: typeof SubagentReservationAmounts;
90
94
  readonly requestedAllocation: typeof SubagentReservationAmounts;
91
95
  }>, import("effect/Cause").YieldableError>;
92
96
  /** The stable key is already reserved with a different allocation; neither request may win silently. */
93
97
  export declare class SubagentReservationConflict extends SubagentReservationConflict_base {}
94
- declare const SubagentReservationUnknown_base: Schema.Class<SubagentReservationUnknown, Schema.TaggedStruct<"SubagentReservationUnknown", {
95
- readonly reservationId: Schema.brand<Schema.NonEmptyString, "@effect-agent/capabilities/BudgetReservationId">;
98
+ declare const SubagentReservationUnknown_base: Schema$1.Class<SubagentReservationUnknown, Schema$1.TaggedStruct<"SubagentReservationUnknown", {
99
+ readonly reservationId: Schema$1.brand<Schema$1.NonEmptyString, "@effect-agent/capabilities/BudgetReservationId">;
96
100
  }>, import("effect/Cause").YieldableError>;
97
101
  /** No reservation exists for this identity. */
98
102
  export declare class SubagentReservationUnknown extends SubagentReservationUnknown_base {}
99
- declare const SubagentParentBudgetUnknown_base: Schema.Class<SubagentParentBudgetUnknown, Schema.TaggedStruct<"SubagentParentBudgetUnknown", {
100
- readonly parentRunId: Schema.brand<Schema.NonEmptyString, "@effect-agent/core/RunId">;
103
+ declare const SubagentParentBudgetUnknown_base: Schema$1.Class<SubagentParentBudgetUnknown, Schema$1.TaggedStruct<"SubagentParentBudgetUnknown", {
104
+ readonly parentRunId: Schema$1.brand<Schema$1.NonEmptyString, "@effect-agent/core/RunId">;
101
105
  }>, import("effect/Cause").YieldableError>;
102
106
  /** No delegation budget was registered for this parent Run. */
103
107
  export declare class SubagentParentBudgetUnknown extends SubagentParentBudgetUnknown_base {}
104
- declare const SubagentParentBudgetConflict_base: Schema.Class<SubagentParentBudgetConflict, Schema.TaggedStruct<"SubagentParentBudgetConflict", {
105
- readonly parentRunId: Schema.brand<Schema.NonEmptyString, "@effect-agent/core/RunId">;
108
+ declare const SubagentParentBudgetConflict_base: Schema$1.Class<SubagentParentBudgetConflict, Schema$1.TaggedStruct<"SubagentParentBudgetConflict", {
109
+ readonly parentRunId: Schema$1.brand<Schema$1.NonEmptyString, "@effect-agent/core/RunId">;
106
110
  }>, import("effect/Cause").YieldableError>;
107
111
  /** The parent Run is already registered with different caps; neither set may win silently. */
108
112
  export declare class SubagentParentBudgetConflict extends SubagentParentBudgetConflict_base {}
109
- declare const SubagentParentBudgetActive_base: Schema.Class<SubagentParentBudgetActive, Schema.TaggedStruct<"SubagentParentBudgetActive", {
110
- readonly parentRunId: Schema.brand<Schema.NonEmptyString, "@effect-agent/core/RunId">;
111
- readonly openReservations: Schema.Natural;
113
+ declare const SubagentParentBudgetActive_base: Schema$1.Class<SubagentParentBudgetActive, Schema$1.TaggedStruct<"SubagentParentBudgetActive", {
114
+ readonly parentRunId: Schema$1.brand<Schema$1.NonEmptyString, "@effect-agent/core/RunId">;
115
+ readonly openReservations: Schema$1.Natural;
112
116
  }>, import("effect/Cause").YieldableError>;
113
117
  /** A parent budget cannot retire while one of its child reservations is unsettled. */
114
118
  export declare class SubagentParentBudgetActive extends SubagentParentBudgetActive_base {}
115
- declare const SubagentReservations_base: Context.ServiceClass<SubagentReservations, "@effect-agent/capabilities/SubagentReservations", {
119
+ declare const SubagentReservations_base: Context$1.ServiceClass<SubagentReservations, "@effect-agent/capabilities/SubagentReservations", {
116
120
  /**
117
121
  * Register the finite delegable budget of one parent Run. Re-registering
118
122
  * identical caps returns the existing registration; different caps fail
119
123
  * rather than silently winning.
120
124
  */
121
- readonly registerParent: (parentRunId: RunId, caps: SubagentDelegationCaps) => Effect.Effect<SubagentParentBudgetView, SubagentParentBudgetConflict>;
125
+ readonly registerParent: (parentRunId: RunId, caps: SubagentDelegationCaps) => Effect$1.Effect<SubagentParentBudgetView, SubagentParentBudgetConflict>;
122
126
  /**
123
127
  * Atomically reserve an all-or-nothing child allocation from the parent's
124
128
  * remaining delegable budget, checking every dimension before committing
@@ -126,26 +130,26 @@ declare const SubagentReservations_base: Context.ServiceClass<SubagentReservatio
126
130
  * double-reserves; a distinct key charges the monotonic total-invocation
127
131
  * counter by one plus its reserved descendant slots, which release never refunds.
128
132
  */
129
- readonly reserve: (request: SubagentReservationRequest) => Effect.Effect<SubagentReservationView, SubagentBudgetExhausted | SubagentReservationConflict | SubagentParentBudgetUnknown>;
133
+ readonly reserve: (request: SubagentReservationRequest) => Effect$1.Effect<SubagentReservationView, SubagentBudgetExhausted | SubagentReservationConflict | SubagentParentBudgetUnknown>;
130
134
  /**
131
135
  * Record observed child usage against a reservation. Usage above the
132
136
  * reserved amount is recorded as overrun and charged to the parent
133
137
  * aggregate, never clipped. Usage observed after settlement begins is
134
138
  * pure overrun and cannot create budget.
135
139
  */
136
- readonly observe: (reservationId: BudgetReservationId, usage: SubagentObservedUsage) => Effect.Effect<SubagentReservationView, SubagentReservationUnknown>;
140
+ readonly observe: (reservationId: BudgetReservationId, usage: SubagentObservedUsage) => Effect$1.Effect<SubagentReservationView, SubagentReservationUnknown>;
137
141
  /**
138
142
  * `reserved → releasePending`: freeze the settlement decision. A dimension
139
143
  * with no observed usage conservatively consumes its reserved amount.
140
144
  * Idempotent once settlement has begun.
141
145
  */
142
- readonly beginRelease: (reservationId: BudgetReservationId) => Effect.Effect<SubagentReservationView, SubagentReservationUnknown>;
146
+ readonly beginRelease: (reservationId: BudgetReservationId) => Effect$1.Effect<SubagentReservationView, SubagentReservationUnknown>;
143
147
  /**
144
148
  * `releasePending → released`: return the unused allocation to the parent
145
149
  * exactly once. Called on a still-reserved reservation it settles through
146
150
  * `releasePending` in the same atomic update. Idempotent once released.
147
151
  */
148
- readonly release: (reservationId: BudgetReservationId) => Effect.Effect<SubagentReservationView, SubagentReservationUnknown>;
152
+ readonly release: (reservationId: BudgetReservationId) => Effect$1.Effect<SubagentReservationView, SubagentReservationUnknown>;
149
153
  /**
150
154
  * Acquire bounded child execution slots as a Scope-owned resource, so
151
155
  * an interrupted child always frees its slot. The Semaphore bounds only
@@ -155,7 +159,7 @@ declare const SubagentReservations_base: Context.ServiceClass<SubagentReservatio
155
159
  * instead of queueing forever; an unconfigured cap leaves execution
156
160
  * ungated by this service.
157
161
  */
158
- readonly acquireChildSlot: (parentRunId: RunId, slots?: number) => Effect.Effect<void, SubagentParentBudgetUnknown | SubagentBudgetExhausted, Scope.Scope>;
162
+ readonly acquireChildSlot: (parentRunId: RunId, slots?: number) => Effect$1.Effect<void, SubagentParentBudgetUnknown | SubagentBudgetExhausted, Scope.Scope>;
159
163
  /**
160
164
  * Reclaim one terminal parent registration and all of its released child
161
165
  * reservations. Retirement is idempotent; an unknown parent is already
@@ -163,9 +167,9 @@ declare const SubagentReservations_base: Context.ServiceClass<SubagentReservatio
163
167
  * The Run owner must call this after its final accounting snapshot no
164
168
  * longer needs to be observable.
165
169
  */
166
- readonly retireParent: (parentRunId: RunId) => Effect.Effect<void, SubagentParentBudgetActive>;
170
+ readonly retireParent: (parentRunId: RunId) => Effect$1.Effect<void, SubagentParentBudgetActive>;
167
171
  /** Read the aggregate parent view for auditing and conservation checks. */
168
- readonly parentSnapshot: (parentRunId: RunId) => Effect.Effect<SubagentParentBudgetView, SubagentParentBudgetUnknown>;
172
+ readonly parentSnapshot: (parentRunId: RunId) => Effect$1.Effect<SubagentParentBudgetView, SubagentParentBudgetUnknown>;
169
173
  }>;
170
174
  /**
171
175
  * Parent-owned hierarchical Subagent budget reservation authority.
@@ -180,7 +184,7 @@ export declare class SubagentReservations extends SubagentReservations_base {}
180
184
  * In-memory reservation ledger. All state lives in one `Ref` owned by the
181
185
  * Layer's Scope; every transition is a single atomic `Ref.modify`.
182
186
  */
183
- export declare const SubagentReservationsMemoryLive: Layer.Layer<SubagentReservations>;
187
+ export declare const SubagentReservationsMemoryLive: Layer$1.Layer<SubagentReservations>;
184
188
  //#endregion
185
189
  export { SubagentReservations_d_exports as t };
186
190
  //# sourceMappingURL=SubagentReservations.d.mts.map
@@ -1,7 +1,12 @@
1
1
  import { t as __exportAll } from "../rolldown-runtime-D7D4PA-g.mjs";
2
2
  import { RunId, ToolCallId } from "../core/Identifiers.mjs";
3
3
  import { SubagentDelegationCaps, SubagentReservationAmounts } from "../core/SubagentContract.mjs";
4
- import { Context, Effect, Layer, Ref, Schema, Semaphore } from "effect";
4
+ import * as Schema from "effect/Schema";
5
+ import * as Context from "effect/Context";
6
+ import * as Effect from "effect/Effect";
7
+ import * as Layer from "effect/Layer";
8
+ import * as Semaphore from "effect/Semaphore";
9
+ import * as Ref from "effect/Ref";
5
10
  //#region src/capabilities/SubagentReservations.ts
6
11
  var SubagentReservations_exports = /* @__PURE__ */ __exportAll({
7
12
  BudgetReservationId: () => BudgetReservationId,
@@ -1 +1 @@
1
- {"version":3,"file":"SubagentReservations.mjs","names":[],"sources":["../../src/capabilities/SubagentReservations.ts"],"sourcesContent":["import { Context, Effect, Layer, Ref, Schema, type Scope, Semaphore } from \"effect\";\n\nimport { RunId, ToolCallId } from \"../core/Identifiers.ts\";\nimport { SubagentDelegationCaps, SubagentReservationAmounts } from \"../core/SubagentContract.ts\";\n\nconst Natural = Schema.Natural;\n\n/**\n * Stable identity of one parent-owned Subagent budget reservation.\n *\n * Derivation rule (see {@link makeBudgetReservationId}):\n * `encodeURIComponent(parentRunId) + \":\" + encodeURIComponent(parentToolCallId)`.\n * Component encoding escapes `:`; the mapping is injective for every\n * `(parentRunId, parentToolCallId)` pair.\n */\nexport const BudgetReservationId = Schema.NonEmptyString.pipe(\n Schema.brand(\"@effect-agent/capabilities/BudgetReservationId\"),\n);\n\nexport type BudgetReservationId = typeof BudgetReservationId.Type;\n\nconst decodeBudgetReservationId = Schema.decodeSync(BudgetReservationId);\n\n/** Derive the stable reservation identity of one Subagent Invocation. */\nexport const makeBudgetReservationId = (\n parentRunId: RunId,\n parentToolCallId: ToolCallId,\n): BudgetReservationId =>\n decodeBudgetReservationId(\n `${encodeURIComponent(parentRunId)}:${encodeURIComponent(parentToolCallId)}`,\n );\n\n/** One enforced hierarchical delegation budget dimension. */\nexport const SubagentBudgetDimension = Schema.Literals([\n \"total-child-invocations\",\n \"concurrent-children\",\n \"turns\",\n \"tool-calls\",\n \"duration\",\n \"input-tokens\",\n \"output-tokens\",\n \"cost\",\n \"result-bytes\",\n]);\n\nexport type SubagentBudgetDimension = typeof SubagentBudgetDimension.Type;\n\nconst AmountFields = SubagentReservationAmounts.fields;\n\nconst OptionalAmountFields = {\n turns: Schema.optionalKey(Natural),\n toolCalls: Schema.optionalKey(Natural),\n durationMillis: Schema.optionalKey(Natural),\n inputTokens: Schema.optionalKey(Natural),\n outputTokens: Schema.optionalKey(Natural),\n costMicrousd: Schema.optionalKey(Natural),\n resultBytes: Schema.optionalKey(Natural),\n} as const;\n\n/** Observed child usage. An absent dimension was never reported and settles conservatively. */\nexport class SubagentObservedUsage extends Schema.Class<SubagentObservedUsage>(\n \"@effect-agent/capabilities/SubagentObservedUsage\",\n)(OptionalAmountFields) {}\n\n/** Remaining delegable allocation per configured dimension. Absent means not configured. */\nexport class SubagentAvailableAmounts extends Schema.Class<SubagentAvailableAmounts>(\n \"@effect-agent/capabilities/SubagentAvailableAmounts\",\n)(OptionalAmountFields) {}\n\n/** Reservation lifecycle: absent → reserved → releasePending → released. */\nexport const SubagentReservationStatus = Schema.Literals([\n \"reserved\",\n \"releasePending\",\n \"released\",\n]);\n\nexport type SubagentReservationStatus = typeof SubagentReservationStatus.Type;\n\n/** All-or-nothing allocation request for one Subagent Invocation. */\nexport class SubagentReservationRequest extends Schema.Class<SubagentReservationRequest>(\n \"@effect-agent/capabilities/SubagentReservationRequest\",\n)({\n parentRunId: RunId,\n parentToolCallId: ToolCallId,\n allocation: SubagentReservationAmounts,\n /** Additional invocation slots held for this child's entire subtree. */\n descendantInvocations: Schema.optionalKey(Natural),\n}) {}\n\n/** Accounting snapshot of one reservation: allocated, observed, covered, released, and overrun. */\nexport class SubagentReservationView extends Schema.Class<SubagentReservationView>(\n \"@effect-agent/capabilities/SubagentReservationView\",\n)({\n reservationId: BudgetReservationId,\n parentRunId: RunId,\n parentToolCallId: ToolCallId,\n status: SubagentReservationStatus,\n allocated: SubagentReservationAmounts,\n observedConsumed: SubagentObservedUsage,\n coveredConsumed: SubagentReservationAmounts,\n released: SubagentReservationAmounts,\n overrun: SubagentReservationAmounts,\n}) {}\n\n/** Aggregate parent delegation budget snapshot including every reservation it owns. */\nexport class SubagentParentBudgetView extends Schema.Class<SubagentParentBudgetView>(\n \"@effect-agent/capabilities/SubagentParentBudgetView\",\n)({\n parentRunId: RunId,\n caps: SubagentDelegationCaps,\n totalChildInvocations: Natural,\n available: SubagentAvailableAmounts,\n cumulativeOverrun: SubagentReservationAmounts,\n reservations: Schema.Array(SubagentReservationView),\n}) {}\n\n/** All-or-nothing admission failed: one dimension cannot cover the requested allocation. */\nexport class SubagentBudgetExhausted extends Schema.TaggedError<SubagentBudgetExhausted>()(\n \"SubagentBudgetExhausted\",\n {\n parentRunId: RunId,\n dimension: SubagentBudgetDimension,\n limitValue: Natural,\n observedValue: Natural,\n },\n) {}\n\n/** The stable key is already reserved with a different allocation; neither request may win silently. */\nexport class SubagentReservationConflict extends Schema.TaggedError<SubagentReservationConflict>()(\n \"SubagentReservationConflict\",\n {\n reservationId: BudgetReservationId,\n existingAllocation: SubagentReservationAmounts,\n requestedAllocation: SubagentReservationAmounts,\n },\n) {}\n\n/** No reservation exists for this identity. */\nexport class SubagentReservationUnknown extends Schema.TaggedError<SubagentReservationUnknown>()(\n \"SubagentReservationUnknown\",\n {\n reservationId: BudgetReservationId,\n },\n) {}\n\n/** No delegation budget was registered for this parent Run. */\nexport class SubagentParentBudgetUnknown extends Schema.TaggedError<SubagentParentBudgetUnknown>()(\n \"SubagentParentBudgetUnknown\",\n {\n parentRunId: RunId,\n },\n) {}\n\n/** The parent Run is already registered with different caps; neither set may win silently. */\nexport class SubagentParentBudgetConflict extends Schema.TaggedError<SubagentParentBudgetConflict>()(\n \"SubagentParentBudgetConflict\",\n {\n parentRunId: RunId,\n },\n) {}\n\n/** A parent budget cannot retire while one of its child reservations is unsettled. */\nexport class SubagentParentBudgetActive extends Schema.TaggedError<SubagentParentBudgetActive>()(\n \"SubagentParentBudgetActive\",\n {\n parentRunId: RunId,\n openReservations: Natural,\n },\n) {}\n\n/**\n * Parent-owned hierarchical Subagent budget reservation authority.\n *\n * Every transition is a single atomic `Ref` update, so parallel children can\n * never observe and spend the same remainder. The post-response usage hook in\n * `budget.ts` is deliberately not reused here: it accounts after the fact and\n * is not a reservation service.\n */\nexport class SubagentReservations extends Context.Service<\n SubagentReservations,\n {\n /**\n * Register the finite delegable budget of one parent Run. Re-registering\n * identical caps returns the existing registration; different caps fail\n * rather than silently winning.\n */\n readonly registerParent: (\n parentRunId: RunId,\n caps: SubagentDelegationCaps,\n ) => Effect.Effect<SubagentParentBudgetView, SubagentParentBudgetConflict>;\n /**\n * Atomically reserve an all-or-nothing child allocation from the parent's\n * remaining delegable budget, checking every dimension before committing\n * any. The same key with the same allocation is idempotent and never\n * double-reserves; a distinct key charges the monotonic total-invocation\n * counter by one plus its reserved descendant slots, which release never refunds.\n */\n readonly reserve: (\n request: SubagentReservationRequest,\n ) => Effect.Effect<\n SubagentReservationView,\n SubagentBudgetExhausted | SubagentReservationConflict | SubagentParentBudgetUnknown\n >;\n /**\n * Record observed child usage against a reservation. Usage above the\n * reserved amount is recorded as overrun and charged to the parent\n * aggregate, never clipped. Usage observed after settlement begins is\n * pure overrun and cannot create budget.\n */\n readonly observe: (\n reservationId: BudgetReservationId,\n usage: SubagentObservedUsage,\n ) => Effect.Effect<SubagentReservationView, SubagentReservationUnknown>;\n /**\n * `reserved → releasePending`: freeze the settlement decision. A dimension\n * with no observed usage conservatively consumes its reserved amount.\n * Idempotent once settlement has begun.\n */\n readonly beginRelease: (\n reservationId: BudgetReservationId,\n ) => Effect.Effect<SubagentReservationView, SubagentReservationUnknown>;\n /**\n * `releasePending → released`: return the unused allocation to the parent\n * exactly once. Called on a still-reserved reservation it settles through\n * `releasePending` in the same atomic update. Idempotent once released.\n */\n readonly release: (\n reservationId: BudgetReservationId,\n ) => Effect.Effect<SubagentReservationView, SubagentReservationUnknown>;\n /**\n * Acquire bounded child execution slots as a Scope-owned resource, so\n * an interrupted child always frees its slot. The Semaphore bounds only\n * concurrent children; a subtree holds one plus its possible descendants up front.\n * Total invocations are enforced separately by\n * `reserve`'s monotonic counter. A configured cap of zero fails closed\n * instead of queueing forever; an unconfigured cap leaves execution\n * ungated by this service.\n */\n readonly acquireChildSlot: (\n parentRunId: RunId,\n slots?: number,\n ) => Effect.Effect<void, SubagentParentBudgetUnknown | SubagentBudgetExhausted, Scope.Scope>;\n /**\n * Reclaim one terminal parent registration and all of its released child\n * reservations. Retirement is idempotent; an unknown parent is already\n * retired. Open reservations fail typed and leave the ledger unchanged.\n * The Run owner must call this after its final accounting snapshot no\n * longer needs to be observable.\n */\n readonly retireParent: (parentRunId: RunId) => Effect.Effect<void, SubagentParentBudgetActive>;\n /** Read the aggregate parent view for auditing and conservation checks. */\n readonly parentSnapshot: (\n parentRunId: RunId,\n ) => Effect.Effect<SubagentParentBudgetView, SubagentParentBudgetUnknown>;\n }\n>()(\"@effect-agent/capabilities/SubagentReservations\") {}\n\ntype ReservableDimensionKey = keyof typeof AmountFields;\n\ntype Amounts = Readonly<Record<ReservableDimensionKey, number>>;\ntype PartialAmounts = Readonly<Partial<Record<ReservableDimensionKey, number>>>;\n\ninterface DimensionSpec {\n readonly key: ReservableDimensionKey;\n readonly dimension: SubagentBudgetDimension;\n readonly cap: (caps: SubagentDelegationCaps) => number | undefined;\n}\n\nconst dimensionSpecs: ReadonlyArray<DimensionSpec> = [\n { key: \"turns\", dimension: \"turns\", cap: (caps) => caps.maxTurns },\n { key: \"toolCalls\", dimension: \"tool-calls\", cap: (caps) => caps.maxToolCalls },\n { key: \"durationMillis\", dimension: \"duration\", cap: (caps) => caps.maxDurationMillis },\n { key: \"inputTokens\", dimension: \"input-tokens\", cap: (caps) => caps.maxInputTokens },\n { key: \"outputTokens\", dimension: \"output-tokens\", cap: (caps) => caps.maxOutputTokens },\n { key: \"costMicrousd\", dimension: \"cost\", cap: (caps) => caps.maxCostMicrousd },\n { key: \"resultBytes\", dimension: \"result-bytes\", cap: (caps) => caps.maxResultBytes },\n];\n\nconst zeroAmounts: Amounts = {\n turns: 0,\n toolCalls: 0,\n durationMillis: 0,\n inputTokens: 0,\n outputTokens: 0,\n costMicrousd: 0,\n resultBytes: 0,\n};\n\ninterface ReservationState {\n readonly parentRunId: RunId;\n readonly parentToolCallId: ToolCallId;\n readonly descendantInvocations: number;\n readonly status: SubagentReservationStatus;\n readonly allocated: Amounts;\n readonly observed: PartialAmounts;\n readonly covered: Amounts;\n readonly overrun: Amounts;\n}\n\ninterface ParentBudgetState {\n readonly parentRunId: RunId;\n readonly caps: SubagentDelegationCaps;\n readonly gate: Semaphore.Semaphore | undefined;\n /** Monotonic count of distinct reservations; never refunded by release. */\n readonly totalChildInvocations: number;\n /** Remaining delegable allocation for configured dimensions only. */\n readonly available: PartialAmounts;\n readonly cumulativeOverrun: Amounts;\n}\n\ninterface ReservationLedger {\n readonly parents: ReadonlyMap<RunId, ParentBudgetState>;\n readonly reservations: ReadonlyMap<BudgetReservationId, ReservationState>;\n}\n\ntype TransitionResult<A, E> =\n | { readonly _tag: \"ok\"; readonly value: A }\n | { readonly _tag: \"error\"; readonly error: E }\n | { readonly _tag: \"corrupt\"; readonly message: string };\n\nconst ok = <A>(value: A): TransitionResult<A, never> => ({ _tag: \"ok\", value });\nconst fail = <E>(error: E): TransitionResult<never, E> => ({ _tag: \"error\", error });\n\nconst resolve = <A, E>(result: TransitionResult<A, E>): Effect.Effect<A, E> => {\n switch (result._tag) {\n case \"ok\":\n return Effect.succeed(result.value);\n case \"error\":\n return Effect.fail(result.error);\n case \"corrupt\":\n return Effect.die(new Error(result.message));\n }\n};\n\nconst sameCaps = (a: SubagentDelegationCaps, b: SubagentDelegationCaps): boolean =>\n a.maxTotalChildInvocations === b.maxTotalChildInvocations &&\n a.maxConcurrentChildren === b.maxConcurrentChildren &&\n a.maxTurns === b.maxTurns &&\n a.maxToolCalls === b.maxToolCalls &&\n a.maxDurationMillis === b.maxDurationMillis &&\n a.maxInputTokens === b.maxInputTokens &&\n a.maxOutputTokens === b.maxOutputTokens &&\n a.maxCostMicrousd === b.maxCostMicrousd &&\n a.maxResultBytes === b.maxResultBytes;\n\nconst sameAmounts = (a: Amounts, b: Amounts): boolean =>\n dimensionSpecs.every((spec) => a[spec.key] === b[spec.key]);\n\nconst optionalAmounts = (partial: PartialAmounts): { [K in ReservableDimensionKey]?: number } => {\n const out: { [K in ReservableDimensionKey]?: number } = {};\n\n for (const spec of dimensionSpecs) {\n const value = partial[spec.key];\n\n if (value !== undefined) {\n out[spec.key] = value;\n }\n }\n\n return out;\n};\n\n/** Covered usage freezes at settlement, so the unused allocation remains stable afterward. */\nconst unusedAllocation = (reservation: ReservationState): Amounts => {\n const unused = { ...zeroAmounts };\n\n for (const spec of dimensionSpecs) {\n unused[spec.key] = reservation.allocated[spec.key] - reservation.covered[spec.key];\n }\n\n return unused;\n};\n\nconst reservationView = (\n reservationId: BudgetReservationId,\n state: ReservationState,\n): SubagentReservationView =>\n SubagentReservationView.make({\n reservationId,\n parentRunId: state.parentRunId,\n parentToolCallId: state.parentToolCallId,\n status: state.status,\n allocated: SubagentReservationAmounts.make(state.allocated),\n observedConsumed: SubagentObservedUsage.make(optionalAmounts(state.observed)),\n coveredConsumed: SubagentReservationAmounts.make(state.covered),\n released: SubagentReservationAmounts.make(\n state.status === \"released\" ? unusedAllocation(state) : zeroAmounts,\n ),\n overrun: SubagentReservationAmounts.make(state.overrun),\n });\n\nconst parentView = (\n ledger: ReservationLedger,\n parent: ParentBudgetState,\n): SubagentParentBudgetView => {\n const reservations: Array<SubagentReservationView> = [];\n\n for (const [reservationId, reservation] of ledger.reservations) {\n if (reservation.parentRunId === parent.parentRunId) {\n reservations.push(reservationView(reservationId, reservation));\n }\n }\n\n return SubagentParentBudgetView.make({\n parentRunId: parent.parentRunId,\n caps: parent.caps,\n totalChildInvocations: parent.totalChildInvocations,\n available: SubagentAvailableAmounts.make(optionalAmounts(parent.available)),\n cumulativeOverrun: SubagentReservationAmounts.make(parent.cumulativeOverrun),\n reservations,\n });\n};\n\nconst corruptParent = (parentRunId: RunId): TransitionResult<never, never> => ({\n _tag: \"corrupt\",\n message: `SubagentReservations ledger invariant violated: reservation references unregistered parent Run ${parentRunId}`,\n});\n\nconst registerTransition = (\n ledger: ReservationLedger,\n parentRunId: RunId,\n caps: SubagentDelegationCaps,\n gate: Semaphore.Semaphore | undefined,\n): readonly [\n TransitionResult<SubagentParentBudgetView, SubagentParentBudgetConflict>,\n ReservationLedger,\n] => {\n const existing = ledger.parents.get(parentRunId);\n\n if (existing !== undefined) {\n return sameCaps(existing.caps, caps)\n ? [ok(parentView(ledger, existing)), ledger]\n : [fail(SubagentParentBudgetConflict.make({ parentRunId })), ledger];\n }\n const available: { [K in ReservableDimensionKey]?: number } = {};\n\n for (const spec of dimensionSpecs) {\n const cap = spec.cap(caps);\n\n if (cap !== undefined) {\n available[spec.key] = cap;\n }\n }\n\n const parent: ParentBudgetState = {\n parentRunId,\n caps,\n gate,\n totalChildInvocations: 0,\n available,\n cumulativeOverrun: zeroAmounts,\n };\n\n const next: ReservationLedger = {\n parents: new Map(ledger.parents).set(parentRunId, parent),\n reservations: ledger.reservations,\n };\n\n return [ok(parentView(next, parent)), next];\n};\n\nconst reserveTransition = (\n ledger: ReservationLedger,\n request: SubagentReservationRequest,\n): readonly [\n TransitionResult<\n SubagentReservationView,\n SubagentBudgetExhausted | SubagentReservationConflict | SubagentParentBudgetUnknown\n >,\n ReservationLedger,\n] => {\n const parent = ledger.parents.get(request.parentRunId);\n\n if (parent === undefined) {\n return [fail(SubagentParentBudgetUnknown.make({ parentRunId: request.parentRunId })), ledger];\n }\n const reservationId = makeBudgetReservationId(request.parentRunId, request.parentToolCallId);\n const existing = ledger.reservations.get(reservationId);\n\n if (existing !== undefined) {\n return sameAmounts(existing.allocated, request.allocation) &&\n existing.descendantInvocations === (request.descendantInvocations ?? 0)\n ? [ok(reservationView(reservationId, existing)), ledger]\n : [\n fail(\n SubagentReservationConflict.make({\n reservationId,\n existingAllocation: SubagentReservationAmounts.make(existing.allocated),\n requestedAllocation: request.allocation,\n }),\n ),\n ledger,\n ];\n }\n const maxInvocations = parent.caps.maxTotalChildInvocations;\n const slots = 1 + (request.descendantInvocations ?? 0);\n\n if (maxInvocations !== undefined && parent.totalChildInvocations + slots > maxInvocations) {\n return [\n fail(\n SubagentBudgetExhausted.make({\n parentRunId: request.parentRunId,\n dimension: \"total-child-invocations\",\n limitValue: maxInvocations,\n observedValue: parent.totalChildInvocations + slots,\n }),\n ),\n ledger,\n ];\n }\n for (const spec of dimensionSpecs) {\n const cap = spec.cap(parent.caps);\n\n if (cap === undefined) {\n continue;\n }\n // Overrun already charged to the parent aggregate reduces delegable\n // headroom without mutating `available`.\n const headroom = (parent.available[spec.key] ?? 0) - parent.cumulativeOverrun[spec.key];\n const requested = request.allocation[spec.key];\n\n if (requested > headroom) {\n return [\n fail(\n SubagentBudgetExhausted.make({\n parentRunId: request.parentRunId,\n dimension: spec.dimension,\n limitValue: cap,\n observedValue: cap - headroom + requested,\n }),\n ),\n ledger,\n ];\n }\n }\n\n const nextAvailable: { [K in ReservableDimensionKey]?: number } = {\n ...parent.available,\n };\n\n for (const spec of dimensionSpecs) {\n const available = parent.available[spec.key];\n\n if (available !== undefined) {\n nextAvailable[spec.key] = available - request.allocation[spec.key];\n }\n }\n\n const reservation: ReservationState = {\n parentRunId: request.parentRunId,\n parentToolCallId: request.parentToolCallId,\n descendantInvocations: request.descendantInvocations ?? 0,\n status: \"reserved\",\n allocated: request.allocation,\n observed: {},\n covered: zeroAmounts,\n overrun: zeroAmounts,\n };\n\n const next: ReservationLedger = {\n parents: new Map(ledger.parents).set(request.parentRunId, {\n ...parent,\n totalChildInvocations: parent.totalChildInvocations + slots,\n available: nextAvailable,\n }),\n reservations: new Map(ledger.reservations).set(reservationId, reservation),\n };\n\n return [ok(reservationView(reservationId, reservation)), next];\n};\n\nconst observeTransition = (\n ledger: ReservationLedger,\n reservationId: BudgetReservationId,\n usage: SubagentObservedUsage,\n): readonly [\n TransitionResult<SubagentReservationView, SubagentReservationUnknown>,\n ReservationLedger,\n] => {\n const reservation = ledger.reservations.get(reservationId);\n\n if (reservation === undefined) {\n return [fail(SubagentReservationUnknown.make({ reservationId })), ledger];\n }\n const parent = ledger.parents.get(reservation.parentRunId);\n\n if (parent === undefined) {\n return [corruptParent(reservation.parentRunId), ledger];\n }\n const observed: { [K in ReservableDimensionKey]?: number } = { ...reservation.observed };\n const covered: Record<ReservableDimensionKey, number> = { ...reservation.covered };\n const overrun: Record<ReservableDimensionKey, number> = { ...reservation.overrun };\n\n const cumulativeOverrun: Record<ReservableDimensionKey, number> = {\n ...parent.cumulativeOverrun,\n };\n\n for (const spec of dimensionSpecs) {\n const delta = usage[spec.key];\n\n if (delta === undefined) {\n continue;\n }\n observed[spec.key] = (observed[spec.key] ?? 0) + delta;\n\n // Once settlement began the accounting decision is frozen, so late or\n // corrected usage is pure overrun and cannot silently create budget.\n const coverable =\n reservation.status === \"reserved\"\n ? Math.min(delta, reservation.allocated[spec.key] - covered[spec.key])\n : 0;\n\n covered[spec.key] += coverable;\n const overrunDelta = delta - coverable;\n\n overrun[spec.key] += overrunDelta;\n cumulativeOverrun[spec.key] += overrunDelta;\n }\n const nextReservation: ReservationState = { ...reservation, observed, covered, overrun };\n\n const next: ReservationLedger = {\n parents: new Map(ledger.parents).set(parent.parentRunId, { ...parent, cumulativeOverrun }),\n reservations: new Map(ledger.reservations).set(reservationId, nextReservation),\n };\n\n return [ok(reservationView(reservationId, nextReservation)), next];\n};\n\n/**\n * Freeze the settlement decision. A dimension that was never observed\n * conservatively consumes its full reserved amount.\n */\nconst freezeSettlement = (reservation: ReservationState): ReservationState => {\n const observed: { [K in ReservableDimensionKey]?: number } = { ...reservation.observed };\n const covered: Record<ReservableDimensionKey, number> = { ...reservation.covered };\n\n for (const spec of dimensionSpecs) {\n if (observed[spec.key] === undefined) {\n observed[spec.key] = reservation.allocated[spec.key];\n covered[spec.key] = reservation.allocated[spec.key];\n }\n }\n\n return { ...reservation, status: \"releasePending\", observed, covered };\n};\n\nconst beginReleaseTransition = (\n ledger: ReservationLedger,\n reservationId: BudgetReservationId,\n): readonly [\n TransitionResult<SubagentReservationView, SubagentReservationUnknown>,\n ReservationLedger,\n] => {\n const reservation = ledger.reservations.get(reservationId);\n\n if (reservation === undefined) {\n return [fail(SubagentReservationUnknown.make({ reservationId })), ledger];\n }\n if (reservation.status !== \"reserved\") {\n return [ok(reservationView(reservationId, reservation)), ledger];\n }\n const frozen = freezeSettlement(reservation);\n\n const next: ReservationLedger = {\n parents: ledger.parents,\n reservations: new Map(ledger.reservations).set(reservationId, frozen),\n };\n\n return [ok(reservationView(reservationId, frozen)), next];\n};\n\nconst releaseTransition = (\n ledger: ReservationLedger,\n reservationId: BudgetReservationId,\n): readonly [\n TransitionResult<SubagentReservationView, SubagentReservationUnknown>,\n ReservationLedger,\n] => {\n const reservation = ledger.reservations.get(reservationId);\n\n if (reservation === undefined) {\n return [fail(SubagentReservationUnknown.make({ reservationId })), ledger];\n }\n if (reservation.status === \"released\") {\n return [ok(reservationView(reservationId, reservation)), ledger];\n }\n const parent = ledger.parents.get(reservation.parentRunId);\n\n if (parent === undefined) {\n return [corruptParent(reservation.parentRunId), ledger];\n }\n const frozen = reservation.status === \"reserved\" ? freezeSettlement(reservation) : reservation;\n const unused = unusedAllocation(frozen);\n const nextAvailable: { [K in ReservableDimensionKey]?: number } = { ...parent.available };\n\n for (const spec of dimensionSpecs) {\n const available = parent.available[spec.key];\n\n if (available !== undefined) {\n nextAvailable[spec.key] = available + unused[spec.key];\n }\n }\n const settled: ReservationState = { ...frozen, status: \"released\" };\n\n const next: ReservationLedger = {\n parents: new Map(ledger.parents).set(parent.parentRunId, {\n ...parent,\n available: nextAvailable,\n }),\n reservations: new Map(ledger.reservations).set(reservationId, settled),\n };\n\n return [ok(reservationView(reservationId, settled)), next];\n};\n\nconst retireParentTransition = (\n ledger: ReservationLedger,\n parentRunId: RunId,\n): readonly [TransitionResult<void, SubagentParentBudgetActive>, ReservationLedger] => {\n if (!ledger.parents.has(parentRunId)) {\n return [ok(undefined), ledger];\n }\n let openReservations = 0;\n\n for (const reservation of ledger.reservations.values()) {\n if (reservation.parentRunId === parentRunId && reservation.status !== \"released\") {\n openReservations += 1;\n }\n }\n if (openReservations > 0) {\n return [fail(SubagentParentBudgetActive.make({ parentRunId, openReservations })), ledger];\n }\n const parents = new Map(ledger.parents);\n\n parents.delete(parentRunId);\n const reservations = new Map(ledger.reservations);\n\n for (const [reservationId, reservation] of reservations) {\n if (reservation.parentRunId === parentRunId) {\n reservations.delete(reservationId);\n }\n }\n\n return [ok(undefined), { parents, reservations }];\n};\n\n/**\n * In-memory reservation ledger. All state lives in one `Ref` owned by the\n * Layer's Scope; every transition is a single atomic `Ref.modify`.\n */\nexport const SubagentReservationsMemoryLive: Layer.Layer<SubagentReservations> = Layer.effect(\n SubagentReservations,\n Effect.gen(function* () {\n const state = yield* Ref.make<ReservationLedger>({\n parents: new Map(),\n reservations: new Map(),\n });\n\n return SubagentReservations.of({\n registerParent: Effect.fn(\"SubagentReservations.registerParent\")(\n function* (parentRunId, caps) {\n const gate =\n caps.maxConcurrentChildren !== undefined && caps.maxConcurrentChildren > 0\n ? yield* Semaphore.make(caps.maxConcurrentChildren)\n : undefined;\n\n const result = yield* Ref.modify(state, (ledger) =>\n registerTransition(ledger, parentRunId, caps, gate),\n );\n\n return yield* resolve(result);\n },\n ),\n reserve: Effect.fn(\"SubagentReservations.reserve\")(function* (request) {\n const result = yield* Ref.modify(state, (ledger) => reserveTransition(ledger, request));\n\n return yield* resolve(result);\n }),\n observe: Effect.fn(\"SubagentReservations.observe\")(function* (reservationId, usage) {\n const result = yield* Ref.modify(state, (ledger) =>\n observeTransition(ledger, reservationId, usage),\n );\n\n return yield* resolve(result);\n }),\n beginRelease: Effect.fn(\"SubagentReservations.beginRelease\")(function* (reservationId) {\n const result = yield* Ref.modify(state, (ledger) =>\n beginReleaseTransition(ledger, reservationId),\n );\n\n return yield* resolve(result);\n }),\n release: Effect.fn(\"SubagentReservations.release\")(function* (reservationId) {\n const result = yield* Ref.modify(state, (ledger) =>\n releaseTransition(ledger, reservationId),\n );\n\n return yield* resolve(result);\n }),\n acquireChildSlot: Effect.fn(\"SubagentReservations.acquireChildSlot\")(function* (\n parentRunId,\n slots = 1,\n ) {\n const ledger = yield* Ref.get(state);\n const parent = ledger.parents.get(parentRunId);\n\n if (parent === undefined) {\n return yield* SubagentParentBudgetUnknown.make({ parentRunId });\n }\n const cap = parent.caps.maxConcurrentChildren;\n\n if (cap === undefined) {\n return;\n }\n if (!Number.isSafeInteger(slots) || slots < 1 || slots > cap || parent.gate === undefined) {\n return yield* SubagentBudgetExhausted.make({\n parentRunId,\n dimension: \"concurrent-children\",\n limitValue: cap,\n observedValue: Number.isSafeInteger(slots) && slots > 0 ? slots : 0,\n });\n }\n const gate = parent.gate;\n\n yield* Effect.acquireRelease(\n gate.take(slots),\n (permits) => gate.release(permits).pipe(Effect.asVoid),\n { interruptible: true },\n );\n }),\n retireParent: Effect.fn(\"SubagentReservations.retireParent\")(function* (parentRunId) {\n const result = yield* Ref.modify(state, (ledger) =>\n retireParentTransition(ledger, parentRunId),\n );\n\n return yield* resolve(result);\n }),\n parentSnapshot: Effect.fn(\"SubagentReservations.parentSnapshot\")(function* (parentRunId) {\n const ledger = yield* Ref.get(state);\n const parent = ledger.parents.get(parentRunId);\n\n if (parent === undefined) {\n return yield* SubagentParentBudgetUnknown.make({ parentRunId });\n }\n\n return parentView(ledger, parent);\n }),\n });\n }),\n);\n"],"mappings":"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"}
1
+ {"version":3,"file":"SubagentReservations.mjs","names":[],"sources":["../../src/capabilities/SubagentReservations.ts"],"sourcesContent":["import type { Scope } from \"effect\";\nimport * as Context from \"effect/Context\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Ref from \"effect/Ref\";\nimport * as Schema from \"effect/Schema\";\nimport * as Semaphore from \"effect/Semaphore\";\n\nimport { RunId, ToolCallId } from \"../core/Identifiers.ts\";\nimport { SubagentDelegationCaps, SubagentReservationAmounts } from \"../core/SubagentContract.ts\";\n\nconst Natural = Schema.Natural;\n\n/**\n * Stable identity of one parent-owned Subagent budget reservation.\n *\n * Derivation rule (see {@link makeBudgetReservationId}):\n * `encodeURIComponent(parentRunId) + \":\" + encodeURIComponent(parentToolCallId)`.\n * Component encoding escapes `:`; the mapping is injective for every\n * `(parentRunId, parentToolCallId)` pair.\n */\nexport const BudgetReservationId = Schema.NonEmptyString.pipe(\n Schema.brand(\"@effect-agent/capabilities/BudgetReservationId\"),\n);\n\nexport type BudgetReservationId = typeof BudgetReservationId.Type;\n\nconst decodeBudgetReservationId = Schema.decodeSync(BudgetReservationId);\n\n/** Derive the stable reservation identity of one Subagent Invocation. */\nexport const makeBudgetReservationId = (\n parentRunId: RunId,\n parentToolCallId: ToolCallId,\n): BudgetReservationId =>\n decodeBudgetReservationId(\n `${encodeURIComponent(parentRunId)}:${encodeURIComponent(parentToolCallId)}`,\n );\n\n/** One enforced hierarchical delegation budget dimension. */\nexport const SubagentBudgetDimension = Schema.Literals([\n \"total-child-invocations\",\n \"concurrent-children\",\n \"turns\",\n \"tool-calls\",\n \"duration\",\n \"input-tokens\",\n \"output-tokens\",\n \"cost\",\n \"result-bytes\",\n]);\n\nexport type SubagentBudgetDimension = typeof SubagentBudgetDimension.Type;\n\nconst AmountFields = SubagentReservationAmounts.fields;\n\nconst OptionalAmountFields = {\n turns: Schema.optionalKey(Natural),\n toolCalls: Schema.optionalKey(Natural),\n durationMillis: Schema.optionalKey(Natural),\n inputTokens: Schema.optionalKey(Natural),\n outputTokens: Schema.optionalKey(Natural),\n costMicrousd: Schema.optionalKey(Natural),\n resultBytes: Schema.optionalKey(Natural),\n} as const;\n\n/** Observed child usage. An absent dimension was never reported and settles conservatively. */\nexport class SubagentObservedUsage extends Schema.Class<SubagentObservedUsage>(\n \"@effect-agent/capabilities/SubagentObservedUsage\",\n)(OptionalAmountFields) {}\n\n/** Remaining delegable allocation per configured dimension. Absent means not configured. */\nexport class SubagentAvailableAmounts extends Schema.Class<SubagentAvailableAmounts>(\n \"@effect-agent/capabilities/SubagentAvailableAmounts\",\n)(OptionalAmountFields) {}\n\n/** Reservation lifecycle: absent → reserved → releasePending → released. */\nexport const SubagentReservationStatus = Schema.Literals([\n \"reserved\",\n \"releasePending\",\n \"released\",\n]);\n\nexport type SubagentReservationStatus = typeof SubagentReservationStatus.Type;\n\n/** All-or-nothing allocation request for one Subagent Invocation. */\nexport class SubagentReservationRequest extends Schema.Class<SubagentReservationRequest>(\n \"@effect-agent/capabilities/SubagentReservationRequest\",\n)({\n parentRunId: RunId,\n parentToolCallId: ToolCallId,\n allocation: SubagentReservationAmounts,\n /** Additional invocation slots held for this child's entire subtree. */\n descendantInvocations: Schema.optionalKey(Natural),\n}) {}\n\n/** Accounting snapshot of one reservation: allocated, observed, covered, released, and overrun. */\nexport class SubagentReservationView extends Schema.Class<SubagentReservationView>(\n \"@effect-agent/capabilities/SubagentReservationView\",\n)({\n reservationId: BudgetReservationId,\n parentRunId: RunId,\n parentToolCallId: ToolCallId,\n status: SubagentReservationStatus,\n allocated: SubagentReservationAmounts,\n observedConsumed: SubagentObservedUsage,\n coveredConsumed: SubagentReservationAmounts,\n released: SubagentReservationAmounts,\n overrun: SubagentReservationAmounts,\n}) {}\n\n/** Aggregate parent delegation budget snapshot including every reservation it owns. */\nexport class SubagentParentBudgetView extends Schema.Class<SubagentParentBudgetView>(\n \"@effect-agent/capabilities/SubagentParentBudgetView\",\n)({\n parentRunId: RunId,\n caps: SubagentDelegationCaps,\n totalChildInvocations: Natural,\n available: SubagentAvailableAmounts,\n cumulativeOverrun: SubagentReservationAmounts,\n reservations: Schema.Array(SubagentReservationView),\n}) {}\n\n/** All-or-nothing admission failed: one dimension cannot cover the requested allocation. */\nexport class SubagentBudgetExhausted extends Schema.TaggedError<SubagentBudgetExhausted>()(\n \"SubagentBudgetExhausted\",\n {\n parentRunId: RunId,\n dimension: SubagentBudgetDimension,\n limitValue: Natural,\n observedValue: Natural,\n },\n) {}\n\n/** The stable key is already reserved with a different allocation; neither request may win silently. */\nexport class SubagentReservationConflict extends Schema.TaggedError<SubagentReservationConflict>()(\n \"SubagentReservationConflict\",\n {\n reservationId: BudgetReservationId,\n existingAllocation: SubagentReservationAmounts,\n requestedAllocation: SubagentReservationAmounts,\n },\n) {}\n\n/** No reservation exists for this identity. */\nexport class SubagentReservationUnknown extends Schema.TaggedError<SubagentReservationUnknown>()(\n \"SubagentReservationUnknown\",\n {\n reservationId: BudgetReservationId,\n },\n) {}\n\n/** No delegation budget was registered for this parent Run. */\nexport class SubagentParentBudgetUnknown extends Schema.TaggedError<SubagentParentBudgetUnknown>()(\n \"SubagentParentBudgetUnknown\",\n {\n parentRunId: RunId,\n },\n) {}\n\n/** The parent Run is already registered with different caps; neither set may win silently. */\nexport class SubagentParentBudgetConflict extends Schema.TaggedError<SubagentParentBudgetConflict>()(\n \"SubagentParentBudgetConflict\",\n {\n parentRunId: RunId,\n },\n) {}\n\n/** A parent budget cannot retire while one of its child reservations is unsettled. */\nexport class SubagentParentBudgetActive extends Schema.TaggedError<SubagentParentBudgetActive>()(\n \"SubagentParentBudgetActive\",\n {\n parentRunId: RunId,\n openReservations: Natural,\n },\n) {}\n\n/**\n * Parent-owned hierarchical Subagent budget reservation authority.\n *\n * Every transition is a single atomic `Ref` update, so parallel children can\n * never observe and spend the same remainder. The post-response usage hook in\n * `budget.ts` is deliberately not reused here: it accounts after the fact and\n * is not a reservation service.\n */\nexport class SubagentReservations extends Context.Service<\n SubagentReservations,\n {\n /**\n * Register the finite delegable budget of one parent Run. Re-registering\n * identical caps returns the existing registration; different caps fail\n * rather than silently winning.\n */\n readonly registerParent: (\n parentRunId: RunId,\n caps: SubagentDelegationCaps,\n ) => Effect.Effect<SubagentParentBudgetView, SubagentParentBudgetConflict>;\n /**\n * Atomically reserve an all-or-nothing child allocation from the parent's\n * remaining delegable budget, checking every dimension before committing\n * any. The same key with the same allocation is idempotent and never\n * double-reserves; a distinct key charges the monotonic total-invocation\n * counter by one plus its reserved descendant slots, which release never refunds.\n */\n readonly reserve: (\n request: SubagentReservationRequest,\n ) => Effect.Effect<\n SubagentReservationView,\n SubagentBudgetExhausted | SubagentReservationConflict | SubagentParentBudgetUnknown\n >;\n /**\n * Record observed child usage against a reservation. Usage above the\n * reserved amount is recorded as overrun and charged to the parent\n * aggregate, never clipped. Usage observed after settlement begins is\n * pure overrun and cannot create budget.\n */\n readonly observe: (\n reservationId: BudgetReservationId,\n usage: SubagentObservedUsage,\n ) => Effect.Effect<SubagentReservationView, SubagentReservationUnknown>;\n /**\n * `reserved → releasePending`: freeze the settlement decision. A dimension\n * with no observed usage conservatively consumes its reserved amount.\n * Idempotent once settlement has begun.\n */\n readonly beginRelease: (\n reservationId: BudgetReservationId,\n ) => Effect.Effect<SubagentReservationView, SubagentReservationUnknown>;\n /**\n * `releasePending → released`: return the unused allocation to the parent\n * exactly once. Called on a still-reserved reservation it settles through\n * `releasePending` in the same atomic update. Idempotent once released.\n */\n readonly release: (\n reservationId: BudgetReservationId,\n ) => Effect.Effect<SubagentReservationView, SubagentReservationUnknown>;\n /**\n * Acquire bounded child execution slots as a Scope-owned resource, so\n * an interrupted child always frees its slot. The Semaphore bounds only\n * concurrent children; a subtree holds one plus its possible descendants up front.\n * Total invocations are enforced separately by\n * `reserve`'s monotonic counter. A configured cap of zero fails closed\n * instead of queueing forever; an unconfigured cap leaves execution\n * ungated by this service.\n */\n readonly acquireChildSlot: (\n parentRunId: RunId,\n slots?: number,\n ) => Effect.Effect<void, SubagentParentBudgetUnknown | SubagentBudgetExhausted, Scope.Scope>;\n /**\n * Reclaim one terminal parent registration and all of its released child\n * reservations. Retirement is idempotent; an unknown parent is already\n * retired. Open reservations fail typed and leave the ledger unchanged.\n * The Run owner must call this after its final accounting snapshot no\n * longer needs to be observable.\n */\n readonly retireParent: (parentRunId: RunId) => Effect.Effect<void, SubagentParentBudgetActive>;\n /** Read the aggregate parent view for auditing and conservation checks. */\n readonly parentSnapshot: (\n parentRunId: RunId,\n ) => Effect.Effect<SubagentParentBudgetView, SubagentParentBudgetUnknown>;\n }\n>()(\"@effect-agent/capabilities/SubagentReservations\") {}\n\ntype ReservableDimensionKey = keyof typeof AmountFields;\n\ntype Amounts = Readonly<Record<ReservableDimensionKey, number>>;\ntype PartialAmounts = Readonly<Partial<Record<ReservableDimensionKey, number>>>;\n\ninterface DimensionSpec {\n readonly key: ReservableDimensionKey;\n readonly dimension: SubagentBudgetDimension;\n readonly cap: (caps: SubagentDelegationCaps) => number | undefined;\n}\n\nconst dimensionSpecs: ReadonlyArray<DimensionSpec> = [\n { key: \"turns\", dimension: \"turns\", cap: (caps) => caps.maxTurns },\n { key: \"toolCalls\", dimension: \"tool-calls\", cap: (caps) => caps.maxToolCalls },\n { key: \"durationMillis\", dimension: \"duration\", cap: (caps) => caps.maxDurationMillis },\n { key: \"inputTokens\", dimension: \"input-tokens\", cap: (caps) => caps.maxInputTokens },\n { key: \"outputTokens\", dimension: \"output-tokens\", cap: (caps) => caps.maxOutputTokens },\n { key: \"costMicrousd\", dimension: \"cost\", cap: (caps) => caps.maxCostMicrousd },\n { key: \"resultBytes\", dimension: \"result-bytes\", cap: (caps) => caps.maxResultBytes },\n];\n\nconst zeroAmounts: Amounts = {\n turns: 0,\n toolCalls: 0,\n durationMillis: 0,\n inputTokens: 0,\n outputTokens: 0,\n costMicrousd: 0,\n resultBytes: 0,\n};\n\ninterface ReservationState {\n readonly parentRunId: RunId;\n readonly parentToolCallId: ToolCallId;\n readonly descendantInvocations: number;\n readonly status: SubagentReservationStatus;\n readonly allocated: Amounts;\n readonly observed: PartialAmounts;\n readonly covered: Amounts;\n readonly overrun: Amounts;\n}\n\ninterface ParentBudgetState {\n readonly parentRunId: RunId;\n readonly caps: SubagentDelegationCaps;\n readonly gate: Semaphore.Semaphore | undefined;\n /** Monotonic count of distinct reservations; never refunded by release. */\n readonly totalChildInvocations: number;\n /** Remaining delegable allocation for configured dimensions only. */\n readonly available: PartialAmounts;\n readonly cumulativeOverrun: Amounts;\n}\n\ninterface ReservationLedger {\n readonly parents: ReadonlyMap<RunId, ParentBudgetState>;\n readonly reservations: ReadonlyMap<BudgetReservationId, ReservationState>;\n}\n\ntype TransitionResult<A, E> =\n | { readonly _tag: \"ok\"; readonly value: A }\n | { readonly _tag: \"error\"; readonly error: E }\n | { readonly _tag: \"corrupt\"; readonly message: string };\n\nconst ok = <A>(value: A): TransitionResult<A, never> => ({ _tag: \"ok\", value });\nconst fail = <E>(error: E): TransitionResult<never, E> => ({ _tag: \"error\", error });\n\nconst resolve = <A, E>(result: TransitionResult<A, E>): Effect.Effect<A, E> => {\n switch (result._tag) {\n case \"ok\":\n return Effect.succeed(result.value);\n case \"error\":\n return Effect.fail(result.error);\n case \"corrupt\":\n return Effect.die(new Error(result.message));\n }\n};\n\nconst sameCaps = (a: SubagentDelegationCaps, b: SubagentDelegationCaps): boolean =>\n a.maxTotalChildInvocations === b.maxTotalChildInvocations &&\n a.maxConcurrentChildren === b.maxConcurrentChildren &&\n a.maxTurns === b.maxTurns &&\n a.maxToolCalls === b.maxToolCalls &&\n a.maxDurationMillis === b.maxDurationMillis &&\n a.maxInputTokens === b.maxInputTokens &&\n a.maxOutputTokens === b.maxOutputTokens &&\n a.maxCostMicrousd === b.maxCostMicrousd &&\n a.maxResultBytes === b.maxResultBytes;\n\nconst sameAmounts = (a: Amounts, b: Amounts): boolean =>\n dimensionSpecs.every((spec) => a[spec.key] === b[spec.key]);\n\nconst optionalAmounts = (partial: PartialAmounts): { [K in ReservableDimensionKey]?: number } => {\n const out: { [K in ReservableDimensionKey]?: number } = {};\n\n for (const spec of dimensionSpecs) {\n const value = partial[spec.key];\n\n if (value !== undefined) {\n out[spec.key] = value;\n }\n }\n\n return out;\n};\n\n/** Covered usage freezes at settlement, so the unused allocation remains stable afterward. */\nconst unusedAllocation = (reservation: ReservationState): Amounts => {\n const unused = { ...zeroAmounts };\n\n for (const spec of dimensionSpecs) {\n unused[spec.key] = reservation.allocated[spec.key] - reservation.covered[spec.key];\n }\n\n return unused;\n};\n\nconst reservationView = (\n reservationId: BudgetReservationId,\n state: ReservationState,\n): SubagentReservationView =>\n SubagentReservationView.make({\n reservationId,\n parentRunId: state.parentRunId,\n parentToolCallId: state.parentToolCallId,\n status: state.status,\n allocated: SubagentReservationAmounts.make(state.allocated),\n observedConsumed: SubagentObservedUsage.make(optionalAmounts(state.observed)),\n coveredConsumed: SubagentReservationAmounts.make(state.covered),\n released: SubagentReservationAmounts.make(\n state.status === \"released\" ? unusedAllocation(state) : zeroAmounts,\n ),\n overrun: SubagentReservationAmounts.make(state.overrun),\n });\n\nconst parentView = (\n ledger: ReservationLedger,\n parent: ParentBudgetState,\n): SubagentParentBudgetView => {\n const reservations: Array<SubagentReservationView> = [];\n\n for (const [reservationId, reservation] of ledger.reservations) {\n if (reservation.parentRunId === parent.parentRunId) {\n reservations.push(reservationView(reservationId, reservation));\n }\n }\n\n return SubagentParentBudgetView.make({\n parentRunId: parent.parentRunId,\n caps: parent.caps,\n totalChildInvocations: parent.totalChildInvocations,\n available: SubagentAvailableAmounts.make(optionalAmounts(parent.available)),\n cumulativeOverrun: SubagentReservationAmounts.make(parent.cumulativeOverrun),\n reservations,\n });\n};\n\nconst corruptParent = (parentRunId: RunId): TransitionResult<never, never> => ({\n _tag: \"corrupt\",\n message: `SubagentReservations ledger invariant violated: reservation references unregistered parent Run ${parentRunId}`,\n});\n\nconst registerTransition = (\n ledger: ReservationLedger,\n parentRunId: RunId,\n caps: SubagentDelegationCaps,\n gate: Semaphore.Semaphore | undefined,\n): readonly [\n TransitionResult<SubagentParentBudgetView, SubagentParentBudgetConflict>,\n ReservationLedger,\n] => {\n const existing = ledger.parents.get(parentRunId);\n\n if (existing !== undefined) {\n return sameCaps(existing.caps, caps)\n ? [ok(parentView(ledger, existing)), ledger]\n : [fail(SubagentParentBudgetConflict.make({ parentRunId })), ledger];\n }\n const available: { [K in ReservableDimensionKey]?: number } = {};\n\n for (const spec of dimensionSpecs) {\n const cap = spec.cap(caps);\n\n if (cap !== undefined) {\n available[spec.key] = cap;\n }\n }\n\n const parent: ParentBudgetState = {\n parentRunId,\n caps,\n gate,\n totalChildInvocations: 0,\n available,\n cumulativeOverrun: zeroAmounts,\n };\n\n const next: ReservationLedger = {\n parents: new Map(ledger.parents).set(parentRunId, parent),\n reservations: ledger.reservations,\n };\n\n return [ok(parentView(next, parent)), next];\n};\n\nconst reserveTransition = (\n ledger: ReservationLedger,\n request: SubagentReservationRequest,\n): readonly [\n TransitionResult<\n SubagentReservationView,\n SubagentBudgetExhausted | SubagentReservationConflict | SubagentParentBudgetUnknown\n >,\n ReservationLedger,\n] => {\n const parent = ledger.parents.get(request.parentRunId);\n\n if (parent === undefined) {\n return [fail(SubagentParentBudgetUnknown.make({ parentRunId: request.parentRunId })), ledger];\n }\n const reservationId = makeBudgetReservationId(request.parentRunId, request.parentToolCallId);\n const existing = ledger.reservations.get(reservationId);\n\n if (existing !== undefined) {\n return sameAmounts(existing.allocated, request.allocation) &&\n existing.descendantInvocations === (request.descendantInvocations ?? 0)\n ? [ok(reservationView(reservationId, existing)), ledger]\n : [\n fail(\n SubagentReservationConflict.make({\n reservationId,\n existingAllocation: SubagentReservationAmounts.make(existing.allocated),\n requestedAllocation: request.allocation,\n }),\n ),\n ledger,\n ];\n }\n const maxInvocations = parent.caps.maxTotalChildInvocations;\n const slots = 1 + (request.descendantInvocations ?? 0);\n\n if (maxInvocations !== undefined && parent.totalChildInvocations + slots > maxInvocations) {\n return [\n fail(\n SubagentBudgetExhausted.make({\n parentRunId: request.parentRunId,\n dimension: \"total-child-invocations\",\n limitValue: maxInvocations,\n observedValue: parent.totalChildInvocations + slots,\n }),\n ),\n ledger,\n ];\n }\n for (const spec of dimensionSpecs) {\n const cap = spec.cap(parent.caps);\n\n if (cap === undefined) {\n continue;\n }\n // Overrun already charged to the parent aggregate reduces delegable\n // headroom without mutating `available`.\n const headroom = (parent.available[spec.key] ?? 0) - parent.cumulativeOverrun[spec.key];\n const requested = request.allocation[spec.key];\n\n if (requested > headroom) {\n return [\n fail(\n SubagentBudgetExhausted.make({\n parentRunId: request.parentRunId,\n dimension: spec.dimension,\n limitValue: cap,\n observedValue: cap - headroom + requested,\n }),\n ),\n ledger,\n ];\n }\n }\n\n const nextAvailable: { [K in ReservableDimensionKey]?: number } = {\n ...parent.available,\n };\n\n for (const spec of dimensionSpecs) {\n const available = parent.available[spec.key];\n\n if (available !== undefined) {\n nextAvailable[spec.key] = available - request.allocation[spec.key];\n }\n }\n\n const reservation: ReservationState = {\n parentRunId: request.parentRunId,\n parentToolCallId: request.parentToolCallId,\n descendantInvocations: request.descendantInvocations ?? 0,\n status: \"reserved\",\n allocated: request.allocation,\n observed: {},\n covered: zeroAmounts,\n overrun: zeroAmounts,\n };\n\n const next: ReservationLedger = {\n parents: new Map(ledger.parents).set(request.parentRunId, {\n ...parent,\n totalChildInvocations: parent.totalChildInvocations + slots,\n available: nextAvailable,\n }),\n reservations: new Map(ledger.reservations).set(reservationId, reservation),\n };\n\n return [ok(reservationView(reservationId, reservation)), next];\n};\n\nconst observeTransition = (\n ledger: ReservationLedger,\n reservationId: BudgetReservationId,\n usage: SubagentObservedUsage,\n): readonly [\n TransitionResult<SubagentReservationView, SubagentReservationUnknown>,\n ReservationLedger,\n] => {\n const reservation = ledger.reservations.get(reservationId);\n\n if (reservation === undefined) {\n return [fail(SubagentReservationUnknown.make({ reservationId })), ledger];\n }\n const parent = ledger.parents.get(reservation.parentRunId);\n\n if (parent === undefined) {\n return [corruptParent(reservation.parentRunId), ledger];\n }\n const observed: { [K in ReservableDimensionKey]?: number } = { ...reservation.observed };\n const covered: Record<ReservableDimensionKey, number> = { ...reservation.covered };\n const overrun: Record<ReservableDimensionKey, number> = { ...reservation.overrun };\n\n const cumulativeOverrun: Record<ReservableDimensionKey, number> = {\n ...parent.cumulativeOverrun,\n };\n\n for (const spec of dimensionSpecs) {\n const delta = usage[spec.key];\n\n if (delta === undefined) {\n continue;\n }\n observed[spec.key] = (observed[spec.key] ?? 0) + delta;\n\n // Once settlement began the accounting decision is frozen, so late or\n // corrected usage is pure overrun and cannot silently create budget.\n const coverable =\n reservation.status === \"reserved\"\n ? Math.min(delta, reservation.allocated[spec.key] - covered[spec.key])\n : 0;\n\n covered[spec.key] += coverable;\n const overrunDelta = delta - coverable;\n\n overrun[spec.key] += overrunDelta;\n cumulativeOverrun[spec.key] += overrunDelta;\n }\n const nextReservation: ReservationState = { ...reservation, observed, covered, overrun };\n\n const next: ReservationLedger = {\n parents: new Map(ledger.parents).set(parent.parentRunId, { ...parent, cumulativeOverrun }),\n reservations: new Map(ledger.reservations).set(reservationId, nextReservation),\n };\n\n return [ok(reservationView(reservationId, nextReservation)), next];\n};\n\n/**\n * Freeze the settlement decision. A dimension that was never observed\n * conservatively consumes its full reserved amount.\n */\nconst freezeSettlement = (reservation: ReservationState): ReservationState => {\n const observed: { [K in ReservableDimensionKey]?: number } = { ...reservation.observed };\n const covered: Record<ReservableDimensionKey, number> = { ...reservation.covered };\n\n for (const spec of dimensionSpecs) {\n if (observed[spec.key] === undefined) {\n observed[spec.key] = reservation.allocated[spec.key];\n covered[spec.key] = reservation.allocated[spec.key];\n }\n }\n\n return { ...reservation, status: \"releasePending\", observed, covered };\n};\n\nconst beginReleaseTransition = (\n ledger: ReservationLedger,\n reservationId: BudgetReservationId,\n): readonly [\n TransitionResult<SubagentReservationView, SubagentReservationUnknown>,\n ReservationLedger,\n] => {\n const reservation = ledger.reservations.get(reservationId);\n\n if (reservation === undefined) {\n return [fail(SubagentReservationUnknown.make({ reservationId })), ledger];\n }\n if (reservation.status !== \"reserved\") {\n return [ok(reservationView(reservationId, reservation)), ledger];\n }\n const frozen = freezeSettlement(reservation);\n\n const next: ReservationLedger = {\n parents: ledger.parents,\n reservations: new Map(ledger.reservations).set(reservationId, frozen),\n };\n\n return [ok(reservationView(reservationId, frozen)), next];\n};\n\nconst releaseTransition = (\n ledger: ReservationLedger,\n reservationId: BudgetReservationId,\n): readonly [\n TransitionResult<SubagentReservationView, SubagentReservationUnknown>,\n ReservationLedger,\n] => {\n const reservation = ledger.reservations.get(reservationId);\n\n if (reservation === undefined) {\n return [fail(SubagentReservationUnknown.make({ reservationId })), ledger];\n }\n if (reservation.status === \"released\") {\n return [ok(reservationView(reservationId, reservation)), ledger];\n }\n const parent = ledger.parents.get(reservation.parentRunId);\n\n if (parent === undefined) {\n return [corruptParent(reservation.parentRunId), ledger];\n }\n const frozen = reservation.status === \"reserved\" ? freezeSettlement(reservation) : reservation;\n const unused = unusedAllocation(frozen);\n const nextAvailable: { [K in ReservableDimensionKey]?: number } = { ...parent.available };\n\n for (const spec of dimensionSpecs) {\n const available = parent.available[spec.key];\n\n if (available !== undefined) {\n nextAvailable[spec.key] = available + unused[spec.key];\n }\n }\n const settled: ReservationState = { ...frozen, status: \"released\" };\n\n const next: ReservationLedger = {\n parents: new Map(ledger.parents).set(parent.parentRunId, {\n ...parent,\n available: nextAvailable,\n }),\n reservations: new Map(ledger.reservations).set(reservationId, settled),\n };\n\n return [ok(reservationView(reservationId, settled)), next];\n};\n\nconst retireParentTransition = (\n ledger: ReservationLedger,\n parentRunId: RunId,\n): readonly [TransitionResult<void, SubagentParentBudgetActive>, ReservationLedger] => {\n if (!ledger.parents.has(parentRunId)) {\n return [ok(undefined), ledger];\n }\n let openReservations = 0;\n\n for (const reservation of ledger.reservations.values()) {\n if (reservation.parentRunId === parentRunId && reservation.status !== \"released\") {\n openReservations += 1;\n }\n }\n if (openReservations > 0) {\n return [fail(SubagentParentBudgetActive.make({ parentRunId, openReservations })), ledger];\n }\n const parents = new Map(ledger.parents);\n\n parents.delete(parentRunId);\n const reservations = new Map(ledger.reservations);\n\n for (const [reservationId, reservation] of reservations) {\n if (reservation.parentRunId === parentRunId) {\n reservations.delete(reservationId);\n }\n }\n\n return [ok(undefined), { parents, reservations }];\n};\n\n/**\n * In-memory reservation ledger. All state lives in one `Ref` owned by the\n * Layer's Scope; every transition is a single atomic `Ref.modify`.\n */\nexport const SubagentReservationsMemoryLive: Layer.Layer<SubagentReservations> = Layer.effect(\n SubagentReservations,\n Effect.gen(function* () {\n const state = yield* Ref.make<ReservationLedger>({\n parents: new Map(),\n reservations: new Map(),\n });\n\n return SubagentReservations.of({\n registerParent: Effect.fn(\"SubagentReservations.registerParent\")(\n function* (parentRunId, caps) {\n const gate =\n caps.maxConcurrentChildren !== undefined && caps.maxConcurrentChildren > 0\n ? yield* Semaphore.make(caps.maxConcurrentChildren)\n : undefined;\n\n const result = yield* Ref.modify(state, (ledger) =>\n registerTransition(ledger, parentRunId, caps, gate),\n );\n\n return yield* resolve(result);\n },\n ),\n reserve: Effect.fn(\"SubagentReservations.reserve\")(function* (request) {\n const result = yield* Ref.modify(state, (ledger) => reserveTransition(ledger, request));\n\n return yield* resolve(result);\n }),\n observe: Effect.fn(\"SubagentReservations.observe\")(function* (reservationId, usage) {\n const result = yield* Ref.modify(state, (ledger) =>\n observeTransition(ledger, reservationId, usage),\n );\n\n return yield* resolve(result);\n }),\n beginRelease: Effect.fn(\"SubagentReservations.beginRelease\")(function* (reservationId) {\n const result = yield* Ref.modify(state, (ledger) =>\n beginReleaseTransition(ledger, reservationId),\n );\n\n return yield* resolve(result);\n }),\n release: Effect.fn(\"SubagentReservations.release\")(function* (reservationId) {\n const result = yield* Ref.modify(state, (ledger) =>\n releaseTransition(ledger, reservationId),\n );\n\n return yield* resolve(result);\n }),\n acquireChildSlot: Effect.fn(\"SubagentReservations.acquireChildSlot\")(function* (\n parentRunId,\n slots = 1,\n ) {\n const ledger = yield* Ref.get(state);\n const parent = ledger.parents.get(parentRunId);\n\n if (parent === undefined) {\n return yield* SubagentParentBudgetUnknown.make({ parentRunId });\n }\n const cap = parent.caps.maxConcurrentChildren;\n\n if (cap === undefined) {\n return;\n }\n if (!Number.isSafeInteger(slots) || slots < 1 || slots > cap || parent.gate === undefined) {\n return yield* SubagentBudgetExhausted.make({\n parentRunId,\n dimension: \"concurrent-children\",\n limitValue: cap,\n observedValue: Number.isSafeInteger(slots) && slots > 0 ? slots : 0,\n });\n }\n const gate = parent.gate;\n\n yield* Effect.acquireRelease(\n gate.take(slots),\n (permits) => gate.release(permits).pipe(Effect.asVoid),\n { interruptible: true },\n );\n }),\n retireParent: Effect.fn(\"SubagentReservations.retireParent\")(function* (parentRunId) {\n const result = yield* Ref.modify(state, (ledger) =>\n retireParentTransition(ledger, parentRunId),\n );\n\n return yield* resolve(result);\n }),\n parentSnapshot: Effect.fn(\"SubagentReservations.parentSnapshot\")(function* (parentRunId) {\n const ledger = yield* Ref.get(state);\n const parent = ledger.parents.get(parentRunId);\n\n if (parent === undefined) {\n return yield* SubagentParentBudgetUnknown.make({ parentRunId });\n }\n\n return parentView(ledger, parent);\n }),\n });\n }),\n);\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { n as CurrentToolCatalog } from "../ToolExposure-UCN12eCd.mjs";
2
- import { Tool, Toolkit } from "effect/unstable/ai";
1
+ import { n as CurrentToolCatalog } from "../ToolExposure-BsaSH15e.mjs";
3
2
  import { Effect, Schema, Scope } from "effect";
3
+ import { Tool, Toolkit } from "effect/unstable/ai";
4
4
  declare namespace ToolDiscovery_d_exports {
5
5
  export { Descriptor, Match, Options, Parameters, Result, ToolDiscoveryError, make };
6
6
  }