effect-agent 0.1.0-beta.10 → 0.1.0-beta.101

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 (544) hide show
  1. package/dist/Agent-CG_VMrtA.mjs +83 -0
  2. package/dist/Agent-CG_VMrtA.mjs.map +1 -0
  3. package/dist/Agent-CM6JubNX.d.mts +226 -0
  4. package/dist/AgentError-CggcAQ7V.d.mts +101 -0
  5. package/dist/AgentPolicy-BqDoSXO6.d.mts +96 -0
  6. package/dist/AgentRuntime-B1SXMVN7.d.mts +346 -0
  7. package/dist/AgentRuntime-BWOnNc0d.mjs +4690 -0
  8. package/dist/AgentRuntime-BWOnNc0d.mjs.map +1 -0
  9. package/dist/AgentUpdates-DMJ-_xow.d.mts +53 -0
  10. package/dist/ContextCompactor-WwSIG_Z2.d.mts +161 -0
  11. package/dist/ContextWindow-DRQ5Mbm2.d.mts +58 -0
  12. package/dist/DurableAgentRuntime-HOZ3AeSi.mjs +6672 -0
  13. package/dist/DurableAgentRuntime-HOZ3AeSi.mjs.map +1 -0
  14. package/dist/DurableFailpoint-mx3-nsxU.d.mts +41 -0
  15. package/dist/DurableStep-Cry_iol4.d.mts +103 -0
  16. package/dist/EventSource-K7XUzurY.d.mts +51 -0
  17. package/dist/Identifiers-CN2s30fF.d.mts +40 -0
  18. package/dist/InMemory.d.mts +24 -0
  19. package/dist/InMemory.mjs +24 -0
  20. package/dist/InMemory.mjs.map +1 -0
  21. package/dist/MemoryNamespace-BbRW5p71.d.mts +36 -0
  22. package/dist/MemoryReference-B8Q3UJoJ.d.mts +79 -0
  23. package/dist/Messaging-QMYhp297.d.mts +490 -0
  24. package/dist/MessagingHost-CWi_PP3g.mjs +137 -0
  25. package/dist/MessagingHost-CWi_PP3g.mjs.map +1 -0
  26. package/dist/MessagingHost-gAxs5gme.d.mts +246 -0
  27. package/dist/OperationAuthorizer-TzcQtpX5.d.mts +61 -0
  28. package/dist/Output-CjocJzsl.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-KLk5rGFI.d.mts +38 -0
  32. package/dist/Receipt-BAHyigAF.d.mts +33 -0
  33. package/dist/Records-Bidb7ByL.d.mts +3803 -0
  34. package/dist/Records-D8167fHn.mjs +844 -0
  35. package/dist/Records-D8167fHn.mjs.map +1 -0
  36. package/dist/RunEvent-DIrzkjLr.d.mts +460 -0
  37. package/dist/RunEventSink-D5aVhISG.d.mts +108 -0
  38. package/dist/RunJournal-srpbEBEy.mjs +909 -0
  39. package/dist/RunJournal-srpbEBEy.mjs.map +1 -0
  40. package/dist/RunOptions-Bruk54SE.d.mts +930 -0
  41. package/dist/RunPolicyUsage-ClZxyR46.d.mts +21 -0
  42. package/dist/Sandbox-CEsDWBLq.d.mts +173 -0
  43. package/dist/Schedule-Cy9up8Uf.d.mts +842 -0
  44. package/dist/Scheduling-CHCsSCGo.mjs +691 -0
  45. package/dist/Scheduling-CHCsSCGo.mjs.map +1 -0
  46. package/dist/Subagent-C2s8PFrd.mjs +1469 -0
  47. package/dist/Subagent-C2s8PFrd.mjs.map +1 -0
  48. package/dist/Subagent-DP0CzO16.d.mts +826 -0
  49. package/dist/SubagentContract-DdT7Cqe6.d.mts +116 -0
  50. package/dist/SubagentHost-CYcxkpRc.d.mts +140 -0
  51. package/dist/Subscription-CHyoQelH.d.mts +921 -0
  52. package/dist/SubscriptionInput-DqrHW-Ja.d.mts +41 -0
  53. package/dist/Thread-DOBQ0QUY.d.mts +96 -0
  54. package/dist/ThreadHistory-tS1KwxHR.d.mts +60 -0
  55. package/dist/ToolBroker-DWs4tZra.d.mts +133 -0
  56. package/dist/ToolExposure-9uF_Yo0T.mjs +10 -0
  57. package/dist/ToolExposure-9uF_Yo0T.mjs.map +1 -0
  58. package/dist/ToolExposure-C93U1sPu.mjs +30 -0
  59. package/dist/ToolExposure-C93U1sPu.mjs.map +1 -0
  60. package/dist/ToolExposure-UCN12eCd.d.mts +39 -0
  61. package/dist/ToolExposure-r2eOWk4F.d.mts +46 -0
  62. package/dist/ToolExposure.d.mts +8 -0
  63. package/dist/ToolExposure.mjs +21 -0
  64. package/dist/ToolExposure.mjs.map +1 -0
  65. package/dist/ToolReconciler-BmVRAHKs.d.mts +80 -0
  66. package/dist/ToolResult-BKdqWRff.d.mts +78 -0
  67. package/dist/Usage-Dx0aknfk.d.mts +121 -0
  68. package/dist/WakeScheduler-EjUF-GhC.d.mts +56 -0
  69. package/dist/Worker--j87JI__.d.mts +228 -0
  70. package/dist/agent-registration-ByeHejH3.mjs +199 -0
  71. package/dist/agent-registration-ByeHejH3.mjs.map +1 -0
  72. package/dist/capabilities/Approval.d.mts +114 -0
  73. package/dist/capabilities/Approval.mjs +226 -0
  74. package/dist/capabilities/Approval.mjs.map +1 -0
  75. package/dist/capabilities/Budget.d.mts +112 -0
  76. package/dist/capabilities/Budget.mjs +346 -0
  77. package/dist/capabilities/Budget.mjs.map +1 -0
  78. package/dist/capabilities/CodeMode.d.mts +157 -0
  79. package/dist/capabilities/CodeMode.mjs +522 -0
  80. package/dist/capabilities/CodeMode.mjs.map +1 -0
  81. package/dist/capabilities/Commands.d.mts +55 -0
  82. package/dist/capabilities/Commands.mjs +57 -0
  83. package/dist/capabilities/Commands.mjs.map +1 -0
  84. package/dist/capabilities/ContextTools.d.mts +321 -0
  85. package/dist/capabilities/ContextTools.mjs +126 -0
  86. package/dist/capabilities/ContextTools.mjs.map +1 -0
  87. package/dist/capabilities/Mcp.d.mts +108 -0
  88. package/dist/capabilities/Mcp.mjs +260 -0
  89. package/dist/capabilities/Mcp.mjs.map +1 -0
  90. package/dist/capabilities/McpClient.d.mts +115 -0
  91. package/dist/capabilities/McpClient.mjs +506 -0
  92. package/dist/capabilities/McpClient.mjs.map +1 -0
  93. package/dist/capabilities/MemoryNotes.d.mts +424 -0
  94. package/dist/capabilities/MemoryNotes.mjs +128 -0
  95. package/dist/capabilities/MemoryNotes.mjs.map +1 -0
  96. package/dist/capabilities/Messaging.d.mts +3 -0
  97. package/dist/capabilities/Messaging.mjs +151 -0
  98. package/dist/capabilities/Messaging.mjs.map +1 -0
  99. package/dist/capabilities/ModelContext.d.mts +89 -0
  100. package/dist/capabilities/ModelContext.mjs +168 -0
  101. package/dist/capabilities/ModelContext.mjs.map +1 -0
  102. package/dist/capabilities/Redaction.d.mts +37 -0
  103. package/dist/capabilities/Redaction.mjs +104 -0
  104. package/dist/capabilities/Redaction.mjs.map +1 -0
  105. package/dist/capabilities/Remembering.d.mts +434 -0
  106. package/dist/capabilities/Remembering.mjs +290 -0
  107. package/dist/capabilities/Remembering.mjs.map +1 -0
  108. package/dist/capabilities/RunHooks.d.mts +82 -0
  109. package/dist/capabilities/RunHooks.mjs +144 -0
  110. package/dist/capabilities/RunHooks.mjs.map +1 -0
  111. package/dist/capabilities/SemanticMemory.d.mts +431 -0
  112. package/dist/capabilities/SemanticMemory.mjs +315 -0
  113. package/dist/capabilities/SemanticMemory.mjs.map +1 -0
  114. package/dist/capabilities/Subagent.d.mts +4 -0
  115. package/dist/capabilities/Subagent.mjs +5 -0
  116. package/dist/capabilities/SubagentReservations.d.mts +186 -0
  117. package/dist/capabilities/SubagentReservations.mjs +479 -0
  118. package/dist/capabilities/SubagentReservations.mjs.map +1 -0
  119. package/dist/capabilities/ToolDiscovery.d.mts +124 -0
  120. package/dist/capabilities/ToolDiscovery.mjs +230 -0
  121. package/dist/capabilities/ToolDiscovery.mjs.map +1 -0
  122. package/dist/capabilities/WebCapture.d.mts +163 -0
  123. package/dist/capabilities/WebCapture.mjs +335 -0
  124. package/dist/capabilities/WebCapture.mjs.map +1 -0
  125. package/dist/capabilities/WebSearch.d.mts +71 -0
  126. package/dist/capabilities/WebSearch.mjs +115 -0
  127. package/dist/capabilities/WebSearch.mjs.map +1 -0
  128. package/dist/compaction-C2OTceKw.mjs +505 -0
  129. package/dist/compaction-C2OTceKw.mjs.map +1 -0
  130. package/dist/core/Agent.d.mts +2 -0
  131. package/dist/core/Agent.mjs +2 -0
  132. package/dist/core/AgentError.d.mts +2 -0
  133. package/dist/core/AgentError.mjs +117 -0
  134. package/dist/core/AgentError.mjs.map +1 -0
  135. package/dist/core/AgentPolicy.d.mts +2 -0
  136. package/dist/core/AgentPolicy.mjs +94 -0
  137. package/dist/core/AgentPolicy.mjs.map +1 -0
  138. package/dist/core/AgentUpdates.d.mts +2 -0
  139. package/dist/core/AgentUpdates.mjs +63 -0
  140. package/dist/core/AgentUpdates.mjs.map +1 -0
  141. package/dist/core/IdGenerator.d.mts +26 -0
  142. package/dist/core/IdGenerator.mjs +27 -0
  143. package/dist/core/IdGenerator.mjs.map +1 -0
  144. package/dist/core/Identifiers.d.mts +2 -0
  145. package/dist/core/Identifiers.mjs +43 -0
  146. package/dist/core/Identifiers.mjs.map +1 -0
  147. package/dist/core/Memory.d.mts +57 -0
  148. package/dist/core/Memory.mjs +203 -0
  149. package/dist/core/Memory.mjs.map +1 -0
  150. package/dist/core/MemoryNamespace.d.mts +2 -0
  151. package/dist/core/MemoryNamespace.mjs +116 -0
  152. package/dist/core/MemoryNamespace.mjs.map +1 -0
  153. package/dist/core/MemoryReference.d.mts +2 -0
  154. package/dist/core/MemoryReference.mjs +109 -0
  155. package/dist/core/MemoryReference.mjs.map +1 -0
  156. package/dist/core/MemoryRevalidation.d.mts +65 -0
  157. package/dist/core/MemoryRevalidation.mjs +126 -0
  158. package/dist/core/MemoryRevalidation.mjs.map +1 -0
  159. package/dist/core/MemoryStore.d.mts +186 -0
  160. package/dist/core/MemoryStore.mjs +243 -0
  161. package/dist/core/MemoryStore.mjs.map +1 -0
  162. package/dist/core/Receipt.d.mts +2 -0
  163. package/dist/core/Receipt.mjs +36 -0
  164. package/dist/core/Receipt.mjs.map +1 -0
  165. package/dist/core/RememberingStore.d.mts +1562 -0
  166. package/dist/core/RememberingStore.mjs +190 -0
  167. package/dist/core/RememberingStore.mjs.map +1 -0
  168. package/dist/core/RunEvent.d.mts +2 -0
  169. package/dist/core/RunEvent.mjs +337 -0
  170. package/dist/core/RunEvent.mjs.map +1 -0
  171. package/dist/core/RunPolicyUsage.d.mts +2 -0
  172. package/dist/core/RunPolicyUsage.mjs +21 -0
  173. package/dist/core/RunPolicyUsage.mjs.map +1 -0
  174. package/dist/core/SemanticMemoryIndex.d.mts +826 -0
  175. package/dist/core/SemanticMemoryIndex.mjs +185 -0
  176. package/dist/core/SemanticMemoryIndex.mjs.map +1 -0
  177. package/dist/core/SemanticMemoryRevalidation.d.mts +45 -0
  178. package/dist/core/SemanticMemoryRevalidation.mjs +191 -0
  179. package/dist/core/SemanticMemoryRevalidation.mjs.map +1 -0
  180. package/dist/core/SubagentContract.d.mts +2 -0
  181. package/dist/core/SubagentContract.mjs +148 -0
  182. package/dist/core/SubagentContract.mjs.map +1 -0
  183. package/dist/core/Thread.d.mts +2 -0
  184. package/dist/core/Thread.mjs +250 -0
  185. package/dist/core/Thread.mjs.map +1 -0
  186. package/dist/core/ToolResult.d.mts +2 -0
  187. package/dist/core/ToolResult.mjs +156 -0
  188. package/dist/core/ToolResult.mjs.map +1 -0
  189. package/dist/core/Usage.d.mts +2 -0
  190. package/dist/core/Usage.mjs +319 -0
  191. package/dist/core/Usage.mjs.map +1 -0
  192. package/dist/core/Worker.d.mts +3 -0
  193. package/dist/core/Worker.mjs +147 -0
  194. package/dist/core/Worker.mjs.map +1 -0
  195. package/dist/durable/ActivityStore.d.mts +116 -0
  196. package/dist/durable/ActivityStore.mjs +131 -0
  197. package/dist/durable/ActivityStore.mjs.map +1 -0
  198. package/dist/durable/Admin.d.mts +2 -0
  199. package/dist/durable/Admin.mjs +330 -0
  200. package/dist/durable/Admin.mjs.map +1 -0
  201. package/dist/durable/AgentRegistration.d.mts +2 -0
  202. package/dist/durable/AgentRegistration.mjs +14 -0
  203. package/dist/durable/AgentRegistration.mjs.map +1 -0
  204. package/dist/durable/Certification.d.mts +110 -0
  205. package/dist/durable/Certification.mjs +159 -0
  206. package/dist/durable/Certification.mjs.map +1 -0
  207. package/dist/durable/CommittedActivity.d.mts +62 -0
  208. package/dist/durable/CommittedActivity.mjs +159 -0
  209. package/dist/durable/CommittedActivity.mjs.map +1 -0
  210. package/dist/durable/Digest.d.mts +2 -0
  211. package/dist/durable/Digest.mjs +50 -0
  212. package/dist/durable/Digest.mjs.map +1 -0
  213. package/dist/durable/DurableAgentRuntime.d.mts +3 -0
  214. package/dist/durable/DurableAgentRuntime.mjs +3 -0
  215. package/dist/durable/DurableFailpoint.d.mts +2 -0
  216. package/dist/durable/DurableFailpoint.mjs +98 -0
  217. package/dist/durable/DurableFailpoint.mjs.map +1 -0
  218. package/dist/durable/DurableFailpointTestControl.d.mts +14 -0
  219. package/dist/durable/DurableFailpointTestControl.mjs +19 -0
  220. package/dist/durable/DurableFailpointTestControl.mjs.map +1 -0
  221. package/dist/durable/EventSource.d.mts +2 -0
  222. package/dist/durable/EventSource.mjs +65 -0
  223. package/dist/durable/EventSource.mjs.map +1 -0
  224. package/dist/durable/GitHubWorkflowSource.d.mts +185 -0
  225. package/dist/durable/GitHubWorkflowSource.mjs +209 -0
  226. package/dist/durable/GitHubWorkflowSource.mjs.map +1 -0
  227. package/dist/durable/MessageDelivery.d.mts +832 -0
  228. package/dist/durable/MessageDelivery.mjs +529 -0
  229. package/dist/durable/MessageDelivery.mjs.map +1 -0
  230. package/dist/durable/MessageDeliveryStoreConformance.d.mts +357 -0
  231. package/dist/durable/MessageDeliveryStoreConformance.mjs +270 -0
  232. package/dist/durable/MessageDeliveryStoreConformance.mjs.map +1 -0
  233. package/dist/durable/OperationAuthorizer.d.mts +2 -0
  234. package/dist/durable/OperationAuthorizer.mjs +70 -0
  235. package/dist/durable/OperationAuthorizer.mjs.map +1 -0
  236. package/dist/durable/PersistentHistory.d.mts +16 -0
  237. package/dist/durable/PersistentHistory.mjs +125 -0
  238. package/dist/durable/PersistentHistory.mjs.map +1 -0
  239. package/dist/durable/PreparedInputAdmission.d.mts +2 -0
  240. package/dist/durable/PreparedInputAdmission.mjs +34 -0
  241. package/dist/durable/PreparedInputAdmission.mjs.map +1 -0
  242. package/dist/durable/Records.d.mts +2 -0
  243. package/dist/durable/Records.mjs +2 -0
  244. package/dist/durable/Recovery.d.mts +2 -0
  245. package/dist/durable/Recovery.mjs +739 -0
  246. package/dist/durable/Recovery.mjs.map +1 -0
  247. package/dist/durable/RunJournal.d.mts +2 -0
  248. package/dist/durable/RunJournal.mjs +2 -0
  249. package/dist/durable/Schedule.d.mts +2 -0
  250. package/dist/durable/Schedule.mjs +382 -0
  251. package/dist/durable/Schedule.mjs.map +1 -0
  252. package/dist/durable/ScheduleStoreConformance.d.mts +17 -0
  253. package/dist/durable/ScheduleStoreConformance.mjs +420 -0
  254. package/dist/durable/ScheduleStoreConformance.mjs.map +1 -0
  255. package/dist/durable/ScheduleTransition.d.mts +24 -0
  256. package/dist/durable/ScheduleTransition.mjs +180 -0
  257. package/dist/durable/ScheduleTransition.mjs.map +1 -0
  258. package/dist/durable/Scheduling.d.mts +54 -0
  259. package/dist/durable/Scheduling.mjs +2 -0
  260. package/dist/durable/SqlMemoryStore.d.mts +29 -0
  261. package/dist/durable/SqlMemoryStore.mjs +436 -0
  262. package/dist/durable/SqlMemoryStore.mjs.map +1 -0
  263. package/dist/durable/SqlMessageDeliveryStore.d.mts +42 -0
  264. package/dist/durable/SqlMessageDeliveryStore.mjs +171 -0
  265. package/dist/durable/SqlMessageDeliveryStore.mjs.map +1 -0
  266. package/dist/durable/SqlStorageV2Upgrade.d.mts +21 -0
  267. package/dist/durable/SqlStorageV2Upgrade.mjs +459 -0
  268. package/dist/durable/SqlStorageV2Upgrade.mjs.map +1 -0
  269. package/dist/durable/SqlSubscriptionStore.d.mts +62 -0
  270. package/dist/durable/SqlSubscriptionStore.mjs +751 -0
  271. package/dist/durable/SqlSubscriptionStore.mjs.map +1 -0
  272. package/dist/durable/SqlThreadNativeReads.d.mts +49 -0
  273. package/dist/durable/SqlThreadNativeReads.mjs +153 -0
  274. package/dist/durable/SqlThreadNativeReads.mjs.map +1 -0
  275. package/dist/durable/SubmissionLedger.d.mts +3 -0
  276. package/dist/durable/SubmissionLedger.mjs +915 -0
  277. package/dist/durable/SubmissionLedger.mjs.map +1 -0
  278. package/dist/durable/SubmissionLedgerConformance.d.mts +29 -0
  279. package/dist/durable/SubmissionLedgerConformance.mjs +1993 -0
  280. package/dist/durable/SubmissionLedgerConformance.mjs.map +1 -0
  281. package/dist/durable/SubmissionStatus.d.mts +2 -0
  282. package/dist/durable/SubmissionStatus.mjs +18 -0
  283. package/dist/durable/SubmissionStatus.mjs.map +1 -0
  284. package/dist/durable/Subscription.d.mts +2 -0
  285. package/dist/durable/Subscription.mjs +360 -0
  286. package/dist/durable/Subscription.mjs.map +1 -0
  287. package/dist/durable/SubscriptionInput.d.mts +2 -0
  288. package/dist/durable/SubscriptionInput.mjs +52 -0
  289. package/dist/durable/SubscriptionInput.mjs.map +1 -0
  290. package/dist/durable/SubscriptionStoreConformance.d.mts +16 -0
  291. package/dist/durable/SubscriptionStoreConformance.mjs +625 -0
  292. package/dist/durable/SubscriptionStoreConformance.mjs.map +1 -0
  293. package/dist/durable/SubscriptionTools.d.mts +273 -0
  294. package/dist/durable/SubscriptionTools.mjs +190 -0
  295. package/dist/durable/SubscriptionTools.mjs.map +1 -0
  296. package/dist/durable/SubscriptionTransition.d.mts +21 -0
  297. package/dist/durable/SubscriptionTransition.mjs +148 -0
  298. package/dist/durable/SubscriptionTransition.mjs.map +1 -0
  299. package/dist/durable/Subscriptions.d.mts +73 -0
  300. package/dist/durable/Subscriptions.mjs +627 -0
  301. package/dist/durable/Subscriptions.mjs.map +1 -0
  302. package/dist/durable/ThreadContextHistory.d.mts +32 -0
  303. package/dist/durable/ThreadContextHistory.mjs +152 -0
  304. package/dist/durable/ThreadContextHistory.mjs.map +1 -0
  305. package/dist/durable/ThreadContextHistoryProjection.d.mts +60 -0
  306. package/dist/durable/ThreadContextHistoryProjection.mjs +149 -0
  307. package/dist/durable/ThreadContextHistoryProjection.mjs.map +1 -0
  308. package/dist/durable/ThreadInvariants.d.mts +76 -0
  309. package/dist/durable/ThreadInvariants.mjs +246 -0
  310. package/dist/durable/ThreadInvariants.mjs.map +1 -0
  311. package/dist/durable/ThreadProjection.d.mts +78 -0
  312. package/dist/durable/ThreadProjection.mjs +158 -0
  313. package/dist/durable/ThreadProjection.mjs.map +1 -0
  314. package/dist/durable/ThreadProjectionMaintenance.d.mts +49 -0
  315. package/dist/durable/ThreadProjectionMaintenance.mjs +33 -0
  316. package/dist/durable/ThreadProjectionMaintenance.mjs.map +1 -0
  317. package/dist/durable/ThreadStore.d.mts +2 -0
  318. package/dist/durable/ThreadStore.mjs +336 -0
  319. package/dist/durable/ThreadStore.mjs.map +1 -0
  320. package/dist/durable/ThreadStoreConformance.d.mts +28 -0
  321. package/dist/durable/ThreadStoreConformance.mjs +503 -0
  322. package/dist/durable/ThreadStoreConformance.mjs.map +1 -0
  323. package/dist/durable/ToolReconciler.d.mts +2 -0
  324. package/dist/durable/ToolReconciler.mjs +85 -0
  325. package/dist/durable/ToolReconciler.mjs.map +1 -0
  326. package/dist/durable/WakeScheduler.d.mts +2 -0
  327. package/dist/durable/WakeScheduler.mjs +85 -0
  328. package/dist/durable/WakeScheduler.mjs.map +1 -0
  329. package/dist/durable/WorkerHost.d.mts +129 -0
  330. package/dist/durable/WorkerHost.mjs +77 -0
  331. package/dist/durable/WorkerHost.mjs.map +1 -0
  332. package/dist/engine/AgentRuntime.d.mts +2 -0
  333. package/dist/engine/AgentRuntime.mjs +2 -0
  334. package/dist/engine/Compaction.d.mts +7 -0
  335. package/dist/engine/Compaction.mjs +16 -0
  336. package/dist/engine/Compaction.mjs.map +1 -0
  337. package/dist/engine/ContextCompactor.d.mts +2 -0
  338. package/dist/engine/ContextCompactor.mjs +119 -0
  339. package/dist/engine/ContextCompactor.mjs.map +1 -0
  340. package/dist/engine/ContextHistory.d.mts +65 -0
  341. package/dist/engine/ContextHistory.mjs +76 -0
  342. package/dist/engine/ContextHistory.mjs.map +1 -0
  343. package/dist/engine/ContextWindow.d.mts +2 -0
  344. package/dist/engine/ContextWindow.mjs +59 -0
  345. package/dist/engine/ContextWindow.mjs.map +1 -0
  346. package/dist/engine/DurableStep.d.mts +2 -0
  347. package/dist/engine/DurableStep.mjs +62 -0
  348. package/dist/engine/DurableStep.mjs.map +1 -0
  349. package/dist/engine/MessagingHost.d.mts +2 -0
  350. package/dist/engine/MessagingHost.mjs +2 -0
  351. package/dist/engine/Output.d.mts +2 -0
  352. package/dist/engine/Output.mjs +8 -0
  353. package/dist/engine/Output.mjs.map +1 -0
  354. package/dist/engine/RunEventSink.d.mts +2 -0
  355. package/dist/engine/RunEventSink.mjs +22 -0
  356. package/dist/engine/RunEventSink.mjs.map +1 -0
  357. package/dist/engine/RunOptions.d.mts +2 -0
  358. package/dist/engine/RunOptions.mjs +122 -0
  359. package/dist/engine/RunOptions.mjs.map +1 -0
  360. package/dist/engine/SubagentHost.d.mts +2 -0
  361. package/dist/engine/SubagentHost.mjs +72 -0
  362. package/dist/engine/SubagentHost.mjs.map +1 -0
  363. package/dist/engine/ThreadHistory.d.mts +2 -0
  364. package/dist/engine/ThreadHistory.mjs +67 -0
  365. package/dist/engine/ThreadHistory.mjs.map +1 -0
  366. package/dist/engine/ToolBroker.d.mts +2 -0
  367. package/dist/engine/ToolBroker.mjs +42 -0
  368. package/dist/engine/ToolBroker.mjs.map +1 -0
  369. package/dist/foreign-diagnostic-DBQ1XHKh.mjs +37 -0
  370. package/dist/foreign-diagnostic-DBQ1XHKh.mjs.map +1 -0
  371. package/dist/index.d.mts +90 -6
  372. package/dist/index.mjs +99 -6
  373. package/dist/output-contract-BC7tjlGw.mjs +84 -0
  374. package/dist/output-contract-BC7tjlGw.mjs.map +1 -0
  375. package/dist/rolldown-runtime-D7D4PA-g.mjs +13 -0
  376. package/dist/sandbox/CodeExecutor.d.mts +194 -0
  377. package/dist/sandbox/CodeExecutor.mjs +278 -0
  378. package/dist/sandbox/CodeExecutor.mjs.map +1 -0
  379. package/dist/sandbox/InteractiveBrowser.d.mts +142 -0
  380. package/dist/sandbox/InteractiveBrowser.mjs +165 -0
  381. package/dist/sandbox/InteractiveBrowser.mjs.map +1 -0
  382. package/dist/sandbox/PageCapture.d.mts +2 -0
  383. package/dist/sandbox/PageCapture.mjs +450 -0
  384. package/dist/sandbox/PageCapture.mjs.map +1 -0
  385. package/dist/sandbox/PageCrawl.d.mts +88 -0
  386. package/dist/sandbox/PageCrawl.mjs +124 -0
  387. package/dist/sandbox/PageCrawl.mjs.map +1 -0
  388. package/dist/sandbox/PageScreenshot.d.mts +2 -0
  389. package/dist/sandbox/PageScreenshot.mjs +53 -0
  390. package/dist/sandbox/PageScreenshot.mjs.map +1 -0
  391. package/dist/sandbox/ProtectedBrowser.d.mts +273 -0
  392. package/dist/sandbox/ProtectedBrowser.mjs +287 -0
  393. package/dist/sandbox/ProtectedBrowser.mjs.map +1 -0
  394. package/dist/sandbox/Sandbox.d.mts +2 -0
  395. package/dist/sandbox/Sandbox.mjs +208 -0
  396. package/dist/sandbox/Sandbox.mjs.map +1 -0
  397. package/dist/utf8-BYfhEkcj.mjs +11 -0
  398. package/dist/utf8-BYfhEkcj.mjs.map +1 -0
  399. package/dist/utf8-DchGZRBd.mjs +23 -0
  400. package/dist/utf8-DchGZRBd.mjs.map +1 -0
  401. package/package.json +1 -40
  402. package/src/InMemory.ts +19 -0
  403. package/src/ToolExposure.ts +2 -0
  404. package/src/capabilities/Approval.ts +352 -0
  405. package/src/capabilities/Budget.ts +536 -0
  406. package/src/capabilities/CodeMode.ts +1090 -0
  407. package/src/capabilities/Commands.ts +86 -0
  408. package/src/capabilities/ContextTools.ts +184 -0
  409. package/src/capabilities/Mcp.ts +427 -0
  410. package/src/capabilities/McpClient.ts +967 -0
  411. package/src/capabilities/MemoryNotes.ts +174 -0
  412. package/src/capabilities/Messaging.ts +261 -0
  413. package/src/capabilities/ModelContext.ts +354 -0
  414. package/src/capabilities/Redaction.ts +157 -0
  415. package/src/capabilities/Remembering.ts +550 -0
  416. package/src/capabilities/RunHooks.ts +280 -0
  417. package/src/capabilities/SemanticMemory.ts +447 -0
  418. package/src/capabilities/Subagent.ts +2277 -0
  419. package/src/capabilities/SubagentReservations.ts +850 -0
  420. package/src/capabilities/ToolDiscovery.ts +369 -0
  421. package/src/capabilities/WebCapture.ts +722 -0
  422. package/src/capabilities/WebSearch.ts +190 -0
  423. package/src/capabilities/internal/subagent-background.ts +1106 -0
  424. package/src/capabilities/internal/subagent-contract.ts +142 -0
  425. package/src/capabilities/internal/subagent-policy.ts +235 -0
  426. package/src/capabilities/internal/subagent-reporting.ts +261 -0
  427. package/src/capabilities/internal/utf8.ts +10 -0
  428. package/src/core/Agent.ts +575 -0
  429. package/src/core/AgentError.ts +152 -0
  430. package/src/core/AgentPolicy.ts +153 -0
  431. package/src/core/AgentUpdates.ts +100 -0
  432. package/src/core/IdGenerator.ts +39 -0
  433. package/src/core/Identifiers.ts +48 -0
  434. package/src/core/Memory.ts +290 -0
  435. package/src/core/MemoryNamespace.ts +196 -0
  436. package/src/core/MemoryReference.ts +121 -0
  437. package/src/core/MemoryRevalidation.ts +185 -0
  438. package/src/core/MemoryStore.ts +368 -0
  439. package/src/core/Messaging.ts +90 -0
  440. package/src/core/Receipt.ts +42 -0
  441. package/src/core/RememberingStore.ts +300 -0
  442. package/src/core/RunEvent.ts +366 -0
  443. package/src/core/RunPolicyUsage.ts +17 -0
  444. package/src/core/SemanticMemoryIndex.ts +250 -0
  445. package/src/core/SemanticMemoryRevalidation.ts +254 -0
  446. package/src/core/SubagentContract.ts +196 -0
  447. package/src/core/Thread.ts +371 -0
  448. package/src/core/ToolExposure.ts +74 -0
  449. package/src/core/ToolResult.ts +190 -0
  450. package/src/core/Usage.ts +529 -0
  451. package/src/core/Worker.ts +173 -0
  452. package/src/core/internal/agent-updates.ts +32 -0
  453. package/src/core/internal/strict-schema.ts +14 -0
  454. package/src/core/internal/utf8.ts +23 -0
  455. package/src/durable/ActivityStore.ts +160 -0
  456. package/src/durable/Admin.ts +505 -0
  457. package/src/durable/AgentRegistration.ts +14 -0
  458. package/src/durable/Certification.ts +210 -0
  459. package/src/durable/CommittedActivity.ts +296 -0
  460. package/src/durable/Digest.ts +93 -0
  461. package/src/durable/DurableAgentRuntime.ts +10911 -0
  462. package/src/durable/DurableFailpoint.ts +107 -0
  463. package/src/durable/DurableFailpointTestControl.ts +39 -0
  464. package/src/durable/EventSource.ts +172 -0
  465. package/src/durable/GitHubWorkflowSource.ts +447 -0
  466. package/src/durable/MessageDelivery.ts +759 -0
  467. package/src/durable/MessageDeliveryStoreConformance.ts +410 -0
  468. package/src/durable/OperationAuthorizer.ts +85 -0
  469. package/src/durable/PersistentHistory.ts +260 -0
  470. package/src/durable/PreparedInputAdmission.ts +44 -0
  471. package/src/durable/Records.ts +1061 -0
  472. package/src/durable/Recovery.ts +1018 -0
  473. package/src/durable/RunJournal.ts +1594 -0
  474. package/src/durable/Schedule.ts +504 -0
  475. package/src/durable/ScheduleStoreConformance.ts +638 -0
  476. package/src/durable/ScheduleTransition.ts +265 -0
  477. package/src/durable/Scheduling.ts +1077 -0
  478. package/src/durable/SqlMemoryStore.ts +778 -0
  479. package/src/durable/SqlMessageDeliveryStore.ts +309 -0
  480. package/src/durable/SqlStorageV2Upgrade.ts +500 -0
  481. package/src/durable/SqlSubscriptionStore.ts +1440 -0
  482. package/src/durable/SqlThreadNativeReads.ts +256 -0
  483. package/src/durable/SubmissionLedger.ts +1202 -0
  484. package/src/durable/SubmissionLedgerConformance.ts +4590 -0
  485. package/src/durable/SubmissionStatus.ts +14 -0
  486. package/src/durable/Subscription.ts +544 -0
  487. package/src/durable/SubscriptionInput.ts +144 -0
  488. package/src/durable/SubscriptionStoreConformance.ts +945 -0
  489. package/src/durable/SubscriptionTools.ts +327 -0
  490. package/src/durable/SubscriptionTransition.ts +302 -0
  491. package/src/durable/Subscriptions.ts +1210 -0
  492. package/src/durable/ThreadContextHistory.ts +227 -0
  493. package/src/durable/ThreadContextHistoryProjection.ts +216 -0
  494. package/src/durable/ThreadInvariants.ts +507 -0
  495. package/src/durable/ThreadProjection.ts +269 -0
  496. package/src/durable/ThreadProjectionMaintenance.ts +67 -0
  497. package/src/durable/ThreadStore.ts +552 -0
  498. package/src/durable/ThreadStoreConformance.ts +1156 -0
  499. package/src/durable/ToolReconciler.ts +109 -0
  500. package/src/durable/WakeScheduler.ts +134 -0
  501. package/src/durable/WorkerHost.ts +171 -0
  502. package/src/durable/internal/agent-registration.ts +589 -0
  503. package/src/durable/internal/agent-updates.ts +302 -0
  504. package/src/durable/internal/foreign-diagnostic.ts +47 -0
  505. package/src/durable/internal/journal-checkpoint.ts +104 -0
  506. package/src/durable/internal/journal-metadata.ts +107 -0
  507. package/src/durable/internal/messaging-host.ts +641 -0
  508. package/src/durable/internal/schedule-time.ts +303 -0
  509. package/src/durable/internal/storage-v2-layout.ts +163 -0
  510. package/src/durable/internal/storage-v2.ts +73 -0
  511. package/src/durable/internal/worker-host.ts +2553 -0
  512. package/src/durable/internal/worker-runtime.ts +9 -0
  513. package/src/engine/AgentRuntime.ts +37 -0
  514. package/src/engine/Compaction.ts +11 -0
  515. package/src/engine/ContextCompactor.ts +277 -0
  516. package/src/engine/ContextHistory.ts +73 -0
  517. package/src/engine/ContextWindow.ts +72 -0
  518. package/src/engine/DurableStep.ts +132 -0
  519. package/src/engine/MessagingHost.ts +110 -0
  520. package/src/engine/Output.ts +2 -0
  521. package/src/engine/RunEventSink.ts +132 -0
  522. package/src/engine/RunOptions.ts +1093 -0
  523. package/src/engine/SubagentHost.ts +181 -0
  524. package/src/engine/ThreadHistory.ts +120 -0
  525. package/src/engine/ToolBroker.ts +157 -0
  526. package/src/engine/ToolExposure.ts +48 -0
  527. package/src/engine/internal/agent-runtime.ts +10402 -0
  528. package/src/engine/internal/bounded-value.ts +315 -0
  529. package/src/engine/internal/compaction.ts +678 -0
  530. package/src/engine/internal/error-diagnostic.ts +39 -0
  531. package/src/engine/internal/output-contract.ts +173 -0
  532. package/src/engine/internal/primitive-delta.ts +80 -0
  533. package/src/engine/internal/provider-result-staging.ts +211 -0
  534. package/src/engine/internal/tool-derivative.ts +106 -0
  535. package/src/engine/internal/tool-exposure.ts +224 -0
  536. package/src/engine/internal/tool-telemetry.ts +484 -0
  537. package/src/index.ts +98 -21
  538. package/src/sandbox/CodeExecutor.ts +352 -0
  539. package/src/sandbox/InteractiveBrowser.ts +257 -0
  540. package/src/sandbox/PageCapture.ts +691 -0
  541. package/src/sandbox/PageCrawl.ts +148 -0
  542. package/src/sandbox/PageScreenshot.ts +81 -0
  543. package/src/sandbox/ProtectedBrowser.ts +436 -0
  544. package/src/sandbox/Sandbox.ts +241 -0
