effect-agent 0.1.0-beta.16 → 0.1.0-beta.161

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 (546) hide show
  1. package/dist/Admin-Dirux8PR.d.mts +4270 -0
  2. package/dist/Agent-BMATXYsI.mjs +93 -0
  3. package/dist/Agent-BMATXYsI.mjs.map +1 -0
  4. package/dist/Agent-ZfnNCQXs.d.mts +259 -0
  5. package/dist/AgentError-Bn1ytXRD.d.mts +117 -0
  6. package/dist/AgentPolicy-B4oH8TbG.d.mts +112 -0
  7. package/dist/AgentRuntime-CVMHysXm.mjs +4844 -0
  8. package/dist/AgentRuntime-CVMHysXm.mjs.map +1 -0
  9. package/dist/AgentRuntime-D1MmB_0z.d.mts +346 -0
  10. package/dist/AgentUpdates-DMJ-_xow.d.mts +53 -0
  11. package/dist/ContextCompactor-BoKQOjr5.d.mts +161 -0
  12. package/dist/ContextWindow-DRQ5Mbm2.d.mts +58 -0
  13. package/dist/Digest-COAt3Orl.d.mts +22 -0
  14. package/dist/DurableAgentRuntime-BpB5rBcu.mjs +7513 -0
  15. package/dist/DurableAgentRuntime-BpB5rBcu.mjs.map +1 -0
  16. package/dist/DurableFailpoint-Cnr3wx1L.d.mts +41 -0
  17. package/dist/DurableStep-Cry_iol4.d.mts +103 -0
  18. package/dist/EventSource-DOXB0RJR.d.mts +51 -0
  19. package/dist/FailureDiagnostic-BElLOoED.mjs +274 -0
  20. package/dist/FailureDiagnostic-BElLOoED.mjs.map +1 -0
  21. package/dist/FailureDiagnostic-CaAkzGHL.d.mts +223 -0
  22. package/dist/Identifiers-CN2s30fF.d.mts +40 -0
  23. package/dist/InMemory.d.mts +24 -0
  24. package/dist/InMemory.mjs +24 -0
  25. package/dist/InMemory.mjs.map +1 -0
  26. package/dist/MemoryNamespace-BbRW5p71.d.mts +36 -0
  27. package/dist/MemoryReference-B8Q3UJoJ.d.mts +79 -0
  28. package/dist/Messaging-7VXQnWI3.d.mts +221 -0
  29. package/dist/Messaging-CICd_CSi.d.mts +1067 -0
  30. package/dist/MessagingHost-DXwWnrMh.d.mts +74 -0
  31. package/dist/MessagingHost-DfsbMPvq.mjs +110 -0
  32. package/dist/MessagingHost-DfsbMPvq.mjs.map +1 -0
  33. package/dist/OperationAuthorizer-TzcQtpX5.d.mts +61 -0
  34. package/dist/Output-CY7NZByV.d.mts +25 -0
  35. package/dist/PageCapture-Df8Xwskw.d.mts +583 -0
  36. package/dist/PreparedInputAdmission-B7r401xJ.d.mts +42 -0
  37. package/dist/Receipt-BAHyigAF.d.mts +33 -0
  38. package/dist/Records-Bm4Qt70a.d.mts +1115 -0
  39. package/dist/RunEvent-D0aepYwN.d.mts +474 -0
  40. package/dist/RunEventSink-9CUdI9Ar.d.mts +108 -0
  41. package/dist/RunJournal-CA2bsvHn.mjs +979 -0
  42. package/dist/RunJournal-CA2bsvHn.mjs.map +1 -0
  43. package/dist/RunOptions-BHmBa05n.d.mts +960 -0
  44. package/dist/RunPolicyUsage-CUudVtg_.d.mts +23 -0
  45. package/dist/Sandbox-CEsDWBLq.d.mts +173 -0
  46. package/dist/Schedule-Bi_XVKLF.d.mts +847 -0
  47. package/dist/Scheduling-DPb2QyAK.mjs +691 -0
  48. package/dist/Scheduling-DPb2QyAK.mjs.map +1 -0
  49. package/dist/Subagent-D59om8SR.d.mts +1650 -0
  50. package/dist/Subagent-DH6G120f.mjs +1499 -0
  51. package/dist/Subagent-DH6G120f.mjs.map +1 -0
  52. package/dist/SubagentContract-tyN9v-Jv.d.mts +112 -0
  53. package/dist/SubagentHost-VTyf_wEF.d.mts +172 -0
  54. package/dist/Subscription-B3ScCBaN.d.mts +979 -0
  55. package/dist/SubscriptionInput-BP5WVsX_.d.mts +41 -0
  56. package/dist/Thread-DOBQ0QUY.d.mts +96 -0
  57. package/dist/ThreadHistory-FD-o4TsR.d.mts +60 -0
  58. package/dist/ToolBroker-DWs4tZra.d.mts +133 -0
  59. package/dist/ToolExposure-9uF_Yo0T.mjs +10 -0
  60. package/dist/ToolExposure-9uF_Yo0T.mjs.map +1 -0
  61. package/dist/ToolExposure-C93U1sPu.mjs +30 -0
  62. package/dist/ToolExposure-C93U1sPu.mjs.map +1 -0
  63. package/dist/ToolExposure-UCN12eCd.d.mts +39 -0
  64. package/dist/ToolExposure-r2eOWk4F.d.mts +46 -0
  65. package/dist/ToolExposure.d.mts +8 -0
  66. package/dist/ToolExposure.mjs +21 -0
  67. package/dist/ToolExposure.mjs.map +1 -0
  68. package/dist/ToolReconciler-BmVRAHKs.d.mts +80 -0
  69. package/dist/ToolResult-BKdqWRff.d.mts +78 -0
  70. package/dist/Usage-BNjPR7Zr.d.mts +129 -0
  71. package/dist/WakeScheduler-EjUF-GhC.d.mts +56 -0
  72. package/dist/Worker-CfwzMZEK.mjs +271 -0
  73. package/dist/Worker-CfwzMZEK.mjs.map +1 -0
  74. package/dist/Worker-XEBYxRQv.d.mts +472 -0
  75. package/dist/WorkerAdmission-Cmcxd6nS.mjs +171 -0
  76. package/dist/WorkerAdmission-Cmcxd6nS.mjs.map +1 -0
  77. package/dist/agent-registration-BIOzAej4.mjs +210 -0
  78. package/dist/agent-registration-BIOzAej4.mjs.map +1 -0
  79. package/dist/capabilities/Approval.d.mts +114 -0
  80. package/dist/capabilities/Approval.mjs +226 -0
  81. package/dist/capabilities/Approval.mjs.map +1 -0
  82. package/dist/capabilities/BrowserUse.d.mts +545 -0
  83. package/dist/capabilities/BrowserUse.mjs +254 -0
  84. package/dist/capabilities/BrowserUse.mjs.map +1 -0
  85. package/dist/capabilities/Budget.d.mts +112 -0
  86. package/dist/capabilities/Budget.mjs +346 -0
  87. package/dist/capabilities/Budget.mjs.map +1 -0
  88. package/dist/capabilities/CodeMode.d.mts +157 -0
  89. package/dist/capabilities/CodeMode.mjs +523 -0
  90. package/dist/capabilities/CodeMode.mjs.map +1 -0
  91. package/dist/capabilities/Commands.d.mts +55 -0
  92. package/dist/capabilities/Commands.mjs +57 -0
  93. package/dist/capabilities/Commands.mjs.map +1 -0
  94. package/dist/capabilities/ContextTools.d.mts +187 -0
  95. package/dist/capabilities/ContextTools.mjs +87 -0
  96. package/dist/capabilities/ContextTools.mjs.map +1 -0
  97. package/dist/capabilities/Mcp.d.mts +108 -0
  98. package/dist/capabilities/Mcp.mjs +259 -0
  99. package/dist/capabilities/Mcp.mjs.map +1 -0
  100. package/dist/capabilities/McpClient.d.mts +115 -0
  101. package/dist/capabilities/McpClient.mjs +519 -0
  102. package/dist/capabilities/McpClient.mjs.map +1 -0
  103. package/dist/capabilities/MemoryNotes.d.mts +424 -0
  104. package/dist/capabilities/MemoryNotes.mjs +128 -0
  105. package/dist/capabilities/MemoryNotes.mjs.map +1 -0
  106. package/dist/capabilities/Messaging.d.mts +3 -0
  107. package/dist/capabilities/Messaging.mjs +152 -0
  108. package/dist/capabilities/Messaging.mjs.map +1 -0
  109. package/dist/capabilities/ModelContext.d.mts +89 -0
  110. package/dist/capabilities/ModelContext.mjs +168 -0
  111. package/dist/capabilities/ModelContext.mjs.map +1 -0
  112. package/dist/capabilities/Redaction.d.mts +37 -0
  113. package/dist/capabilities/Redaction.mjs +104 -0
  114. package/dist/capabilities/Redaction.mjs.map +1 -0
  115. package/dist/capabilities/Remembering.d.mts +434 -0
  116. package/dist/capabilities/Remembering.mjs +290 -0
  117. package/dist/capabilities/Remembering.mjs.map +1 -0
  118. package/dist/capabilities/RunHooks.d.mts +82 -0
  119. package/dist/capabilities/RunHooks.mjs +144 -0
  120. package/dist/capabilities/RunHooks.mjs.map +1 -0
  121. package/dist/capabilities/SemanticMemory.d.mts +431 -0
  122. package/dist/capabilities/SemanticMemory.mjs +315 -0
  123. package/dist/capabilities/SemanticMemory.mjs.map +1 -0
  124. package/dist/capabilities/Subagent.d.mts +4 -0
  125. package/dist/capabilities/Subagent.mjs +5 -0
  126. package/dist/capabilities/SubagentReservations.d.mts +186 -0
  127. package/dist/capabilities/SubagentReservations.mjs +479 -0
  128. package/dist/capabilities/SubagentReservations.mjs.map +1 -0
  129. package/dist/capabilities/ToolDiscovery.d.mts +129 -0
  130. package/dist/capabilities/ToolDiscovery.mjs +239 -0
  131. package/dist/capabilities/ToolDiscovery.mjs.map +1 -0
  132. package/dist/capabilities/WebCapture.d.mts +163 -0
  133. package/dist/capabilities/WebCapture.mjs +335 -0
  134. package/dist/capabilities/WebCapture.mjs.map +1 -0
  135. package/dist/capabilities/WebSearch.d.mts +75 -0
  136. package/dist/capabilities/WebSearch.mjs +123 -0
  137. package/dist/capabilities/WebSearch.mjs.map +1 -0
  138. package/dist/compaction-C2OTceKw.mjs +505 -0
  139. package/dist/compaction-C2OTceKw.mjs.map +1 -0
  140. package/dist/core/Agent.d.mts +2 -0
  141. package/dist/core/Agent.mjs +2 -0
  142. package/dist/core/AgentError.d.mts +2 -0
  143. package/dist/core/AgentError.mjs +134 -0
  144. package/dist/core/AgentError.mjs.map +1 -0
  145. package/dist/core/AgentPolicy.d.mts +2 -0
  146. package/dist/core/AgentPolicy.mjs +102 -0
  147. package/dist/core/AgentPolicy.mjs.map +1 -0
  148. package/dist/core/AgentUpdates.d.mts +2 -0
  149. package/dist/core/AgentUpdates.mjs +63 -0
  150. package/dist/core/AgentUpdates.mjs.map +1 -0
  151. package/dist/core/FailureDiagnostic.d.mts +2 -0
  152. package/dist/core/FailureDiagnostic.mjs +2 -0
  153. package/dist/core/IdGenerator.d.mts +26 -0
  154. package/dist/core/IdGenerator.mjs +27 -0
  155. package/dist/core/IdGenerator.mjs.map +1 -0
  156. package/dist/core/Identifiers.d.mts +2 -0
  157. package/dist/core/Identifiers.mjs +43 -0
  158. package/dist/core/Identifiers.mjs.map +1 -0
  159. package/dist/core/Memory.d.mts +57 -0
  160. package/dist/core/Memory.mjs +203 -0
  161. package/dist/core/Memory.mjs.map +1 -0
  162. package/dist/core/MemoryNamespace.d.mts +2 -0
  163. package/dist/core/MemoryNamespace.mjs +116 -0
  164. package/dist/core/MemoryNamespace.mjs.map +1 -0
  165. package/dist/core/MemoryReference.d.mts +2 -0
  166. package/dist/core/MemoryReference.mjs +109 -0
  167. package/dist/core/MemoryReference.mjs.map +1 -0
  168. package/dist/core/MemoryRevalidation.d.mts +65 -0
  169. package/dist/core/MemoryRevalidation.mjs +126 -0
  170. package/dist/core/MemoryRevalidation.mjs.map +1 -0
  171. package/dist/core/MemoryStore.d.mts +186 -0
  172. package/dist/core/MemoryStore.mjs +243 -0
  173. package/dist/core/MemoryStore.mjs.map +1 -0
  174. package/dist/core/Receipt.d.mts +2 -0
  175. package/dist/core/Receipt.mjs +36 -0
  176. package/dist/core/Receipt.mjs.map +1 -0
  177. package/dist/core/RememberingStore.d.mts +1562 -0
  178. package/dist/core/RememberingStore.mjs +190 -0
  179. package/dist/core/RememberingStore.mjs.map +1 -0
  180. package/dist/core/RunEvent.d.mts +2 -0
  181. package/dist/core/RunEvent.mjs +346 -0
  182. package/dist/core/RunEvent.mjs.map +1 -0
  183. package/dist/core/RunPolicyUsage.d.mts +2 -0
  184. package/dist/core/RunPolicyUsage.mjs +26 -0
  185. package/dist/core/RunPolicyUsage.mjs.map +1 -0
  186. package/dist/core/SemanticMemoryIndex.d.mts +826 -0
  187. package/dist/core/SemanticMemoryIndex.mjs +185 -0
  188. package/dist/core/SemanticMemoryIndex.mjs.map +1 -0
  189. package/dist/core/SemanticMemoryRevalidation.d.mts +45 -0
  190. package/dist/core/SemanticMemoryRevalidation.mjs +191 -0
  191. package/dist/core/SemanticMemoryRevalidation.mjs.map +1 -0
  192. package/dist/core/SubagentContract.d.mts +2 -0
  193. package/dist/core/SubagentContract.mjs +142 -0
  194. package/dist/core/SubagentContract.mjs.map +1 -0
  195. package/dist/core/Thread.d.mts +2 -0
  196. package/dist/core/Thread.mjs +250 -0
  197. package/dist/core/Thread.mjs.map +1 -0
  198. package/dist/core/ToolResult.d.mts +2 -0
  199. package/dist/core/ToolResult.mjs +156 -0
  200. package/dist/core/ToolResult.mjs.map +1 -0
  201. package/dist/core/Usage.d.mts +2 -0
  202. package/dist/core/Usage.mjs +340 -0
  203. package/dist/core/Usage.mjs.map +1 -0
  204. package/dist/core/Worker.d.mts +3 -0
  205. package/dist/core/Worker.mjs +3 -0
  206. package/dist/durable/ActivityStore.d.mts +116 -0
  207. package/dist/durable/ActivityStore.mjs +131 -0
  208. package/dist/durable/ActivityStore.mjs.map +1 -0
  209. package/dist/durable/Admin.d.mts +2 -0
  210. package/dist/durable/Admin.mjs +330 -0
  211. package/dist/durable/Admin.mjs.map +1 -0
  212. package/dist/durable/AgentRegistration.d.mts +2 -0
  213. package/dist/durable/AgentRegistration.mjs +15 -0
  214. package/dist/durable/AgentRegistration.mjs.map +1 -0
  215. package/dist/durable/Certification.d.mts +110 -0
  216. package/dist/durable/Certification.mjs +159 -0
  217. package/dist/durable/Certification.mjs.map +1 -0
  218. package/dist/durable/CommittedActivity.d.mts +64 -0
  219. package/dist/durable/CommittedActivity.mjs +159 -0
  220. package/dist/durable/CommittedActivity.mjs.map +1 -0
  221. package/dist/durable/Digest.d.mts +2 -0
  222. package/dist/durable/Digest.mjs +50 -0
  223. package/dist/durable/Digest.mjs.map +1 -0
  224. package/dist/durable/DurableAgentRuntime.d.mts +3 -0
  225. package/dist/durable/DurableAgentRuntime.mjs +4 -0
  226. package/dist/durable/DurableFailpoint.d.mts +2 -0
  227. package/dist/durable/DurableFailpoint.mjs +102 -0
  228. package/dist/durable/DurableFailpoint.mjs.map +1 -0
  229. package/dist/durable/DurableFailpointTestControl.d.mts +14 -0
  230. package/dist/durable/DurableFailpointTestControl.mjs +19 -0
  231. package/dist/durable/DurableFailpointTestControl.mjs.map +1 -0
  232. package/dist/durable/EventSource.d.mts +2 -0
  233. package/dist/durable/EventSource.mjs +65 -0
  234. package/dist/durable/EventSource.mjs.map +1 -0
  235. package/dist/durable/GitHubWorkflowSource.d.mts +185 -0
  236. package/dist/durable/GitHubWorkflowSource.mjs +209 -0
  237. package/dist/durable/GitHubWorkflowSource.mjs.map +1 -0
  238. package/dist/durable/LifecyclePublication.d.mts +2 -0
  239. package/dist/durable/LifecyclePublication.mjs +189 -0
  240. package/dist/durable/LifecyclePublication.mjs.map +1 -0
  241. package/dist/durable/MessageDelivery.d.mts +949 -0
  242. package/dist/durable/MessageDelivery.mjs +589 -0
  243. package/dist/durable/MessageDelivery.mjs.map +1 -0
  244. package/dist/durable/MessageDeliveryStoreConformance.d.mts +400 -0
  245. package/dist/durable/MessageDeliveryStoreConformance.mjs +270 -0
  246. package/dist/durable/MessageDeliveryStoreConformance.mjs.map +1 -0
  247. package/dist/durable/OperationAuthorizer.d.mts +2 -0
  248. package/dist/durable/OperationAuthorizer.mjs +70 -0
  249. package/dist/durable/OperationAuthorizer.mjs.map +1 -0
  250. package/dist/durable/PersistentHistory.d.mts +16 -0
  251. package/dist/durable/PersistentHistory.mjs +125 -0
  252. package/dist/durable/PersistentHistory.mjs.map +1 -0
  253. package/dist/durable/PreparedInputAdmission.d.mts +2 -0
  254. package/dist/durable/PreparedInputAdmission.mjs +38 -0
  255. package/dist/durable/PreparedInputAdmission.mjs.map +1 -0
  256. package/dist/durable/Records.d.mts +2 -0
  257. package/dist/durable/Records.mjs +873 -0
  258. package/dist/durable/Records.mjs.map +1 -0
  259. package/dist/durable/Recovery.d.mts +2 -0
  260. package/dist/durable/Recovery.mjs +739 -0
  261. package/dist/durable/Recovery.mjs.map +1 -0
  262. package/dist/durable/RunJournal.d.mts +2 -0
  263. package/dist/durable/RunJournal.mjs +2 -0
  264. package/dist/durable/Schedule.d.mts +2 -0
  265. package/dist/durable/Schedule.mjs +391 -0
  266. package/dist/durable/Schedule.mjs.map +1 -0
  267. package/dist/durable/ScheduleStoreConformance.d.mts +17 -0
  268. package/dist/durable/ScheduleStoreConformance.mjs +420 -0
  269. package/dist/durable/ScheduleStoreConformance.mjs.map +1 -0
  270. package/dist/durable/ScheduleTransition.d.mts +24 -0
  271. package/dist/durable/ScheduleTransition.mjs +180 -0
  272. package/dist/durable/ScheduleTransition.mjs.map +1 -0
  273. package/dist/durable/Scheduling.d.mts +55 -0
  274. package/dist/durable/Scheduling.mjs +2 -0
  275. package/dist/durable/SqlMemoryStore.d.mts +742 -0
  276. package/dist/durable/SqlMemoryStore.mjs +627 -0
  277. package/dist/durable/SqlMemoryStore.mjs.map +1 -0
  278. package/dist/durable/SubmissionLedger.d.mts +3 -0
  279. package/dist/durable/SubmissionLedger.mjs +986 -0
  280. package/dist/durable/SubmissionLedger.mjs.map +1 -0
  281. package/dist/durable/SubmissionLedgerConformance.d.mts +30 -0
  282. package/dist/durable/SubmissionLedgerConformance.mjs +2254 -0
  283. package/dist/durable/SubmissionLedgerConformance.mjs.map +1 -0
  284. package/dist/durable/SubmissionStatus.d.mts +2 -0
  285. package/dist/durable/SubmissionStatus.mjs +18 -0
  286. package/dist/durable/SubmissionStatus.mjs.map +1 -0
  287. package/dist/durable/Subscription.d.mts +2 -0
  288. package/dist/durable/Subscription.mjs +360 -0
  289. package/dist/durable/Subscription.mjs.map +1 -0
  290. package/dist/durable/SubscriptionInput.d.mts +2 -0
  291. package/dist/durable/SubscriptionInput.mjs +52 -0
  292. package/dist/durable/SubscriptionInput.mjs.map +1 -0
  293. package/dist/durable/SubscriptionStoreConformance.d.mts +16 -0
  294. package/dist/durable/SubscriptionStoreConformance.mjs +625 -0
  295. package/dist/durable/SubscriptionStoreConformance.mjs.map +1 -0
  296. package/dist/durable/SubscriptionTools.d.mts +274 -0
  297. package/dist/durable/SubscriptionTools.mjs +190 -0
  298. package/dist/durable/SubscriptionTools.mjs.map +1 -0
  299. package/dist/durable/SubscriptionTransition.d.mts +21 -0
  300. package/dist/durable/SubscriptionTransition.mjs +148 -0
  301. package/dist/durable/SubscriptionTransition.mjs.map +1 -0
  302. package/dist/durable/Subscriptions.d.mts +74 -0
  303. package/dist/durable/Subscriptions.mjs +627 -0
  304. package/dist/durable/Subscriptions.mjs.map +1 -0
  305. package/dist/durable/ThreadContextHistory.d.mts +32 -0
  306. package/dist/durable/ThreadContextHistory.mjs +152 -0
  307. package/dist/durable/ThreadContextHistory.mjs.map +1 -0
  308. package/dist/durable/ThreadContextHistoryProjection.d.mts +60 -0
  309. package/dist/durable/ThreadContextHistoryProjection.mjs +149 -0
  310. package/dist/durable/ThreadContextHistoryProjection.mjs.map +1 -0
  311. package/dist/durable/ThreadInvariants.d.mts +77 -0
  312. package/dist/durable/ThreadInvariants.mjs +246 -0
  313. package/dist/durable/ThreadInvariants.mjs.map +1 -0
  314. package/dist/durable/ThreadProjection.d.mts +78 -0
  315. package/dist/durable/ThreadProjection.mjs +158 -0
  316. package/dist/durable/ThreadProjection.mjs.map +1 -0
  317. package/dist/durable/ThreadProjectionMaintenance.d.mts +49 -0
  318. package/dist/durable/ThreadProjectionMaintenance.mjs +33 -0
  319. package/dist/durable/ThreadProjectionMaintenance.mjs.map +1 -0
  320. package/dist/durable/ThreadStore.d.mts +2 -0
  321. package/dist/durable/ThreadStore.mjs +383 -0
  322. package/dist/durable/ThreadStore.mjs.map +1 -0
  323. package/dist/durable/ThreadStoreConformance.d.mts +28 -0
  324. package/dist/durable/ThreadStoreConformance.mjs +543 -0
  325. package/dist/durable/ThreadStoreConformance.mjs.map +1 -0
  326. package/dist/durable/ToolReconciler.d.mts +2 -0
  327. package/dist/durable/ToolReconciler.mjs +85 -0
  328. package/dist/durable/ToolReconciler.mjs.map +1 -0
  329. package/dist/durable/WakeScheduler.d.mts +2 -0
  330. package/dist/durable/WakeScheduler.mjs +85 -0
  331. package/dist/durable/WakeScheduler.mjs.map +1 -0
  332. package/dist/durable/WorkerAdmission.d.mts +172 -0
  333. package/dist/durable/WorkerAdmission.mjs +2 -0
  334. package/dist/durable/WorkerHost.d.mts +156 -0
  335. package/dist/durable/WorkerHost.mjs +77 -0
  336. package/dist/durable/WorkerHost.mjs.map +1 -0
  337. package/dist/engine/AgentRuntime.d.mts +2 -0
  338. package/dist/engine/AgentRuntime.mjs +2 -0
  339. package/dist/engine/Compaction.d.mts +7 -0
  340. package/dist/engine/Compaction.mjs +16 -0
  341. package/dist/engine/Compaction.mjs.map +1 -0
  342. package/dist/engine/ContextCompactor.d.mts +2 -0
  343. package/dist/engine/ContextCompactor.mjs +119 -0
  344. package/dist/engine/ContextCompactor.mjs.map +1 -0
  345. package/dist/engine/ContextHistory.d.mts +65 -0
  346. package/dist/engine/ContextHistory.mjs +76 -0
  347. package/dist/engine/ContextHistory.mjs.map +1 -0
  348. package/dist/engine/ContextWindow.d.mts +2 -0
  349. package/dist/engine/ContextWindow.mjs +59 -0
  350. package/dist/engine/ContextWindow.mjs.map +1 -0
  351. package/dist/engine/DurableStep.d.mts +2 -0
  352. package/dist/engine/DurableStep.mjs +62 -0
  353. package/dist/engine/DurableStep.mjs.map +1 -0
  354. package/dist/engine/MessagingHost.d.mts +2 -0
  355. package/dist/engine/MessagingHost.mjs +2 -0
  356. package/dist/engine/Output.d.mts +2 -0
  357. package/dist/engine/Output.mjs +8 -0
  358. package/dist/engine/Output.mjs.map +1 -0
  359. package/dist/engine/RunEventSink.d.mts +2 -0
  360. package/dist/engine/RunEventSink.mjs +22 -0
  361. package/dist/engine/RunEventSink.mjs.map +1 -0
  362. package/dist/engine/RunOptions.d.mts +2 -0
  363. package/dist/engine/RunOptions.mjs +125 -0
  364. package/dist/engine/RunOptions.mjs.map +1 -0
  365. package/dist/engine/SubagentHost.d.mts +2 -0
  366. package/dist/engine/SubagentHost.mjs +76 -0
  367. package/dist/engine/SubagentHost.mjs.map +1 -0
  368. package/dist/engine/ThreadHistory.d.mts +2 -0
  369. package/dist/engine/ThreadHistory.mjs +67 -0
  370. package/dist/engine/ThreadHistory.mjs.map +1 -0
  371. package/dist/engine/ToolBroker.d.mts +2 -0
  372. package/dist/engine/ToolBroker.mjs +42 -0
  373. package/dist/engine/ToolBroker.mjs.map +1 -0
  374. package/dist/foreign-diagnostic-DBQ1XHKh.mjs +37 -0
  375. package/dist/foreign-diagnostic-DBQ1XHKh.mjs.map +1 -0
  376. package/dist/index.d.mts +93 -6
  377. package/dist/index.mjs +101 -6
  378. package/dist/output-contract-DS-S8mTv.mjs +135 -0
  379. package/dist/output-contract-DS-S8mTv.mjs.map +1 -0
  380. package/dist/rolldown-runtime-D7D4PA-g.mjs +13 -0
  381. package/dist/sandbox/CodeExecutor.d.mts +194 -0
  382. package/dist/sandbox/CodeExecutor.mjs +278 -0
  383. package/dist/sandbox/CodeExecutor.mjs.map +1 -0
  384. package/dist/sandbox/InteractiveBrowser.d.mts +257 -0
  385. package/dist/sandbox/InteractiveBrowser.mjs +236 -0
  386. package/dist/sandbox/InteractiveBrowser.mjs.map +1 -0
  387. package/dist/sandbox/PageCapture.d.mts +2 -0
  388. package/dist/sandbox/PageCapture.mjs +450 -0
  389. package/dist/sandbox/PageCapture.mjs.map +1 -0
  390. package/dist/sandbox/PageCrawl.d.mts +88 -0
  391. package/dist/sandbox/PageCrawl.mjs +124 -0
  392. package/dist/sandbox/PageCrawl.mjs.map +1 -0
  393. package/dist/sandbox/PageScreenshot.d.mts +48 -0
  394. package/dist/sandbox/PageScreenshot.mjs +53 -0
  395. package/dist/sandbox/PageScreenshot.mjs.map +1 -0
  396. package/dist/sandbox/Sandbox.d.mts +2 -0
  397. package/dist/sandbox/Sandbox.mjs +208 -0
  398. package/dist/sandbox/Sandbox.mjs.map +1 -0
  399. package/dist/utf8-BYfhEkcj.mjs +11 -0
  400. package/dist/utf8-BYfhEkcj.mjs.map +1 -0
  401. package/dist/utf8-DchGZRBd.mjs +23 -0
  402. package/dist/utf8-DchGZRBd.mjs.map +1 -0
  403. package/package.json +1 -40
  404. package/src/InMemory.ts +19 -0
  405. package/src/ToolExposure.ts +2 -0
  406. package/src/capabilities/Approval.ts +352 -0
  407. package/src/capabilities/BrowserUse.ts +367 -0
  408. package/src/capabilities/Budget.ts +536 -0
  409. package/src/capabilities/CodeMode.ts +1099 -0
  410. package/src/capabilities/Commands.ts +86 -0
  411. package/src/capabilities/ContextTools.ts +129 -0
  412. package/src/capabilities/Mcp.ts +426 -0
  413. package/src/capabilities/McpClient.ts +983 -0
  414. package/src/capabilities/MemoryNotes.ts +174 -0
  415. package/src/capabilities/Messaging.ts +261 -0
  416. package/src/capabilities/ModelContext.ts +354 -0
  417. package/src/capabilities/Redaction.ts +157 -0
  418. package/src/capabilities/Remembering.ts +550 -0
  419. package/src/capabilities/RunHooks.ts +280 -0
  420. package/src/capabilities/SemanticMemory.ts +447 -0
  421. package/src/capabilities/Subagent.ts +2486 -0
  422. package/src/capabilities/SubagentReservations.ts +850 -0
  423. package/src/capabilities/ToolDiscovery.ts +383 -0
  424. package/src/capabilities/WebCapture.ts +722 -0
  425. package/src/capabilities/WebSearch.ts +205 -0
  426. package/src/capabilities/internal/subagent-background.ts +1307 -0
  427. package/src/capabilities/internal/subagent-contract.ts +146 -0
  428. package/src/capabilities/internal/subagent-policy.ts +235 -0
  429. package/src/capabilities/internal/subagent-reporting.ts +136 -0
  430. package/src/capabilities/internal/utf8.ts +10 -0
  431. package/src/core/Agent.ts +623 -0
  432. package/src/core/AgentError.ts +172 -0
  433. package/src/core/AgentPolicy.ts +161 -0
  434. package/src/core/AgentUpdates.ts +100 -0
  435. package/src/core/FailureDiagnostic.ts +343 -0
  436. package/src/core/IdGenerator.ts +39 -0
  437. package/src/core/Identifiers.ts +48 -0
  438. package/src/core/Memory.ts +290 -0
  439. package/src/core/MemoryNamespace.ts +196 -0
  440. package/src/core/MemoryReference.ts +121 -0
  441. package/src/core/MemoryRevalidation.ts +185 -0
  442. package/src/core/MemoryStore.ts +368 -0
  443. package/src/core/Messaging.ts +72 -0
  444. package/src/core/Receipt.ts +42 -0
  445. package/src/core/RememberingStore.ts +300 -0
  446. package/src/core/RunEvent.ts +375 -0
  447. package/src/core/RunPolicyUsage.ts +19 -0
  448. package/src/core/SemanticMemoryIndex.ts +250 -0
  449. package/src/core/SemanticMemoryRevalidation.ts +254 -0
  450. package/src/core/SubagentContract.ts +189 -0
  451. package/src/core/Thread.ts +371 -0
  452. package/src/core/ToolExposure.ts +74 -0
  453. package/src/core/ToolResult.ts +190 -0
  454. package/src/core/Usage.ts +570 -0
  455. package/src/core/Worker.ts +240 -0
  456. package/src/core/internal/agent-updates.ts +34 -0
  457. package/src/core/internal/message-status.ts +60 -0
  458. package/src/core/internal/strict-schema.ts +14 -0
  459. package/src/core/internal/utf8.ts +23 -0
  460. package/src/durable/ActivityStore.ts +160 -0
  461. package/src/durable/Admin.ts +505 -0
  462. package/src/durable/AgentRegistration.ts +16 -0
  463. package/src/durable/Certification.ts +210 -0
  464. package/src/durable/CommittedActivity.ts +296 -0
  465. package/src/durable/Digest.ts +87 -0
  466. package/src/durable/DurableAgentRuntime.ts +11867 -0
  467. package/src/durable/DurableFailpoint.ts +111 -0
  468. package/src/durable/DurableFailpointTestControl.ts +39 -0
  469. package/src/durable/EventSource.ts +172 -0
  470. package/src/durable/GitHubWorkflowSource.ts +447 -0
  471. package/src/durable/LifecyclePublication.ts +311 -0
  472. package/src/durable/MessageDelivery.ts +878 -0
  473. package/src/durable/MessageDeliveryStoreConformance.ts +410 -0
  474. package/src/durable/OperationAuthorizer.ts +85 -0
  475. package/src/durable/PersistentHistory.ts +260 -0
  476. package/src/durable/PreparedInputAdmission.ts +57 -0
  477. package/src/durable/Records.ts +1099 -0
  478. package/src/durable/Recovery.ts +1018 -0
  479. package/src/durable/RunJournal.ts +1768 -0
  480. package/src/durable/Schedule.ts +513 -0
  481. package/src/durable/ScheduleStoreConformance.ts +638 -0
  482. package/src/durable/ScheduleTransition.ts +265 -0
  483. package/src/durable/Scheduling.ts +1077 -0
  484. package/src/durable/SqlMemoryStore.ts +1056 -0
  485. package/src/durable/SubmissionLedger.ts +1297 -0
  486. package/src/durable/SubmissionLedgerConformance.ts +4940 -0
  487. package/src/durable/SubmissionStatus.ts +14 -0
  488. package/src/durable/Subscription.ts +544 -0
  489. package/src/durable/SubscriptionInput.ts +144 -0
  490. package/src/durable/SubscriptionStoreConformance.ts +945 -0
  491. package/src/durable/SubscriptionTools.ts +327 -0
  492. package/src/durable/SubscriptionTransition.ts +302 -0
  493. package/src/durable/Subscriptions.ts +1210 -0
  494. package/src/durable/ThreadContextHistory.ts +227 -0
  495. package/src/durable/ThreadContextHistoryProjection.ts +216 -0
  496. package/src/durable/ThreadInvariants.ts +507 -0
  497. package/src/durable/ThreadProjection.ts +269 -0
  498. package/src/durable/ThreadProjectionMaintenance.ts +67 -0
  499. package/src/durable/ThreadStore.ts +637 -0
  500. package/src/durable/ThreadStoreConformance.ts +1296 -0
  501. package/src/durable/ToolReconciler.ts +109 -0
  502. package/src/durable/WakeScheduler.ts +134 -0
  503. package/src/durable/WorkerAdmission.ts +104 -0
  504. package/src/durable/WorkerHost.ts +205 -0
  505. package/src/durable/internal/agent-registration.ts +621 -0
  506. package/src/durable/internal/agent-updates.ts +306 -0
  507. package/src/durable/internal/foreign-diagnostic.ts +47 -0
  508. package/src/durable/internal/journal-checkpoint.ts +159 -0
  509. package/src/durable/internal/journal-metadata.ts +124 -0
  510. package/src/durable/internal/message-status.ts +20 -0
  511. package/src/durable/internal/messaging-host.ts +637 -0
  512. package/src/durable/internal/schedule-time.ts +303 -0
  513. package/src/durable/internal/thread-initialization.ts +195 -0
  514. package/src/durable/internal/worker-host.ts +3309 -0
  515. package/src/durable/internal/worker-runtime.ts +9 -0
  516. package/src/engine/AgentRuntime.ts +37 -0
  517. package/src/engine/Compaction.ts +11 -0
  518. package/src/engine/ContextCompactor.ts +277 -0
  519. package/src/engine/ContextHistory.ts +73 -0
  520. package/src/engine/ContextWindow.ts +72 -0
  521. package/src/engine/DurableStep.ts +132 -0
  522. package/src/engine/MessagingHost.ts +110 -0
  523. package/src/engine/Output.ts +2 -0
  524. package/src/engine/RunEventSink.ts +132 -0
  525. package/src/engine/RunOptions.ts +1127 -0
  526. package/src/engine/SubagentHost.ts +239 -0
  527. package/src/engine/ThreadHistory.ts +120 -0
  528. package/src/engine/ToolBroker.ts +157 -0
  529. package/src/engine/ToolExposure.ts +48 -0
  530. package/src/engine/internal/agent-runtime.ts +10845 -0
  531. package/src/engine/internal/bounded-value.ts +315 -0
  532. package/src/engine/internal/compaction.ts +678 -0
  533. package/src/engine/internal/error-diagnostic.ts +39 -0
  534. package/src/engine/internal/output-contract.ts +250 -0
  535. package/src/engine/internal/primitive-delta.ts +80 -0
  536. package/src/engine/internal/provider-result-staging.ts +211 -0
  537. package/src/engine/internal/tool-derivative.ts +106 -0
  538. package/src/engine/internal/tool-exposure.ts +224 -0
  539. package/src/engine/internal/tool-telemetry.ts +484 -0
  540. package/src/index.ts +100 -22
  541. package/src/sandbox/CodeExecutor.ts +352 -0
  542. package/src/sandbox/InteractiveBrowser.ts +339 -0
  543. package/src/sandbox/PageCapture.ts +691 -0
  544. package/src/sandbox/PageCrawl.ts +148 -0
  545. package/src/sandbox/PageScreenshot.ts +81 -0
  546. package/src/sandbox/Sandbox.ts +241 -0
