effect-agent 0.1.0-beta.9 → 0.1.0-beta.91

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 (538) hide show
  1. package/dist/Agent-CN0EWRsR.d.mts +226 -0
  2. package/dist/Agent-RklVROrm.mjs +83 -0
  3. package/dist/Agent-RklVROrm.mjs.map +1 -0
  4. package/dist/AgentError-CggcAQ7V.d.mts +101 -0
  5. package/dist/AgentPolicy-CetmQrf3.d.mts +96 -0
  6. package/dist/AgentRuntime-CHipL2jG.mjs +4598 -0
  7. package/dist/AgentRuntime-CHipL2jG.mjs.map +1 -0
  8. package/dist/AgentRuntime-uxR_a4VM.d.mts +346 -0
  9. package/dist/AgentUpdates-DMJ-_xow.d.mts +53 -0
  10. package/dist/ContextCompactor-Dxu5zhOL.d.mts +161 -0
  11. package/dist/ContextWindow-DRQ5Mbm2.d.mts +58 -0
  12. package/dist/DurableAgentRuntime-D7gDKGjH.mjs +6368 -0
  13. package/dist/DurableAgentRuntime-D7gDKGjH.mjs.map +1 -0
  14. package/dist/DurableFailpoint-Oinuuedm.d.mts +41 -0
  15. package/dist/DurableStep-Cry_iol4.d.mts +103 -0
  16. package/dist/Ephemeral.d.mts +22 -0
  17. package/dist/Ephemeral.mjs +22 -0
  18. package/dist/Ephemeral.mjs.map +1 -0
  19. package/dist/EventSource-OqS_P9ug.d.mts +51 -0
  20. package/dist/Identifiers-CN2s30fF.d.mts +40 -0
  21. package/dist/MemoryNamespace-BbRW5p71.d.mts +36 -0
  22. package/dist/MemoryReference-B8Q3UJoJ.d.mts +79 -0
  23. package/dist/Messaging-CkcIdt4I.d.mts +490 -0
  24. package/dist/MessagingHost-CRk0kXzT.d.mts +246 -0
  25. package/dist/MessagingHost-CWi_PP3g.mjs +137 -0
  26. package/dist/MessagingHost-CWi_PP3g.mjs.map +1 -0
  27. package/dist/OperationAuthorizer-TzcQtpX5.d.mts +61 -0
  28. package/dist/Output-D6SkedVx.d.mts +25 -0
  29. package/dist/PageCapture-Df8Xwskw.d.mts +583 -0
  30. package/dist/PageScreenshot-BpgZKAxl.d.mts +48 -0
  31. package/dist/PreparedInputAdmission-C4HbjHgl.d.mts +38 -0
  32. package/dist/Receipt-BAHyigAF.d.mts +33 -0
  33. package/dist/Records-BAGkekt8.d.mts +3570 -0
  34. package/dist/RunEvent-DIrzkjLr.d.mts +460 -0
  35. package/dist/RunEventSink-D5aVhISG.d.mts +108 -0
  36. package/dist/RunJournal-Cgg1kNvc.mjs +825 -0
  37. package/dist/RunJournal-Cgg1kNvc.mjs.map +1 -0
  38. package/dist/RunOptions-g1aigcKI.d.mts +915 -0
  39. package/dist/RunPolicyUsage-ClZxyR46.d.mts +21 -0
  40. package/dist/Sandbox-CEsDWBLq.d.mts +173 -0
  41. package/dist/Schedule-H3SEYX9g.d.mts +842 -0
  42. package/dist/Scheduling-C9aIP8zT.mjs +691 -0
  43. package/dist/Scheduling-C9aIP8zT.mjs.map +1 -0
  44. package/dist/Subagent-DyfzHNdv.d.mts +826 -0
  45. package/dist/Subagent-U5qXOFE8.mjs +1469 -0
  46. package/dist/Subagent-U5qXOFE8.mjs.map +1 -0
  47. package/dist/SubagentContract-DdT7Cqe6.d.mts +116 -0
  48. package/dist/SubagentHost-CJUBQlcc.d.mts +140 -0
  49. package/dist/Subscription-BEP8oQO5.d.mts +921 -0
  50. package/dist/SubscriptionInput-vAAOBrK7.d.mts +41 -0
  51. package/dist/Thread-DOBQ0QUY.d.mts +96 -0
  52. package/dist/ThreadHistory-tS1KwxHR.d.mts +60 -0
  53. package/dist/ToolBroker-DWs4tZra.d.mts +133 -0
  54. package/dist/ToolExposure-9uF_Yo0T.mjs +10 -0
  55. package/dist/ToolExposure-9uF_Yo0T.mjs.map +1 -0
  56. package/dist/ToolExposure-C93U1sPu.mjs +30 -0
  57. package/dist/ToolExposure-C93U1sPu.mjs.map +1 -0
  58. package/dist/ToolExposure-UCN12eCd.d.mts +39 -0
  59. package/dist/ToolExposure-r2eOWk4F.d.mts +46 -0
  60. package/dist/ToolExposure.d.mts +8 -0
  61. package/dist/ToolExposure.mjs +21 -0
  62. package/dist/ToolExposure.mjs.map +1 -0
  63. package/dist/ToolReconciler-DQVaJfpE.d.mts +76 -0
  64. package/dist/ToolResult-DmmgoChv.d.mts +61 -0
  65. package/dist/Usage-Dx0aknfk.d.mts +121 -0
  66. package/dist/WakeScheduler-EjUF-GhC.d.mts +56 -0
  67. package/dist/Worker-CaPYykpe.d.mts +228 -0
  68. package/dist/agent-registration-CWDMOAZA.mjs +172 -0
  69. package/dist/agent-registration-CWDMOAZA.mjs.map +1 -0
  70. package/dist/capabilities/Approval.d.mts +114 -0
  71. package/dist/capabilities/Approval.mjs +226 -0
  72. package/dist/capabilities/Approval.mjs.map +1 -0
  73. package/dist/capabilities/Budget.d.mts +112 -0
  74. package/dist/capabilities/Budget.mjs +346 -0
  75. package/dist/capabilities/Budget.mjs.map +1 -0
  76. package/dist/capabilities/CodeMode.d.mts +157 -0
  77. package/dist/capabilities/CodeMode.mjs +522 -0
  78. package/dist/capabilities/CodeMode.mjs.map +1 -0
  79. package/dist/capabilities/Commands.d.mts +55 -0
  80. package/dist/capabilities/Commands.mjs +57 -0
  81. package/dist/capabilities/Commands.mjs.map +1 -0
  82. package/dist/capabilities/ContextTools.d.mts +321 -0
  83. package/dist/capabilities/ContextTools.mjs +126 -0
  84. package/dist/capabilities/ContextTools.mjs.map +1 -0
  85. package/dist/capabilities/Mcp.d.mts +108 -0
  86. package/dist/capabilities/Mcp.mjs +260 -0
  87. package/dist/capabilities/Mcp.mjs.map +1 -0
  88. package/dist/capabilities/McpClient.d.mts +115 -0
  89. package/dist/capabilities/McpClient.mjs +506 -0
  90. package/dist/capabilities/McpClient.mjs.map +1 -0
  91. package/dist/capabilities/MemoryNotes.d.mts +424 -0
  92. package/dist/capabilities/MemoryNotes.mjs +128 -0
  93. package/dist/capabilities/MemoryNotes.mjs.map +1 -0
  94. package/dist/capabilities/Messaging.d.mts +3 -0
  95. package/dist/capabilities/Messaging.mjs +151 -0
  96. package/dist/capabilities/Messaging.mjs.map +1 -0
  97. package/dist/capabilities/ModelContext.d.mts +89 -0
  98. package/dist/capabilities/ModelContext.mjs +168 -0
  99. package/dist/capabilities/ModelContext.mjs.map +1 -0
  100. package/dist/capabilities/Redaction.d.mts +37 -0
  101. package/dist/capabilities/Redaction.mjs +104 -0
  102. package/dist/capabilities/Redaction.mjs.map +1 -0
  103. package/dist/capabilities/Remembering.d.mts +434 -0
  104. package/dist/capabilities/Remembering.mjs +290 -0
  105. package/dist/capabilities/Remembering.mjs.map +1 -0
  106. package/dist/capabilities/RunHooks.d.mts +82 -0
  107. package/dist/capabilities/RunHooks.mjs +144 -0
  108. package/dist/capabilities/RunHooks.mjs.map +1 -0
  109. package/dist/capabilities/SemanticMemory.d.mts +431 -0
  110. package/dist/capabilities/SemanticMemory.mjs +315 -0
  111. package/dist/capabilities/SemanticMemory.mjs.map +1 -0
  112. package/dist/capabilities/Subagent.d.mts +4 -0
  113. package/dist/capabilities/Subagent.mjs +5 -0
  114. package/dist/capabilities/SubagentReservations.d.mts +186 -0
  115. package/dist/capabilities/SubagentReservations.mjs +479 -0
  116. package/dist/capabilities/SubagentReservations.mjs.map +1 -0
  117. package/dist/capabilities/ToolDiscovery.d.mts +109 -0
  118. package/dist/capabilities/ToolDiscovery.mjs +211 -0
  119. package/dist/capabilities/ToolDiscovery.mjs.map +1 -0
  120. package/dist/capabilities/WebCapture.d.mts +163 -0
  121. package/dist/capabilities/WebCapture.mjs +335 -0
  122. package/dist/capabilities/WebCapture.mjs.map +1 -0
  123. package/dist/capabilities/WebSearch.d.mts +71 -0
  124. package/dist/capabilities/WebSearch.mjs +112 -0
  125. package/dist/capabilities/WebSearch.mjs.map +1 -0
  126. package/dist/compaction-C2OTceKw.mjs +505 -0
  127. package/dist/compaction-C2OTceKw.mjs.map +1 -0
  128. package/dist/core/Agent.d.mts +2 -0
  129. package/dist/core/Agent.mjs +2 -0
  130. package/dist/core/AgentError.d.mts +2 -0
  131. package/dist/core/AgentError.mjs +117 -0
  132. package/dist/core/AgentError.mjs.map +1 -0
  133. package/dist/core/AgentPolicy.d.mts +2 -0
  134. package/dist/core/AgentPolicy.mjs +94 -0
  135. package/dist/core/AgentPolicy.mjs.map +1 -0
  136. package/dist/core/AgentUpdates.d.mts +2 -0
  137. package/dist/core/AgentUpdates.mjs +63 -0
  138. package/dist/core/AgentUpdates.mjs.map +1 -0
  139. package/dist/core/IdGenerator.d.mts +26 -0
  140. package/dist/core/IdGenerator.mjs +27 -0
  141. package/dist/core/IdGenerator.mjs.map +1 -0
  142. package/dist/core/Identifiers.d.mts +2 -0
  143. package/dist/core/Identifiers.mjs +43 -0
  144. package/dist/core/Identifiers.mjs.map +1 -0
  145. package/dist/core/Memory.d.mts +57 -0
  146. package/dist/core/Memory.mjs +203 -0
  147. package/dist/core/Memory.mjs.map +1 -0
  148. package/dist/core/MemoryNamespace.d.mts +2 -0
  149. package/dist/core/MemoryNamespace.mjs +116 -0
  150. package/dist/core/MemoryNamespace.mjs.map +1 -0
  151. package/dist/core/MemoryReference.d.mts +2 -0
  152. package/dist/core/MemoryReference.mjs +109 -0
  153. package/dist/core/MemoryReference.mjs.map +1 -0
  154. package/dist/core/MemoryRevalidation.d.mts +65 -0
  155. package/dist/core/MemoryRevalidation.mjs +126 -0
  156. package/dist/core/MemoryRevalidation.mjs.map +1 -0
  157. package/dist/core/MemoryStore.d.mts +186 -0
  158. package/dist/core/MemoryStore.mjs +243 -0
  159. package/dist/core/MemoryStore.mjs.map +1 -0
  160. package/dist/core/Receipt.d.mts +2 -0
  161. package/dist/core/Receipt.mjs +36 -0
  162. package/dist/core/Receipt.mjs.map +1 -0
  163. package/dist/core/RememberingStore.d.mts +1562 -0
  164. package/dist/core/RememberingStore.mjs +190 -0
  165. package/dist/core/RememberingStore.mjs.map +1 -0
  166. package/dist/core/RunEvent.d.mts +2 -0
  167. package/dist/core/RunEvent.mjs +337 -0
  168. package/dist/core/RunEvent.mjs.map +1 -0
  169. package/dist/core/RunPolicyUsage.d.mts +2 -0
  170. package/dist/core/RunPolicyUsage.mjs +21 -0
  171. package/dist/core/RunPolicyUsage.mjs.map +1 -0
  172. package/dist/core/SemanticMemoryIndex.d.mts +826 -0
  173. package/dist/core/SemanticMemoryIndex.mjs +185 -0
  174. package/dist/core/SemanticMemoryIndex.mjs.map +1 -0
  175. package/dist/core/SemanticMemoryRevalidation.d.mts +45 -0
  176. package/dist/core/SemanticMemoryRevalidation.mjs +191 -0
  177. package/dist/core/SemanticMemoryRevalidation.mjs.map +1 -0
  178. package/dist/core/SubagentContract.d.mts +2 -0
  179. package/dist/core/SubagentContract.mjs +148 -0
  180. package/dist/core/SubagentContract.mjs.map +1 -0
  181. package/dist/core/Thread.d.mts +2 -0
  182. package/dist/core/Thread.mjs +250 -0
  183. package/dist/core/Thread.mjs.map +1 -0
  184. package/dist/core/ToolResult.d.mts +2 -0
  185. package/dist/core/ToolResult.mjs +140 -0
  186. package/dist/core/ToolResult.mjs.map +1 -0
  187. package/dist/core/Usage.d.mts +2 -0
  188. package/dist/core/Usage.mjs +319 -0
  189. package/dist/core/Usage.mjs.map +1 -0
  190. package/dist/core/Worker.d.mts +3 -0
  191. package/dist/core/Worker.mjs +147 -0
  192. package/dist/core/Worker.mjs.map +1 -0
  193. package/dist/durable/ActivityStore.d.mts +116 -0
  194. package/dist/durable/ActivityStore.mjs +131 -0
  195. package/dist/durable/ActivityStore.mjs.map +1 -0
  196. package/dist/durable/Admin.d.mts +2 -0
  197. package/dist/durable/Admin.mjs +328 -0
  198. package/dist/durable/Admin.mjs.map +1 -0
  199. package/dist/durable/AgentRegistration.d.mts +2 -0
  200. package/dist/durable/AgentRegistration.mjs +14 -0
  201. package/dist/durable/AgentRegistration.mjs.map +1 -0
  202. package/dist/durable/Certification.d.mts +111 -0
  203. package/dist/durable/Certification.mjs +159 -0
  204. package/dist/durable/Certification.mjs.map +1 -0
  205. package/dist/durable/CommittedActivity.d.mts +62 -0
  206. package/dist/durable/CommittedActivity.mjs +159 -0
  207. package/dist/durable/CommittedActivity.mjs.map +1 -0
  208. package/dist/durable/Digest.d.mts +2 -0
  209. package/dist/durable/Digest.mjs +50 -0
  210. package/dist/durable/Digest.mjs.map +1 -0
  211. package/dist/durable/DurableAgentRuntime.d.mts +3 -0
  212. package/dist/durable/DurableAgentRuntime.mjs +3 -0
  213. package/dist/durable/DurableFailpoint.d.mts +2 -0
  214. package/dist/durable/DurableFailpoint.mjs +94 -0
  215. package/dist/durable/DurableFailpoint.mjs.map +1 -0
  216. package/dist/durable/DurableFailpointTestControl.d.mts +15 -0
  217. package/dist/durable/DurableFailpointTestControl.mjs +19 -0
  218. package/dist/durable/DurableFailpointTestControl.mjs.map +1 -0
  219. package/dist/durable/EventSource.d.mts +2 -0
  220. package/dist/durable/EventSource.mjs +65 -0
  221. package/dist/durable/EventSource.mjs.map +1 -0
  222. package/dist/durable/GitHubWorkflowSource.d.mts +144 -0
  223. package/dist/durable/GitHubWorkflowSource.mjs +209 -0
  224. package/dist/durable/GitHubWorkflowSource.mjs.map +1 -0
  225. package/dist/durable/MessageDelivery.d.mts +492 -0
  226. package/dist/durable/MessageDelivery.mjs +495 -0
  227. package/dist/durable/MessageDelivery.mjs.map +1 -0
  228. package/dist/durable/MessageDeliveryStoreConformance.d.mts +358 -0
  229. package/dist/durable/MessageDeliveryStoreConformance.mjs +243 -0
  230. package/dist/durable/MessageDeliveryStoreConformance.mjs.map +1 -0
  231. package/dist/durable/OperationAuthorizer.d.mts +2 -0
  232. package/dist/durable/OperationAuthorizer.mjs +70 -0
  233. package/dist/durable/OperationAuthorizer.mjs.map +1 -0
  234. package/dist/durable/PersistentHistory.d.mts +16 -0
  235. package/dist/durable/PersistentHistory.mjs +125 -0
  236. package/dist/durable/PersistentHistory.mjs.map +1 -0
  237. package/dist/durable/PreparedInputAdmission.d.mts +2 -0
  238. package/dist/durable/PreparedInputAdmission.mjs +34 -0
  239. package/dist/durable/PreparedInputAdmission.mjs.map +1 -0
  240. package/dist/durable/Records.d.mts +2 -0
  241. package/dist/durable/Records.mjs +795 -0
  242. package/dist/durable/Records.mjs.map +1 -0
  243. package/dist/durable/Recovery.d.mts +2 -0
  244. package/dist/durable/Recovery.mjs +739 -0
  245. package/dist/durable/Recovery.mjs.map +1 -0
  246. package/dist/durable/RunJournal.d.mts +2 -0
  247. package/dist/durable/RunJournal.mjs +2 -0
  248. package/dist/durable/Schedule.d.mts +2 -0
  249. package/dist/durable/Schedule.mjs +382 -0
  250. package/dist/durable/Schedule.mjs.map +1 -0
  251. package/dist/durable/ScheduleStoreConformance.d.mts +18 -0
  252. package/dist/durable/ScheduleStoreConformance.mjs +420 -0
  253. package/dist/durable/ScheduleStoreConformance.mjs.map +1 -0
  254. package/dist/durable/ScheduleTransition.d.mts +24 -0
  255. package/dist/durable/ScheduleTransition.mjs +180 -0
  256. package/dist/durable/ScheduleTransition.mjs.map +1 -0
  257. package/dist/durable/Scheduling.d.mts +54 -0
  258. package/dist/durable/Scheduling.mjs +2 -0
  259. package/dist/durable/SqlMemoryStore.d.mts +30 -0
  260. package/dist/durable/SqlMemoryStore.mjs +436 -0
  261. package/dist/durable/SqlMemoryStore.mjs.map +1 -0
  262. package/dist/durable/SqlMessageDeliveryStore.d.mts +40 -0
  263. package/dist/durable/SqlMessageDeliveryStore.mjs +167 -0
  264. package/dist/durable/SqlMessageDeliveryStore.mjs.map +1 -0
  265. package/dist/durable/SqlStorageV2Upgrade.d.mts +22 -0
  266. package/dist/durable/SqlStorageV2Upgrade.mjs +459 -0
  267. package/dist/durable/SqlStorageV2Upgrade.mjs.map +1 -0
  268. package/dist/durable/SqlSubscriptionStore.d.mts +63 -0
  269. package/dist/durable/SqlSubscriptionStore.mjs +751 -0
  270. package/dist/durable/SqlSubscriptionStore.mjs.map +1 -0
  271. package/dist/durable/SubmissionLedger.d.mts +3 -0
  272. package/dist/durable/SubmissionLedger.mjs +914 -0
  273. package/dist/durable/SubmissionLedger.mjs.map +1 -0
  274. package/dist/durable/SubmissionLedgerConformance.d.mts +30 -0
  275. package/dist/durable/SubmissionLedgerConformance.mjs +1986 -0
  276. package/dist/durable/SubmissionLedgerConformance.mjs.map +1 -0
  277. package/dist/durable/SubmissionStatus.d.mts +2 -0
  278. package/dist/durable/SubmissionStatus.mjs +18 -0
  279. package/dist/durable/SubmissionStatus.mjs.map +1 -0
  280. package/dist/durable/Subscription.d.mts +2 -0
  281. package/dist/durable/Subscription.mjs +360 -0
  282. package/dist/durable/Subscription.mjs.map +1 -0
  283. package/dist/durable/SubscriptionInput.d.mts +2 -0
  284. package/dist/durable/SubscriptionInput.mjs +52 -0
  285. package/dist/durable/SubscriptionInput.mjs.map +1 -0
  286. package/dist/durable/SubscriptionStoreConformance.d.mts +17 -0
  287. package/dist/durable/SubscriptionStoreConformance.mjs +625 -0
  288. package/dist/durable/SubscriptionStoreConformance.mjs.map +1 -0
  289. package/dist/durable/SubscriptionTools.d.mts +273 -0
  290. package/dist/durable/SubscriptionTools.mjs +190 -0
  291. package/dist/durable/SubscriptionTools.mjs.map +1 -0
  292. package/dist/durable/SubscriptionTransition.d.mts +21 -0
  293. package/dist/durable/SubscriptionTransition.mjs +148 -0
  294. package/dist/durable/SubscriptionTransition.mjs.map +1 -0
  295. package/dist/durable/Subscriptions.d.mts +73 -0
  296. package/dist/durable/Subscriptions.mjs +627 -0
  297. package/dist/durable/Subscriptions.mjs.map +1 -0
  298. package/dist/durable/ThreadContextHistory.d.mts +32 -0
  299. package/dist/durable/ThreadContextHistory.mjs +152 -0
  300. package/dist/durable/ThreadContextHistory.mjs.map +1 -0
  301. package/dist/durable/ThreadContextHistoryProjection.d.mts +60 -0
  302. package/dist/durable/ThreadContextHistoryProjection.mjs +149 -0
  303. package/dist/durable/ThreadContextHistoryProjection.mjs.map +1 -0
  304. package/dist/durable/ThreadInvariants.d.mts +74 -0
  305. package/dist/durable/ThreadInvariants.mjs +200 -0
  306. package/dist/durable/ThreadInvariants.mjs.map +1 -0
  307. package/dist/durable/ThreadProjection.d.mts +78 -0
  308. package/dist/durable/ThreadProjection.mjs +158 -0
  309. package/dist/durable/ThreadProjection.mjs.map +1 -0
  310. package/dist/durable/ThreadProjectionMaintenance.d.mts +49 -0
  311. package/dist/durable/ThreadProjectionMaintenance.mjs +33 -0
  312. package/dist/durable/ThreadProjectionMaintenance.mjs.map +1 -0
  313. package/dist/durable/ThreadStore.d.mts +2 -0
  314. package/dist/durable/ThreadStore.mjs +147 -0
  315. package/dist/durable/ThreadStore.mjs.map +1 -0
  316. package/dist/durable/ThreadStoreConformance.d.mts +29 -0
  317. package/dist/durable/ThreadStoreConformance.mjs +248 -0
  318. package/dist/durable/ThreadStoreConformance.mjs.map +1 -0
  319. package/dist/durable/ToolReconciler.d.mts +2 -0
  320. package/dist/durable/ToolReconciler.mjs +81 -0
  321. package/dist/durable/ToolReconciler.mjs.map +1 -0
  322. package/dist/durable/WakeScheduler.d.mts +2 -0
  323. package/dist/durable/WakeScheduler.mjs +85 -0
  324. package/dist/durable/WakeScheduler.mjs.map +1 -0
  325. package/dist/durable/WorkerHost.d.mts +129 -0
  326. package/dist/durable/WorkerHost.mjs +77 -0
  327. package/dist/durable/WorkerHost.mjs.map +1 -0
  328. package/dist/engine/AgentRuntime.d.mts +2 -0
  329. package/dist/engine/AgentRuntime.mjs +2 -0
  330. package/dist/engine/Compaction.d.mts +7 -0
  331. package/dist/engine/Compaction.mjs +16 -0
  332. package/dist/engine/Compaction.mjs.map +1 -0
  333. package/dist/engine/ContextCompactor.d.mts +2 -0
  334. package/dist/engine/ContextCompactor.mjs +119 -0
  335. package/dist/engine/ContextCompactor.mjs.map +1 -0
  336. package/dist/engine/ContextHistory.d.mts +65 -0
  337. package/dist/engine/ContextHistory.mjs +76 -0
  338. package/dist/engine/ContextHistory.mjs.map +1 -0
  339. package/dist/engine/ContextWindow.d.mts +2 -0
  340. package/dist/engine/ContextWindow.mjs +59 -0
  341. package/dist/engine/ContextWindow.mjs.map +1 -0
  342. package/dist/engine/DurableStep.d.mts +2 -0
  343. package/dist/engine/DurableStep.mjs +62 -0
  344. package/dist/engine/DurableStep.mjs.map +1 -0
  345. package/dist/engine/MessagingHost.d.mts +2 -0
  346. package/dist/engine/MessagingHost.mjs +2 -0
  347. package/dist/engine/Output.d.mts +2 -0
  348. package/dist/engine/Output.mjs +8 -0
  349. package/dist/engine/Output.mjs.map +1 -0
  350. package/dist/engine/RunEventSink.d.mts +2 -0
  351. package/dist/engine/RunEventSink.mjs +22 -0
  352. package/dist/engine/RunEventSink.mjs.map +1 -0
  353. package/dist/engine/RunOptions.d.mts +2 -0
  354. package/dist/engine/RunOptions.mjs +122 -0
  355. package/dist/engine/RunOptions.mjs.map +1 -0
  356. package/dist/engine/SubagentHost.d.mts +2 -0
  357. package/dist/engine/SubagentHost.mjs +72 -0
  358. package/dist/engine/SubagentHost.mjs.map +1 -0
  359. package/dist/engine/ThreadHistory.d.mts +2 -0
  360. package/dist/engine/ThreadHistory.mjs +67 -0
  361. package/dist/engine/ThreadHistory.mjs.map +1 -0
  362. package/dist/engine/ToolBroker.d.mts +2 -0
  363. package/dist/engine/ToolBroker.mjs +42 -0
  364. package/dist/engine/ToolBroker.mjs.map +1 -0
  365. package/dist/foreign-diagnostic-DBQ1XHKh.mjs +37 -0
  366. package/dist/foreign-diagnostic-DBQ1XHKh.mjs.map +1 -0
  367. package/dist/index.d.mts +89 -6
  368. package/dist/index.mjs +98 -6
  369. package/dist/output-contract-BC7tjlGw.mjs +84 -0
  370. package/dist/output-contract-BC7tjlGw.mjs.map +1 -0
  371. package/dist/rolldown-runtime-D7D4PA-g.mjs +13 -0
  372. package/dist/sandbox/CodeExecutor.d.mts +194 -0
  373. package/dist/sandbox/CodeExecutor.mjs +278 -0
  374. package/dist/sandbox/CodeExecutor.mjs.map +1 -0
  375. package/dist/sandbox/InteractiveBrowser.d.mts +142 -0
  376. package/dist/sandbox/InteractiveBrowser.mjs +165 -0
  377. package/dist/sandbox/InteractiveBrowser.mjs.map +1 -0
  378. package/dist/sandbox/PageCapture.d.mts +2 -0
  379. package/dist/sandbox/PageCapture.mjs +450 -0
  380. package/dist/sandbox/PageCapture.mjs.map +1 -0
  381. package/dist/sandbox/PageCrawl.d.mts +88 -0
  382. package/dist/sandbox/PageCrawl.mjs +124 -0
  383. package/dist/sandbox/PageCrawl.mjs.map +1 -0
  384. package/dist/sandbox/PageScreenshot.d.mts +2 -0
  385. package/dist/sandbox/PageScreenshot.mjs +53 -0
  386. package/dist/sandbox/PageScreenshot.mjs.map +1 -0
  387. package/dist/sandbox/ProtectedBrowser.d.mts +273 -0
  388. package/dist/sandbox/ProtectedBrowser.mjs +287 -0
  389. package/dist/sandbox/ProtectedBrowser.mjs.map +1 -0
  390. package/dist/sandbox/Sandbox.d.mts +2 -0
  391. package/dist/sandbox/Sandbox.mjs +208 -0
  392. package/dist/sandbox/Sandbox.mjs.map +1 -0
  393. package/dist/utf8-BYfhEkcj.mjs +11 -0
  394. package/dist/utf8-BYfhEkcj.mjs.map +1 -0
  395. package/dist/utf8-DchGZRBd.mjs +23 -0
  396. package/dist/utf8-DchGZRBd.mjs.map +1 -0
  397. package/package.json +1 -40
  398. package/src/Ephemeral.ts +17 -0
  399. package/src/ToolExposure.ts +2 -0
  400. package/src/capabilities/Approval.ts +352 -0
  401. package/src/capabilities/Budget.ts +536 -0
  402. package/src/capabilities/CodeMode.ts +1090 -0
  403. package/src/capabilities/Commands.ts +86 -0
  404. package/src/capabilities/ContextTools.ts +184 -0
  405. package/src/capabilities/Mcp.ts +427 -0
  406. package/src/capabilities/McpClient.ts +967 -0
  407. package/src/capabilities/MemoryNotes.ts +174 -0
  408. package/src/capabilities/Messaging.ts +261 -0
  409. package/src/capabilities/ModelContext.ts +354 -0
  410. package/src/capabilities/Redaction.ts +157 -0
  411. package/src/capabilities/Remembering.ts +550 -0
  412. package/src/capabilities/RunHooks.ts +280 -0
  413. package/src/capabilities/SemanticMemory.ts +447 -0
  414. package/src/capabilities/Subagent.ts +2277 -0
  415. package/src/capabilities/SubagentReservations.ts +850 -0
  416. package/src/capabilities/ToolDiscovery.ts +339 -0
  417. package/src/capabilities/WebCapture.ts +722 -0
  418. package/src/capabilities/WebSearch.ts +184 -0
  419. package/src/capabilities/internal/subagent-background.ts +1106 -0
  420. package/src/capabilities/internal/subagent-contract.ts +142 -0
  421. package/src/capabilities/internal/subagent-policy.ts +235 -0
  422. package/src/capabilities/internal/subagent-reporting.ts +261 -0
  423. package/src/capabilities/internal/utf8.ts +10 -0
  424. package/src/core/Agent.ts +575 -0
  425. package/src/core/AgentError.ts +152 -0
  426. package/src/core/AgentPolicy.ts +153 -0
  427. package/src/core/AgentUpdates.ts +100 -0
  428. package/src/core/IdGenerator.ts +39 -0
  429. package/src/core/Identifiers.ts +48 -0
  430. package/src/core/Memory.ts +290 -0
  431. package/src/core/MemoryNamespace.ts +196 -0
  432. package/src/core/MemoryReference.ts +121 -0
  433. package/src/core/MemoryRevalidation.ts +185 -0
  434. package/src/core/MemoryStore.ts +368 -0
  435. package/src/core/Messaging.ts +90 -0
  436. package/src/core/Receipt.ts +42 -0
  437. package/src/core/RememberingStore.ts +300 -0
  438. package/src/core/RunEvent.ts +366 -0
  439. package/src/core/RunPolicyUsage.ts +17 -0
  440. package/src/core/SemanticMemoryIndex.ts +250 -0
  441. package/src/core/SemanticMemoryRevalidation.ts +254 -0
  442. package/src/core/SubagentContract.ts +196 -0
  443. package/src/core/Thread.ts +371 -0
  444. package/src/core/ToolExposure.ts +74 -0
  445. package/src/core/ToolResult.ts +170 -0
  446. package/src/core/Usage.ts +529 -0
  447. package/src/core/Worker.ts +173 -0
  448. package/src/core/internal/agent-updates.ts +32 -0
  449. package/src/core/internal/utf8.ts +23 -0
  450. package/src/durable/ActivityStore.ts +160 -0
  451. package/src/durable/Admin.ts +496 -0
  452. package/src/durable/AgentRegistration.ts +13 -0
  453. package/src/durable/Certification.ts +210 -0
  454. package/src/durable/CommittedActivity.ts +296 -0
  455. package/src/durable/Digest.ts +93 -0
  456. package/src/durable/DurableAgentRuntime.ts +10340 -0
  457. package/src/durable/DurableFailpoint.ts +103 -0
  458. package/src/durable/DurableFailpointTestControl.ts +39 -0
  459. package/src/durable/EventSource.ts +172 -0
  460. package/src/durable/GitHubWorkflowSource.ts +453 -0
  461. package/src/durable/MessageDelivery.ts +708 -0
  462. package/src/durable/MessageDeliveryStoreConformance.ts +363 -0
  463. package/src/durable/OperationAuthorizer.ts +85 -0
  464. package/src/durable/PersistentHistory.ts +260 -0
  465. package/src/durable/PreparedInputAdmission.ts +44 -0
  466. package/src/durable/Records.ts +1010 -0
  467. package/src/durable/Recovery.ts +1018 -0
  468. package/src/durable/RunJournal.ts +1479 -0
  469. package/src/durable/Schedule.ts +504 -0
  470. package/src/durable/ScheduleStoreConformance.ts +638 -0
  471. package/src/durable/ScheduleTransition.ts +265 -0
  472. package/src/durable/Scheduling.ts +1077 -0
  473. package/src/durable/SqlMemoryStore.ts +778 -0
  474. package/src/durable/SqlMessageDeliveryStore.ts +302 -0
  475. package/src/durable/SqlStorageV2Upgrade.ts +500 -0
  476. package/src/durable/SqlSubscriptionStore.ts +1440 -0
  477. package/src/durable/SubmissionLedger.ts +1201 -0
  478. package/src/durable/SubmissionLedgerConformance.ts +4579 -0
  479. package/src/durable/SubmissionStatus.ts +14 -0
  480. package/src/durable/Subscription.ts +544 -0
  481. package/src/durable/SubscriptionInput.ts +144 -0
  482. package/src/durable/SubscriptionStoreConformance.ts +945 -0
  483. package/src/durable/SubscriptionTools.ts +327 -0
  484. package/src/durable/SubscriptionTransition.ts +302 -0
  485. package/src/durable/Subscriptions.ts +1210 -0
  486. package/src/durable/ThreadContextHistory.ts +227 -0
  487. package/src/durable/ThreadContextHistoryProjection.ts +216 -0
  488. package/src/durable/ThreadInvariants.ts +442 -0
  489. package/src/durable/ThreadProjection.ts +269 -0
  490. package/src/durable/ThreadProjectionMaintenance.ts +67 -0
  491. package/src/durable/ThreadStore.ts +242 -0
  492. package/src/durable/ThreadStoreConformance.ts +710 -0
  493. package/src/durable/ToolReconciler.ts +105 -0
  494. package/src/durable/WakeScheduler.ts +134 -0
  495. package/src/durable/WorkerHost.ts +171 -0
  496. package/src/durable/internal/agent-registration.ts +525 -0
  497. package/src/durable/internal/agent-updates.ts +302 -0
  498. package/src/durable/internal/foreign-diagnostic.ts +47 -0
  499. package/src/durable/internal/journal-checkpoint.ts +104 -0
  500. package/src/durable/internal/journal-metadata.ts +107 -0
  501. package/src/durable/internal/messaging-host.ts +608 -0
  502. package/src/durable/internal/schedule-time.ts +303 -0
  503. package/src/durable/internal/storage-v2-layout.ts +163 -0
  504. package/src/durable/internal/storage-v2.ts +73 -0
  505. package/src/durable/internal/worker-host.ts +2467 -0
  506. package/src/durable/internal/worker-runtime.ts +9 -0
  507. package/src/engine/AgentRuntime.ts +37 -0
  508. package/src/engine/Compaction.ts +11 -0
  509. package/src/engine/ContextCompactor.ts +277 -0
  510. package/src/engine/ContextHistory.ts +73 -0
  511. package/src/engine/ContextWindow.ts +72 -0
  512. package/src/engine/DurableStep.ts +132 -0
  513. package/src/engine/MessagingHost.ts +110 -0
  514. package/src/engine/Output.ts +2 -0
  515. package/src/engine/RunEventSink.ts +132 -0
  516. package/src/engine/RunOptions.ts +1077 -0
  517. package/src/engine/SubagentHost.ts +181 -0
  518. package/src/engine/ThreadHistory.ts +120 -0
  519. package/src/engine/ToolBroker.ts +157 -0
  520. package/src/engine/ToolExposure.ts +48 -0
  521. package/src/engine/internal/agent-runtime.ts +10162 -0
  522. package/src/engine/internal/bounded-value.ts +315 -0
  523. package/src/engine/internal/compaction.ts +678 -0
  524. package/src/engine/internal/error-diagnostic.ts +39 -0
  525. package/src/engine/internal/output-contract.ts +173 -0
  526. package/src/engine/internal/primitive-delta.ts +80 -0
  527. package/src/engine/internal/provider-result-staging.ts +211 -0
  528. package/src/engine/internal/tool-derivative.ts +106 -0
  529. package/src/engine/internal/tool-exposure.ts +224 -0
  530. package/src/engine/internal/tool-telemetry.ts +484 -0
  531. package/src/index.ts +97 -22
  532. package/src/sandbox/CodeExecutor.ts +352 -0
  533. package/src/sandbox/InteractiveBrowser.ts +257 -0
  534. package/src/sandbox/PageCapture.ts +692 -0
  535. package/src/sandbox/PageCrawl.ts +148 -0
  536. package/src/sandbox/PageScreenshot.ts +81 -0
  537. package/src/sandbox/ProtectedBrowser.ts +436 -0
  538. package/src/sandbox/Sandbox.ts +241 -0