@@ -0,0 +1,529 @@
1
+ import { t as __exportAll } from "../rolldown-runtime-D7D4PA-g.mjs";
2
+ import { ThreadId } from "../core/Identifiers.mjs";
3
+ import { IdempotencyKey, Receipt } from "../core/Receipt.mjs";
4
+ import { WorkerUpdate } from "../core/Worker.mjs";
5
+ import { h as Digest } from "../Records-D8167fHn.mjs";
6
+ import { Settlement } from "./SubmissionLedger.mjs";
7
+ import { digestJson } from "./Digest.mjs";
8
+ import { ScheduleInstant, ScheduleRetry, ScheduleRetryReason } from "./Schedule.mjs";
9
+ import { PreparedInputAdmission, admitPreparedInput } from "./PreparedInputAdmission.mjs";
10
+ import { PreparedInput } from "./Subscription.mjs";
11
+ import { Clock, Context, Crypto, Effect, Layer, Result, Schema, Semaphore } from "effect";
12
+ //#region src/durable/MessageDelivery.ts
13
+ var MessageDelivery_exports = /* @__PURE__ */ __exportAll({
14
+ MessageDeliveryChange: () => MessageDeliveryChange,
15
+ MessageDeliveryDriver: () => MessageDeliveryDriver,
16
+ MessageDeliveryDriverLimits: () => MessageDeliveryDriverLimits,
17
+ MessageDeliveryError: () => MessageDeliveryError,
18
+ MessageDeliveryFailpoint: () => MessageDeliveryFailpoint,
19
+ MessageDeliveryFailpointError: () => MessageDeliveryFailpointError,
20
+ MessageDeliveryKey: () => MessageDeliveryKey,
21
+ MessageDeliveryPage: () => MessageDeliveryPage,
22
+ MessageDeliveryPageRequest: () => MessageDeliveryPageRequest,
23
+ MessageDeliveryPolicy: () => MessageDeliveryPolicy,
24
+ MessageDeliveryRecord: () => MessageDeliveryRecord,
25
+ MessageDeliveryStore: () => MessageDeliveryStore,
26
+ MessageDeliveryStoreLimits: () => MessageDeliveryStoreLimits,
27
+ applyMessageDeliveryChange: () => applyMessageDeliveryChange,
28
+ defaultMessageDeliveryPolicy: () => defaultMessageDeliveryPolicy,
29
+ defaultMessageDeliveryStoreLimits: () => defaultMessageDeliveryStoreLimits,
30
+ isWorkerUpdateDelivery: () => isWorkerUpdateDelivery,
31
+ messageDeliveryCapacity: () => messageDeliveryCapacity,
32
+ messageDeliveryDeadline: () => messageDeliveryDeadline,
33
+ messageDeliveryKeyString: () => messageDeliveryKeyString,
34
+ messageDeliveryUsesCapacity: () => messageDeliveryUsesCapacity,
35
+ prepareMessageDelivery: () => prepareMessageDelivery,
36
+ readPending: () => readPending,
37
+ sameMessageDeliveryIdentity: () => sameMessageDeliveryIdentity,
38
+ validateMessageDelivery: () => validateMessageDelivery
39
+ });
40
+ const Positive = Schema.Int.check(Schema.isGreaterThan(0));
41
+ const BoundedName = Schema.String.check(Schema.isMinLength(1), Schema.isMaxLength(256));
42
+ /** An owner is always a source Thread. Destination admission has its own frozen key. */
43
+ const MessageDeliveryKey = Schema.Struct({
44
+ ownerThreadId: ThreadId,
45
+ messageId: IdempotencyKey
46
+ });
47
+ const MessageDeliveryPolicy = Schema.Struct({
48
+ maxAutomaticAttempts: Positive.check(Schema.isLessThanOrEqualTo(100)),
49
+ attemptTimeoutMillis: Positive.check(Schema.isLessThanOrEqualTo(3e5)),
50
+ retryBaseMillis: Positive,
51
+ retryMaxMillis: Positive,
52
+ settlementPollMillis: Positive
53
+ }).check(Schema.makeFilter((value) => value.retryBaseMillis <= value.retryMaxMillis));
54
+ const defaultMessageDeliveryPolicy = {
55
+ maxAutomaticAttempts: 8,
56
+ attemptTimeoutMillis: 3e4,
57
+ retryBaseMillis: 1e3,
58
+ retryMaxMillis: 6e4,
59
+ settlementPollMillis: 5e3
60
+ };
61
+ const MessageDeliveryStoreLimits = Schema.Struct({
62
+ maxPendingPerOwner: Positive,
63
+ maxRetainedPerOwner: Positive,
64
+ maxEnvelopeBytes: Positive,
65
+ /** Separate update capacity preserves the full ordinary allowance for terminal reports. */
66
+ maxPendingUpdatesPerOwner: Schema.optionalKey(Positive),
67
+ maxRetainedUpdatesPerOwner: Schema.optionalKey(Positive)
68
+ }).check(Schema.makeFilter((value) => value.maxPendingPerOwner <= value.maxRetainedPerOwner && (value.maxPendingUpdatesPerOwner ?? 32) <= (value.maxRetainedUpdatesPerOwner ?? 256)));
69
+ const defaultMessageDeliveryStoreLimits = {
70
+ maxPendingPerOwner: 100,
71
+ maxRetainedPerOwner: 1e3,
72
+ maxEnvelopeBytes: 262144,
73
+ maxPendingUpdatesPerOwner: 32,
74
+ maxRetainedUpdatesPerOwner: 256
75
+ };
76
+ const ParkReason = Schema.Literals([
77
+ "exhausted",
78
+ "deadline",
79
+ "status-unavailable"
80
+ ]);
81
+ const MessageDeliveryRecord = Schema.Struct({
82
+ schemaVersion: Schema.Literal(1),
83
+ key: MessageDeliveryKey,
84
+ envelope: PreparedInput,
85
+ envelopeDigest: Digest,
86
+ /** Same-owner predecessor whose admission must be known before this message is submitted. */
87
+ predecessor: Schema.optionalKey(IdempotencyKey),
88
+ createdAtMillis: ScheduleInstant,
89
+ /** Immutable creation identity; explicit recovery only renews deadlineAtMillis. */
90
+ initialDeadlineAtMillis: ScheduleInstant,
91
+ deadlineAtMillis: ScheduleInstant,
92
+ policy: MessageDeliveryPolicy,
93
+ version: Positive,
94
+ status: Schema.Literals([
95
+ "pending",
96
+ "accepted",
97
+ "processed",
98
+ "refused",
99
+ "parked"
100
+ ]),
101
+ receipt: Schema.NullOr(Receipt),
102
+ settlement: Schema.NullOr(Settlement),
103
+ refusal: Schema.NullOr(BoundedName),
104
+ parkReason: Schema.NullOr(ParkReason),
105
+ leaseUntilMillis: Schema.NullOr(ScheduleInstant),
106
+ retry: ScheduleRetry
107
+ }).check(Schema.makeFilter((record) => record.deadlineAtMillis > record.createdAtMillis && record.initialDeadlineAtMillis > record.createdAtMillis && record.predecessor !== record.key.messageId && record.status === "processed" === (record.settlement !== null) && record.status === "refused" === (record.refusal !== null) && record.status === "parked" === (record.parkReason !== null) && record.status === "parked" === record.retry.parked && (record.status === "accepted" || record.status === "processed" ? record.receipt !== null : true) && (record.status === "pending" || record.status === "refused" ? record.receipt === null : true) && (record.receipt === null || record.receipt.threadId === record.envelope.threadId) && (record.settlement === null || record.settlement.receiptId === record.receipt?.receiptId && record.settlement.submissionId === record.receipt.submissionId) && (record.status === "processed" || record.status === "refused" || record.status === "parked" ? record.leaseUntilMillis === null : true)));
108
+ var MessageDeliveryError = class extends Schema.TaggedError()("MessageDeliveryError", {
109
+ reason: Schema.Literals([
110
+ "validation",
111
+ "conflict",
112
+ "capacity",
113
+ "not-found",
114
+ "storage",
115
+ "corrupt"
116
+ ]),
117
+ operation: Schema.String
118
+ }) {};
119
+ var MessageDeliveryFailpointError = class extends Schema.TaggedError()("MessageDeliveryFailpointError", { point: Schema.String }) {};
120
+ const MessageDeliveryFailpoint = Context.Reference("@effect-agent/thread/MessageDeliveryFailpoint", { defaultValue: () => ({ hit: () => Effect.void }) });
121
+ const fence = {
122
+ expectedVersion: Positive,
123
+ nowMillis: ScheduleInstant
124
+ };
125
+ const MessageDeliveryChange = Schema.Union([
126
+ Schema.Struct({
127
+ _tag: Schema.Literal("Claim"),
128
+ ...fence
129
+ }),
130
+ Schema.Struct({
131
+ _tag: Schema.Literal("Accept"),
132
+ ...fence,
133
+ receipt: Receipt
134
+ }),
135
+ Schema.Struct({
136
+ _tag: Schema.Literal("Process"),
137
+ ...fence,
138
+ settlement: Settlement
139
+ }),
140
+ Schema.Struct({
141
+ _tag: Schema.Literal("ObservePending"),
142
+ ...fence
143
+ }),
144
+ Schema.Struct({
145
+ _tag: Schema.Literal("Refuse"),
146
+ ...fence,
147
+ code: BoundedName
148
+ }),
149
+ Schema.Struct({
150
+ _tag: Schema.Literal("Retry"),
151
+ ...fence,
152
+ reason: ScheduleRetryReason
153
+ }),
154
+ Schema.Struct({
155
+ _tag: Schema.Literal("Park"),
156
+ ...fence,
157
+ reason: ParkReason
158
+ }),
159
+ Schema.Struct({
160
+ _tag: Schema.Literal("Recover"),
161
+ ...fence,
162
+ deadlineAtMillis: ScheduleInstant
163
+ }),
164
+ Schema.Struct({
165
+ _tag: Schema.Literal("Defer"),
166
+ ...fence,
167
+ untilMillis: ScheduleInstant
168
+ })
169
+ ]);
170
+ const MessageDeliveryPageRequest = Schema.Struct({
171
+ ownerThreadId: ThreadId,
172
+ limit: Positive.check(Schema.isLessThanOrEqualTo(4096)),
173
+ after: Schema.optionalKey(IdempotencyKey),
174
+ /** Native pending index, including accepted, future-due and parked obligations. */
175
+ pendingOnly: Schema.optionalKey(Schema.Boolean)
176
+ });
177
+ const MessageDeliveryPage = Schema.Struct({
178
+ items: Schema.Array(MessageDeliveryRecord),
179
+ next: Schema.NullOr(IdempotencyKey)
180
+ });
181
+ /**
182
+ * Trusted host port, independent of either Thread's active Submission. List/get require an owner.
183
+ * Inserts and changes are atomic; identical inserts return current state even after completion.
184
+ * No automatic deletion: completed rows retain deduplication evidence and count toward retention.
185
+ * `due`/`nextDeadline` are bounded host recovery seams, never model-facing management operations.
186
+ */
187
+ var MessageDeliveryStore = class extends Context.Service()("@effect-agent/thread/MessageDeliveryStore") {};
188
+ /**
189
+ * Read current source-owned obligations without acquiring a runtime or scanning completed history.
190
+ * A retained receipt is native accepted-admission evidence, not proof of destination materialization.
191
+ * Shipped worker admission reserves the source input before returning that receipt. Policy can
192
+ * therefore leave accepted worker discovery to canonical outstanding inputs; a no-receipt action
193
+ * delivery remains uncertain, including when parked or due in the future.
194
+ */
195
+ const readPending = Effect.fn("MessageDelivery.readPending")(function* (request) {
196
+ const store = yield* MessageDeliveryStore;
197
+ const input = yield* validateMessageDelivery(MessageDeliveryPageRequest, {
198
+ ownerThreadId: request.ownerThreadId,
199
+ limit: request.limit,
200
+ pendingOnly: true
201
+ }, "read-pending");
202
+ const page = yield* validateMessageDelivery(MessageDeliveryPage, yield* store.list(input), "read-pending result");
203
+ if (page.next !== null || page.items.length > input.limit) return yield* MessageDeliveryError.make({
204
+ reason: "capacity",
205
+ operation: "read-pending"
206
+ });
207
+ const records = page.items;
208
+ if (records.some((record) => record.key.ownerThreadId !== input.ownerThreadId || !messageDeliveryUsesCapacity(record)) || new Set(records.map((record) => record.key.messageId)).size !== records.length) return yield* MessageDeliveryError.make({
209
+ reason: "corrupt",
210
+ operation: "read-pending result"
211
+ });
212
+ return records;
213
+ });
214
+ const messageDeliveryKeyString = (key) => JSON.stringify([key.ownerThreadId, key.messageId]);
215
+ const messageDeliveryUsesCapacity = (record) => record.status !== "processed" && record.status !== "refused";
216
+ const isWorkerUpdateDelivery = (record) => Schema.is(WorkerUpdate)(record.envelope.messageAdmission);
217
+ const messageDeliveryCapacity = (limits, update) => ({
218
+ pending: update ? limits.maxPendingUpdatesPerOwner ?? 32 : limits.maxPendingPerOwner,
219
+ retained: update ? limits.maxRetainedUpdatesPerOwner ?? 256 : limits.maxRetainedPerOwner
220
+ });
221
+ const messageDeliveryDeadline = (record) => record.status === "pending" || record.status === "accepted" ? Math.min(record.deadlineAtMillis, record.leaseUntilMillis ?? record.retry.nextAttemptAtMillis) : null;
222
+ /** Creation identity deliberately excludes operational counters and renewed recovery deadlines. */
223
+ const sameMessageDeliveryIdentity = (left, right) => messageDeliveryKeyString(left.key) === messageDeliveryKeyString(right.key) && left.envelopeDigest === right.envelopeDigest && left.predecessor === right.predecessor && Schema.toEquivalence(PreparedInput)(left.envelope, right.envelope) && Schema.toEquivalence(MessageDeliveryPolicy)(left.policy, right.policy) && left.createdAtMillis === right.createdAtMillis && left.initialDeadlineAtMillis === right.initialDeadlineAtMillis;
224
+ const error = (reason, operation) => MessageDeliveryError.make({
225
+ reason,
226
+ operation
227
+ });
228
+ const validateMessageDelivery = (schema, value, operation) => Schema.decodeUnknownEffect(Schema.toType(schema))(value).pipe(Effect.mapError(() => error("validation", operation)));
229
+ const MessageDeliveryPreparation = Schema.Struct({
230
+ key: MessageDeliveryKey,
231
+ envelope: PreparedInput,
232
+ createdAtMillis: ScheduleInstant,
233
+ deadlineAtMillis: ScheduleInstant,
234
+ policy: MessageDeliveryPolicy,
235
+ predecessor: Schema.optionalKey(IdempotencyKey)
236
+ });
237
+ /** Freeze and digest the complete admission envelope before publishing the obligation. */
238
+ const prepareMessageDelivery = Effect.fn("MessageDelivery.prepare")(function* (options) {
239
+ const snapshot = yield* Schema.encodeEffect(Schema.fromJsonString(MessageDeliveryPreparation))({
240
+ ...options,
241
+ policy: options.policy ?? defaultMessageDeliveryPolicy
242
+ }).pipe(Effect.flatMap(Schema.decodeEffect(Schema.fromJsonString(MessageDeliveryPreparation))), Effect.mapError(() => error("validation", "prepare")));
243
+ const envelope = snapshot.envelope;
244
+ const encoded = yield* Schema.encodeEffect(PreparedInput)(envelope).pipe(Effect.mapError(() => error("validation", "prepare")));
245
+ if ((yield* digestJson(encoded.input).pipe(Effect.mapError(() => error("storage", "digest")))) !== envelope.inputDigest) return yield* error("corrupt", "input-digest");
246
+ const envelopeDigest = yield* digestJson(encoded).pipe(Effect.mapError(() => error("storage", "digest")));
247
+ return yield* validateMessageDelivery(MessageDeliveryRecord, {
248
+ schemaVersion: 1,
249
+ key: snapshot.key,
250
+ envelope,
251
+ envelopeDigest,
252
+ ...snapshot.predecessor === void 0 ? {} : { predecessor: snapshot.predecessor },
253
+ createdAtMillis: snapshot.createdAtMillis,
254
+ initialDeadlineAtMillis: snapshot.deadlineAtMillis,
255
+ deadlineAtMillis: snapshot.deadlineAtMillis,
256
+ policy: snapshot.policy,
257
+ version: 1,
258
+ status: "pending",
259
+ receipt: null,
260
+ settlement: null,
261
+ refusal: null,
262
+ parkReason: null,
263
+ leaseUntilMillis: null,
264
+ retry: {
265
+ attempts: 0,
266
+ generation: 0,
267
+ automaticAttempts: 0,
268
+ parked: false,
269
+ nextAttemptAtMillis: snapshot.createdAtMillis,
270
+ lastAttemptAtMillis: null,
271
+ lastFailure: null
272
+ }
273
+ }, "prepare");
274
+ });
275
+ /** Pure reducer used under the adapter's atomic compare-and-swap boundary. */
276
+ const applyMessageDeliveryChange = (record, change) => {
277
+ const conflict = () => Result.fail(error("conflict", change._tag));
278
+ if (record.version !== change.expectedVersion) return conflict();
279
+ if (record.status === "processed" || record.status === "refused") return conflict();
280
+ const now = change.nowMillis;
281
+ const base = {
282
+ ...record,
283
+ version: record.version + 1
284
+ };
285
+ const parked = (reason) => ({
286
+ ...base,
287
+ status: "parked",
288
+ parkReason: reason,
289
+ leaseUntilMillis: null,
290
+ retry: {
291
+ ...record.retry,
292
+ parked: true
293
+ }
294
+ });
295
+ if (change._tag === "Defer") {
296
+ if (record.status !== "pending" || record.leaseUntilMillis !== null && record.leaseUntilMillis > now) return conflict();
297
+ if (now >= record.deadlineAtMillis) return Result.succeed(parked("deadline"));
298
+ if (change.untilMillis <= now) return conflict();
299
+ return Result.succeed({
300
+ ...base,
301
+ leaseUntilMillis: null,
302
+ retry: {
303
+ ...record.retry,
304
+ nextAttemptAtMillis: Math.min(change.untilMillis, record.deadlineAtMillis)
305
+ }
306
+ });
307
+ }
308
+ if (change._tag === "Recover") {
309
+ if (record.status !== "parked" || change.deadlineAtMillis <= now) return conflict();
310
+ return Result.succeed({
311
+ ...base,
312
+ deadlineAtMillis: change.deadlineAtMillis,
313
+ status: record.receipt === null ? "pending" : "accepted",
314
+ parkReason: null,
315
+ retry: {
316
+ ...record.retry,
317
+ generation: record.retry.generation + 1,
318
+ automaticAttempts: 0,
319
+ parked: false,
320
+ nextAttemptAtMillis: now
321
+ }
322
+ });
323
+ }
324
+ if (record.status === "parked") return conflict();
325
+ if (change._tag === "Park") return Result.succeed(parked(change.reason));
326
+ if (change._tag === "Claim") {
327
+ const due = messageDeliveryDeadline(record);
328
+ if (due === null || due > now) return conflict();
329
+ if (now >= record.deadlineAtMillis) return Result.succeed(parked("deadline"));
330
+ if (record.retry.automaticAttempts >= record.policy.maxAutomaticAttempts) return Result.succeed(parked("exhausted"));
331
+ return Result.succeed({
332
+ ...base,
333
+ leaseUntilMillis: Math.min(now + record.policy.attemptTimeoutMillis, record.deadlineAtMillis),
334
+ retry: {
335
+ ...record.retry,
336
+ attempts: record.retry.attempts + 1,
337
+ automaticAttempts: record.retry.automaticAttempts + 1,
338
+ lastAttemptAtMillis: now
339
+ }
340
+ });
341
+ }
342
+ if (record.leaseUntilMillis === null || now > record.leaseUntilMillis) return conflict();
343
+ if (change._tag === "Accept") {
344
+ if (record.status !== "pending") return conflict();
345
+ if (change.receipt.threadId !== record.envelope.threadId) return Result.fail(error("corrupt", "receipt-identity"));
346
+ return Result.succeed({
347
+ ...base,
348
+ status: "accepted",
349
+ receipt: change.receipt,
350
+ leaseUntilMillis: null,
351
+ retry: {
352
+ ...record.retry,
353
+ automaticAttempts: 0,
354
+ nextAttemptAtMillis: Math.min(now + record.policy.settlementPollMillis, record.deadlineAtMillis),
355
+ lastFailure: null
356
+ }
357
+ });
358
+ }
359
+ if (change._tag === "Process") {
360
+ if (record.status !== "accepted") return conflict();
361
+ if (change.settlement.submissionId !== record.receipt?.submissionId || change.settlement.receiptId !== record.receipt.receiptId) return Result.fail(error("corrupt", "settlement-identity"));
362
+ return Result.succeed({
363
+ ...base,
364
+ status: "processed",
365
+ settlement: change.settlement,
366
+ leaseUntilMillis: null
367
+ });
368
+ }
369
+ if (change._tag === "ObservePending") {
370
+ if (record.status !== "accepted") return conflict();
371
+ if (now >= record.deadlineAtMillis) return Result.succeed(parked("deadline"));
372
+ return Result.succeed({
373
+ ...base,
374
+ leaseUntilMillis: null,
375
+ retry: {
376
+ ...record.retry,
377
+ automaticAttempts: 0,
378
+ lastFailure: null,
379
+ nextAttemptAtMillis: Math.min(now + record.policy.settlementPollMillis, record.deadlineAtMillis)
380
+ }
381
+ });
382
+ }
383
+ if (change._tag === "Refuse") {
384
+ if (record.status !== "pending") return conflict();
385
+ return Result.succeed({
386
+ ...base,
387
+ status: "refused",
388
+ refusal: change.code,
389
+ leaseUntilMillis: null
390
+ });
391
+ }
392
+ if (now >= record.deadlineAtMillis) return Result.succeed(parked("deadline"));
393
+ if (record.retry.automaticAttempts >= record.policy.maxAutomaticAttempts) return Result.succeed(parked("exhausted"));
394
+ const delay = Math.min(record.policy.retryBaseMillis * 2 ** Math.min(record.retry.automaticAttempts - 1, 52), record.policy.retryMaxMillis);
395
+ return Result.succeed({
396
+ ...base,
397
+ leaseUntilMillis: null,
398
+ retry: {
399
+ ...record.retry,
400
+ nextAttemptAtMillis: Math.min(now + (record.status === "accepted" ? record.policy.settlementPollMillis : delay), record.deadlineAtMillis),
401
+ lastFailure: change.reason
402
+ }
403
+ });
404
+ };
405
+ const MessageDeliveryDriverLimits = Schema.Struct({
406
+ batchSize: Positive.check(Schema.isLessThanOrEqualTo(100)),
407
+ concurrency: Positive.check(Schema.isLessThanOrEqualTo(32))
408
+ });
409
+ /**
410
+ * Finite, structured host pump. The host owns its Scope and wakes it from nextDeadline even
411
+ * after source/receiver settlement. Failed or interrupted calls retain their expiring claim;
412
+ * no ordinary tool is replayed here, only idempotent PreparedInput admission/status lookup.
413
+ * Spans expose operation names; envelopes, principals, and message contents are never logged.
414
+ */
415
+ var MessageDeliveryDriver = class MessageDeliveryDriver extends Context.Service()("@effect-agent/thread/MessageDeliveryDriver") {
416
+ static layer(limits = {
417
+ batchSize: 100,
418
+ concurrency: 4
419
+ }) {
420
+ return Layer.effect(MessageDeliveryDriver, Effect.gen(function* () {
421
+ const config = yield* validateMessageDelivery(MessageDeliveryDriverLimits, limits, "driver-limits");
422
+ const store = yield* MessageDeliveryStore;
423
+ const admission = yield* PreparedInputAdmission;
424
+ const crypto = yield* Crypto.Crypto;
425
+ const failpoint = yield* MessageDeliveryFailpoint;
426
+ const semaphore = yield* Semaphore.make(config.concurrency);
427
+ const process = Effect.fn("MessageDelivery.process")((key) => semaphore.withPermit(Effect.gen(function* () {
428
+ const current = yield* store.get(key);
429
+ if (current === null) return yield* error("not-found", "process");
430
+ const nowMillis = yield* Clock.currentTimeMillis;
431
+ const due = messageDeliveryDeadline(current);
432
+ if (due === null || due > nowMillis) return current;
433
+ if (current.status === "pending" && current.predecessor !== void 0) {
434
+ const previous = yield* store.get({
435
+ ownerThreadId: key.ownerThreadId,
436
+ messageId: current.predecessor
437
+ });
438
+ if (previous === null || previous.receipt === null && previous.status !== "refused") return yield* store.change(key, {
439
+ _tag: "Defer",
440
+ expectedVersion: current.version,
441
+ nowMillis,
442
+ untilMillis: nowMillis + current.policy.settlementPollMillis
443
+ });
444
+ }
445
+ const claimed = yield* store.change(key, {
446
+ _tag: "Claim",
447
+ expectedVersion: current.version,
448
+ nowMillis
449
+ });
450
+ if (claimed.status === "parked") return claimed;
451
+ const envelope = yield* Schema.encodeEffect(PreparedInput)(claimed.envelope).pipe(Effect.mapError(() => error("corrupt", "envelope")));
452
+ if ((yield* digestJson(envelope).pipe(Effect.provideService(Crypto.Crypto, crypto), Effect.mapError(() => error("storage", "digest")))) !== claimed.envelopeDigest) return yield* error("corrupt", "envelope-digest");
453
+ const timeout = Math.min(claimed.policy.attemptTimeoutMillis, (claimed.leaseUntilMillis ?? claimed.deadlineAtMillis) - (yield* Clock.currentTimeMillis));
454
+ if (timeout <= 0) return claimed;
455
+ const commit = (change) => Clock.currentTimeMillis.pipe(Effect.flatMap((time) => store.change(key, {
456
+ ...change,
457
+ expectedVersion: claimed.version,
458
+ nowMillis: time
459
+ })));
460
+ if (claimed.status === "pending") {
461
+ const outcome = yield* admitPreparedInput(admission.submit(claimed.envelope), timeout).pipe(Effect.mapError(() => error("corrupt", "admission")));
462
+ yield* failpoint.hit("message-delivery:admission:after");
463
+ if (outcome._tag === "Receipt") return yield* commit({
464
+ _tag: "Accept",
465
+ receipt: outcome.receipt
466
+ });
467
+ if (outcome._tag === "Refused") return yield* commit({
468
+ _tag: "Refuse",
469
+ code: outcome.error.code
470
+ });
471
+ return yield* commit({
472
+ _tag: "Retry",
473
+ reason: outcome.reason
474
+ });
475
+ }
476
+ if (claimed.receipt === null) return yield* error("corrupt", "receipt");
477
+ if (admission.submissionStatus === void 0) return yield* commit({
478
+ _tag: "Park",
479
+ reason: "status-unavailable"
480
+ });
481
+ const status = yield* admission.submissionStatus(claimed.receipt).pipe(Effect.timeout(timeout), Effect.map((status) => ({
482
+ _tag: "Status",
483
+ status
484
+ })), Effect.catchTag("ScheduledInputRetryable", (failure) => Effect.succeed({
485
+ _tag: "Retry",
486
+ reason: failure.reason
487
+ })), Effect.catchTag("ScheduledInputRefused", () => Effect.succeed({ _tag: "Unavailable" })), Effect.catchTag("TimeoutError", () => Effect.succeed({
488
+ _tag: "Retry",
489
+ reason: "timeout"
490
+ })), Effect.catchTag("ScheduleStorageError", (failure) => failure.reason === "unavailable" ? Effect.succeed({
491
+ _tag: "Retry",
492
+ reason: "storage"
493
+ }) : Effect.fail(error("corrupt", "status"))));
494
+ if (status._tag === "Unavailable") return yield* commit({
495
+ _tag: "Park",
496
+ reason: "status-unavailable"
497
+ });
498
+ if (status._tag === "Status" && status.status._tag === "settled") return yield* commit({
499
+ _tag: "Process",
500
+ settlement: status.status.settlement
501
+ });
502
+ if (status._tag === "Status") return yield* commit({ _tag: "ObservePending" });
503
+ return yield* commit({
504
+ _tag: "Retry",
505
+ reason: status.reason
506
+ });
507
+ })).pipe(Effect.catchTag("MessageDeliveryError", (failure) => failure.reason === "conflict" ? store.get(key).pipe(Effect.filterOrFail((record) => record !== null, () => failure)) : Effect.fail(failure))));
508
+ return MessageDeliveryDriver.of({
509
+ process,
510
+ runDue: Effect.fn("MessageDelivery.runDue")(function* (ownerThreadId) {
511
+ const keys = yield* store.due(yield* Clock.currentTimeMillis, config.batchSize, ownerThreadId);
512
+ return yield* Effect.forEach(keys, process, { concurrency: config.concurrency });
513
+ }),
514
+ retry: Effect.fn("MessageDelivery.retry")(function* (key, expectedVersion, deadlineAtMillis) {
515
+ return yield* store.change(key, {
516
+ _tag: "Recover",
517
+ expectedVersion,
518
+ deadlineAtMillis,
519
+ nowMillis: yield* Clock.currentTimeMillis
520
+ });
521
+ })
522
+ });
523
+ }));
524
+ }
525
+ };
526
+ //#endregion
527
+ export { MessageDeliveryChange, MessageDeliveryDriver, MessageDeliveryDriverLimits, MessageDeliveryError, MessageDeliveryFailpoint, MessageDeliveryFailpointError, MessageDeliveryKey, MessageDeliveryPage, MessageDeliveryPageRequest, MessageDeliveryPolicy, MessageDeliveryRecord, MessageDeliveryStore, MessageDeliveryStoreLimits, applyMessageDeliveryChange, defaultMessageDeliveryPolicy, defaultMessageDeliveryStoreLimits, isWorkerUpdateDelivery, messageDeliveryCapacity, messageDeliveryDeadline, messageDeliveryKeyString, messageDeliveryUsesCapacity, prepareMessageDelivery, readPending, sameMessageDeliveryIdentity, MessageDelivery_exports as t, validateMessageDelivery };
528
+
529
+ //# sourceMappingURL=MessageDelivery.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MessageDelivery.mjs","names":[],"sources":["../../src/durable/MessageDelivery.ts"],"sourcesContent":["import { Clock, Context, Crypto, Effect, Layer, Result, Schema, Semaphore } from \"effect\";\n\nimport { ThreadId } from \"../core/Identifiers.ts\";\nimport { Receipt } from \"../core/Receipt.ts\";\nimport { WorkerUpdate } from \"../core/Worker.ts\";\nimport { digestJson } from \"./Digest.ts\";\nimport { admitPreparedInput, PreparedInputAdmission } from \"./PreparedInputAdmission.ts\";\nimport { Digest } from \"./Records.ts\";\nimport { ScheduleInstant, ScheduleRetry, ScheduleRetryReason } from \"./Schedule.ts\";\nimport { IdempotencyKey, Settlement } from \"./SubmissionLedger.ts\";\nimport { PreparedInput } from \"./Subscription.ts\";\n\nconst Positive = Schema.Int.check(Schema.isGreaterThan(0));\nconst BoundedName = Schema.String.check(Schema.isMinLength(1), Schema.isMaxLength(256));\n\n/** An owner is always a source Thread. Destination admission has its own frozen key. */\nexport const MessageDeliveryKey = Schema.Struct({\n ownerThreadId: ThreadId,\n messageId: IdempotencyKey,\n});\n\nexport type MessageDeliveryKey = typeof MessageDeliveryKey.Type;\n\nexport const MessageDeliveryPolicy = Schema.Struct({\n maxAutomaticAttempts: Positive.check(Schema.isLessThanOrEqualTo(100)),\n attemptTimeoutMillis: Positive.check(Schema.isLessThanOrEqualTo(300_000)),\n retryBaseMillis: Positive,\n retryMaxMillis: Positive,\n settlementPollMillis: Positive,\n}).check(Schema.makeFilter((value) => value.retryBaseMillis <= value.retryMaxMillis));\n\nexport type MessageDeliveryPolicy = typeof MessageDeliveryPolicy.Type;\n\nexport const defaultMessageDeliveryPolicy: MessageDeliveryPolicy = {\n maxAutomaticAttempts: 8,\n attemptTimeoutMillis: 30_000,\n retryBaseMillis: 1_000,\n retryMaxMillis: 60_000,\n settlementPollMillis: 5_000,\n};\n\nexport const MessageDeliveryStoreLimits = Schema.Struct({\n maxPendingPerOwner: Positive,\n maxRetainedPerOwner: Positive,\n maxEnvelopeBytes: Positive,\n /** Separate update capacity preserves the full ordinary allowance for terminal reports. */\n maxPendingUpdatesPerOwner: Schema.optionalKey(Positive),\n maxRetainedUpdatesPerOwner: Schema.optionalKey(Positive),\n}).check(\n Schema.makeFilter(\n (value) =>\n value.maxPendingPerOwner <= value.maxRetainedPerOwner &&\n (value.maxPendingUpdatesPerOwner ?? 32) <= (value.maxRetainedUpdatesPerOwner ?? 256),\n ),\n);\n\nexport type MessageDeliveryStoreLimits = typeof MessageDeliveryStoreLimits.Type;\n\nexport const defaultMessageDeliveryStoreLimits: MessageDeliveryStoreLimits = {\n maxPendingPerOwner: 100,\n maxRetainedPerOwner: 1_000,\n maxEnvelopeBytes: 262_144,\n maxPendingUpdatesPerOwner: 32,\n maxRetainedUpdatesPerOwner: 256,\n};\n\nconst ParkReason = Schema.Literals([\"exhausted\", \"deadline\", \"status-unavailable\"]);\n\nexport const MessageDeliveryRecord = Schema.Struct({\n schemaVersion: Schema.Literal(1),\n key: MessageDeliveryKey,\n envelope: PreparedInput,\n envelopeDigest: Digest,\n /** Same-owner predecessor whose admission must be known before this message is submitted. */\n predecessor: Schema.optionalKey(IdempotencyKey),\n createdAtMillis: ScheduleInstant,\n /** Immutable creation identity; explicit recovery only renews deadlineAtMillis. */\n initialDeadlineAtMillis: ScheduleInstant,\n deadlineAtMillis: ScheduleInstant,\n policy: MessageDeliveryPolicy,\n version: Positive,\n status: Schema.Literals([\"pending\", \"accepted\", \"processed\", \"refused\", \"parked\"]),\n receipt: Schema.NullOr(Receipt),\n settlement: Schema.NullOr(Settlement),\n refusal: Schema.NullOr(BoundedName),\n parkReason: Schema.NullOr(ParkReason),\n leaseUntilMillis: Schema.NullOr(ScheduleInstant),\n retry: ScheduleRetry,\n}).check(\n Schema.makeFilter(\n (record) =>\n record.deadlineAtMillis > record.createdAtMillis &&\n record.initialDeadlineAtMillis > record.createdAtMillis &&\n record.predecessor !== record.key.messageId &&\n (record.status === \"processed\") === (record.settlement !== null) &&\n (record.status === \"refused\") === (record.refusal !== null) &&\n (record.status === \"parked\") === (record.parkReason !== null) &&\n (record.status === \"parked\") === record.retry.parked &&\n (record.status === \"accepted\" || record.status === \"processed\"\n ? record.receipt !== null\n : true) &&\n (record.status === \"pending\" || record.status === \"refused\"\n ? record.receipt === null\n : true) &&\n (record.receipt === null || record.receipt.threadId === record.envelope.threadId) &&\n (record.settlement === null ||\n (record.settlement.receiptId === record.receipt?.receiptId &&\n record.settlement.submissionId === record.receipt.submissionId)) &&\n (record.status === \"processed\" || record.status === \"refused\" || record.status === \"parked\"\n ? record.leaseUntilMillis === null\n : true),\n ),\n);\n\nexport type MessageDeliveryRecord = typeof MessageDeliveryRecord.Type;\n\nexport class MessageDeliveryError extends Schema.TaggedError<MessageDeliveryError>()(\n \"MessageDeliveryError\",\n {\n reason: Schema.Literals([\n \"validation\",\n \"conflict\",\n \"capacity\",\n \"not-found\",\n \"storage\",\n \"corrupt\",\n ]),\n operation: Schema.String,\n },\n) {}\n\nexport class MessageDeliveryFailpointError extends Schema.TaggedError<MessageDeliveryFailpointError>()(\n \"MessageDeliveryFailpointError\",\n {\n point: Schema.String,\n },\n) {}\n\nexport type MessageDeliveryFailure = MessageDeliveryError | MessageDeliveryFailpointError;\n\nexport const MessageDeliveryFailpoint = Context.Reference<{\n readonly hit: (point: string) => Effect.Effect<void, MessageDeliveryFailpointError>;\n}>(\"@effect-agent/thread/MessageDeliveryFailpoint\", {\n defaultValue: () => ({ hit: () => Effect.void }),\n});\n\nconst fence = { expectedVersion: Positive, nowMillis: ScheduleInstant };\n\nexport const MessageDeliveryChange = Schema.Union([\n Schema.Struct({ _tag: Schema.Literal(\"Claim\"), ...fence }),\n Schema.Struct({ _tag: Schema.Literal(\"Accept\"), ...fence, receipt: Receipt }),\n Schema.Struct({ _tag: Schema.Literal(\"Process\"), ...fence, settlement: Settlement }),\n Schema.Struct({ _tag: Schema.Literal(\"ObservePending\"), ...fence }),\n Schema.Struct({ _tag: Schema.Literal(\"Refuse\"), ...fence, code: BoundedName }),\n Schema.Struct({ _tag: Schema.Literal(\"Retry\"), ...fence, reason: ScheduleRetryReason }),\n Schema.Struct({ _tag: Schema.Literal(\"Park\"), ...fence, reason: ParkReason }),\n Schema.Struct({ _tag: Schema.Literal(\"Recover\"), ...fence, deadlineAtMillis: ScheduleInstant }),\n /** Waiting for earlier admission never spends an automatic transport attempt. */\n Schema.Struct({ _tag: Schema.Literal(\"Defer\"), ...fence, untilMillis: ScheduleInstant }),\n]);\n\nexport type MessageDeliveryChange = typeof MessageDeliveryChange.Type;\n\nexport const MessageDeliveryPageRequest = Schema.Struct({\n ownerThreadId: ThreadId,\n limit: Positive.check(Schema.isLessThanOrEqualTo(4096)),\n after: Schema.optionalKey(IdempotencyKey),\n /** Native pending index, including accepted, future-due and parked obligations. */\n pendingOnly: Schema.optionalKey(Schema.Boolean),\n});\n\nexport type MessageDeliveryPageRequest = typeof MessageDeliveryPageRequest.Type;\n\nexport const MessageDeliveryPage = Schema.Struct({\n items: Schema.Array(MessageDeliveryRecord),\n next: Schema.NullOr(IdempotencyKey),\n});\n\nexport type MessageDeliveryPage = typeof MessageDeliveryPage.Type;\n\n/**\n * Trusted host port, independent of either Thread's active Submission. List/get require an owner.\n * Inserts and changes are atomic; identical inserts return current state even after completion.\n * No automatic deletion: completed rows retain deduplication evidence and count toward retention.\n * `due`/`nextDeadline` are bounded host recovery seams, never model-facing management operations.\n */\nexport class MessageDeliveryStore extends Context.Service<\n MessageDeliveryStore,\n {\n readonly limits: MessageDeliveryStoreLimits;\n readonly maxStoredValueBytes: number;\n readonly insert: (\n record: MessageDeliveryRecord,\n ) => Effect.Effect<MessageDeliveryRecord, MessageDeliveryFailure>;\n readonly get: (\n key: MessageDeliveryKey,\n ) => Effect.Effect<MessageDeliveryRecord | null, MessageDeliveryError>;\n readonly list: (\n request: MessageDeliveryPageRequest,\n ) => Effect.Effect<MessageDeliveryPage, MessageDeliveryError>;\n readonly change: (\n key: MessageDeliveryKey,\n change: MessageDeliveryChange,\n ) => Effect.Effect<MessageDeliveryRecord, MessageDeliveryFailure>;\n readonly due: (\n nowMillis: number,\n limit: number,\n ownerThreadId?: ThreadId,\n ) => Effect.Effect<ReadonlyArray<MessageDeliveryKey>, MessageDeliveryError>;\n readonly nextDeadline: (\n ownerThreadId?: ThreadId,\n ) => Effect.Effect<number | null, MessageDeliveryError>;\n }\n>()(\"@effect-agent/thread/MessageDeliveryStore\") {}\n\n/**\n * Read current source-owned obligations without acquiring a runtime or scanning completed history.\n * A retained receipt is native accepted-admission evidence, not proof of destination materialization.\n * Shipped worker admission reserves the source input before returning that receipt. Policy can\n * therefore leave accepted worker discovery to canonical outstanding inputs; a no-receipt action\n * delivery remains uncertain, including when parked or due in the future.\n */\nexport const readPending = Effect.fn(\"MessageDelivery.readPending\")(function* (\n request: Pick<MessageDeliveryPageRequest, \"ownerThreadId\" | \"limit\">,\n) {\n const store = yield* MessageDeliveryStore;\n\n const input = yield* validateMessageDelivery(\n MessageDeliveryPageRequest,\n {\n ownerThreadId: request.ownerThreadId,\n limit: request.limit,\n pendingOnly: true,\n },\n \"read-pending\",\n );\n\n const page = yield* validateMessageDelivery(\n MessageDeliveryPage,\n yield* store.list(input),\n \"read-pending result\",\n );\n\n if (page.next !== null || page.items.length > input.limit)\n return yield* MessageDeliveryError.make({ reason: \"capacity\", operation: \"read-pending\" });\n const records = page.items;\n\n if (\n records.some(\n (record) =>\n record.key.ownerThreadId !== input.ownerThreadId || !messageDeliveryUsesCapacity(record),\n ) ||\n new Set(records.map((record) => record.key.messageId)).size !== records.length\n )\n return yield* MessageDeliveryError.make({\n reason: \"corrupt\",\n operation: \"read-pending result\",\n });\n\n return records;\n});\n\nexport const messageDeliveryKeyString = (key: MessageDeliveryKey): string =>\n JSON.stringify([key.ownerThreadId, key.messageId]);\n\nexport const messageDeliveryUsesCapacity = (record: MessageDeliveryRecord): boolean =>\n record.status !== \"processed\" && record.status !== \"refused\";\n\nexport const isWorkerUpdateDelivery = (record: MessageDeliveryRecord): boolean =>\n Schema.is(WorkerUpdate)(record.envelope.messageAdmission);\n\nexport const messageDeliveryCapacity = (limits: MessageDeliveryStoreLimits, update: boolean) => ({\n pending: update ? (limits.maxPendingUpdatesPerOwner ?? 32) : limits.maxPendingPerOwner,\n retained: update ? (limits.maxRetainedUpdatesPerOwner ?? 256) : limits.maxRetainedPerOwner,\n});\n\nexport const messageDeliveryDeadline = (record: MessageDeliveryRecord): number | null =>\n record.status === \"pending\" || record.status === \"accepted\"\n ? Math.min(record.deadlineAtMillis, record.leaseUntilMillis ?? record.retry.nextAttemptAtMillis)\n : null;\n\n/** Creation identity deliberately excludes operational counters and renewed recovery deadlines. */\nexport const sameMessageDeliveryIdentity = (\n left: MessageDeliveryRecord,\n right: MessageDeliveryRecord,\n): boolean =>\n messageDeliveryKeyString(left.key) === messageDeliveryKeyString(right.key) &&\n left.envelopeDigest === right.envelopeDigest &&\n left.predecessor === right.predecessor &&\n Schema.toEquivalence(PreparedInput)(left.envelope, right.envelope) &&\n Schema.toEquivalence(MessageDeliveryPolicy)(left.policy, right.policy) &&\n left.createdAtMillis === right.createdAtMillis &&\n left.initialDeadlineAtMillis === right.initialDeadlineAtMillis;\n\nconst error = (reason: MessageDeliveryError[\"reason\"], operation: string) =>\n MessageDeliveryError.make({ reason, operation });\n\nexport const validateMessageDelivery = <A, I>(\n schema: Schema.Codec<A, I>,\n value: unknown,\n operation: string,\n) =>\n Schema.decodeUnknownEffect(Schema.toType(schema))(value).pipe(\n Effect.mapError(() => error(\"validation\", operation)),\n );\n\nconst MessageDeliveryPreparation = Schema.Struct({\n key: MessageDeliveryKey,\n envelope: PreparedInput,\n createdAtMillis: ScheduleInstant,\n deadlineAtMillis: ScheduleInstant,\n policy: MessageDeliveryPolicy,\n predecessor: Schema.optionalKey(IdempotencyKey),\n});\n\n/** Freeze and digest the complete admission envelope before publishing the obligation. */\nexport const prepareMessageDelivery = Effect.fn(\"MessageDelivery.prepare\")(function* (options: {\n readonly key: MessageDeliveryKey;\n readonly envelope: PreparedInput;\n readonly createdAtMillis: number;\n readonly deadlineAtMillis: number;\n readonly policy?: MessageDeliveryPolicy;\n readonly predecessor?: IdempotencyKey;\n}): Effect.fn.Return<MessageDeliveryRecord, MessageDeliveryError, Crypto.Crypto> {\n // JSON detaches every caller-owned value before Crypto can suspend preparation.\n const snapshot = yield* Schema.encodeEffect(Schema.fromJsonString(MessageDeliveryPreparation))({\n ...options,\n policy: options.policy ?? defaultMessageDeliveryPolicy,\n }).pipe(\n Effect.flatMap(Schema.decodeEffect(Schema.fromJsonString(MessageDeliveryPreparation))),\n Effect.mapError(() => error(\"validation\", \"prepare\")),\n );\n\n const envelope = snapshot.envelope;\n\n const encoded = yield* Schema.encodeEffect(PreparedInput)(envelope).pipe(\n Effect.mapError(() => error(\"validation\", \"prepare\")),\n );\n\n const inputDigest = yield* digestJson(encoded.input).pipe(\n Effect.mapError(() => error(\"storage\", \"digest\")),\n );\n\n if (inputDigest !== envelope.inputDigest) return yield* error(\"corrupt\", \"input-digest\");\n\n const envelopeDigest = yield* digestJson(encoded).pipe(\n Effect.mapError(() => error(\"storage\", \"digest\")),\n );\n\n return yield* validateMessageDelivery(\n MessageDeliveryRecord,\n {\n schemaVersion: 1,\n key: snapshot.key,\n envelope,\n envelopeDigest,\n ...(snapshot.predecessor === undefined ? {} : { predecessor: snapshot.predecessor }),\n createdAtMillis: snapshot.createdAtMillis,\n initialDeadlineAtMillis: snapshot.deadlineAtMillis,\n deadlineAtMillis: snapshot.deadlineAtMillis,\n policy: snapshot.policy,\n version: 1,\n status: \"pending\",\n receipt: null,\n settlement: null,\n refusal: null,\n parkReason: null,\n leaseUntilMillis: null,\n retry: {\n attempts: 0,\n generation: 0,\n automaticAttempts: 0,\n parked: false,\n nextAttemptAtMillis: snapshot.createdAtMillis,\n lastAttemptAtMillis: null,\n lastFailure: null,\n },\n },\n \"prepare\",\n );\n});\n\n/** Pure reducer used under the adapter's atomic compare-and-swap boundary. */\nexport const applyMessageDeliveryChange = (\n record: MessageDeliveryRecord,\n change: MessageDeliveryChange,\n): Result.Result<MessageDeliveryRecord, MessageDeliveryError> => {\n const conflict = () => Result.fail(error(\"conflict\", change._tag));\n\n if (record.version !== change.expectedVersion) return conflict();\n if (record.status === \"processed\" || record.status === \"refused\") return conflict();\n const now = change.nowMillis;\n const base = { ...record, version: record.version + 1 };\n\n const parked = (reason: typeof ParkReason.Type): MessageDeliveryRecord => ({\n ...base,\n status: \"parked\",\n parkReason: reason,\n leaseUntilMillis: null,\n retry: { ...record.retry, parked: true },\n });\n\n if (change._tag === \"Defer\") {\n if (\n record.status !== \"pending\" ||\n (record.leaseUntilMillis !== null && record.leaseUntilMillis > now)\n )\n return conflict();\n if (now >= record.deadlineAtMillis) return Result.succeed(parked(\"deadline\"));\n if (change.untilMillis <= now) return conflict();\n\n return Result.succeed({\n ...base,\n leaseUntilMillis: null,\n retry: {\n ...record.retry,\n nextAttemptAtMillis: Math.min(change.untilMillis, record.deadlineAtMillis),\n },\n });\n }\n\n if (change._tag === \"Recover\") {\n if (record.status !== \"parked\" || change.deadlineAtMillis <= now) return conflict();\n\n return Result.succeed({\n ...base,\n deadlineAtMillis: change.deadlineAtMillis,\n status: record.receipt === null ? \"pending\" : \"accepted\",\n parkReason: null,\n retry: {\n ...record.retry,\n generation: record.retry.generation + 1,\n automaticAttempts: 0,\n parked: false,\n nextAttemptAtMillis: now,\n },\n });\n }\n if (record.status === \"parked\") return conflict();\n if (change._tag === \"Park\") return Result.succeed(parked(change.reason));\n if (change._tag === \"Claim\") {\n const due = messageDeliveryDeadline(record);\n\n if (due === null || due > now) return conflict();\n if (now >= record.deadlineAtMillis) return Result.succeed(parked(\"deadline\"));\n if (record.retry.automaticAttempts >= record.policy.maxAutomaticAttempts)\n return Result.succeed(parked(\"exhausted\"));\n\n return Result.succeed({\n ...base,\n leaseUntilMillis: Math.min(now + record.policy.attemptTimeoutMillis, record.deadlineAtMillis),\n retry: {\n ...record.retry,\n attempts: record.retry.attempts + 1,\n automaticAttempts: record.retry.automaticAttempts + 1,\n lastAttemptAtMillis: now,\n },\n });\n }\n if (record.leaseUntilMillis === null || now > record.leaseUntilMillis) return conflict();\n if (change._tag === \"Accept\") {\n if (record.status !== \"pending\") return conflict();\n if (change.receipt.threadId !== record.envelope.threadId)\n return Result.fail(error(\"corrupt\", \"receipt-identity\"));\n\n return Result.succeed({\n ...base,\n status: \"accepted\",\n receipt: change.receipt,\n leaseUntilMillis: null,\n retry: {\n ...record.retry,\n automaticAttempts: 0,\n nextAttemptAtMillis: Math.min(\n now + record.policy.settlementPollMillis,\n record.deadlineAtMillis,\n ),\n lastFailure: null,\n },\n });\n }\n if (change._tag === \"Process\") {\n if (record.status !== \"accepted\") return conflict();\n if (\n change.settlement.submissionId !== record.receipt?.submissionId ||\n change.settlement.receiptId !== record.receipt.receiptId\n )\n return Result.fail(error(\"corrupt\", \"settlement-identity\"));\n\n return Result.succeed({\n ...base,\n status: \"processed\",\n settlement: change.settlement,\n leaseUntilMillis: null,\n });\n }\n if (change._tag === \"ObservePending\") {\n if (record.status !== \"accepted\") return conflict();\n if (now >= record.deadlineAtMillis) return Result.succeed(parked(\"deadline\"));\n\n return Result.succeed({\n ...base,\n leaseUntilMillis: null,\n retry: {\n ...record.retry,\n automaticAttempts: 0,\n lastFailure: null,\n nextAttemptAtMillis: Math.min(\n now + record.policy.settlementPollMillis,\n record.deadlineAtMillis,\n ),\n },\n });\n }\n if (change._tag === \"Refuse\") {\n if (record.status !== \"pending\") return conflict();\n\n return Result.succeed({\n ...base,\n status: \"refused\",\n refusal: change.code,\n leaseUntilMillis: null,\n });\n }\n if (now >= record.deadlineAtMillis) return Result.succeed(parked(\"deadline\"));\n if (record.retry.automaticAttempts >= record.policy.maxAutomaticAttempts)\n return Result.succeed(parked(\"exhausted\"));\n\n const delay = Math.min(\n record.policy.retryBaseMillis * 2 ** Math.min(record.retry.automaticAttempts - 1, 52),\n record.policy.retryMaxMillis,\n );\n\n return Result.succeed({\n ...base,\n leaseUntilMillis: null,\n retry: {\n ...record.retry,\n nextAttemptAtMillis: Math.min(\n now + (record.status === \"accepted\" ? record.policy.settlementPollMillis : delay),\n record.deadlineAtMillis,\n ),\n lastFailure: change.reason,\n },\n });\n};\n\nexport const MessageDeliveryDriverLimits = Schema.Struct({\n batchSize: Positive.check(Schema.isLessThanOrEqualTo(100)),\n concurrency: Positive.check(Schema.isLessThanOrEqualTo(32)),\n});\n\nexport type MessageDeliveryDriverLimits = typeof MessageDeliveryDriverLimits.Type;\n\n/**\n * Finite, structured host pump. The host owns its Scope and wakes it from nextDeadline even\n * after source/receiver settlement. Failed or interrupted calls retain their expiring claim;\n * no ordinary tool is replayed here, only idempotent PreparedInput admission/status lookup.\n * Spans expose operation names; envelopes, principals, and message contents are never logged.\n */\nexport class MessageDeliveryDriver extends Context.Service<\n MessageDeliveryDriver,\n {\n readonly process: (\n key: MessageDeliveryKey,\n ) => Effect.Effect<MessageDeliveryRecord, MessageDeliveryFailure>;\n readonly runDue: (\n ownerThreadId?: ThreadId,\n ) => Effect.Effect<ReadonlyArray<MessageDeliveryRecord>, MessageDeliveryFailure>;\n readonly retry: (\n key: MessageDeliveryKey,\n expectedVersion: number,\n deadlineAtMillis: number,\n ) => Effect.Effect<MessageDeliveryRecord, MessageDeliveryFailure>;\n }\n>()(\"@effect-agent/thread/MessageDeliveryDriver\") {\n static layer(\n limits: MessageDeliveryDriverLimits = { batchSize: 100, concurrency: 4 },\n ): Layer.Layer<\n MessageDeliveryDriver,\n MessageDeliveryError,\n MessageDeliveryStore | PreparedInputAdmission | Crypto.Crypto\n > {\n return Layer.effect(\n MessageDeliveryDriver,\n Effect.gen(function* () {\n const config = yield* validateMessageDelivery(\n MessageDeliveryDriverLimits,\n limits,\n \"driver-limits\",\n );\n\n const store = yield* MessageDeliveryStore;\n const admission = yield* PreparedInputAdmission;\n const crypto = yield* Crypto.Crypto;\n const failpoint = yield* MessageDeliveryFailpoint;\n const semaphore = yield* Semaphore.make(config.concurrency);\n\n const process = Effect.fn(\"MessageDelivery.process\")((key: MessageDeliveryKey) =>\n semaphore\n .withPermit(\n Effect.gen(function* () {\n const current = yield* store.get(key);\n\n if (current === null) return yield* error(\"not-found\", \"process\");\n const nowMillis = yield* Clock.currentTimeMillis;\n const due = messageDeliveryDeadline(current);\n\n if (due === null || due > nowMillis) return current;\n\n if (current.status === \"pending\" && current.predecessor !== undefined) {\n const previous = yield* store.get({\n ownerThreadId: key.ownerThreadId,\n messageId: current.predecessor,\n });\n\n if (\n previous === null ||\n (previous.receipt === null && previous.status !== \"refused\")\n ) {\n return yield* store.change(key, {\n _tag: \"Defer\",\n expectedVersion: current.version,\n nowMillis,\n untilMillis: nowMillis + current.policy.settlementPollMillis,\n });\n }\n }\n\n const claimed = yield* store.change(key, {\n _tag: \"Claim\",\n expectedVersion: current.version,\n nowMillis,\n });\n\n if (claimed.status === \"parked\") return claimed;\n\n const envelope = yield* Schema.encodeEffect(PreparedInput)(claimed.envelope).pipe(\n Effect.mapError(() => error(\"corrupt\", \"envelope\")),\n );\n\n const digest = yield* digestJson(envelope).pipe(\n Effect.provideService(Crypto.Crypto, crypto),\n Effect.mapError(() => error(\"storage\", \"digest\")),\n );\n\n if (digest !== claimed.envelopeDigest)\n return yield* error(\"corrupt\", \"envelope-digest\");\n\n const timeout = Math.min(\n claimed.policy.attemptTimeoutMillis,\n (claimed.leaseUntilMillis ?? claimed.deadlineAtMillis) -\n (yield* Clock.currentTimeMillis),\n );\n\n // Digest computation cannot extend this claim's admission authority.\n if (timeout <= 0) return claimed;\n\n type WithoutFence<T> = T extends MessageDeliveryChange\n ? Omit<T, \"expectedVersion\" | \"nowMillis\">\n : never;\n\n const commit = (change: WithoutFence<MessageDeliveryChange>) =>\n Clock.currentTimeMillis.pipe(\n Effect.flatMap((time) =>\n store.change(key, {\n ...change,\n expectedVersion: claimed.version,\n nowMillis: time,\n }),\n ),\n );\n\n if (claimed.status === \"pending\") {\n const outcome = yield* admitPreparedInput(\n admission.submit(claimed.envelope),\n timeout,\n ).pipe(Effect.mapError(() => error(\"corrupt\", \"admission\")));\n\n yield* failpoint.hit(\"message-delivery:admission:after\");\n if (outcome._tag === \"Receipt\")\n return yield* commit({ _tag: \"Accept\", receipt: outcome.receipt });\n if (outcome._tag === \"Refused\")\n return yield* commit({ _tag: \"Refuse\", code: outcome.error.code });\n\n return yield* commit({ _tag: \"Retry\", reason: outcome.reason });\n }\n if (claimed.receipt === null) return yield* error(\"corrupt\", \"receipt\");\n if (admission.submissionStatus === undefined)\n return yield* commit({ _tag: \"Park\", reason: \"status-unavailable\" });\n\n const status = yield* admission.submissionStatus(claimed.receipt).pipe(\n Effect.timeout(timeout),\n Effect.map((status) => ({ _tag: \"Status\" as const, status })),\n Effect.catchTag(\"ScheduledInputRetryable\", (failure) =>\n Effect.succeed({ _tag: \"Retry\" as const, reason: failure.reason }),\n ),\n Effect.catchTag(\"ScheduledInputRefused\", () =>\n Effect.succeed({ _tag: \"Unavailable\" as const }),\n ),\n Effect.catchTag(\"TimeoutError\", () =>\n Effect.succeed({ _tag: \"Retry\" as const, reason: \"timeout\" as const }),\n ),\n Effect.catchTag(\"ScheduleStorageError\", (failure) =>\n failure.reason === \"unavailable\"\n ? Effect.succeed({ _tag: \"Retry\" as const, reason: \"storage\" as const })\n : Effect.fail(error(\"corrupt\", \"status\")),\n ),\n );\n\n if (status._tag === \"Unavailable\")\n return yield* commit({ _tag: \"Park\", reason: \"status-unavailable\" });\n if (status._tag === \"Status\" && status.status._tag === \"settled\")\n return yield* commit({ _tag: \"Process\", settlement: status.status.settlement });\n if (status._tag === \"Status\") return yield* commit({ _tag: \"ObservePending\" });\n\n return yield* commit({ _tag: \"Retry\", reason: status.reason });\n }),\n )\n .pipe(\n Effect.catchTag(\"MessageDeliveryError\", (failure) =>\n failure.reason === \"conflict\"\n ? store.get(key).pipe(\n Effect.filterOrFail(\n (record) => record !== null,\n () => failure,\n ),\n )\n : Effect.fail(failure),\n ),\n ),\n );\n\n return MessageDeliveryDriver.of({\n process,\n runDue: Effect.fn(\"MessageDelivery.runDue\")(function* (ownerThreadId) {\n const keys = yield* store.due(\n yield* Clock.currentTimeMillis,\n config.batchSize,\n ownerThreadId,\n );\n\n return yield* Effect.forEach(keys, process, { concurrency: config.concurrency });\n }),\n retry: Effect.fn(\"MessageDelivery.retry\")(\n function* (key, expectedVersion, deadlineAtMillis) {\n return yield* store.change(key, {\n _tag: \"Recover\",\n expectedVersion,\n deadlineAtMillis,\n nowMillis: yield* Clock.currentTimeMillis,\n });\n },\n ),\n });\n }),\n );\n }\n}\n"],"mappings":"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"}