@@ -0,0 +1,306 @@
1
+ import { Clock, Crypto, DateTime, Effect, Option, Schema } from "effect";
2
+
3
+ import { Update, UpdateError } from "../../core/AgentUpdates.ts";
4
+ import type { RunId, ThreadId } from "../../core/Identifiers.ts";
5
+ import { utf8ByteLength } from "../../core/internal/utf8.ts";
6
+ import { IdempotencyKey } from "../../core/Receipt.ts";
7
+ import { digestJson } from "../Digest.ts";
8
+ import { DurableRuntimeFailpoint } from "../DurableFailpoint.ts";
9
+ import {
10
+ MessageDeliveryStore,
11
+ MessageDeliveryRecord,
12
+ messageDeliveryCapacity,
13
+ messageDeliveryUsesCapacity,
14
+ prepareMessageDelivery,
15
+ } from "../MessageDelivery.ts";
16
+ import {
17
+ AgentUpdateEmitted,
18
+ BatchId,
19
+ CanonicalBatch,
20
+ type CanonicalRecordEnvelope,
21
+ DefinitionDigests,
22
+ type DeploymentId,
23
+ PersistedJson,
24
+ type ProducerEpoch,
25
+ type ProducerId,
26
+ RecordEnvelope,
27
+ RecordId,
28
+ } from "../Records.ts";
29
+ import { LedgerError, type SubmissionSnapshot } from "../SubmissionLedger.ts";
30
+ import { PreparedInput } from "../Subscription.ts";
31
+ import {
32
+ FencedAppendRequest,
33
+ ThreadExportRequest,
34
+ ThreadStore,
35
+ ThreadTailRequest,
36
+ } from "../ThreadStore.ts";
37
+ import { WakeScheduler } from "../WakeScheduler.ts";
38
+ import { WorkerRuntime } from "./worker-runtime.ts";
39
+
40
+ export const lastWorkerReportMessageId = (records: ReadonlyArray<CanonicalRecordEnvelope>) => {
41
+ for (let index = records.length - 1; index >= 0; index--) {
42
+ const payload = records[index]?.record.payload;
43
+
44
+ if (payload?._tag === "WorkerReportPrepared") return payload.messageId;
45
+ if (payload?._tag === "AgentUpdateEmitted" && payload.delivery !== undefined)
46
+ return payload.delivery.messageId;
47
+ }
48
+
49
+ return undefined;
50
+ };
51
+
52
+ type Delivery = NonNullable<AgentUpdateEmitted["delivery"]>;
53
+
54
+ const storage = () =>
55
+ LedgerError.make({ operation: "agent-update", message: "Durable update persistence failed" });
56
+
57
+ const rejected = (reason: UpdateError["reason"]) => UpdateError.make({ reason });
58
+
59
+ /** Acceptance is fenced by the actual emitting Attempt; recovery only recreates frozen outbox rows. */
60
+ export const makeAgentUpdateRuntime = Effect.fn("AgentUpdates.makeDurable")(function* (options: {
61
+ readonly deploymentId: DeploymentId;
62
+ readonly producerId: ProducerId;
63
+ }) {
64
+ const store = yield* ThreadStore;
65
+ const workers = yield* WorkerRuntime;
66
+ const wake = yield* WakeScheduler;
67
+ const deliveries = yield* Effect.serviceOption(MessageDeliveryStore);
68
+ const crypto = yield* Crypto.Crypto;
69
+ const failpoint = yield* DurableRuntimeFailpoint;
70
+
71
+ const read = (threadId: ThreadId) =>
72
+ store.export(ThreadExportRequest.make({ threadId })).pipe(Effect.mapError(storage));
73
+
74
+ const prepareDelivery = Effect.fn("AgentUpdates.prepareDelivery")(function* (
75
+ update: Update,
76
+ delivery: Delivery,
77
+ ) {
78
+ const envelope = yield* Schema.decodeUnknownEffect(PreparedInput)(delivery.envelope).pipe(
79
+ Effect.mapError(storage),
80
+ );
81
+
82
+ return yield* prepareMessageDelivery({
83
+ key: { ownerThreadId: update.threadId, messageId: delivery.messageId },
84
+ envelope,
85
+ createdAtMillis: delivery.createdAtMillis,
86
+ deadlineAtMillis: delivery.deadlineAtMillis,
87
+ ...(delivery.predecessor === undefined ? {} : { predecessor: delivery.predecessor }),
88
+ }).pipe(Effect.provideService(Crypto.Crypto, crypto), Effect.mapError(storage));
89
+ });
90
+
91
+ const insert = Effect.fn("AgentUpdates.restoreDelivery")(function* (record: AgentUpdateEmitted) {
92
+ const delivery = record.delivery;
93
+
94
+ if (delivery === undefined) return;
95
+ if (Option.isNone(deliveries)) return yield* storage();
96
+ const prepared = yield* prepareDelivery(record.update, delivery);
97
+
98
+ yield* failpoint.hit("update:before-delivery-insert");
99
+ yield* deliveries.value.insert(prepared).pipe(Effect.mapError(storage));
100
+ yield* failpoint.hit("update:after-delivery-insert");
101
+ });
102
+
103
+ const repair = Effect.fn("AgentUpdates.repair")(function* (threadId: ThreadId) {
104
+ const history = yield* read(threadId);
105
+
106
+ for (const { record } of history.records) {
107
+ if (record.payload._tag === "AgentUpdateEmitted" && record.payload.delivery !== undefined)
108
+ yield* insert(record.payload);
109
+ }
110
+ });
111
+
112
+ const emit = Effect.fn("AgentUpdates.accept")(function* (request: {
113
+ readonly submission: SubmissionSnapshot;
114
+ readonly runId: RunId;
115
+ readonly producerEpoch: ProducerEpoch;
116
+ readonly definitions: DefinitionDigests;
117
+ readonly updateId: IdempotencyKey;
118
+ readonly value: Schema.Json;
119
+ readonly maxCount?: number;
120
+ readonly maxBytes?: number;
121
+ }) {
122
+ const value = yield* Schema.encodeEffect(Schema.fromJsonString(PersistedJson))(
123
+ request.value,
124
+ ).pipe(
125
+ Effect.flatMap(Schema.decodeEffect(Schema.fromJsonString(PersistedJson))),
126
+ Effect.mapError(() => rejected("validation")),
127
+ );
128
+
129
+ const updateId = yield* Schema.decodeEffect(IdempotencyKey)(request.updateId).pipe(
130
+ Effect.mapError(() => rejected("validation")),
131
+ );
132
+
133
+ const digest = yield* digestJson([request.submission.threadId, request.runId, updateId]).pipe(
134
+ Effect.provideService(Crypto.Crypto, crypto),
135
+ Effect.mapError(storage),
136
+ );
137
+
138
+ const id = `agent-update:${digest}`;
139
+ const messageId = Schema.decodeSync(IdempotencyKey)(`worker-update:${digest}`);
140
+ const maxCount = request.maxCount ?? 32;
141
+ const maxBytes = request.maxBytes ?? 16_384;
142
+
143
+ if (
144
+ !Number.isSafeInteger(maxCount) ||
145
+ maxCount < 1 ||
146
+ !Number.isSafeInteger(maxBytes) ||
147
+ maxBytes < 1
148
+ )
149
+ return yield* rejected("validation");
150
+
151
+ for (let attempt = 0; attempt < 32; attempt++) {
152
+ const history = yield* read(request.submission.threadId);
153
+
154
+ const updates = history.records.flatMap(({ record }) =>
155
+ record.payload._tag === "AgentUpdateEmitted" ? [record.payload] : [],
156
+ );
157
+
158
+ const existing = updates.find(
159
+ (entry) => entry.update.runId === request.runId && entry.update.updateId === updateId,
160
+ );
161
+
162
+ if (existing !== undefined) {
163
+ if (
164
+ existing.update.agentId !== request.submission.agentId ||
165
+ !Schema.toEquivalence(PersistedJson)(existing.update.value, value) ||
166
+ !Schema.toEquivalence(DefinitionDigests)(existing.definitions, request.definitions)
167
+ )
168
+ return yield* rejected("conflict");
169
+ yield* insert(existing);
170
+
171
+ return existing.update;
172
+ }
173
+ const own = updates.filter((entry) => entry.update.runId === request.runId);
174
+
175
+ if (
176
+ own.length >= maxCount ||
177
+ own.reduce(
178
+ (total, entry) => total + utf8ByteLength(JSON.stringify(entry.update.value)),
179
+ 0,
180
+ ) +
181
+ utf8ByteLength(JSON.stringify(value)) >
182
+ maxBytes
183
+ )
184
+ return yield* rejected("capacity");
185
+ if (
186
+ history.records.some(
187
+ ({ record }) =>
188
+ record.payload._tag === "SubmissionSettled" && record.payload.runId === request.runId,
189
+ ) ||
190
+ !history.records.some(
191
+ ({ record }) =>
192
+ record.payload._tag === "RunStarted" && record.payload.runId === request.runId,
193
+ )
194
+ )
195
+ return yield* rejected("identity");
196
+
197
+ const update = Update.make({
198
+ schemaVersion: 1,
199
+ agentId: request.submission.agentId,
200
+ threadId: request.submission.threadId,
201
+ runId: request.runId,
202
+ updateId,
203
+ sequence: (updates.at(-1)?.update.sequence ?? 0) + 1,
204
+ value,
205
+ });
206
+
207
+ const prepared = yield* workers.prepareUpdate(update, request.submission, messageId);
208
+ let delivery: Delivery | undefined;
209
+
210
+ if (prepared !== undefined) {
211
+ if (Option.isNone(deliveries)) return yield* rejected("unavailable");
212
+ const retained = updates.filter((entry) => entry.delivery !== undefined);
213
+ const capacity = messageDeliveryCapacity(deliveries.value.limits, true);
214
+
215
+ if (
216
+ retained.length >= capacity.retained ||
217
+ utf8ByteLength(JSON.stringify(prepared.envelope)) >
218
+ deliveries.value.limits.maxEnvelopeBytes
219
+ )
220
+ return yield* rejected("capacity");
221
+ let pending = 0;
222
+
223
+ for (const accepted of retained) {
224
+ if (accepted.delivery === undefined) continue;
225
+
226
+ const row = yield* deliveries.value
227
+ .get({
228
+ ownerThreadId: request.submission.threadId,
229
+ messageId: accepted.delivery.messageId,
230
+ })
231
+ .pipe(Effect.mapError(storage));
232
+
233
+ if (row === null || messageDeliveryUsesCapacity(row)) pending++;
234
+ }
235
+ if (pending >= capacity.pending) return yield* rejected("capacity");
236
+ const predecessor = lastWorkerReportMessageId(history.records);
237
+
238
+ delivery = { ...prepared, ...(predecessor === undefined ? {} : { predecessor }) };
239
+ const deliveryRecord = yield* prepareDelivery(update, delivery);
240
+
241
+ const stored = yield* Schema.encodeEffect(Schema.fromJsonString(MessageDeliveryRecord))(
242
+ deliveryRecord,
243
+ ).pipe(Effect.mapError(storage));
244
+
245
+ if (utf8ByteLength(stored) > deliveries.value.maxStoredValueBytes)
246
+ return yield* rejected("capacity");
247
+ }
248
+
249
+ const payload = AgentUpdateEmitted.make({
250
+ update,
251
+ definitions: request.definitions,
252
+ ...(delivery === undefined ? {} : { delivery }),
253
+ });
254
+
255
+ const tail = yield* store
256
+ .inspectTail(ThreadTailRequest.make({ threadId: request.submission.threadId }))
257
+ .pipe(Effect.mapError(storage));
258
+
259
+ if (tail.producerEpoch !== request.producerEpoch) return yield* storage();
260
+ if (tail.tailSequence !== history.tailSequence || tail.tailDigest !== history.tailDigest)
261
+ continue;
262
+ yield* failpoint.hit("update:before-canonical-append");
263
+
264
+ const appended = yield* store
265
+ .append(
266
+ FencedAppendRequest.make({
267
+ threadId: request.submission.threadId,
268
+ producerEpoch: request.producerEpoch,
269
+ expectedTailSequence: history.tailSequence,
270
+ expectedTailDigest: history.tailDigest,
271
+ batch: CanonicalBatch.make({
272
+ batchId: Schema.decodeSync(BatchId)(id),
273
+ producerId: options.producerId,
274
+ records: [
275
+ RecordEnvelope.make({
276
+ recordId: Schema.decodeSync(RecordId)(id),
277
+ family: "thread",
278
+ schemaVersion: 1,
279
+ createdAt: DateTime.makeUnsafe(yield* Clock.currentTimeMillis),
280
+ deploymentId: options.deploymentId,
281
+ payload,
282
+ }),
283
+ ],
284
+ }),
285
+ }),
286
+ )
287
+ .pipe(
288
+ Effect.as(true),
289
+ Effect.catchTag("AppendConflict", () => Effect.succeed(false)),
290
+ Effect.mapError(storage),
291
+ );
292
+
293
+ if (!appended) continue;
294
+ yield* failpoint.hit("update:after-canonical-append");
295
+ // Canonical progress is observable even when no parent report is selected.
296
+ yield* wake.notify(request.submission.threadId);
297
+ yield* insert(payload);
298
+
299
+ return update;
300
+ }
301
+
302
+ return yield* storage();
303
+ });
304
+
305
+ return { emit, repair };
306
+ });
@@ -0,0 +1,47 @@
1
+ import { Option, Schema } from "effect";
2
+
3
+ const ErrorMessage = Schema.Struct({ message: Schema.String });
4
+ const ErrorTag = Schema.Struct({ _tag: Schema.NonEmptyString });
5
+ const decodeErrorMessage = Schema.decodeUnknownOption(ErrorMessage);
6
+ const decodeErrorTag = Schema.decodeUnknownOption(ErrorTag);
7
+
8
+ interface ForeignDiagnostic {
9
+ readonly tag?: string | undefined;
10
+ readonly message?: string | undefined;
11
+ }
12
+
13
+ /**
14
+ * Inspect a foreign failure without trusting its property accessors. Schema owns the accepted
15
+ * fields, while the guards around each decode keep hostile proxies and getters from escaping as
16
+ * defects during diagnostic projection.
17
+ */
18
+ export const inspectForeignDiagnostic = (value: unknown): ForeignDiagnostic => {
19
+ let tag: string | undefined;
20
+ let message: string | undefined;
21
+
22
+ try {
23
+ tag = Option.getOrUndefined(decodeErrorTag(value))?._tag;
24
+ } catch {
25
+ // A diagnostic is best effort. The caller supplies the stable fallback classification.
26
+ }
27
+
28
+ try {
29
+ message = Option.getOrUndefined(decodeErrorMessage(value))?.message;
30
+ } catch {
31
+ // A hostile message accessor must not replace the original failure with a defect.
32
+ }
33
+
34
+ return {
35
+ ...(tag === undefined ? {} : { tag }),
36
+ ...(message === undefined ? {} : { message }),
37
+ };
38
+ };
39
+
40
+ /** Render an opaque foreign value without allowing its coercion hooks to escape. */
41
+ export const safeUnknownString = (value: unknown, fallback: string): string => {
42
+ try {
43
+ return String(value);
44
+ } catch {
45
+ return fallback;
46
+ }
47
+ };
@@ -0,0 +1,159 @@
1
+ import { Option, Schema } from "effect";
2
+ import { Prompt } from "effect/unstable/ai";
3
+
4
+ import { RunId, SubmissionId } from "../../core/Identifiers.ts";
5
+ import { RunPolicyUsage } from "../../core/RunPolicyUsage.ts";
6
+ import { Selection } from "../../core/ToolExposure.ts";
7
+ import { RunUsageSummary } from "../../core/Usage.ts";
8
+ import { CanonicalRecordEnvelope, CanonicalSequence, Digest, PersistedJson } from "../Records.ts";
9
+
10
+ /** Retired accounting is additive; the latest Tool batch always remains replayable verbatim. */
11
+ export class JournalCheckpointSeed extends Schema.Class<JournalCheckpointSeed>(
12
+ "@effect-agent/thread/internal/JournalCheckpointSeed",
13
+ )({
14
+ runId: RunId,
15
+ throughSequence: CanonicalSequence,
16
+ firstSequence: Schema.optionalKey(CanonicalSequence),
17
+ toolSelection: Schema.optionalKey(Selection),
18
+ committedTurns: Schema.Natural,
19
+ policyUsage: RunPolicyUsage,
20
+ modelCalls: Schema.Natural,
21
+ unobservedModelCalls: Schema.Natural,
22
+ inputTokens: Schema.Natural,
23
+ outputTokens: Schema.Natural,
24
+ lastInputTokens: Schema.Natural,
25
+ lastOutputTokens: Schema.Natural,
26
+ costMicrousd: Schema.Natural,
27
+ summarizedModelUsage: RunUsageSummary,
28
+ protectedContext: Schema.optionalKey(PersistedJson),
29
+ contextWindowId: Schema.optionalKey(Schema.String),
30
+ frontier: Schema.optionalKey(
31
+ Schema.Struct({
32
+ sequence: CanonicalSequence,
33
+ tag: Schema.Literals(["ModelResponseRecorded", "ToolCallSettled"]),
34
+ }),
35
+ ),
36
+ /** Canonical replacement whose covered batches were validated before retirement. */
37
+ compaction: CanonicalRecordEnvelope,
38
+ }) {}
39
+
40
+ /** Canonical historical context for a later Run, without the previous Run's authority or usage. */
41
+ export class ThreadContextCheckpoint extends Schema.Class<ThreadContextCheckpoint>(
42
+ "@effect-agent/thread/internal/ThreadContextCheckpoint",
43
+ )({
44
+ throughSequence: CanonicalSequence,
45
+ prompt: PersistedJson,
46
+ contextWindowId: Schema.optionalKey(Schema.String),
47
+ }) {}
48
+
49
+ /** A bounded sparse projection, never a canonical log or a submission-ownership record. */
50
+ export class RecoveryCheckpointState extends Schema.Class<RecoveryCheckpointState>(
51
+ "@effect-agent/thread/internal/RecoveryCheckpointState",
52
+ )({
53
+ schemaVersion: Schema.Literal(2),
54
+ policyAccountingVersion: Schema.Literal(1),
55
+ submissionId: SubmissionId,
56
+ submissionIds: Schema.Array(SubmissionId).check(Schema.isMaxLength(4_096)),
57
+ seed: Schema.optionalKey(JournalCheckpointSeed),
58
+ context: Schema.optionalKey(ThreadContextCheckpoint),
59
+ records: Schema.Array(CanonicalRecordEnvelope).check(Schema.isMaxLength(4_096)),
60
+ }) {}
61
+
62
+ export class RecoveryCheckpointContents extends Schema.Class<RecoveryCheckpointContents>(
63
+ "@effect-agent/thread/internal/RecoveryCheckpointContents",
64
+ )({
65
+ state: RecoveryCheckpointState,
66
+ digest: Digest,
67
+ }) {}
68
+
69
+ export const RECOVERY_ENGINE_VERSION = "effect-agent/recovery@4";
70
+
71
+ /**
72
+ * Prove that indexed original-input absence also means absent prefix Run/control evidence.
73
+ * A certificate covers only Run IDs with the given length. Every possible control marker for
74
+ * those IDs is exactly :<run-id>:, including markers nested inside opaque IDs. Cache consumers
75
+ * must have the checkpoint owner's ID length; shorter/longer aliases require full replay.
76
+ * Parsing here can only decline caching; it never supplies an execution identity.
77
+ * The temporary anchor set is discarded after certification, not persisted with the context.
78
+ */
79
+ export const makeThreadContextCertificate = (runIdLength: number) => {
80
+ const anchored = new Set<string>();
81
+ let valid = true;
82
+
83
+ return {
84
+ add: ({ record }: CanonicalRecordEnvelope): void => {
85
+ if (!valid) return;
86
+ const payload = record.payload;
87
+
88
+ if ("runId" in payload && payload.runId !== undefined) {
89
+ const originalInput = payload._tag === "UserInputRecorded" && payload.kind === "user";
90
+
91
+ if (originalInput ? anchored.has(payload.runId) : !anchored.has(payload.runId)) {
92
+ valid = false;
93
+
94
+ return;
95
+ }
96
+ if (originalInput) anchored.add(payload.runId);
97
+ }
98
+ for (
99
+ let start = record.recordId.indexOf(":run:");
100
+ start !== -1;
101
+ start = record.recordId.indexOf(":run:", start + 1)
102
+ ) {
103
+ const end = start + 1 + runIdLength;
104
+
105
+ if (record.recordId[end] === ":" && !anchored.has(record.recordId.slice(start + 1, end))) {
106
+ valid = false;
107
+
108
+ return;
109
+ }
110
+ }
111
+ },
112
+ isValid: (): boolean => valid,
113
+ };
114
+ };
115
+
116
+ /**
117
+ * Late evidence can invalidate an old compaction. Such histories use full canonical replay;
118
+ * an omitted run/turn must never be treated as proven absent by a sparse projection.
119
+ */
120
+ export const checkpointSuffixCompatible = (
121
+ seed: JournalCheckpointSeed,
122
+ records: ReadonlyArray<CanonicalRecordEnvelope>,
123
+ retained: ReadonlyArray<CanonicalRecordEnvelope>,
124
+ ): boolean =>
125
+ records.every(({ sequence, record: { payload } }) => {
126
+ if ("runId" in payload && payload.runId !== undefined && payload.runId !== seed.runId)
127
+ return false;
128
+ if ("turn" in payload && payload.turn <= seed.committedTurns) return false;
129
+ if (payload._tag === "ToolCallSettled" || payload._tag === "ToolCallResolved") {
130
+ // These records have no turn. The retained declaration/preparation proves their scope.
131
+ return [...retained, ...records].some(
132
+ ({ sequence: declarationSequence, record: { payload: candidate } }) => {
133
+ if (
134
+ candidate._tag !== "ModelResponseRecorded" ||
135
+ candidate.runId !== payload.runId ||
136
+ candidate.turn <= seed.committedTurns ||
137
+ seed.compaction.record.payload._tag !== "CompactionCreated" ||
138
+ declarationSequence <= seed.compaction.record.payload.coversThrough ||
139
+ declarationSequence >= sequence
140
+ )
141
+ return false;
142
+ const decoded = Schema.decodeUnknownOption(Prompt.Prompt)(candidate.messages);
143
+
144
+ return (
145
+ Option.isSome(decoded) &&
146
+ decoded.value.content.some(
147
+ (message) =>
148
+ message.role === "assistant" &&
149
+ message.content.some(
150
+ (part) => part.type === "tool-call" && part.id === payload.toolCallId,
151
+ ),
152
+ )
153
+ );
154
+ },
155
+ );
156
+ }
157
+
158
+ return payload._tag !== "CompactionCreated" || payload.coversThrough >= seed.throughSequence;
159
+ });
@@ -0,0 +1,124 @@
1
+ import { type RunId } from "../../core/Identifiers.ts";
2
+ import {
3
+ type CanonicalRecordEnvelope,
4
+ type CompactionCreated,
5
+ type ToolCallPrepared,
6
+ type ToolCallSettled,
7
+ } from "../Records.ts";
8
+ import { type JournalCheckpointSeed } from "./journal-checkpoint.ts";
9
+
10
+ /** Metadata for one exact canonical prefix, including the same optional checkpoint seed. */
11
+ export interface JournalMetadata {
12
+ readonly ownerRunId: RunId | undefined;
13
+ readonly seed: JournalCheckpointSeed | undefined;
14
+ readonly firstSequenceByRun: ReadonlyMap<string, number>;
15
+ readonly lastResponseSequenceByRun: ReadonlyMap<string, number>;
16
+ readonly terminalSequenceByRun: ReadonlyMap<string, number>;
17
+ readonly settledSpans: ReadonlyArray<{
18
+ readonly from: number;
19
+ readonly to: number;
20
+ readonly runId: RunId;
21
+ }>;
22
+ readonly toolExecutionEvidence: ReadonlySet<string>;
23
+ readonly settledToolCallRecordIds: ReadonlySet<string>;
24
+ readonly settledById: ReadonlyMap<
25
+ string,
26
+ Pick<ToolCallSettled, "isFailure" | "budgetRejected" | "toolSelection">
27
+ >;
28
+ readonly compactions: ReadonlyArray<{
29
+ readonly payload: CompactionCreated;
30
+ readonly sequence: number;
31
+ }>;
32
+ }
33
+
34
+ export const toolExecutionKey = (
35
+ call: Pick<ToolCallPrepared, "runId" | "turn" | "toolCallId">,
36
+ ): string => JSON.stringify([call.runId, call.turn, call.toolCallId]);
37
+
38
+ /**
39
+ * Attempt-local metadata collector. Feed every validated record exactly once, in canonical order,
40
+ * including records omitted from the control view. A snapshot is independent of later suffix
41
+ * additions and may only accompany a replay stream bounded at that same captured tail.
42
+ */
43
+ export const makeJournalMetadata = (
44
+ ownerRunId: RunId | undefined,
45
+ seed?: JournalCheckpointSeed,
46
+ ) => {
47
+ const firstSequenceByRun = new Map<string, number>();
48
+
49
+ if (seed?.firstSequence !== undefined) firstSequenceByRun.set(seed.runId, seed.firstSequence);
50
+ const lastResponseSequenceByRun = new Map<string, number>();
51
+ const terminalSequenceByRun = new Map<string, number>();
52
+
53
+ const settledSpans: Array<{ readonly from: number; readonly to: number; readonly runId: RunId }> =
54
+ [];
55
+
56
+ const toolExecutionEvidence = new Set<string>();
57
+ const settledToolCallRecordIds = new Set<string>();
58
+
59
+ const settledById = new Map<
60
+ string,
61
+ Pick<ToolCallSettled, "isFailure" | "budgetRejected" | "toolSelection">
62
+ >();
63
+
64
+ const compactions: Array<{ readonly payload: CompactionCreated; readonly sequence: number }> = [];
65
+
66
+ return {
67
+ add: (envelope: CanonicalRecordEnvelope): void => {
68
+ const payload = envelope.record.payload;
69
+
70
+ if (
71
+ (payload._tag === "RunCompleted" ||
72
+ payload._tag === "RunFailed" ||
73
+ payload._tag === "SubmissionSettled") &&
74
+ payload.runId !== undefined &&
75
+ !terminalSequenceByRun.has(payload.runId)
76
+ )
77
+ terminalSequenceByRun.set(payload.runId, envelope.sequence);
78
+ if (payload._tag === "CompactionCreated") {
79
+ compactions.push({ payload, sequence: envelope.sequence });
80
+
81
+ return;
82
+ }
83
+ if (
84
+ "runId" in payload &&
85
+ typeof payload.runId === "string" &&
86
+ !firstSequenceByRun.has(payload.runId)
87
+ )
88
+ firstSequenceByRun.set(payload.runId, envelope.sequence);
89
+ if (payload._tag === "ModelResponseRecorded") {
90
+ lastResponseSequenceByRun.set(payload.runId, envelope.sequence);
91
+ } else if (payload._tag === "ToolCallPrepared" || payload._tag === "ToolCallUnknown") {
92
+ toolExecutionEvidence.add(toolExecutionKey(payload));
93
+ } else if (payload._tag === "ToolCallSettled") {
94
+ settledToolCallRecordIds.add(envelope.record.recordId);
95
+ if (payload.runId === ownerRunId)
96
+ settledById.set(envelope.record.recordId, {
97
+ isFailure: payload.isFailure,
98
+ ...(payload.toolSelection === undefined
99
+ ? {}
100
+ : { toolSelection: payload.toolSelection }),
101
+ ...(payload.budgetRejected === undefined
102
+ ? {}
103
+ : { budgetRejected: payload.budgetRejected }),
104
+ });
105
+ const from = lastResponseSequenceByRun.get(payload.runId);
106
+
107
+ if (from !== undefined && from < envelope.sequence)
108
+ settledSpans.push({ from, to: envelope.sequence, runId: payload.runId });
109
+ }
110
+ },
111
+ snapshot: (): JournalMetadata => ({
112
+ ownerRunId,
113
+ seed,
114
+ firstSequenceByRun: new Map(firstSequenceByRun),
115
+ lastResponseSequenceByRun: new Map(lastResponseSequenceByRun),
116
+ terminalSequenceByRun: new Map(terminalSequenceByRun),
117
+ settledSpans: [...settledSpans],
118
+ toolExecutionEvidence: new Set(toolExecutionEvidence),
119
+ settledToolCallRecordIds: new Set(settledToolCallRecordIds),
120
+ settledById: new Map(settledById),
121
+ compactions: [...compactions],
122
+ }),
123
+ };
124
+ };
@@ -0,0 +1,20 @@
1
+ import { Schema } from "effect";
2
+
3
+ import { MessageStatus } from "../../core/Messaging.ts";
4
+ import type { MessageDeliveryRecord } from "../MessageDelivery.ts";
5
+
6
+ /** Share the bounded projection across peer and worker delivery; diagnostics stay in storage. */
7
+ export const messageStatus = (row: MessageDeliveryRecord) =>
8
+ Schema.decodeUnknownEffect(MessageStatus)({
9
+ message: row.key,
10
+ status: row.status,
11
+ receipt: row.receipt,
12
+ settlement:
13
+ row.settlement === null
14
+ ? null
15
+ : { settlementId: row.settlement.settlementId, outcome: row.settlement.outcome },
16
+ reason:
17
+ row.refusal ??
18
+ row.parkReason ??
19
+ (row.status === "pending" || row.status === "accepted" ? row.retry.lastFailure : null),
20
+ });