@@ -0,0 +1,529 @@
1
+ import { Effect, Schema } from "effect";
2
+
3
+ import { RunId } from "./Identifiers.ts";
4
+
5
+ const UsageIdentity = Schema.NonEmptyString.check(Schema.isMaxLength(256));
6
+
7
+ /** Bounded provider response identity. Request configuration is not response evidence. */
8
+ export class ModelResponseIdentity extends Schema.Class<ModelResponseIdentity>(
9
+ "@effect-agent/core/ModelResponseIdentity",
10
+ )({
11
+ id: Schema.optionalKey(UsageIdentity),
12
+ model: Schema.optionalKey(UsageIdentity),
13
+ }) {}
14
+
15
+ /** Missing legacy status means unknown, never a free call or a complete report. */
16
+ export const UsageCompleteness = Schema.Literals(["complete", "partial", "unknown"]);
17
+
18
+ const hasAdditiveTotal = (total: number, components: ReadonlyArray<number>): boolean => {
19
+ const sum = components.reduce((accumulator, component) => accumulator + component, 0);
20
+
21
+ return Number.isSafeInteger(sum) && total === sum;
22
+ };
23
+
24
+ const InputTokenUsageFields = Schema.Struct({
25
+ total: Schema.Natural,
26
+ uncached: Schema.Natural,
27
+ cacheRead: Schema.Natural,
28
+ cacheWrite: Schema.Natural,
29
+ }).check(
30
+ Schema.makeFilter(
31
+ (usage) => hasAdditiveTotal(usage.total, [usage.uncached, usage.cacheRead, usage.cacheWrite]),
32
+ { title: "Input token total equals uncached, cache-read, and cache-write components" },
33
+ ),
34
+ );
35
+
36
+ /** Provider-reported input-token components for one completed model call. */
37
+ export class InputTokenUsage extends Schema.Class<InputTokenUsage>(
38
+ "@effect-agent/core/InputTokenUsage",
39
+ )(InputTokenUsageFields) {}
40
+
41
+ const OutputTokenUsageFields = Schema.Struct({
42
+ total: Schema.Natural,
43
+ text: Schema.Natural,
44
+ reasoning: Schema.Natural,
45
+ }).check(
46
+ Schema.makeFilter((usage) => hasAdditiveTotal(usage.total, [usage.text, usage.reasoning]), {
47
+ title: "Output token total equals text and reasoning components",
48
+ }),
49
+ );
50
+
51
+ /** Provider-reported output-token components for one completed model call. */
52
+ export class OutputTokenUsage extends Schema.Class<OutputTokenUsage>(
53
+ "@effect-agent/core/OutputTokenUsage",
54
+ )(OutputTokenUsageFields) {}
55
+
56
+ /** Canonical, provider-independent accounting for one completed model call. */
57
+ export class ModelCallUsage extends Schema.Class<ModelCallUsage>(
58
+ "@effect-agent/core/ModelCallUsage",
59
+ )({
60
+ provider: UsageIdentity,
61
+ /** Configured binding identity. See response.model for provider-reported identity. */
62
+ model: UsageIdentity,
63
+ serviceTier: Schema.optionalKey(UsageIdentity),
64
+ pricingVersion: Schema.optionalKey(UsageIdentity),
65
+ response: Schema.optionalKey(ModelResponseIdentity),
66
+ purpose: Schema.optionalKey(Schema.Literals(["turn", "summary"])),
67
+ usageStatus: Schema.optionalKey(UsageCompleteness),
68
+ pricingStatus: Schema.optionalKey(Schema.Literals(["estimated", "unknown"])),
69
+ inputTokens: InputTokenUsage,
70
+ outputTokens: OutputTokenUsage,
71
+ costMicrousd: Schema.Natural,
72
+ }) {}
73
+
74
+ /**
75
+ * Observed model usage and estimated cost, without per-model attribution.
76
+ * Numeric zero with unknown coverage never establishes free execution. Missing legacy
77
+ * statuses mean unknown. Unobserved calls are excluded from the numeric call/token totals.
78
+ */
79
+ export class RunTotals extends Schema.Class<RunTotals>("@effect-agent/core/RunTotals")({
80
+ modelCalls: Schema.Natural,
81
+ inputTokens: Schema.Natural,
82
+ outputTokens: Schema.Natural,
83
+ costMicrousd: Schema.Natural,
84
+ usageStatus: Schema.optionalKey(UsageCompleteness),
85
+ pricingStatus: Schema.optionalKey(UsageCompleteness),
86
+ unobservedModelCalls: Schema.optionalKey(Schema.Natural),
87
+ }) {}
88
+
89
+ /** Own Run usage and disjoint attached-descendant usage. Add each component once. */
90
+ export class RunUsageReport extends Schema.Class<RunUsageReport>(
91
+ "@effect-agent/core/RunUsageReport",
92
+ )({
93
+ usage: RunTotals,
94
+ delegatedUsage: RunTotals,
95
+ }) {}
96
+
97
+ /** A verified child report retained across durable parent Attempts. */
98
+ export class ChildRunUsage extends Schema.Class<ChildRunUsage>("@effect-agent/core/ChildRunUsage")({
99
+ runId: RunId,
100
+ report: RunUsageReport,
101
+ }) {}
102
+
103
+ /** Known absence of observed work. */
104
+ export const emptyRunTotals = (): RunTotals =>
105
+ RunTotals.make({
106
+ modelCalls: 0,
107
+ inputTokens: 0,
108
+ outputTokens: 0,
109
+ costMicrousd: 0,
110
+ usageStatus: "complete",
111
+ pricingStatus: "complete",
112
+ unobservedModelCalls: 0,
113
+ });
114
+
115
+ /** No accounting evidence, including legacy child reports. This is not known zero spend. */
116
+ export const unknownRunTotals = (): RunTotals =>
117
+ RunTotals.make({
118
+ ...emptyRunTotals(),
119
+ usageStatus: "unknown",
120
+ pricingStatus: "unknown",
121
+ });
122
+
123
+ /** Settlement-sized aggregate for calls sharing one pricing identity. */
124
+ export class ModelUsageGroup extends Schema.Class<ModelUsageGroup>(
125
+ "@effect-agent/core/ModelUsageGroup",
126
+ )({
127
+ provider: UsageIdentity,
128
+ model: UsageIdentity,
129
+ /** Actual returned model; absent when only the configured binding is known. */
130
+ responseModel: Schema.optionalKey(UsageIdentity),
131
+ serviceTier: Schema.optionalKey(UsageIdentity),
132
+ pricingVersion: Schema.optionalKey(UsageIdentity),
133
+ modelCalls: Schema.Natural.check(Schema.isGreaterThan(0)),
134
+ inputTokens: InputTokenUsage,
135
+ outputTokens: OutputTokenUsage,
136
+ costMicrousd: Schema.Natural,
137
+ }) {}
138
+
139
+ const RunUsageSummaryFields = Schema.Struct({
140
+ modelCalls: Schema.Natural,
141
+ inputTokens: InputTokenUsage,
142
+ outputTokens: OutputTokenUsage,
143
+ costMicrousd: Schema.Natural,
144
+ byModel: Schema.Array(ModelUsageGroup),
145
+ /** Coverage of recorded calls only; interruptions can make the Run less complete. */
146
+ usageStatus: Schema.optionalKey(UsageCompleteness),
147
+ pricingStatus: Schema.optionalKey(UsageCompleteness),
148
+ /** Observed invocations without retained accounting, excluded from numeric call/token totals. */
149
+ unobservedModelCalls: Schema.optionalKey(Schema.Natural),
150
+ }).check(
151
+ Schema.makeFilter(
152
+ (summary) => {
153
+ const identities = summary.byModel.map((group) =>
154
+ JSON.stringify([
155
+ group.provider,
156
+ group.model,
157
+ group.responseModel ?? null,
158
+ group.serviceTier ?? null,
159
+ group.pricingVersion ?? null,
160
+ ]),
161
+ );
162
+
163
+ return (
164
+ new Set(identities).size === identities.length &&
165
+ hasAdditiveTotal(
166
+ summary.modelCalls,
167
+ summary.byModel.map((group) => group.modelCalls),
168
+ ) &&
169
+ hasAdditiveTotal(
170
+ summary.inputTokens.total,
171
+ summary.byModel.map((group) => group.inputTokens.total),
172
+ ) &&
173
+ hasAdditiveTotal(
174
+ summary.inputTokens.uncached,
175
+ summary.byModel.map((group) => group.inputTokens.uncached),
176
+ ) &&
177
+ hasAdditiveTotal(
178
+ summary.inputTokens.cacheRead,
179
+ summary.byModel.map((group) => group.inputTokens.cacheRead),
180
+ ) &&
181
+ hasAdditiveTotal(
182
+ summary.inputTokens.cacheWrite,
183
+ summary.byModel.map((group) => group.inputTokens.cacheWrite),
184
+ ) &&
185
+ hasAdditiveTotal(
186
+ summary.outputTokens.total,
187
+ summary.byModel.map((group) => group.outputTokens.total),
188
+ ) &&
189
+ hasAdditiveTotal(
190
+ summary.outputTokens.text,
191
+ summary.byModel.map((group) => group.outputTokens.text),
192
+ ) &&
193
+ hasAdditiveTotal(
194
+ summary.outputTokens.reasoning,
195
+ summary.byModel.map((group) => group.outputTokens.reasoning),
196
+ ) &&
197
+ hasAdditiveTotal(
198
+ summary.costMicrousd,
199
+ summary.byModel.map((group) => group.costMicrousd),
200
+ )
201
+ );
202
+ },
203
+ {
204
+ title:
205
+ "Run usage totals equal unique per-model pricing groups within safe-integer accounting",
206
+ },
207
+ ),
208
+ );
209
+
210
+ /** Settlement aggregate included with a terminal Run settlement. */
211
+ export class RunUsageSummary extends Schema.Class<RunUsageSummary>(
212
+ "@effect-agent/core/RunUsageSummary",
213
+ )(RunUsageSummaryFields) {}
214
+
215
+ interface MutableUsageGroup {
216
+ readonly provider: string;
217
+ readonly model: string;
218
+ readonly responseModel?: string | undefined;
219
+ readonly serviceTier?: string | undefined;
220
+ readonly pricingVersion?: string | undefined;
221
+ modelCalls: number;
222
+ inputTokens: {
223
+ total: number;
224
+ uncached: number;
225
+ cacheRead: number;
226
+ cacheWrite: number;
227
+ };
228
+ outputTokens: { total: number; text: number; reasoning: number };
229
+ costMicrousd: number;
230
+ }
231
+
232
+ const emptyInputTokens = () => ({ total: 0, uncached: 0, cacheRead: 0, cacheWrite: 0 });
233
+ const emptyOutputTokens = () => ({ total: 0, text: 0, reasoning: 0 });
234
+
235
+ /** Canonical usage could not be aggregated without exceeding safe-integer accounting. */
236
+ export class UsageAggregationError extends Schema.TaggedError<UsageAggregationError>()(
237
+ "UsageAggregationError",
238
+ {
239
+ field: Schema.NonEmptyString,
240
+ message: Schema.String,
241
+ },
242
+ ) {}
243
+
244
+ const checkedAdd = (
245
+ field: string,
246
+ left: number,
247
+ right: number,
248
+ ): Effect.Effect<number, UsageAggregationError> => {
249
+ const total = left + right;
250
+
251
+ return Number.isSafeInteger(left) &&
252
+ left >= 0 &&
253
+ Number.isSafeInteger(right) &&
254
+ right >= 0 &&
255
+ Number.isSafeInteger(total)
256
+ ? Effect.succeed(total)
257
+ : Effect.fail(
258
+ UsageAggregationError.make({
259
+ field,
260
+ message: `Canonical usage aggregation exceeded the safe-integer range at ${field}`,
261
+ }),
262
+ );
263
+ };
264
+
265
+ /** Combine disjoint totals, retaining uncertainty and rejecting numeric overflow. */
266
+ export const sumRunTotals = Effect.fn("sumRunTotals")(function* (
267
+ contributions: ReadonlyArray<RunTotals>,
268
+ ): Effect.fn.Return<RunTotals, UsageAggregationError> {
269
+ let modelCalls = 0;
270
+ let inputTokens = 0;
271
+ let outputTokens = 0;
272
+ let costMicrousd = 0;
273
+ let unobservedModelCalls = 0;
274
+ const usageStatuses: Array<typeof UsageCompleteness.Type> = [];
275
+ const pricingStatuses: Array<typeof UsageCompleteness.Type> = [];
276
+
277
+ for (const contribution of contributions) {
278
+ const value = yield* Schema.decodeEffect(RunTotals)(contribution).pipe(
279
+ Effect.mapError(
280
+ () => new UsageAggregationError({ field: "totals", message: "Invalid Run totals" }),
281
+ ),
282
+ );
283
+
284
+ modelCalls = yield* checkedAdd("modelCalls", modelCalls, value.modelCalls);
285
+ inputTokens = yield* checkedAdd("inputTokens", inputTokens, value.inputTokens);
286
+ outputTokens = yield* checkedAdd("outputTokens", outputTokens, value.outputTokens);
287
+ costMicrousd = yield* checkedAdd("costMicrousd", costMicrousd, value.costMicrousd);
288
+ unobservedModelCalls = yield* checkedAdd(
289
+ "unobservedModelCalls",
290
+ unobservedModelCalls,
291
+ value.unobservedModelCalls ?? 0,
292
+ );
293
+ // Known empty contributions are identities; unknown empty contributions are evidence gaps.
294
+ if (
295
+ value.modelCalls > 0 ||
296
+ (value.unobservedModelCalls ?? 0) > 0 ||
297
+ value.usageStatus !== "complete"
298
+ ) {
299
+ usageStatuses.push(value.usageStatus ?? "unknown");
300
+ }
301
+ if (
302
+ value.modelCalls > 0 ||
303
+ (value.unobservedModelCalls ?? 0) > 0 ||
304
+ value.pricingStatus !== "complete"
305
+ ) {
306
+ pricingStatuses.push(value.pricingStatus ?? "unknown");
307
+ }
308
+ }
309
+
310
+ const coverage = (statuses: ReadonlyArray<typeof UsageCompleteness.Type>) =>
311
+ statuses.every((status) => status === "complete")
312
+ ? ("complete" as const)
313
+ : statuses.every((status) => status === "unknown")
314
+ ? ("unknown" as const)
315
+ : ("partial" as const);
316
+
317
+ return RunTotals.make({
318
+ modelCalls,
319
+ inputTokens,
320
+ outputTokens,
321
+ costMicrousd,
322
+ unobservedModelCalls,
323
+ usageStatus: coverage(usageStatuses),
324
+ pricingStatus: coverage(pricingStatuses),
325
+ });
326
+ });
327
+
328
+ /** Flatten a canonical settlement summary without discarding its coverage markers. */
329
+ export const runTotalsFromSummary = (summary: RunUsageSummary): RunTotals =>
330
+ RunTotals.make({
331
+ modelCalls: summary.modelCalls,
332
+ inputTokens: summary.inputTokens.total,
333
+ outputTokens: summary.outputTokens.total,
334
+ costMicrousd: summary.costMicrousd,
335
+ usageStatus: summary.usageStatus ?? "unknown",
336
+ pricingStatus: summary.pricingStatus ?? "unknown",
337
+ unobservedModelCalls: summary.unobservedModelCalls ?? 0,
338
+ });
339
+
340
+ /**
341
+ * Deterministically aggregate canonical per-call usage without making cached tokens free.
342
+ * A validated seed retains earlier call totals and pricing groups without retaining those calls.
343
+ * Empty contributions do not change completeness; the seed is never mutated.
344
+ */
345
+ export const summarizeModelUsage = Effect.fn("summarizeModelUsage")(function* (
346
+ calls: ReadonlyArray<ModelCallUsage>,
347
+ seed?: RunUsageSummary,
348
+ ): Effect.fn.Return<RunUsageSummary, UsageAggregationError> {
349
+ const initial =
350
+ seed === undefined
351
+ ? undefined
352
+ : yield* Schema.decodeEffect(RunUsageSummary)(seed).pipe(
353
+ Effect.mapError(
354
+ () =>
355
+ new UsageAggregationError({
356
+ field: "seed",
357
+ message: "Canonical usage seed does not satisfy the RunUsageSummary Schema",
358
+ }),
359
+ ),
360
+ );
361
+
362
+ const inputTokens = initial === undefined ? emptyInputTokens() : { ...initial.inputTokens };
363
+ const outputTokens = initial === undefined ? emptyOutputTokens() : { ...initial.outputTokens };
364
+ const groups = new Map<string, MutableUsageGroup>();
365
+ let modelCalls = initial?.modelCalls ?? 0;
366
+ let costMicrousd = initial?.costMicrousd ?? 0;
367
+ const hasSeedCalls = modelCalls > 0;
368
+
369
+ let allUsageUnknown =
370
+ !hasSeedCalls || initial?.usageStatus === undefined || initial.usageStatus === "unknown";
371
+
372
+ let allUsageComplete = !hasSeedCalls || initial?.usageStatus === "complete";
373
+
374
+ let allPricingUnknown =
375
+ !hasSeedCalls || initial?.pricingStatus === undefined || initial.pricingStatus === "unknown";
376
+
377
+ let allPricingComplete = !hasSeedCalls || initial?.pricingStatus === "complete";
378
+
379
+ for (const group of initial?.byModel ?? []) {
380
+ const key = JSON.stringify([
381
+ group.provider,
382
+ group.model,
383
+ group.responseModel ?? null,
384
+ group.serviceTier ?? null,
385
+ group.pricingVersion ?? null,
386
+ ]);
387
+
388
+ groups.set(key, {
389
+ ...group,
390
+ inputTokens: { ...group.inputTokens },
391
+ outputTokens: { ...group.outputTokens },
392
+ });
393
+ }
394
+
395
+ for (const call of calls) {
396
+ allUsageUnknown &&= call.usageStatus === undefined || call.usageStatus === "unknown";
397
+ allUsageComplete &&= call.usageStatus === "complete";
398
+ allPricingUnknown &&= call.pricingStatus !== "estimated";
399
+ allPricingComplete &&= call.pricingStatus === "estimated";
400
+ modelCalls = yield* checkedAdd("modelCalls", modelCalls, 1);
401
+ inputTokens.total = yield* checkedAdd(
402
+ "inputTokens.total",
403
+ inputTokens.total,
404
+ call.inputTokens.total,
405
+ );
406
+ inputTokens.uncached = yield* checkedAdd(
407
+ "inputTokens.uncached",
408
+ inputTokens.uncached,
409
+ call.inputTokens.uncached,
410
+ );
411
+ inputTokens.cacheRead = yield* checkedAdd(
412
+ "inputTokens.cacheRead",
413
+ inputTokens.cacheRead,
414
+ call.inputTokens.cacheRead,
415
+ );
416
+ inputTokens.cacheWrite = yield* checkedAdd(
417
+ "inputTokens.cacheWrite",
418
+ inputTokens.cacheWrite,
419
+ call.inputTokens.cacheWrite,
420
+ );
421
+ outputTokens.total = yield* checkedAdd(
422
+ "outputTokens.total",
423
+ outputTokens.total,
424
+ call.outputTokens.total,
425
+ );
426
+ outputTokens.text = yield* checkedAdd(
427
+ "outputTokens.text",
428
+ outputTokens.text,
429
+ call.outputTokens.text,
430
+ );
431
+ outputTokens.reasoning = yield* checkedAdd(
432
+ "outputTokens.reasoning",
433
+ outputTokens.reasoning,
434
+ call.outputTokens.reasoning,
435
+ );
436
+ costMicrousd = yield* checkedAdd("costMicrousd", costMicrousd, call.costMicrousd);
437
+
438
+ const key = JSON.stringify([
439
+ call.provider,
440
+ call.model,
441
+ call.response?.model ?? null,
442
+ call.serviceTier ?? null,
443
+ call.pricingVersion ?? null,
444
+ ]);
445
+
446
+ let group = groups.get(key);
447
+
448
+ if (group === undefined) {
449
+ group = {
450
+ provider: call.provider,
451
+ model: call.model,
452
+ ...(call.response?.model === undefined ? {} : { responseModel: call.response.model }),
453
+ ...(call.serviceTier === undefined ? {} : { serviceTier: call.serviceTier }),
454
+ ...(call.pricingVersion === undefined ? {} : { pricingVersion: call.pricingVersion }),
455
+ modelCalls: 0,
456
+ inputTokens: emptyInputTokens(),
457
+ outputTokens: emptyOutputTokens(),
458
+ costMicrousd: 0,
459
+ };
460
+ groups.set(key, group);
461
+ }
462
+ group.modelCalls = yield* checkedAdd("byModel.modelCalls", group.modelCalls, 1);
463
+ group.inputTokens.total = yield* checkedAdd(
464
+ "byModel.inputTokens.total",
465
+ group.inputTokens.total,
466
+ call.inputTokens.total,
467
+ );
468
+ group.inputTokens.uncached = yield* checkedAdd(
469
+ "byModel.inputTokens.uncached",
470
+ group.inputTokens.uncached,
471
+ call.inputTokens.uncached,
472
+ );
473
+ group.inputTokens.cacheRead = yield* checkedAdd(
474
+ "byModel.inputTokens.cacheRead",
475
+ group.inputTokens.cacheRead,
476
+ call.inputTokens.cacheRead,
477
+ );
478
+ group.inputTokens.cacheWrite = yield* checkedAdd(
479
+ "byModel.inputTokens.cacheWrite",
480
+ group.inputTokens.cacheWrite,
481
+ call.inputTokens.cacheWrite,
482
+ );
483
+ group.outputTokens.total = yield* checkedAdd(
484
+ "byModel.outputTokens.total",
485
+ group.outputTokens.total,
486
+ call.outputTokens.total,
487
+ );
488
+ group.outputTokens.text = yield* checkedAdd(
489
+ "byModel.outputTokens.text",
490
+ group.outputTokens.text,
491
+ call.outputTokens.text,
492
+ );
493
+ group.outputTokens.reasoning = yield* checkedAdd(
494
+ "byModel.outputTokens.reasoning",
495
+ group.outputTokens.reasoning,
496
+ call.outputTokens.reasoning,
497
+ );
498
+ group.costMicrousd = yield* checkedAdd(
499
+ "byModel.costMicrousd",
500
+ group.costMicrousd,
501
+ call.costMicrousd,
502
+ );
503
+ }
504
+
505
+ return RunUsageSummary.make({
506
+ modelCalls,
507
+ inputTokens: InputTokenUsage.make(inputTokens),
508
+ outputTokens: OutputTokenUsage.make(outputTokens),
509
+ costMicrousd,
510
+ usageStatus: allUsageUnknown ? "unknown" : allUsageComplete ? "complete" : "partial",
511
+ pricingStatus: allPricingUnknown ? "unknown" : allPricingComplete ? "complete" : "partial",
512
+ ...(initial?.unobservedModelCalls === undefined
513
+ ? {}
514
+ : { unobservedModelCalls: initial.unobservedModelCalls }),
515
+ byModel: [...groups.values()].map((group) =>
516
+ ModelUsageGroup.make({
517
+ provider: group.provider,
518
+ model: group.model,
519
+ ...(group.responseModel === undefined ? {} : { responseModel: group.responseModel }),
520
+ ...(group.serviceTier === undefined ? {} : { serviceTier: group.serviceTier }),
521
+ ...(group.pricingVersion === undefined ? {} : { pricingVersion: group.pricingVersion }),
522
+ modelCalls: group.modelCalls,
523
+ inputTokens: InputTokenUsage.make(group.inputTokens),
524
+ outputTokens: OutputTokenUsage.make(group.outputTokens),
525
+ costMicrousd: group.costMicrousd,
526
+ }),
527
+ ),
528
+ });
529
+ });
@@ -0,0 +1,173 @@
1
+ import { Schema } from "effect";
2
+
3
+ import { AgentPolicy } from "./AgentPolicy.ts";
4
+ import { Update } from "./AgentUpdates.ts";
5
+ import { AgentId, DelegationId, RunId, SettlementId, ThreadId, ToolCallId } from "./Identifiers.ts";
6
+ import { Receipt } from "./Receipt.ts";
7
+ import { SubagentExecutionFailure, SubagentGrant } from "./SubagentContract.ts";
8
+
9
+ /** A reusable child Thread, correlated with its declaration. This value grants no authority. */
10
+ export const WorkerRef = Schema.Struct({
11
+ schemaVersion: Schema.Literal(1),
12
+ delegationId: DelegationId,
13
+ targetAgentId: AgentId,
14
+ threadId: ThreadId,
15
+ });
16
+
17
+ export type WorkerRef = typeof WorkerRef.Type;
18
+
19
+ /** A worker identity and the Receipt for one accepted input, never an execution handle. */
20
+ export const WorkerStarted = Schema.Struct({
21
+ worker: WorkerRef,
22
+ receipt: Receipt,
23
+ }).check(Schema.makeFilter((value) => value.worker.threadId === value.receipt.threadId));
24
+
25
+ export type WorkerStarted = typeof WorkerStarted.Type;
26
+
27
+ /** A host-authorized Run allowance is independent of the immutable delegation lineage. */
28
+ export const WorkerBudgetScope = Schema.Literals(["source-subtree", "worker-run"]);
29
+ export type WorkerBudgetScope = typeof WorkerBudgetScope.Type;
30
+
31
+ /** Host-bound caller metadata. Programmatic calls never fabricate Run or Tool Call identities. */
32
+ export const WorkerSource = Schema.Union([
33
+ Schema.Struct({
34
+ _tag: Schema.Literal("tool"),
35
+ agentId: AgentId,
36
+ threadId: ThreadId,
37
+ runId: RunId,
38
+ toolCallId: ToolCallId,
39
+ }),
40
+ Schema.Struct({
41
+ _tag: Schema.Literal("programmatic"),
42
+ agentId: AgentId,
43
+ threadId: ThreadId,
44
+ }),
45
+ ]);
46
+
47
+ export type WorkerSource = typeof WorkerSource.Type;
48
+
49
+ /** The caller's effective policy and root-relative depth, resolved by its host. */
50
+ export const WorkerContext = Schema.Struct({
51
+ source: WorkerSource,
52
+ policy: AgentPolicy,
53
+ depth: Schema.Natural,
54
+ grant: Schema.optionalKey(SubagentGrant),
55
+ });
56
+
57
+ export type WorkerContext = typeof WorkerContext.Type;
58
+
59
+ /** Bounded durable listing data; a latest Receipt never substitutes for a requested Receipt. */
60
+ export const WorkerSummary = Schema.Struct({
61
+ worker: WorkerRef,
62
+ latestReceipt: Schema.NullOr(Receipt),
63
+ state: Schema.Literals(["starting", "active", "idle"]),
64
+ });
65
+
66
+ export type WorkerSummary = typeof WorkerSummary.Type;
67
+
68
+ export const WorkerPage = Schema.Struct({
69
+ items: Schema.Array(WorkerSummary).check(Schema.isMaxLength(100)),
70
+ next: Schema.NullOr(ThreadId),
71
+ });
72
+
73
+ export type WorkerPage = typeof WorkerPage.Type;
74
+
75
+ /** Authorized canonical history, encoded independently of storage-adapter representations. */
76
+ export const WorkerHistoryEntry = Schema.Struct({
77
+ sequence: Schema.Natural.check(Schema.isGreaterThan(0)),
78
+ recordId: Schema.NonEmptyString.check(Schema.isMaxLength(1_024)),
79
+ record: Schema.Json,
80
+ });
81
+
82
+ export type WorkerHistoryEntry = typeof WorkerHistoryEntry.Type;
83
+
84
+ /**
85
+ * Closed host-boundary failures. Infrastructure diagnostics remain in host telemetry.
86
+ * `delivery-pending` confirms retained input, not destination acceptance or execution.
87
+ * Keep the same idempotency key and parameters when reconciling; never launch a replacement.
88
+ */
89
+ export class WorkerError extends Schema.TaggedError<WorkerError>()("WorkerError", {
90
+ /** Pending input or concurrency pressure may clear without changing the request. */
91
+ retryable: Schema.optionalKey(Schema.Literal(true)),
92
+ operation: Schema.Literals([
93
+ "context",
94
+ "start",
95
+ "followUp",
96
+ "inspect",
97
+ "observe",
98
+ "await",
99
+ "list",
100
+ "cancel",
101
+ ]),
102
+ reason: Schema.Literals([
103
+ "denied",
104
+ "declaration-unavailable",
105
+ "worker-mismatch",
106
+ "receipt-mismatch",
107
+ "idempotency-conflict",
108
+ "capacity",
109
+ "not-found",
110
+ "delivery-pending",
111
+ "storage",
112
+ "corrupt",
113
+ "unavailable",
114
+ ]),
115
+ }) {}
116
+
117
+ export { WorkerOperationTool } from "./SubagentContract.ts";
118
+
119
+ /** One projected canonical Run outcome. Joined receipts share this identity. */
120
+ export const WorkerReport = <Success extends Schema.Top>(success: Success) => {
121
+ const identity = {
122
+ _tag: Schema.Literal("Settled"),
123
+ worker: WorkerRef,
124
+ receipt: Receipt,
125
+ runId: RunId,
126
+ settlementId: SettlementId,
127
+ };
128
+
129
+ return Schema.Union([
130
+ // Union preserves the Success codec while making the result field required.
131
+ Schema.Struct({
132
+ ...identity,
133
+ outcome: Schema.Literal("completed"),
134
+ result: Schema.Union([success]),
135
+ }),
136
+ Schema.Struct({
137
+ ...identity,
138
+ outcome: Schema.Literals(["failed", "aborted"]),
139
+ failure: SubagentExecutionFailure,
140
+ }),
141
+ ]);
142
+ };
143
+
144
+ export type WorkerReport<Success extends Schema.Top> = ReturnType<
145
+ typeof WorkerReport<Success>
146
+ >["Type"];
147
+
148
+ /** Framework message stored separately from the parent's application input. */
149
+ export const WorkerCompletion = Schema.Struct({
150
+ _tag: Schema.Literal("WorkerCompletion"),
151
+ budgetExhausted: Schema.Boolean,
152
+ schemaVersion: Schema.Literal(1),
153
+ report: WorkerReport(Schema.Json),
154
+ }).check(Schema.makeFilter(({ report }) => report.worker.threadId === report.receipt.threadId));
155
+
156
+ export type WorkerCompletion = typeof WorkerCompletion.Type;
157
+
158
+ /** Source-worker intermediate output, kept separate from application input. */
159
+ export const WorkerUpdate = Schema.Struct({
160
+ _tag: Schema.Literal("WorkerUpdate"),
161
+ schemaVersion: Schema.Literal(1),
162
+ worker: WorkerRef,
163
+ update: Update,
164
+ }).check(
165
+ Schema.makeFilter(
166
+ ({ worker, update }) =>
167
+ worker.threadId === update.threadId && worker.targetAgentId === update.agentId,
168
+ ),
169
+ );
170
+
171
+ export type WorkerUpdate = typeof WorkerUpdate.Type;
172
+ export const FrameworkMessage = Schema.Union([WorkerCompletion, WorkerUpdate]);
173
+ export type FrameworkMessage = typeof FrameworkMessage.Type;