effect-agent 0.1.0-beta.12 → 0.1.0-beta.121

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 (553) hide show
  1. package/dist/Agent-1DMSO_Fl.mjs +86 -0
  2. package/dist/Agent-1DMSO_Fl.mjs.map +1 -0
  3. package/dist/Agent-D9cXqfF3.d.mts +252 -0
  4. package/dist/AgentError-Bn1ytXRD.d.mts +117 -0
  5. package/dist/AgentPolicy-BqDoSXO6.d.mts +96 -0
  6. package/dist/AgentRuntime-BUxDdLpw.d.mts +346 -0
  7. package/dist/AgentRuntime-Cp1hAb-W.mjs +4739 -0
  8. package/dist/AgentRuntime-Cp1hAb-W.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-B-9w7jDt.mjs +7061 -0
  13. package/dist/DurableAgentRuntime-B-9w7jDt.mjs.map +1 -0
  14. package/dist/DurableFailpoint-Cnr3wx1L.d.mts +41 -0
  15. package/dist/DurableStep-Cry_iol4.d.mts +103 -0
  16. package/dist/EventSource-CnlZ3Kma.d.mts +51 -0
  17. package/dist/FailureDiagnostic-BElLOoED.mjs +274 -0
  18. package/dist/FailureDiagnostic-BElLOoED.mjs.map +1 -0
  19. package/dist/FailureDiagnostic-CaAkzGHL.d.mts +223 -0
  20. package/dist/Identifiers-CN2s30fF.d.mts +40 -0
  21. package/dist/InMemory.d.mts +24 -0
  22. package/dist/InMemory.mjs +24 -0
  23. package/dist/InMemory.mjs.map +1 -0
  24. package/dist/MemoryNamespace-BbRW5p71.d.mts +36 -0
  25. package/dist/MemoryReference-B8Q3UJoJ.d.mts +79 -0
  26. package/dist/Messaging-Dkg87ebg.d.mts +221 -0
  27. package/dist/Messaging-JYYN3oYS.d.mts +1067 -0
  28. package/dist/MessagingHost-CqzpxbGz.d.mts +74 -0
  29. package/dist/MessagingHost-DfsbMPvq.mjs +110 -0
  30. package/dist/MessagingHost-DfsbMPvq.mjs.map +1 -0
  31. package/dist/OperationAuthorizer-TzcQtpX5.d.mts +61 -0
  32. package/dist/Output-V-6YL1_Z.d.mts +25 -0
  33. package/dist/PageCapture-Df8Xwskw.d.mts +583 -0
  34. package/dist/PageScreenshot-BpgZKAxl.d.mts +48 -0
  35. package/dist/PreparedInputAdmission-BQLGldl-.d.mts +42 -0
  36. package/dist/Receipt-BAHyigAF.d.mts +33 -0
  37. package/dist/Records-D88mgvyS.d.mts +4214 -0
  38. package/dist/RunEvent-DIrzkjLr.d.mts +460 -0
  39. package/dist/RunEventSink-D5aVhISG.d.mts +108 -0
  40. package/dist/RunJournal-BXrq0VIK.mjs +931 -0
  41. package/dist/RunJournal-BXrq0VIK.mjs.map +1 -0
  42. package/dist/RunOptions-CSBsSj0X.d.mts +935 -0
  43. package/dist/RunPolicyUsage-ClZxyR46.d.mts +21 -0
  44. package/dist/Sandbox-CEsDWBLq.d.mts +173 -0
  45. package/dist/Schedule-BIOHA6RR.d.mts +847 -0
  46. package/dist/Scheduling-DPb2QyAK.mjs +691 -0
  47. package/dist/Scheduling-DPb2QyAK.mjs.map +1 -0
  48. package/dist/Subagent-CNik9RiA.d.mts +1635 -0
  49. package/dist/Subagent-DCrB7an7.mjs +1498 -0
  50. package/dist/Subagent-DCrB7an7.mjs.map +1 -0
  51. package/dist/SubagentContract-DdT7Cqe6.d.mts +116 -0
  52. package/dist/SubagentHost-4WB8Hj0C.d.mts +164 -0
  53. package/dist/Subscription-CRteOKRf.d.mts +948 -0
  54. package/dist/SubscriptionInput-oNcwTPti.d.mts +41 -0
  55. package/dist/Thread-DOBQ0QUY.d.mts +96 -0
  56. package/dist/ThreadHistory-tS1KwxHR.d.mts +60 -0
  57. package/dist/ToolBroker-DWs4tZra.d.mts +133 -0
  58. package/dist/ToolExposure-9uF_Yo0T.mjs +10 -0
  59. package/dist/ToolExposure-9uF_Yo0T.mjs.map +1 -0
  60. package/dist/ToolExposure-C93U1sPu.mjs +30 -0
  61. package/dist/ToolExposure-C93U1sPu.mjs.map +1 -0
  62. package/dist/ToolExposure-UCN12eCd.d.mts +39 -0
  63. package/dist/ToolExposure-r2eOWk4F.d.mts +46 -0
  64. package/dist/ToolExposure.d.mts +8 -0
  65. package/dist/ToolExposure.mjs +21 -0
  66. package/dist/ToolExposure.mjs.map +1 -0
  67. package/dist/ToolReconciler-BmVRAHKs.d.mts +80 -0
  68. package/dist/ToolResult-BKdqWRff.d.mts +78 -0
  69. package/dist/Usage-Dx0aknfk.d.mts +121 -0
  70. package/dist/WakeScheduler-EjUF-GhC.d.mts +56 -0
  71. package/dist/Worker-CfwzMZEK.mjs +271 -0
  72. package/dist/Worker-CfwzMZEK.mjs.map +1 -0
  73. package/dist/Worker-fwWkBg12.d.mts +472 -0
  74. package/dist/agent-registration-CKNsrpwo.mjs +201 -0
  75. package/dist/agent-registration-CKNsrpwo.mjs.map +1 -0
  76. package/dist/capabilities/Approval.d.mts +114 -0
  77. package/dist/capabilities/Approval.mjs +226 -0
  78. package/dist/capabilities/Approval.mjs.map +1 -0
  79. package/dist/capabilities/Budget.d.mts +112 -0
  80. package/dist/capabilities/Budget.mjs +346 -0
  81. package/dist/capabilities/Budget.mjs.map +1 -0
  82. package/dist/capabilities/CodeMode.d.mts +157 -0
  83. package/dist/capabilities/CodeMode.mjs +522 -0
  84. package/dist/capabilities/CodeMode.mjs.map +1 -0
  85. package/dist/capabilities/Commands.d.mts +55 -0
  86. package/dist/capabilities/Commands.mjs +57 -0
  87. package/dist/capabilities/Commands.mjs.map +1 -0
  88. package/dist/capabilities/ContextTools.d.mts +321 -0
  89. package/dist/capabilities/ContextTools.mjs +126 -0
  90. package/dist/capabilities/ContextTools.mjs.map +1 -0
  91. package/dist/capabilities/Mcp.d.mts +108 -0
  92. package/dist/capabilities/Mcp.mjs +259 -0
  93. package/dist/capabilities/Mcp.mjs.map +1 -0
  94. package/dist/capabilities/McpClient.d.mts +115 -0
  95. package/dist/capabilities/McpClient.mjs +506 -0
  96. package/dist/capabilities/McpClient.mjs.map +1 -0
  97. package/dist/capabilities/MemoryNotes.d.mts +424 -0
  98. package/dist/capabilities/MemoryNotes.mjs +128 -0
  99. package/dist/capabilities/MemoryNotes.mjs.map +1 -0
  100. package/dist/capabilities/Messaging.d.mts +3 -0
  101. package/dist/capabilities/Messaging.mjs +152 -0
  102. package/dist/capabilities/Messaging.mjs.map +1 -0
  103. package/dist/capabilities/ModelContext.d.mts +89 -0
  104. package/dist/capabilities/ModelContext.mjs +168 -0
  105. package/dist/capabilities/ModelContext.mjs.map +1 -0
  106. package/dist/capabilities/Redaction.d.mts +37 -0
  107. package/dist/capabilities/Redaction.mjs +104 -0
  108. package/dist/capabilities/Redaction.mjs.map +1 -0
  109. package/dist/capabilities/Remembering.d.mts +434 -0
  110. package/dist/capabilities/Remembering.mjs +290 -0
  111. package/dist/capabilities/Remembering.mjs.map +1 -0
  112. package/dist/capabilities/RunHooks.d.mts +82 -0
  113. package/dist/capabilities/RunHooks.mjs +144 -0
  114. package/dist/capabilities/RunHooks.mjs.map +1 -0
  115. package/dist/capabilities/SemanticMemory.d.mts +431 -0
  116. package/dist/capabilities/SemanticMemory.mjs +315 -0
  117. package/dist/capabilities/SemanticMemory.mjs.map +1 -0
  118. package/dist/capabilities/Subagent.d.mts +4 -0
  119. package/dist/capabilities/Subagent.mjs +5 -0
  120. package/dist/capabilities/SubagentReservations.d.mts +186 -0
  121. package/dist/capabilities/SubagentReservations.mjs +479 -0
  122. package/dist/capabilities/SubagentReservations.mjs.map +1 -0
  123. package/dist/capabilities/ToolDiscovery.d.mts +124 -0
  124. package/dist/capabilities/ToolDiscovery.mjs +230 -0
  125. package/dist/capabilities/ToolDiscovery.mjs.map +1 -0
  126. package/dist/capabilities/WebCapture.d.mts +163 -0
  127. package/dist/capabilities/WebCapture.mjs +335 -0
  128. package/dist/capabilities/WebCapture.mjs.map +1 -0
  129. package/dist/capabilities/WebSearch.d.mts +71 -0
  130. package/dist/capabilities/WebSearch.mjs +115 -0
  131. package/dist/capabilities/WebSearch.mjs.map +1 -0
  132. package/dist/compaction-C2OTceKw.mjs +505 -0
  133. package/dist/compaction-C2OTceKw.mjs.map +1 -0
  134. package/dist/core/Agent.d.mts +2 -0
  135. package/dist/core/Agent.mjs +2 -0
  136. package/dist/core/AgentError.d.mts +2 -0
  137. package/dist/core/AgentError.mjs +134 -0
  138. package/dist/core/AgentError.mjs.map +1 -0
  139. package/dist/core/AgentPolicy.d.mts +2 -0
  140. package/dist/core/AgentPolicy.mjs +94 -0
  141. package/dist/core/AgentPolicy.mjs.map +1 -0
  142. package/dist/core/AgentUpdates.d.mts +2 -0
  143. package/dist/core/AgentUpdates.mjs +63 -0
  144. package/dist/core/AgentUpdates.mjs.map +1 -0
  145. package/dist/core/FailureDiagnostic.d.mts +2 -0
  146. package/dist/core/FailureDiagnostic.mjs +2 -0
  147. package/dist/core/IdGenerator.d.mts +26 -0
  148. package/dist/core/IdGenerator.mjs +27 -0
  149. package/dist/core/IdGenerator.mjs.map +1 -0
  150. package/dist/core/Identifiers.d.mts +2 -0
  151. package/dist/core/Identifiers.mjs +43 -0
  152. package/dist/core/Identifiers.mjs.map +1 -0
  153. package/dist/core/Memory.d.mts +57 -0
  154. package/dist/core/Memory.mjs +203 -0
  155. package/dist/core/Memory.mjs.map +1 -0
  156. package/dist/core/MemoryNamespace.d.mts +2 -0
  157. package/dist/core/MemoryNamespace.mjs +116 -0
  158. package/dist/core/MemoryNamespace.mjs.map +1 -0
  159. package/dist/core/MemoryReference.d.mts +2 -0
  160. package/dist/core/MemoryReference.mjs +109 -0
  161. package/dist/core/MemoryReference.mjs.map +1 -0
  162. package/dist/core/MemoryRevalidation.d.mts +65 -0
  163. package/dist/core/MemoryRevalidation.mjs +126 -0
  164. package/dist/core/MemoryRevalidation.mjs.map +1 -0
  165. package/dist/core/MemoryStore.d.mts +186 -0
  166. package/dist/core/MemoryStore.mjs +243 -0
  167. package/dist/core/MemoryStore.mjs.map +1 -0
  168. package/dist/core/Receipt.d.mts +2 -0
  169. package/dist/core/Receipt.mjs +36 -0
  170. package/dist/core/Receipt.mjs.map +1 -0
  171. package/dist/core/RememberingStore.d.mts +1562 -0
  172. package/dist/core/RememberingStore.mjs +190 -0
  173. package/dist/core/RememberingStore.mjs.map +1 -0
  174. package/dist/core/RunEvent.d.mts +2 -0
  175. package/dist/core/RunEvent.mjs +337 -0
  176. package/dist/core/RunEvent.mjs.map +1 -0
  177. package/dist/core/RunPolicyUsage.d.mts +2 -0
  178. package/dist/core/RunPolicyUsage.mjs +21 -0
  179. package/dist/core/RunPolicyUsage.mjs.map +1 -0
  180. package/dist/core/SemanticMemoryIndex.d.mts +826 -0
  181. package/dist/core/SemanticMemoryIndex.mjs +185 -0
  182. package/dist/core/SemanticMemoryIndex.mjs.map +1 -0
  183. package/dist/core/SemanticMemoryRevalidation.d.mts +45 -0
  184. package/dist/core/SemanticMemoryRevalidation.mjs +191 -0
  185. package/dist/core/SemanticMemoryRevalidation.mjs.map +1 -0
  186. package/dist/core/SubagentContract.d.mts +2 -0
  187. package/dist/core/SubagentContract.mjs +148 -0
  188. package/dist/core/SubagentContract.mjs.map +1 -0
  189. package/dist/core/Thread.d.mts +2 -0
  190. package/dist/core/Thread.mjs +250 -0
  191. package/dist/core/Thread.mjs.map +1 -0
  192. package/dist/core/ToolResult.d.mts +2 -0
  193. package/dist/core/ToolResult.mjs +156 -0
  194. package/dist/core/ToolResult.mjs.map +1 -0
  195. package/dist/core/Usage.d.mts +2 -0
  196. package/dist/core/Usage.mjs +319 -0
  197. package/dist/core/Usage.mjs.map +1 -0
  198. package/dist/core/Worker.d.mts +3 -0
  199. package/dist/core/Worker.mjs +3 -0
  200. package/dist/durable/ActivityStore.d.mts +116 -0
  201. package/dist/durable/ActivityStore.mjs +131 -0
  202. package/dist/durable/ActivityStore.mjs.map +1 -0
  203. package/dist/durable/Admin.d.mts +2 -0
  204. package/dist/durable/Admin.mjs +330 -0
  205. package/dist/durable/Admin.mjs.map +1 -0
  206. package/dist/durable/AgentRegistration.d.mts +2 -0
  207. package/dist/durable/AgentRegistration.mjs +14 -0
  208. package/dist/durable/AgentRegistration.mjs.map +1 -0
  209. package/dist/durable/Certification.d.mts +110 -0
  210. package/dist/durable/Certification.mjs +159 -0
  211. package/dist/durable/Certification.mjs.map +1 -0
  212. package/dist/durable/CommittedActivity.d.mts +62 -0
  213. package/dist/durable/CommittedActivity.mjs +159 -0
  214. package/dist/durable/CommittedActivity.mjs.map +1 -0
  215. package/dist/durable/Digest.d.mts +2 -0
  216. package/dist/durable/Digest.mjs +50 -0
  217. package/dist/durable/Digest.mjs.map +1 -0
  218. package/dist/durable/DurableAgentRuntime.d.mts +3 -0
  219. package/dist/durable/DurableAgentRuntime.mjs +3 -0
  220. package/dist/durable/DurableFailpoint.d.mts +2 -0
  221. package/dist/durable/DurableFailpoint.mjs +102 -0
  222. package/dist/durable/DurableFailpoint.mjs.map +1 -0
  223. package/dist/durable/DurableFailpointTestControl.d.mts +14 -0
  224. package/dist/durable/DurableFailpointTestControl.mjs +19 -0
  225. package/dist/durable/DurableFailpointTestControl.mjs.map +1 -0
  226. package/dist/durable/EventSource.d.mts +2 -0
  227. package/dist/durable/EventSource.mjs +65 -0
  228. package/dist/durable/EventSource.mjs.map +1 -0
  229. package/dist/durable/GitHubWorkflowSource.d.mts +185 -0
  230. package/dist/durable/GitHubWorkflowSource.mjs +209 -0
  231. package/dist/durable/GitHubWorkflowSource.mjs.map +1 -0
  232. package/dist/durable/MessageDelivery.d.mts +893 -0
  233. package/dist/durable/MessageDelivery.mjs +557 -0
  234. package/dist/durable/MessageDelivery.mjs.map +1 -0
  235. package/dist/durable/MessageDeliveryStoreConformance.d.mts +378 -0
  236. package/dist/durable/MessageDeliveryStoreConformance.mjs +270 -0
  237. package/dist/durable/MessageDeliveryStoreConformance.mjs.map +1 -0
  238. package/dist/durable/OperationAuthorizer.d.mts +2 -0
  239. package/dist/durable/OperationAuthorizer.mjs +70 -0
  240. package/dist/durable/OperationAuthorizer.mjs.map +1 -0
  241. package/dist/durable/PersistentHistory.d.mts +16 -0
  242. package/dist/durable/PersistentHistory.mjs +125 -0
  243. package/dist/durable/PersistentHistory.mjs.map +1 -0
  244. package/dist/durable/PreparedInputAdmission.d.mts +2 -0
  245. package/dist/durable/PreparedInputAdmission.mjs +38 -0
  246. package/dist/durable/PreparedInputAdmission.mjs.map +1 -0
  247. package/dist/durable/Records.d.mts +2 -0
  248. package/dist/durable/Records.mjs +848 -0
  249. package/dist/durable/Records.mjs.map +1 -0
  250. package/dist/durable/Recovery.d.mts +2 -0
  251. package/dist/durable/Recovery.mjs +739 -0
  252. package/dist/durable/Recovery.mjs.map +1 -0
  253. package/dist/durable/RunJournal.d.mts +2 -0
  254. package/dist/durable/RunJournal.mjs +2 -0
  255. package/dist/durable/Schedule.d.mts +2 -0
  256. package/dist/durable/Schedule.mjs +391 -0
  257. package/dist/durable/Schedule.mjs.map +1 -0
  258. package/dist/durable/ScheduleStoreConformance.d.mts +17 -0
  259. package/dist/durable/ScheduleStoreConformance.mjs +420 -0
  260. package/dist/durable/ScheduleStoreConformance.mjs.map +1 -0
  261. package/dist/durable/ScheduleTransition.d.mts +24 -0
  262. package/dist/durable/ScheduleTransition.mjs +180 -0
  263. package/dist/durable/ScheduleTransition.mjs.map +1 -0
  264. package/dist/durable/Scheduling.d.mts +54 -0
  265. package/dist/durable/Scheduling.mjs +2 -0
  266. package/dist/durable/SqlMemoryStore.d.mts +29 -0
  267. package/dist/durable/SqlMemoryStore.mjs +436 -0
  268. package/dist/durable/SqlMemoryStore.mjs.map +1 -0
  269. package/dist/durable/SqlMessageDeliveryStore.d.mts +42 -0
  270. package/dist/durable/SqlMessageDeliveryStore.mjs +179 -0
  271. package/dist/durable/SqlMessageDeliveryStore.mjs.map +1 -0
  272. package/dist/durable/SqlStorageV2Upgrade.d.mts +21 -0
  273. package/dist/durable/SqlStorageV2Upgrade.mjs +459 -0
  274. package/dist/durable/SqlStorageV2Upgrade.mjs.map +1 -0
  275. package/dist/durable/SqlSubscriptionStore.d.mts +62 -0
  276. package/dist/durable/SqlSubscriptionStore.mjs +751 -0
  277. package/dist/durable/SqlSubscriptionStore.mjs.map +1 -0
  278. package/dist/durable/SqlThreadNativeReads.d.mts +53 -0
  279. package/dist/durable/SqlThreadNativeReads.mjs +159 -0
  280. package/dist/durable/SqlThreadNativeReads.mjs.map +1 -0
  281. package/dist/durable/SubmissionLedger.d.mts +3 -0
  282. package/dist/durable/SubmissionLedger.mjs +959 -0
  283. package/dist/durable/SubmissionLedger.mjs.map +1 -0
  284. package/dist/durable/SubmissionLedgerConformance.d.mts +29 -0
  285. package/dist/durable/SubmissionLedgerConformance.mjs +2187 -0
  286. package/dist/durable/SubmissionLedgerConformance.mjs.map +1 -0
  287. package/dist/durable/SubmissionStatus.d.mts +2 -0
  288. package/dist/durable/SubmissionStatus.mjs +18 -0
  289. package/dist/durable/SubmissionStatus.mjs.map +1 -0
  290. package/dist/durable/Subscription.d.mts +2 -0
  291. package/dist/durable/Subscription.mjs +360 -0
  292. package/dist/durable/Subscription.mjs.map +1 -0
  293. package/dist/durable/SubscriptionInput.d.mts +2 -0
  294. package/dist/durable/SubscriptionInput.mjs +52 -0
  295. package/dist/durable/SubscriptionInput.mjs.map +1 -0
  296. package/dist/durable/SubscriptionStoreConformance.d.mts +16 -0
  297. package/dist/durable/SubscriptionStoreConformance.mjs +625 -0
  298. package/dist/durable/SubscriptionStoreConformance.mjs.map +1 -0
  299. package/dist/durable/SubscriptionTools.d.mts +273 -0
  300. package/dist/durable/SubscriptionTools.mjs +190 -0
  301. package/dist/durable/SubscriptionTools.mjs.map +1 -0
  302. package/dist/durable/SubscriptionTransition.d.mts +21 -0
  303. package/dist/durable/SubscriptionTransition.mjs +148 -0
  304. package/dist/durable/SubscriptionTransition.mjs.map +1 -0
  305. package/dist/durable/Subscriptions.d.mts +73 -0
  306. package/dist/durable/Subscriptions.mjs +627 -0
  307. package/dist/durable/Subscriptions.mjs.map +1 -0
  308. package/dist/durable/ThreadContextHistory.d.mts +32 -0
  309. package/dist/durable/ThreadContextHistory.mjs +152 -0
  310. package/dist/durable/ThreadContextHistory.mjs.map +1 -0
  311. package/dist/durable/ThreadContextHistoryProjection.d.mts +60 -0
  312. package/dist/durable/ThreadContextHistoryProjection.mjs +149 -0
  313. package/dist/durable/ThreadContextHistoryProjection.mjs.map +1 -0
  314. package/dist/durable/ThreadInvariants.d.mts +76 -0
  315. package/dist/durable/ThreadInvariants.mjs +246 -0
  316. package/dist/durable/ThreadInvariants.mjs.map +1 -0
  317. package/dist/durable/ThreadProjection.d.mts +78 -0
  318. package/dist/durable/ThreadProjection.mjs +158 -0
  319. package/dist/durable/ThreadProjection.mjs.map +1 -0
  320. package/dist/durable/ThreadProjectionMaintenance.d.mts +49 -0
  321. package/dist/durable/ThreadProjectionMaintenance.mjs +33 -0
  322. package/dist/durable/ThreadProjectionMaintenance.mjs.map +1 -0
  323. package/dist/durable/ThreadStore.d.mts +2 -0
  324. package/dist/durable/ThreadStore.mjs +355 -0
  325. package/dist/durable/ThreadStore.mjs.map +1 -0
  326. package/dist/durable/ThreadStoreConformance.d.mts +28 -0
  327. package/dist/durable/ThreadStoreConformance.mjs +503 -0
  328. package/dist/durable/ThreadStoreConformance.mjs.map +1 -0
  329. package/dist/durable/ToolReconciler.d.mts +2 -0
  330. package/dist/durable/ToolReconciler.mjs +85 -0
  331. package/dist/durable/ToolReconciler.mjs.map +1 -0
  332. package/dist/durable/WakeScheduler.d.mts +2 -0
  333. package/dist/durable/WakeScheduler.mjs +85 -0
  334. package/dist/durable/WakeScheduler.mjs.map +1 -0
  335. package/dist/durable/WorkerHost.d.mts +129 -0
  336. package/dist/durable/WorkerHost.mjs +77 -0
  337. package/dist/durable/WorkerHost.mjs.map +1 -0
  338. package/dist/engine/AgentRuntime.d.mts +2 -0
  339. package/dist/engine/AgentRuntime.mjs +2 -0
  340. package/dist/engine/Compaction.d.mts +7 -0
  341. package/dist/engine/Compaction.mjs +16 -0
  342. package/dist/engine/Compaction.mjs.map +1 -0
  343. package/dist/engine/ContextCompactor.d.mts +2 -0
  344. package/dist/engine/ContextCompactor.mjs +119 -0
  345. package/dist/engine/ContextCompactor.mjs.map +1 -0
  346. package/dist/engine/ContextHistory.d.mts +65 -0
  347. package/dist/engine/ContextHistory.mjs +76 -0
  348. package/dist/engine/ContextHistory.mjs.map +1 -0
  349. package/dist/engine/ContextWindow.d.mts +2 -0
  350. package/dist/engine/ContextWindow.mjs +59 -0
  351. package/dist/engine/ContextWindow.mjs.map +1 -0
  352. package/dist/engine/DurableStep.d.mts +2 -0
  353. package/dist/engine/DurableStep.mjs +62 -0
  354. package/dist/engine/DurableStep.mjs.map +1 -0
  355. package/dist/engine/MessagingHost.d.mts +2 -0
  356. package/dist/engine/MessagingHost.mjs +2 -0
  357. package/dist/engine/Output.d.mts +2 -0
  358. package/dist/engine/Output.mjs +8 -0
  359. package/dist/engine/Output.mjs.map +1 -0
  360. package/dist/engine/RunEventSink.d.mts +2 -0
  361. package/dist/engine/RunEventSink.mjs +22 -0
  362. package/dist/engine/RunEventSink.mjs.map +1 -0
  363. package/dist/engine/RunOptions.d.mts +2 -0
  364. package/dist/engine/RunOptions.mjs +124 -0
  365. package/dist/engine/RunOptions.mjs.map +1 -0
  366. package/dist/engine/SubagentHost.d.mts +2 -0
  367. package/dist/engine/SubagentHost.mjs +76 -0
  368. package/dist/engine/SubagentHost.mjs.map +1 -0
  369. package/dist/engine/ThreadHistory.d.mts +2 -0
  370. package/dist/engine/ThreadHistory.mjs +67 -0
  371. package/dist/engine/ThreadHistory.mjs.map +1 -0
  372. package/dist/engine/ToolBroker.d.mts +2 -0
  373. package/dist/engine/ToolBroker.mjs +42 -0
  374. package/dist/engine/ToolBroker.mjs.map +1 -0
  375. package/dist/foreign-diagnostic-DBQ1XHKh.mjs +37 -0
  376. package/dist/foreign-diagnostic-DBQ1XHKh.mjs.map +1 -0
  377. package/dist/index.d.mts +91 -6
  378. package/dist/index.mjs +100 -6
  379. package/dist/output-contract-BC7tjlGw.mjs +84 -0
  380. package/dist/output-contract-BC7tjlGw.mjs.map +1 -0
  381. package/dist/rolldown-runtime-D7D4PA-g.mjs +13 -0
  382. package/dist/sandbox/CodeExecutor.d.mts +194 -0
  383. package/dist/sandbox/CodeExecutor.mjs +278 -0
  384. package/dist/sandbox/CodeExecutor.mjs.map +1 -0
  385. package/dist/sandbox/InteractiveBrowser.d.mts +257 -0
  386. package/dist/sandbox/InteractiveBrowser.mjs +236 -0
  387. package/dist/sandbox/InteractiveBrowser.mjs.map +1 -0
  388. package/dist/sandbox/PageCapture.d.mts +2 -0
  389. package/dist/sandbox/PageCapture.mjs +450 -0
  390. package/dist/sandbox/PageCapture.mjs.map +1 -0
  391. package/dist/sandbox/PageCrawl.d.mts +88 -0
  392. package/dist/sandbox/PageCrawl.mjs +124 -0
  393. package/dist/sandbox/PageCrawl.mjs.map +1 -0
  394. package/dist/sandbox/PageScreenshot.d.mts +2 -0
  395. package/dist/sandbox/PageScreenshot.mjs +53 -0
  396. package/dist/sandbox/PageScreenshot.mjs.map +1 -0
  397. package/dist/sandbox/ProtectedBrowser.d.mts +283 -0
  398. package/dist/sandbox/ProtectedBrowser.mjs +298 -0
  399. package/dist/sandbox/ProtectedBrowser.mjs.map +1 -0
  400. package/dist/sandbox/Sandbox.d.mts +2 -0
  401. package/dist/sandbox/Sandbox.mjs +208 -0
  402. package/dist/sandbox/Sandbox.mjs.map +1 -0
  403. package/dist/utf8-BYfhEkcj.mjs +11 -0
  404. package/dist/utf8-BYfhEkcj.mjs.map +1 -0
  405. package/dist/utf8-DchGZRBd.mjs +23 -0
  406. package/dist/utf8-DchGZRBd.mjs.map +1 -0
  407. package/package.json +1 -40
  408. package/src/InMemory.ts +19 -0
  409. package/src/ToolExposure.ts +2 -0
  410. package/src/capabilities/Approval.ts +352 -0
  411. package/src/capabilities/Budget.ts +536 -0
  412. package/src/capabilities/CodeMode.ts +1090 -0
  413. package/src/capabilities/Commands.ts +86 -0
  414. package/src/capabilities/ContextTools.ts +184 -0
  415. package/src/capabilities/Mcp.ts +426 -0
  416. package/src/capabilities/McpClient.ts +967 -0
  417. package/src/capabilities/MemoryNotes.ts +174 -0
  418. package/src/capabilities/Messaging.ts +261 -0
  419. package/src/capabilities/ModelContext.ts +354 -0
  420. package/src/capabilities/Redaction.ts +157 -0
  421. package/src/capabilities/Remembering.ts +550 -0
  422. package/src/capabilities/RunHooks.ts +280 -0
  423. package/src/capabilities/SemanticMemory.ts +447 -0
  424. package/src/capabilities/Subagent.ts +2489 -0
  425. package/src/capabilities/SubagentReservations.ts +850 -0
  426. package/src/capabilities/ToolDiscovery.ts +369 -0
  427. package/src/capabilities/WebCapture.ts +722 -0
  428. package/src/capabilities/WebSearch.ts +190 -0
  429. package/src/capabilities/internal/subagent-background.ts +1273 -0
  430. package/src/capabilities/internal/subagent-contract.ts +146 -0
  431. package/src/capabilities/internal/subagent-policy.ts +235 -0
  432. package/src/capabilities/internal/subagent-reporting.ts +136 -0
  433. package/src/capabilities/internal/utf8.ts +10 -0
  434. package/src/core/Agent.ts +602 -0
  435. package/src/core/AgentError.ts +172 -0
  436. package/src/core/AgentPolicy.ts +153 -0
  437. package/src/core/AgentUpdates.ts +100 -0
  438. package/src/core/FailureDiagnostic.ts +343 -0
  439. package/src/core/IdGenerator.ts +39 -0
  440. package/src/core/Identifiers.ts +48 -0
  441. package/src/core/Memory.ts +290 -0
  442. package/src/core/MemoryNamespace.ts +196 -0
  443. package/src/core/MemoryReference.ts +121 -0
  444. package/src/core/MemoryRevalidation.ts +185 -0
  445. package/src/core/MemoryStore.ts +368 -0
  446. package/src/core/Messaging.ts +72 -0
  447. package/src/core/Receipt.ts +42 -0
  448. package/src/core/RememberingStore.ts +300 -0
  449. package/src/core/RunEvent.ts +366 -0
  450. package/src/core/RunPolicyUsage.ts +17 -0
  451. package/src/core/SemanticMemoryIndex.ts +250 -0
  452. package/src/core/SemanticMemoryRevalidation.ts +254 -0
  453. package/src/core/SubagentContract.ts +196 -0
  454. package/src/core/Thread.ts +371 -0
  455. package/src/core/ToolExposure.ts +74 -0
  456. package/src/core/ToolResult.ts +190 -0
  457. package/src/core/Usage.ts +529 -0
  458. package/src/core/Worker.ts +240 -0
  459. package/src/core/internal/agent-updates.ts +34 -0
  460. package/src/core/internal/message-status.ts +60 -0
  461. package/src/core/internal/strict-schema.ts +14 -0
  462. package/src/core/internal/utf8.ts +23 -0
  463. package/src/durable/ActivityStore.ts +160 -0
  464. package/src/durable/Admin.ts +505 -0
  465. package/src/durable/AgentRegistration.ts +14 -0
  466. package/src/durable/Certification.ts +210 -0
  467. package/src/durable/CommittedActivity.ts +296 -0
  468. package/src/durable/Digest.ts +87 -0
  469. package/src/durable/DurableAgentRuntime.ts +11275 -0
  470. package/src/durable/DurableFailpoint.ts +111 -0
  471. package/src/durable/DurableFailpointTestControl.ts +39 -0
  472. package/src/durable/EventSource.ts +172 -0
  473. package/src/durable/GitHubWorkflowSource.ts +447 -0
  474. package/src/durable/MessageDelivery.ts +832 -0
  475. package/src/durable/MessageDeliveryStoreConformance.ts +410 -0
  476. package/src/durable/OperationAuthorizer.ts +85 -0
  477. package/src/durable/PersistentHistory.ts +260 -0
  478. package/src/durable/PreparedInputAdmission.ts +57 -0
  479. package/src/durable/Records.ts +1075 -0
  480. package/src/durable/Recovery.ts +1018 -0
  481. package/src/durable/RunJournal.ts +1631 -0
  482. package/src/durable/Schedule.ts +513 -0
  483. package/src/durable/ScheduleStoreConformance.ts +638 -0
  484. package/src/durable/ScheduleTransition.ts +265 -0
  485. package/src/durable/Scheduling.ts +1077 -0
  486. package/src/durable/SqlMemoryStore.ts +778 -0
  487. package/src/durable/SqlMessageDeliveryStore.ts +335 -0
  488. package/src/durable/SqlStorageV2Upgrade.ts +500 -0
  489. package/src/durable/SqlSubscriptionStore.ts +1440 -0
  490. package/src/durable/SqlThreadNativeReads.ts +270 -0
  491. package/src/durable/SubmissionLedger.ts +1265 -0
  492. package/src/durable/SubmissionLedgerConformance.ts +4820 -0
  493. package/src/durable/SubmissionStatus.ts +14 -0
  494. package/src/durable/Subscription.ts +544 -0
  495. package/src/durable/SubscriptionInput.ts +144 -0
  496. package/src/durable/SubscriptionStoreConformance.ts +945 -0
  497. package/src/durable/SubscriptionTools.ts +327 -0
  498. package/src/durable/SubscriptionTransition.ts +302 -0
  499. package/src/durable/Subscriptions.ts +1210 -0
  500. package/src/durable/ThreadContextHistory.ts +227 -0
  501. package/src/durable/ThreadContextHistoryProjection.ts +216 -0
  502. package/src/durable/ThreadInvariants.ts +507 -0
  503. package/src/durable/ThreadProjection.ts +269 -0
  504. package/src/durable/ThreadProjectionMaintenance.ts +67 -0
  505. package/src/durable/ThreadStore.ts +573 -0
  506. package/src/durable/ThreadStoreConformance.ts +1156 -0
  507. package/src/durable/ToolReconciler.ts +109 -0
  508. package/src/durable/WakeScheduler.ts +134 -0
  509. package/src/durable/WorkerHost.ts +171 -0
  510. package/src/durable/internal/agent-registration.ts +587 -0
  511. package/src/durable/internal/agent-updates.ts +302 -0
  512. package/src/durable/internal/foreign-diagnostic.ts +47 -0
  513. package/src/durable/internal/journal-checkpoint.ts +104 -0
  514. package/src/durable/internal/journal-metadata.ts +117 -0
  515. package/src/durable/internal/message-status.ts +20 -0
  516. package/src/durable/internal/messaging-host.ts +637 -0
  517. package/src/durable/internal/schedule-time.ts +303 -0
  518. package/src/durable/internal/storage-v2-layout.ts +163 -0
  519. package/src/durable/internal/storage-v2.ts +73 -0
  520. package/src/durable/internal/worker-host.ts +2885 -0
  521. package/src/durable/internal/worker-runtime.ts +9 -0
  522. package/src/engine/AgentRuntime.ts +37 -0
  523. package/src/engine/Compaction.ts +11 -0
  524. package/src/engine/ContextCompactor.ts +277 -0
  525. package/src/engine/ContextHistory.ts +73 -0
  526. package/src/engine/ContextWindow.ts +72 -0
  527. package/src/engine/DurableStep.ts +132 -0
  528. package/src/engine/MessagingHost.ts +110 -0
  529. package/src/engine/Output.ts +2 -0
  530. package/src/engine/RunEventSink.ts +132 -0
  531. package/src/engine/RunOptions.ts +1101 -0
  532. package/src/engine/SubagentHost.ts +230 -0
  533. package/src/engine/ThreadHistory.ts +120 -0
  534. package/src/engine/ToolBroker.ts +157 -0
  535. package/src/engine/ToolExposure.ts +48 -0
  536. package/src/engine/internal/agent-runtime.ts +10500 -0
  537. package/src/engine/internal/bounded-value.ts +315 -0
  538. package/src/engine/internal/compaction.ts +678 -0
  539. package/src/engine/internal/error-diagnostic.ts +39 -0
  540. package/src/engine/internal/output-contract.ts +173 -0
  541. package/src/engine/internal/primitive-delta.ts +80 -0
  542. package/src/engine/internal/provider-result-staging.ts +211 -0
  543. package/src/engine/internal/tool-derivative.ts +106 -0
  544. package/src/engine/internal/tool-exposure.ts +224 -0
  545. package/src/engine/internal/tool-telemetry.ts +484 -0
  546. package/src/index.ts +99 -21
  547. package/src/sandbox/CodeExecutor.ts +352 -0
  548. package/src/sandbox/InteractiveBrowser.ts +339 -0
  549. package/src/sandbox/PageCapture.ts +691 -0
  550. package/src/sandbox/PageCrawl.ts +148 -0
  551. package/src/sandbox/PageScreenshot.ts +81 -0
  552. package/src/sandbox/ProtectedBrowser.ts +452 -0
  553. package/src/sandbox/Sandbox.ts +241 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DurableFailpoint.mjs","names":[],"sources":["../../src/durable/DurableFailpoint.ts"],"sourcesContent":["import { Context, Effect, Layer, Schema } from \"effect\";\n\n/**\n * Coordinator-owned failpoint locations (plan §Failpoints). Locations normally sit immediately\n * AFTER one durable mutation of the six-step coordinator flow, so a fault injected there\n * simulates a crash between two durable steps; the matching BEFORE boundary of each mutation is\n * owned by the storage adapters (`ledger:*:before`, `append:before`, ...), giving every durable\n * mutation a failpoint on both sides (change discipline). Run-start append also exposes its\n * BEFORE boundary here to distinguish a fresh clock from a committed clock in crash tests.\n *\n * The `subagent:*` family covers every durable mutation of the S2 establishment/join protocol\n * including reservation, request append, child admission, child readiness,\n * start-link append, sibling per-call settles at the suspension seam, the `waitingForChild`\n * suspension, child abort propagation, the atomic join batch, and both reservation-release\n * transitions.\n */\nexport const DurableRuntimeFailpointLocation = Schema.Literals([\n \"submit:after-admit\",\n \"submit:after-materialize\",\n \"claim:after-claim\",\n \"input:after-canonical-append\",\n \"run:before-start-append\",\n \"run:after-start-append\",\n \"run:before-duration-append\",\n \"run:after-duration-append\",\n \"turn:after-canonical-append\",\n \"turn:after-response-append\",\n \"turn:after-results-append\",\n \"compaction:before-canonical-append\",\n \"compaction:after-canonical-append\",\n \"checkpoint:before-save\",\n \"checkpoint:after-save\",\n \"tools:after-prepared-append\",\n \"tools:before-prepared-append\",\n \"tools:before-unavailable-append\",\n \"tools:after-unavailable-append\",\n \"policy:before-reservation-append\",\n \"policy:after-reservation-append\",\n \"step:after-step-append\",\n \"approval:after-request-append\",\n \"approval:after-suspend\",\n \"join:after-claim\",\n \"join:after-canonical-append\",\n \"resolve:after-intent\",\n \"terminalize:after-reserve\",\n \"terminalize:after-canonical-append\",\n \"abort:after-intent\",\n \"subagent:after-reserve\",\n \"subagent:after-request-append\",\n \"subagent:after-admit\",\n \"subagent:after-child-ready\",\n \"subagent:after-start-append\",\n \"subagent:after-sibling-settle\",\n \"subagent:after-suspend\",\n \"subagent:after-child-abort-intent\",\n \"subagent:before-join-append\",\n \"subagent:after-join-append\",\n \"subagent:after-release-pending\",\n \"subagent:after-release\",\n \"worker:before-stop-append\",\n \"worker:after-stop-append\",\n \"worker:before-stop-seal\",\n \"worker:after-stop-seal\",\n \"worker:before-source-append\",\n \"worker:after-source-append\",\n \"worker:before-origin-append\",\n \"worker:after-origin-append\",\n \"worker:before-completion-append\",\n \"worker:after-completion-append\",\n \"worker:before-subtree-append\",\n \"worker:after-subtree-append\",\n \"worker:before-report-append\",\n \"worker:after-report-append\",\n \"worker:before-report-delivery\",\n \"worker:after-report-delivery\",\n \"update:before-canonical-append\",\n \"update:after-canonical-append\",\n \"update:before-delivery-insert\",\n \"update:after-delivery-insert\",\n]);\n\nexport type DurableRuntimeFailpointLocation = typeof DurableRuntimeFailpointLocation.Type;\n\n/** Injected coordinator fault. Reaching the caller means the preceding durable step committed. */\nexport class DurableRuntimeFailpointError extends Schema.TaggedError<DurableRuntimeFailpointError>()(\n \"DurableRuntimeFailpointError\",\n {\n location: DurableRuntimeFailpointLocation,\n },\n) {}\n\nexport type DurableRuntimeFailpointHandler = (\n location: DurableRuntimeFailpointLocation,\n) => Effect.Effect<void, DurableRuntimeFailpointError>;\n\nconst noFailpoint: DurableRuntimeFailpointHandler = () => Effect.void;\n\n/**\n * Explicit fault-injection authority used at durable coordinator step boundaries. The process\n * crash harness (WP5) maps a hit to `process.exit`; in-process tests fail the step with the\n * typed `DurableRuntimeFailpointError` instead.\n */\nexport class DurableRuntimeFailpoint extends Context.Service<\n DurableRuntimeFailpoint,\n {\n readonly hit: DurableRuntimeFailpointHandler;\n }\n>()(\"@effect-agent/thread/DurableRuntimeFailpoint\") {\n /** Production default: no fault injection. */\n static readonly layer = Layer.succeed(this)({ hit: noFailpoint });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAgBA,MAAa,kCAAkC,OAAO,SAAS;CAC7D;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;;AAKD,IAAa,+BAAb,cAAkD,OAAO,YAA0C,CAAC,CAClG,gCACA,EACE,UAAU,gCACZ,CACF,CAAC,CAAC,CAAC;AAMH,MAAM,oBAAoD,OAAO;;;;;;AAOjE,IAAa,0BAAb,cAA6C,QAAQ,QAKnD,CAAC,CAAC,8CAA8C,CAAC,CAAC;;CAElD,OAAgB,QAAQ,MAAM,QAAQ,IAAI,CAAC,CAAC,EAAE,KAAK,YAAY,CAAC;AAClE"}
@@ -0,0 +1,14 @@
1
+ import { i as DurableRuntimeFailpointHandler, n as DurableRuntimeFailpoint } from "../DurableFailpoint-Cnr3wx1L.mjs";
2
+ import { Context, Effect, Layer } from "effect";
3
+ //#region src/durable/DurableFailpointTestControl.d.ts
4
+ declare const DurableRuntimeFailpointTestControl_base: Context.ServiceClass<DurableRuntimeFailpointTestControl, "@effect-agent/thread/DurableRuntimeFailpointTestControl", {
5
+ readonly clear: Effect.Effect<void>;
6
+ readonly setHandler: (handler: DurableRuntimeFailpointHandler) => Effect.Effect<void>;
7
+ }>;
8
+ /** Test-only control for replacing the active coordinator failpoint handler. */
9
+ export declare class DurableRuntimeFailpointTestControl extends DurableRuntimeFailpointTestControl_base {
10
+ /** Reusable test Layer with a control service backed by the same handler Ref. */
11
+ static readonly layer: Layer.Layer<DurableRuntimeFailpoint | DurableRuntimeFailpointTestControl, never, never>;
12
+ }
13
+ //#endregion
14
+ //# sourceMappingURL=DurableFailpointTestControl.d.mts.map
@@ -0,0 +1,19 @@
1
+ import { DurableRuntimeFailpoint } from "./DurableFailpoint.mjs";
2
+ import { Context, Effect, Layer, Ref } from "effect";
3
+ //#region src/durable/DurableFailpointTestControl.ts
4
+ const noFailpoint = () => Effect.void;
5
+ /** Test-only control for replacing the active coordinator failpoint handler. */
6
+ var DurableRuntimeFailpointTestControl = class DurableRuntimeFailpointTestControl extends Context.Service()("@effect-agent/thread/DurableRuntimeFailpointTestControl") {
7
+ /** Reusable test Layer with a control service backed by the same handler Ref. */
8
+ static layer = Layer.effectContext(Effect.gen(function* () {
9
+ const handler = yield* Ref.make(noFailpoint);
10
+ return Context.make(DurableRuntimeFailpoint, DurableRuntimeFailpoint.of({ hit: (location) => Ref.get(handler).pipe(Effect.flatMap((current) => current(location))) })).pipe(Context.add(DurableRuntimeFailpointTestControl, DurableRuntimeFailpointTestControl.of({
11
+ clear: Ref.set(handler, noFailpoint),
12
+ setHandler: (next) => Ref.set(handler, next)
13
+ })));
14
+ }));
15
+ };
16
+ //#endregion
17
+ export { DurableRuntimeFailpointTestControl };
18
+
19
+ //# sourceMappingURL=DurableFailpointTestControl.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DurableFailpointTestControl.mjs","names":[],"sources":["../../src/durable/DurableFailpointTestControl.ts"],"sourcesContent":["import { Context, Effect, Layer, Ref } from \"effect\";\n\nimport {\n DurableRuntimeFailpoint,\n type DurableRuntimeFailpointHandler,\n} from \"./DurableFailpoint.ts\";\n\nconst noFailpoint: DurableRuntimeFailpointHandler = () => Effect.void;\n\n/** Test-only control for replacing the active coordinator failpoint handler. */\nexport class DurableRuntimeFailpointTestControl extends Context.Service<\n DurableRuntimeFailpointTestControl,\n {\n readonly clear: Effect.Effect<void>;\n readonly setHandler: (handler: DurableRuntimeFailpointHandler) => Effect.Effect<void>;\n }\n>()(\"@effect-agent/thread/DurableRuntimeFailpointTestControl\") {\n /** Reusable test Layer with a control service backed by the same handler Ref. */\n static readonly layer = Layer.effectContext(\n Effect.gen(function* () {\n const handler = yield* Ref.make<DurableRuntimeFailpointHandler>(noFailpoint);\n\n return Context.make(\n DurableRuntimeFailpoint,\n DurableRuntimeFailpoint.of({\n hit: (location) => Ref.get(handler).pipe(Effect.flatMap((current) => current(location))),\n }),\n ).pipe(\n Context.add(\n DurableRuntimeFailpointTestControl,\n DurableRuntimeFailpointTestControl.of({\n clear: Ref.set(handler, noFailpoint),\n setHandler: (next) => Ref.set(handler, next),\n }),\n ),\n );\n }),\n );\n}\n"],"mappings":";;;AAOA,MAAM,oBAAoD,OAAO;;AAGjE,IAAa,qCAAb,MAAa,2CAA2C,QAAQ,QAM9D,CAAC,CAAC,yDAAyD,CAAC,CAAC;;CAE7D,OAAgB,QAAQ,MAAM,cAC5B,OAAO,IAAI,aAAa;EACtB,MAAM,UAAU,OAAO,IAAI,KAAqC,WAAW;EAE3E,OAAO,QAAQ,KACb,yBACA,wBAAwB,GAAG,EACzB,MAAM,aAAa,IAAI,IAAI,OAAO,CAAC,CAAC,KAAK,OAAO,SAAS,YAAY,QAAQ,QAAQ,CAAC,CAAC,EACzF,CAAC,CACH,CAAC,CAAC,KACA,QAAQ,IACN,oCACA,mCAAmC,GAAG;GACpC,OAAO,IAAI,IAAI,SAAS,WAAW;GACnC,aAAa,SAAS,IAAI,IAAI,SAAS,IAAI;EAC7C,CAAC,CACH,CACF;CACF,CAAC,CACH;AACF"}
@@ -0,0 +1,2 @@
1
+ import { a as makeEventSource, i as NormalizedEvent, r as EventSources, t as EventSource } from "../EventSource-CnlZ3Kma.mjs";
2
+ export { EventSource, EventSources, NormalizedEvent, makeEventSource };
@@ -0,0 +1,65 @@
1
+ import { t as __exportAll } from "../rolldown-runtime-D7D4PA-g.mjs";
2
+ import { PersistedJson } from "./Records.mjs";
3
+ import { SubscriptionSourceError } from "./Subscription.mjs";
4
+ import { Context, Effect, Schema } from "effect";
5
+ //#region src/durable/EventSource.ts
6
+ var EventSource_exports = /* @__PURE__ */ __exportAll({
7
+ EventSources: () => EventSources,
8
+ makeEventSource: () => makeEventSource
9
+ });
10
+ var EventSources = class extends Context.Service()("@effect-agent/thread/EventSources") {};
11
+ const invalid = () => SubscriptionSourceError.make({
12
+ code: "source-schema",
13
+ retryable: false
14
+ });
15
+ /**
16
+ * Capture the source's explicit Effect dependencies at host assembly. Matching and key functions
17
+ * must be pure and bounded under this exact semantic version.
18
+ * The returned source accepts Schema-encoded values at intake and management boundaries.
19
+ * Each operation owns a fresh Scope for its callbacks and codecs; captured host services
20
+ * retain their host lifetime. Operation resources finalize on success, failure, or interruption.
21
+ */
22
+ const makeEventSource = Effect.fn("Thread.makeEventSource")(function* (options) {
23
+ const services = yield* Effect.context();
24
+ const encode = (schema, value) => Schema.encodeEffect(schema)(value).pipe(Effect.flatMap(Schema.decodeUnknownEffect(PersistedJson)), Effect.mapError(invalid));
25
+ const normalized = Effect.fn("EventSource.normalized")(function* (event) {
26
+ const occurredAtMillis = options.occurredAtMillis?.(event);
27
+ return {
28
+ eventId: options.identity(event),
29
+ ...occurredAtMillis === void 0 ? {} : { occurredAtMillis },
30
+ matchingKey: options.eventKey(event),
31
+ payload: yield* encode(options.event, event)
32
+ };
33
+ });
34
+ const normalize = (value) => Schema.decodeUnknownEffect(PersistedJson)(value).pipe(Effect.flatMap(Schema.decodeUnknownEffect(options.event)), Effect.mapError(invalid), Effect.flatMap(normalized), Effect.scoped, Effect.provideContext(services));
35
+ const parameters = (value) => Effect.gen(function* () {
36
+ yield* Schema.decodeUnknownEffect(PersistedJson)(value).pipe(Effect.mapError(invalid));
37
+ const decoded = yield* Schema.decodeUnknownEffect(options.parameters)(value).pipe(Effect.mapError(invalid));
38
+ return {
39
+ parameters: yield* encode(options.parameters, decoded),
40
+ matchingKey: options.parameterKey(decoded)
41
+ };
42
+ }).pipe(Effect.scoped, Effect.provideContext(services));
43
+ const matches = (event, subscription) => Effect.gen(function* () {
44
+ const e = yield* Schema.decodeEffect(options.event)(event.payload).pipe(Effect.mapError(invalid));
45
+ const p = yield* Schema.decodeEffect(options.parameters)(subscription.configuration.parameters).pipe(Effect.mapError(invalid));
46
+ return options.matches(e, p);
47
+ }).pipe(Effect.scoped, Effect.provideContext(services));
48
+ const reconcile = options.reconcile;
49
+ return {
50
+ source: options.source,
51
+ continuity: options.continuity,
52
+ parameters,
53
+ normalize,
54
+ matches,
55
+ ...reconcile === void 0 ? {} : { reconcile: (subscription) => Effect.gen(function* () {
56
+ const p = yield* Schema.decodeEffect(options.parameters)(subscription.configuration.parameters).pipe(Effect.mapError(invalid));
57
+ const event = yield* reconcile(p);
58
+ return event === null ? null : yield* normalized(event);
59
+ }).pipe(Effect.scoped, Effect.provideContext(services)) }
60
+ };
61
+ });
62
+ //#endregion
63
+ export { EventSources, makeEventSource, EventSource_exports as t };
64
+
65
+ //# sourceMappingURL=EventSource.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventSource.mjs","names":[],"sources":["../../src/durable/EventSource.ts"],"sourcesContent":["import { Context, Effect, Schema, type Scope } from \"effect\";\n\nimport { PersistedJson } from \"./Records.ts\";\nimport {\n type AcceptedEvent,\n type EventSourceVersion,\n type SubscriptionRecord,\n SubscriptionSourceError,\n} from \"./Subscription.ts\";\n\nexport interface NormalizedEvent {\n readonly eventId: string;\n readonly occurredAtMillis?: number;\n readonly matchingKey: string;\n readonly payload: PersistedJson;\n}\n\n/** Runtime-only versioned behavior. Never persist this object or silently replace its version. */\nexport interface EventSource {\n readonly source: EventSourceVersion;\n readonly continuity: string;\n readonly parameters: (\n value: unknown,\n ) => Effect.Effect<\n { readonly parameters: PersistedJson; readonly matchingKey: string },\n SubscriptionSourceError\n >;\n readonly normalize: (value: unknown) => Effect.Effect<NormalizedEvent, SubscriptionSourceError>;\n readonly matches: (\n event: AcceptedEvent,\n subscription: SubscriptionRecord,\n ) => Effect.Effect<boolean, SubscriptionSourceError>;\n readonly reconcile?: (\n subscription: SubscriptionRecord,\n ) => Effect.Effect<NormalizedEvent | null, SubscriptionSourceError>;\n}\n\nexport class EventSources extends Context.Service<\n EventSources,\n {\n readonly sources: ReadonlyArray<EventSource>;\n }\n>()(\"@effect-agent/thread/EventSources\") {}\n\nconst invalid = () => SubscriptionSourceError.make({ code: \"source-schema\", retryable: false });\n\n/**\n * Capture the source's explicit Effect dependencies at host assembly. Matching and key functions\n * must be pure and bounded under this exact semantic version.\n * The returned source accepts Schema-encoded values at intake and management boundaries.\n * Each operation owns a fresh Scope for its callbacks and codecs; captured host services\n * retain their host lifetime. Operation resources finalize on success, failure, or interruption.\n */\nexport const makeEventSource = Effect.fn(\"Thread.makeEventSource\")(function* <\n Event extends Schema.Top,\n Parameters extends Schema.Top,\n R = never,\n>(options: {\n readonly source: EventSourceVersion;\n readonly continuity: string;\n readonly event: Event;\n readonly parameters: Parameters;\n readonly identity: (event: Event[\"Type\"]) => string;\n /** Authenticated source time, stable across delivery retries; required for bounded retention. */\n readonly occurredAtMillis?: (event: Event[\"Type\"]) => number | undefined;\n readonly eventKey: (event: Event[\"Type\"]) => string;\n readonly parameterKey: (parameters: Parameters[\"Type\"]) => string;\n readonly matches: (event: Event[\"Type\"], parameters: Parameters[\"Type\"]) => boolean;\n readonly reconcile?: (\n parameters: Parameters[\"Type\"],\n ) => Effect.Effect<Event[\"Type\"] | null, SubscriptionSourceError, R>;\n}): Effect.fn.Return<\n EventSource,\n never,\n Exclude<\n | R\n | Event[\"DecodingServices\"]\n | Event[\"EncodingServices\"]\n | Parameters[\"DecodingServices\"]\n | Parameters[\"EncodingServices\"],\n Scope.Scope\n >\n> {\n const services =\n yield* Effect.context<\n Exclude<\n | R\n | Event[\"DecodingServices\"]\n | Event[\"EncodingServices\"]\n | Parameters[\"DecodingServices\"]\n | Parameters[\"EncodingServices\"],\n Scope.Scope\n >\n >();\n\n const encode = <S extends Schema.Top>(schema: S, value: S[\"Type\"]) =>\n Schema.encodeEffect(schema)(value).pipe(\n Effect.flatMap(Schema.decodeUnknownEffect(PersistedJson)),\n Effect.mapError(invalid),\n );\n\n const normalized = Effect.fn(\"EventSource.normalized\")(function* (event: Event[\"Type\"]) {\n const occurredAtMillis = options.occurredAtMillis?.(event);\n\n return {\n eventId: options.identity(event),\n ...(occurredAtMillis === undefined ? {} : { occurredAtMillis }),\n matchingKey: options.eventKey(event),\n payload: yield* encode(options.event, event),\n };\n });\n\n const normalize: EventSource[\"normalize\"] = (value) =>\n Schema.decodeUnknownEffect(PersistedJson)(value).pipe(\n Effect.flatMap(Schema.decodeUnknownEffect(options.event)),\n Effect.mapError(invalid),\n Effect.flatMap(normalized),\n Effect.scoped,\n Effect.provideContext(services),\n );\n\n const parameters: EventSource[\"parameters\"] = (value) =>\n Effect.gen(function* () {\n yield* Schema.decodeUnknownEffect(PersistedJson)(value).pipe(Effect.mapError(invalid));\n\n const decoded = yield* Schema.decodeUnknownEffect(options.parameters)(value).pipe(\n Effect.mapError(invalid),\n );\n\n return {\n parameters: yield* encode(options.parameters, decoded),\n matchingKey: options.parameterKey(decoded),\n };\n }).pipe(Effect.scoped, Effect.provideContext(services));\n\n const matches: EventSource[\"matches\"] = (event, subscription) =>\n Effect.gen(function* () {\n const e = yield* Schema.decodeEffect(options.event)(event.payload).pipe(\n Effect.mapError(invalid),\n );\n\n const p = yield* Schema.decodeEffect(options.parameters)(\n subscription.configuration.parameters,\n ).pipe(Effect.mapError(invalid));\n\n return options.matches(e, p);\n }).pipe(Effect.scoped, Effect.provideContext(services));\n\n const reconcile = options.reconcile;\n\n return {\n source: options.source,\n continuity: options.continuity,\n parameters,\n normalize,\n matches,\n ...(reconcile === undefined\n ? {}\n : {\n reconcile: (subscription: SubscriptionRecord) =>\n Effect.gen(function* () {\n const p = yield* Schema.decodeEffect(options.parameters)(\n subscription.configuration.parameters,\n ).pipe(Effect.mapError(invalid));\n\n const event = yield* reconcile(p);\n\n return event === null ? null : yield* normalized(event);\n }).pipe(Effect.scoped, Effect.provideContext(services)),\n }),\n };\n});\n"],"mappings":";;;;;;;;;AAqCA,IAAa,eAAb,cAAkC,QAAQ,QAKxC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC;AAE1C,MAAM,gBAAgB,wBAAwB,KAAK;CAAE,MAAM;CAAiB,WAAW;AAAM,CAAC;;;;;;;;AAS9F,MAAa,kBAAkB,OAAO,GAAG,wBAAwB,CAAC,CAAC,WAIjE,SAyBA;CACA,MAAM,WACJ,OAAO,OAAO,QASZ;CAEJ,MAAM,UAAgC,QAAW,UAC/C,OAAO,aAAa,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,KACjC,OAAO,QAAQ,OAAO,oBAAoB,aAAa,CAAC,GACxD,OAAO,SAAS,OAAO,CACzB;CAEF,MAAM,aAAa,OAAO,GAAG,wBAAwB,CAAC,CAAC,WAAW,OAAsB;EACtF,MAAM,mBAAmB,QAAQ,mBAAmB,KAAK;EAEzD,OAAO;GACL,SAAS,QAAQ,SAAS,KAAK;GAC/B,GAAI,qBAAqB,KAAA,IAAY,CAAC,IAAI,EAAE,iBAAiB;GAC7D,aAAa,QAAQ,SAAS,KAAK;GACnC,SAAS,OAAO,OAAO,QAAQ,OAAO,KAAK;EAC7C;CACF,CAAC;CAED,MAAM,aAAuC,UAC3C,OAAO,oBAAoB,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,KAC/C,OAAO,QAAQ,OAAO,oBAAoB,QAAQ,KAAK,CAAC,GACxD,OAAO,SAAS,OAAO,GACvB,OAAO,QAAQ,UAAU,GACzB,OAAO,QACP,OAAO,eAAe,QAAQ,CAChC;CAEF,MAAM,cAAyC,UAC7C,OAAO,IAAI,aAAa;EACtB,OAAO,OAAO,oBAAoB,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,OAAO,SAAS,OAAO,CAAC;EAErF,MAAM,UAAU,OAAO,OAAO,oBAAoB,QAAQ,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,KAC3E,OAAO,SAAS,OAAO,CACzB;EAEA,OAAO;GACL,YAAY,OAAO,OAAO,QAAQ,YAAY,OAAO;GACrD,aAAa,QAAQ,aAAa,OAAO;EAC3C;CACF,CAAC,CAAC,CAAC,KAAK,OAAO,QAAQ,OAAO,eAAe,QAAQ,CAAC;CAExD,MAAM,WAAmC,OAAO,iBAC9C,OAAO,IAAI,aAAa;EACtB,MAAM,IAAI,OAAO,OAAO,aAAa,QAAQ,KAAK,CAAC,CAAC,MAAM,OAAO,CAAC,CAAC,KACjE,OAAO,SAAS,OAAO,CACzB;EAEA,MAAM,IAAI,OAAO,OAAO,aAAa,QAAQ,UAAU,CAAC,CACtD,aAAa,cAAc,UAC7B,CAAC,CAAC,KAAK,OAAO,SAAS,OAAO,CAAC;EAE/B,OAAO,QAAQ,QAAQ,GAAG,CAAC;CAC7B,CAAC,CAAC,CAAC,KAAK,OAAO,QAAQ,OAAO,eAAe,QAAQ,CAAC;CAExD,MAAM,YAAY,QAAQ;CAE1B,OAAO;EACL,QAAQ,QAAQ;EAChB,YAAY,QAAQ;EACpB;EACA;EACA;EACA,GAAI,cAAc,KAAA,IACd,CAAC,IACD,EACE,YAAY,iBACV,OAAO,IAAI,aAAa;GACtB,MAAM,IAAI,OAAO,OAAO,aAAa,QAAQ,UAAU,CAAC,CACtD,aAAa,cAAc,UAC7B,CAAC,CAAC,KAAK,OAAO,SAAS,OAAO,CAAC;GAE/B,MAAM,QAAQ,OAAO,UAAU,CAAC;GAEhC,OAAO,UAAU,OAAO,OAAO,OAAO,WAAW,KAAK;EACxD,CAAC,CAAC,CAAC,KAAK,OAAO,QAAQ,OAAO,eAAe,QAAQ,CAAC,EAC1D;CACN;AACF,CAAC"}
@@ -0,0 +1,185 @@
1
+ import { r as Principal } from "../Receipt-BAHyigAF.mjs";
2
+ import "../Records-D88mgvyS.mjs";
3
+ import { E as SubscriptionSourceError } from "../Subscription-CRteOKRf.mjs";
4
+ import { t as EventSource } from "../EventSource-CnlZ3Kma.mjs";
5
+ import { SubscriptionFailure, SubscriptionIntake } from "./Subscriptions.mjs";
6
+ import { Context, Effect, Layer, Redacted, Schema } from "effect";
7
+ import { HttpClient } from "effect/unstable/http";
8
+ //#region src/durable/GitHubWorkflowSource.d.ts
9
+ /** One repository whose identity and credentials are selected by the host. */
10
+ export declare const GitHubRepository: Schema.declareConstructor<{
11
+ readonly id: number;
12
+ readonly owner: string;
13
+ readonly name: string;
14
+ }, {
15
+ readonly id: number;
16
+ readonly owner: string;
17
+ readonly name: string;
18
+ }, readonly [Schema.Struct<{
19
+ readonly id: Schema.Int;
20
+ readonly owner: Schema.NonEmptyString;
21
+ readonly name: Schema.NonEmptyString;
22
+ }>], {
23
+ readonly id: number;
24
+ readonly owner: string;
25
+ readonly name: string;
26
+ }>;
27
+ export type GitHubRepository = typeof GitHubRepository.Type;
28
+ /** Exact workflow attempt requested by an Agent through a host-permitted source. */
29
+ export declare const GitHubWorkflowRunWatch: Schema.declareConstructor<{
30
+ readonly runId: number;
31
+ readonly attempt: number;
32
+ readonly expectedHeadSha: string;
33
+ }, {
34
+ readonly runId: number;
35
+ readonly attempt: number;
36
+ readonly expectedHeadSha: string;
37
+ }, readonly [Schema.Struct<{
38
+ readonly runId: Schema.Int;
39
+ readonly attempt: Schema.Int;
40
+ readonly expectedHeadSha: Schema.String;
41
+ }>], {
42
+ readonly runId: number;
43
+ readonly attempt: number;
44
+ readonly expectedHeadSha: string;
45
+ }>;
46
+ export type GitHubWorkflowRunWatch = typeof GitHubWorkflowRunWatch.Type;
47
+ /**
48
+ * Small canonical completion shared by webhook intake and REST reconciliation. Provider delivery
49
+ * IDs, URLs, actors, and mutable metadata are deliberately omitted from durable event identity.
50
+ */
51
+ export declare const GitHubWorkflowRunCompletion: Schema.declareConstructor<{
52
+ readonly repositoryId: number;
53
+ readonly runId: number;
54
+ readonly attempt: number;
55
+ readonly headSha: string;
56
+ readonly conclusion: string;
57
+ }, {
58
+ readonly repositoryId: number;
59
+ readonly runId: number;
60
+ readonly attempt: number;
61
+ readonly headSha: string;
62
+ readonly conclusion: string;
63
+ }, readonly [Schema.Struct<{
64
+ readonly repositoryId: Schema.Int;
65
+ readonly runId: Schema.Int;
66
+ readonly attempt: Schema.Int;
67
+ readonly headSha: Schema.String;
68
+ readonly conclusion: Schema.NonEmptyString;
69
+ }>], {
70
+ readonly repositoryId: number;
71
+ readonly runId: number;
72
+ readonly attempt: number;
73
+ readonly headSha: string;
74
+ readonly conclusion: string;
75
+ }>;
76
+ export type GitHubWorkflowRunCompletion = typeof GitHubWorkflowRunCompletion.Type;
77
+ export declare const GitHubWorkflowRunWebhook: Schema.Struct<{
78
+ readonly action: Schema.Literal<"completed">;
79
+ readonly repository: Schema.Struct<{
80
+ readonly id: Schema.Int;
81
+ }>;
82
+ readonly workflow_run: Schema.Struct<{
83
+ readonly id: Schema.Int;
84
+ readonly run_attempt: Schema.Int;
85
+ readonly head_sha: Schema.String;
86
+ readonly status: Schema.NonEmptyString;
87
+ readonly conclusion: Schema.NullOr<Schema.NonEmptyString>;
88
+ readonly repository: Schema.Struct<{
89
+ readonly id: Schema.Int;
90
+ }>;
91
+ }>;
92
+ }>;
93
+ export type GitHubWorkflowRunWebhook = typeof GitHubWorkflowRunWebhook.Type;
94
+ export declare const GitHubWorkflowRunAttempt: Schema.Struct<{
95
+ readonly id: Schema.Int;
96
+ readonly run_attempt: Schema.Int;
97
+ readonly head_sha: Schema.String;
98
+ readonly status: Schema.NonEmptyString;
99
+ readonly conclusion: Schema.NullOr<Schema.NonEmptyString>;
100
+ readonly repository: Schema.Struct<{
101
+ readonly id: Schema.Int;
102
+ }>;
103
+ }>;
104
+ export type GitHubWorkflowRunAttempt = typeof GitHubWorkflowRunAttempt.Type;
105
+ export declare const GitHubWorkflowRunSourceVersion: {
106
+ readonly name: "github-workflow-run-completed";
107
+ readonly version: "1";
108
+ };
109
+ declare const GitHubWorkflowRunsError_base: Schema.Class<GitHubWorkflowRunsError, Schema.TaggedStruct<"GitHubWorkflowRunsError", {
110
+ readonly reason: Schema.Literals<readonly ["rate-limited", "unavailable", "unauthorized", "not-found", "invalid-response"]>;
111
+ readonly retryable: Schema.Boolean;
112
+ }>, import("effect/Cause").YieldableError>;
113
+ export declare class GitHubWorkflowRunsError extends GitHubWorkflowRunsError_base {}
114
+ export interface GitHubWorkflowRunAttemptRequest {
115
+ readonly repository: GitHubRepository;
116
+ readonly runId: number;
117
+ readonly attempt: number;
118
+ }
119
+ declare const GitHubWorkflowRuns_base: Context.ServiceClass<GitHubWorkflowRuns, "@effect-agent/thread/GitHubWorkflowRuns", {
120
+ readonly getAttempt: (request: GitHubWorkflowRunAttemptRequest) => Effect.Effect<GitHubWorkflowRunAttempt, GitHubWorkflowRunsError>;
121
+ }>;
122
+ /**
123
+ * Credentialed, read-only GitHub boundary. Implementations must authorize the repository and read
124
+ * the exact attempt endpoint; the source never receives or persists a credential.
125
+ */
126
+ export declare class GitHubWorkflowRuns extends GitHubWorkflowRuns_base {}
127
+ export interface GitHubWorkflowRunsHttpOptions {
128
+ /** Repository this credentialed adapter is authorized to read. */
129
+ readonly repository: GitHubRepository;
130
+ readonly token: Redacted.Redacted<string>;
131
+ readonly apiUrl?: string | undefined;
132
+ readonly userAgent?: string | undefined;
133
+ }
134
+ /**
135
+ * GitHub REST adapter for `GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt}`.
136
+ * It performs one bounded read. Scheduling retries and backoff remain owned by SubscriptionDriver.
137
+ */
138
+ export declare const githubWorkflowRunsHttpLayer: (options: GitHubWorkflowRunsHttpOptions) => Layer.Layer<GitHubWorkflowRuns, GitHubWorkflowRunsError, HttpClient.HttpClient>;
139
+ export interface GitHubWorkflowRunSourceOptions {
140
+ readonly repository: GitHubRepository;
141
+ }
142
+ /**
143
+ * Build the exact-attempt completion source, shared by all destination Agents in this partition.
144
+ * Reconciliation depends on GitHub retaining a readable exact attempt.
145
+ */
146
+ export declare const makeGitHubWorkflowRunSource: (options: GitHubWorkflowRunSourceOptions) => Effect.Effect<EventSource, SubscriptionSourceError, GitHubWorkflowRuns>;
147
+ declare const GitHubWebhookVerificationError_base: Schema.Class<GitHubWebhookVerificationError, Schema.TaggedStruct<"GitHubWebhookVerificationError", {
148
+ readonly reason: Schema.Literals<readonly ["invalid-signature", "invalid-event", "invalid-payload", "payload-too-large", "crypto-unavailable"]>;
149
+ }>, import("effect/Cause").YieldableError>;
150
+ export declare class GitHubWebhookVerificationError extends GitHubWebhookVerificationError_base {}
151
+ declare const GitHubWebhookSignatureVerifier_base: Context.ServiceClass<GitHubWebhookSignatureVerifier, "@effect-agent/thread/GitHubWebhookSignatureVerifier", {
152
+ readonly verify: (body: Uint8Array, signature: string) => Effect.Effect<void, GitHubWebhookVerificationError>;
153
+ }>;
154
+ /** Host-held webhook secret verification; callers cannot bypass it by supplying parsed JSON. */
155
+ export declare class GitHubWebhookSignatureVerifier extends GitHubWebhookSignatureVerifier_base {}
156
+ /** Narrow host WebCrypto capability used for GitHub HMAC-SHA256 verification. */
157
+ export interface GitHubWebhookSubtleCrypto<Key> {
158
+ readonly importKey: (format: "raw", keyData: ArrayBuffer, algorithm: {
159
+ readonly name: "HMAC";
160
+ readonly hash: "SHA-256";
161
+ }, extractable: false, usages: ["verify"]) => PromiseLike<Key>;
162
+ readonly verify: (algorithm: "HMAC", key: Key, signature: ArrayBuffer, data: ArrayBuffer) => PromiseLike<boolean>;
163
+ }
164
+ /** GitHub-compatible HMAC-SHA256 verifier over the exact raw request bytes. */
165
+ export declare const webCryptoGitHubWebhookSignatureVerifierLayer: <Key>(secret: Redacted.Redacted<string>, subtle: GitHubWebhookSubtleCrypto<Key>) => Layer.Layer<GitHubWebhookSignatureVerifier>;
166
+ export interface VerifiedGitHubWorkflowRunWebhookRequest {
167
+ readonly body: Uint8Array;
168
+ readonly eventHeader: string | undefined;
169
+ readonly signatureHeader: string | undefined;
170
+ readonly principal: Principal;
171
+ }
172
+ /**
173
+ * Verify raw ingress, decode only a completed `workflow_run`, and hand its canonical completion to
174
+ * durable intake. The acknowledgement means routing work is retained; it is not a Submission Receipt.
175
+ */
176
+ export declare const acceptVerifiedGitHubWorkflowRunWebhook: (request: VerifiedGitHubWorkflowRunWebhookRequest) => Effect.Effect<{
177
+ readonly partition: {
178
+ readonly tenantId: string;
179
+ readonly address: string;
180
+ };
181
+ readonly eventId: string;
182
+ readonly acceptedAtMillis: number;
183
+ }, GitHubWebhookVerificationError | SubscriptionFailure, GitHubWebhookSignatureVerifier | SubscriptionIntake>;
184
+ //#endregion
185
+ //# sourceMappingURL=GitHubWorkflowSource.d.mts.map
@@ -0,0 +1,209 @@
1
+ import { u as strictSchema } from "../FailureDiagnostic-BElLOoED.mjs";
2
+ import { SubscriptionSourceError } from "./Subscription.mjs";
3
+ import { makeEventSource } from "./EventSource.mjs";
4
+ import { SubscriptionIntake } from "./Subscriptions.mjs";
5
+ import { ByteSize, Context, Effect, Encoding, Layer, Redacted, Schema } from "effect";
6
+ import { HttpClient, HttpClientRequest, HttpIncomingMessage } from "effect/unstable/http";
7
+ //#region src/durable/GitHubWorkflowSource.ts
8
+ const PositiveId = Schema.Int.check(Schema.isGreaterThan(0));
9
+ const GitHubName = Schema.NonEmptyString.check(Schema.isMaxLength(100), Schema.isPattern(/^[A-Za-z0-9_.-]+$/));
10
+ const GitCommitSha = Schema.String.check(Schema.isPattern(/^(?:[0-9a-f]{40}|[0-9a-f]{64})$/));
11
+ const GitHubConclusion = Schema.NonEmptyString.check(Schema.isMaxLength(64));
12
+ const GitHubStatus = Schema.NonEmptyString.check(Schema.isMaxLength(32));
13
+ /** One repository whose identity and credentials are selected by the host. */
14
+ const GitHubRepository = Schema.Struct({
15
+ id: PositiveId,
16
+ owner: GitHubName,
17
+ name: GitHubName
18
+ }).pipe(strictSchema);
19
+ /** Exact workflow attempt requested by an Agent through a host-permitted source. */
20
+ const GitHubWorkflowRunWatch = Schema.Struct({
21
+ runId: PositiveId,
22
+ attempt: PositiveId,
23
+ expectedHeadSha: GitCommitSha
24
+ }).pipe(strictSchema);
25
+ /**
26
+ * Small canonical completion shared by webhook intake and REST reconciliation. Provider delivery
27
+ * IDs, URLs, actors, and mutable metadata are deliberately omitted from durable event identity.
28
+ */
29
+ const GitHubWorkflowRunCompletion = Schema.Struct({
30
+ repositoryId: PositiveId,
31
+ runId: PositiveId,
32
+ attempt: PositiveId,
33
+ headSha: GitCommitSha,
34
+ conclusion: GitHubConclusion
35
+ }).pipe(strictSchema);
36
+ const GitHubWorkflowRunWire = Schema.Struct({
37
+ id: PositiveId,
38
+ run_attempt: PositiveId,
39
+ head_sha: GitCommitSha,
40
+ status: GitHubStatus,
41
+ conclusion: Schema.NullOr(GitHubConclusion),
42
+ repository: Schema.Struct({ id: PositiveId })
43
+ });
44
+ const GitHubWorkflowRunWebhook = Schema.Struct({
45
+ action: Schema.Literal("completed"),
46
+ repository: Schema.Struct({ id: PositiveId }),
47
+ workflow_run: GitHubWorkflowRunWire
48
+ });
49
+ const GitHubWorkflowRunAttempt = GitHubWorkflowRunWire;
50
+ const GitHubWorkflowRunSourceVersion = {
51
+ name: "github-workflow-run-completed",
52
+ version: "1"
53
+ };
54
+ var GitHubWorkflowRunsError = class extends Schema.TaggedError()("GitHubWorkflowRunsError", {
55
+ reason: Schema.Literals([
56
+ "rate-limited",
57
+ "unavailable",
58
+ "unauthorized",
59
+ "not-found",
60
+ "invalid-response"
61
+ ]),
62
+ retryable: Schema.Boolean
63
+ }) {};
64
+ /**
65
+ * Credentialed, read-only GitHub boundary. Implementations must authorize the repository and read
66
+ * the exact attempt endpoint; the source never receives or persists a credential.
67
+ */
68
+ var GitHubWorkflowRuns = class extends Context.Service()("@effect-agent/thread/GitHubWorkflowRuns") {};
69
+ const httpFailure = (reason, retryable) => GitHubWorkflowRunsError.make({
70
+ reason,
71
+ retryable
72
+ });
73
+ /**
74
+ * GitHub REST adapter for `GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt}`.
75
+ * It performs one bounded read. Scheduling retries and backoff remain owned by SubscriptionDriver.
76
+ */
77
+ const githubWorkflowRunsHttpLayer = (options) => Layer.effect(GitHubWorkflowRuns, Effect.gen(function* () {
78
+ const client = yield* HttpClient.HttpClient;
79
+ const permittedRepository = yield* Schema.decodeEffect(GitHubRepository, { onExcessProperty: "error" })(options.repository).pipe(Effect.mapError(() => httpFailure("invalid-response", false)));
80
+ const apiUrl = (options.apiUrl ?? "https://api.github.com").replace(/\/$/, "");
81
+ const getAttempt = Effect.fn("GitHubWorkflowRuns.getAttempt")(function* (request) {
82
+ const repository = yield* Schema.decodeEffect(GitHubRepository, { onExcessProperty: "error" })(request.repository).pipe(Effect.mapError(() => httpFailure("invalid-response", false)));
83
+ if (repository.id !== permittedRepository.id || repository.owner !== permittedRepository.owner || repository.name !== permittedRepository.name) return yield* httpFailure("unauthorized", false);
84
+ const watch = yield* Schema.decodeEffect(GitHubWorkflowRunWatch, { onExcessProperty: "error" })({
85
+ runId: request.runId,
86
+ attempt: request.attempt,
87
+ expectedHeadSha: "0".repeat(40)
88
+ }).pipe(Effect.mapError(() => httpFailure("invalid-response", false)));
89
+ const url = `${apiUrl}/repos/${repository.owner}/${repository.name}/actions/runs/${String(watch.runId)}/attempts/${String(watch.attempt)}`;
90
+ const response = yield* client.execute(HttpClientRequest.get(url).pipe(HttpClientRequest.setHeaders({
91
+ Accept: "application/vnd.github+json",
92
+ "X-GitHub-Api-Version": "2026-03-10",
93
+ "User-Agent": options.userAgent ?? "effect-agent-subscriptions"
94
+ }), HttpClientRequest.bearerToken(options.token))).pipe(Effect.mapError(() => httpFailure("unavailable", true)));
95
+ if (response.status === 429 || response.status === 403 && (response.headers["x-ratelimit-remaining"] === "0" || response.headers["retry-after"] !== void 0)) return yield* httpFailure("rate-limited", true);
96
+ if (response.status === 401 || response.status === 403) return yield* httpFailure("unauthorized", false);
97
+ if (response.status === 404) return yield* httpFailure("not-found", true);
98
+ if (response.status < 200 || response.status >= 300) return yield* httpFailure("unavailable", response.status >= 500);
99
+ return yield* response.json.pipe(Effect.provideService(HttpIncomingMessage.MaxBodySize, ByteSize.mebibytes(1)), Effect.mapError(() => httpFailure("invalid-response", false)), Effect.flatMap(Schema.decodeUnknownEffect(GitHubWorkflowRunAttempt)), Effect.mapError(() => httpFailure("invalid-response", false)));
100
+ });
101
+ return GitHubWorkflowRuns.of({ getAttempt });
102
+ }));
103
+ const sourceError = (code, retryable) => SubscriptionSourceError.make({
104
+ code,
105
+ retryable
106
+ });
107
+ const completionIdentity = (completion) => `github-workflow-run:${String(completion.repositoryId)}:${String(completion.runId)}:${String(completion.attempt)}:completed`;
108
+ const watchIdentity = (repositoryId, watch) => `github-workflow-run:${String(repositoryId)}:${String(watch.runId)}:${String(watch.attempt)}:completed`;
109
+ const completionFromWire = Effect.fn("GitHubWorkflowRun.completionFromWire")(function* (repository, watch, wire) {
110
+ if (wire.repository.id !== repository.id || wire.id !== watch.runId || wire.run_attempt !== watch.attempt || wire.head_sha !== watch.expectedHeadSha) return yield* sourceError("github-identity-mismatch", false);
111
+ if (wire.status !== "completed") return null;
112
+ if (wire.conclusion === null) return yield* sourceError("github-completed-without-conclusion", false);
113
+ return GitHubWorkflowRunCompletion.make({
114
+ repositoryId: repository.id,
115
+ runId: wire.id,
116
+ attempt: wire.run_attempt,
117
+ headSha: wire.head_sha,
118
+ conclusion: wire.conclusion
119
+ });
120
+ });
121
+ /**
122
+ * Build the exact-attempt completion source, shared by all destination Agents in this partition.
123
+ * Reconciliation depends on GitHub retaining a readable exact attempt.
124
+ */
125
+ const makeGitHubWorkflowRunSource = Effect.fn("makeGitHubWorkflowRunSource")(function* (options) {
126
+ const repository = yield* Schema.decodeEffect(GitHubRepository, { onExcessProperty: "error" })(options.repository).pipe(Effect.mapError(() => sourceError("github-repository-configuration", false)));
127
+ const runs = yield* GitHubWorkflowRuns;
128
+ return yield* makeEventSource({
129
+ source: GitHubWorkflowRunSourceVersion,
130
+ continuity: "Webhook delivery is not replayed by GitHub; reconciliation can recover only while the exact workflow run attempt remains readable and authorized.",
131
+ event: GitHubWorkflowRunCompletion.check(Schema.makeFilter((completion) => completion.repositoryId === repository.id, { title: "GitHub completion belongs to the host-bound repository" })),
132
+ parameters: GitHubWorkflowRunWatch,
133
+ identity: completionIdentity,
134
+ eventKey: completionIdentity,
135
+ parameterKey: (watch) => watchIdentity(repository.id, watch),
136
+ matches: (completion, watch) => completion.repositoryId === repository.id && completion.runId === watch.runId && completion.attempt === watch.attempt && completion.headSha === watch.expectedHeadSha,
137
+ reconcile: (watch) => runs.getAttempt({
138
+ repository,
139
+ runId: watch.runId,
140
+ attempt: watch.attempt
141
+ }).pipe(Effect.mapError((error) => sourceError(`github-${error.reason}`, error.retryable)), Effect.flatMap((wire) => completionFromWire(repository, watch, wire)))
142
+ });
143
+ });
144
+ var GitHubWebhookVerificationError = class extends Schema.TaggedError()("GitHubWebhookVerificationError", { reason: Schema.Literals([
145
+ "invalid-signature",
146
+ "invalid-event",
147
+ "invalid-payload",
148
+ "payload-too-large",
149
+ "crypto-unavailable"
150
+ ]) }) {};
151
+ /** Host-held webhook secret verification; callers cannot bypass it by supplying parsed JSON. */
152
+ var GitHubWebhookSignatureVerifier = class extends Context.Service()("@effect-agent/thread/GitHubWebhookSignatureVerifier") {};
153
+ /** GitHub-compatible HMAC-SHA256 verifier over the exact raw request bytes. */
154
+ const webCryptoGitHubWebhookSignatureVerifierLayer = (secret, subtle) => Layer.effect(GitHubWebhookSignatureVerifier, Effect.sync(() => {
155
+ const verify = Effect.fn("GitHubWebhookSignatureVerifier.verify")(function* (body, signature) {
156
+ if (!/^sha256=[0-9a-f]{64}$/.test(signature)) return yield* GitHubWebhookVerificationError.make({ reason: "invalid-signature" });
157
+ const signatureBytes = yield* Effect.fromResult(Encoding.decodeHex(signature.slice(7))).pipe(Effect.mapError(() => GitHubWebhookVerificationError.make({ reason: "invalid-signature" })));
158
+ const keyBytes = new TextEncoder().encode(Redacted.value(secret));
159
+ const keyBuffer = new ArrayBuffer(keyBytes.byteLength);
160
+ new Uint8Array(keyBuffer).set(keyBytes);
161
+ const key = yield* Effect.tryPromise({
162
+ try: () => subtle.importKey("raw", keyBuffer, {
163
+ name: "HMAC",
164
+ hash: "SHA-256"
165
+ }, false, ["verify"]),
166
+ catch: () => GitHubWebhookVerificationError.make({ reason: "crypto-unavailable" })
167
+ });
168
+ const signatureBuffer = new ArrayBuffer(signatureBytes.byteLength);
169
+ new Uint8Array(signatureBuffer).set(signatureBytes);
170
+ const bodyBuffer = new ArrayBuffer(body.byteLength);
171
+ new Uint8Array(bodyBuffer).set(body);
172
+ if (!(yield* Effect.tryPromise({
173
+ try: () => subtle.verify("HMAC", key, signatureBuffer, bodyBuffer),
174
+ catch: () => GitHubWebhookVerificationError.make({ reason: "crypto-unavailable" })
175
+ }))) return yield* GitHubWebhookVerificationError.make({ reason: "invalid-signature" });
176
+ });
177
+ return GitHubWebhookSignatureVerifier.of({ verify });
178
+ }));
179
+ /**
180
+ * Verify raw ingress, decode only a completed `workflow_run`, and hand its canonical completion to
181
+ * durable intake. The acknowledgement means routing work is retained; it is not a Submission Receipt.
182
+ */
183
+ const acceptVerifiedGitHubWorkflowRunWebhook = Effect.fn("acceptVerifiedGitHubWorkflowRunWebhook")(function* (request) {
184
+ if (request.body.byteLength > 1048576) return yield* GitHubWebhookVerificationError.make({ reason: "payload-too-large" });
185
+ if (request.eventHeader !== "workflow_run" || request.signatureHeader === void 0) return yield* GitHubWebhookVerificationError.make({ reason: "invalid-event" });
186
+ yield* (yield* GitHubWebhookSignatureVerifier).verify(request.body, request.signatureHeader);
187
+ const text = yield* Effect.try({
188
+ try: () => new TextDecoder("utf-8", {
189
+ fatal: true,
190
+ ignoreBOM: false
191
+ }).decode(request.body),
192
+ catch: () => GitHubWebhookVerificationError.make({ reason: "invalid-payload" })
193
+ });
194
+ const webhook = yield* Schema.decodeEffect(Schema.fromJsonString(GitHubWorkflowRunWebhook))(text).pipe(Effect.mapError(() => GitHubWebhookVerificationError.make({ reason: "invalid-payload" })));
195
+ if (webhook.repository.id !== webhook.workflow_run.repository.id) return yield* GitHubWebhookVerificationError.make({ reason: "invalid-payload" });
196
+ if (webhook.workflow_run.status !== "completed" || webhook.workflow_run.conclusion === null) return yield* GitHubWebhookVerificationError.make({ reason: "invalid-payload" });
197
+ const completion = GitHubWorkflowRunCompletion.make({
198
+ repositoryId: webhook.repository.id,
199
+ runId: webhook.workflow_run.id,
200
+ attempt: webhook.workflow_run.run_attempt,
201
+ headSha: webhook.workflow_run.head_sha,
202
+ conclusion: webhook.workflow_run.conclusion
203
+ });
204
+ return yield* (yield* SubscriptionIntake).accept(request.principal, GitHubWorkflowRunSourceVersion, completion);
205
+ });
206
+ //#endregion
207
+ export { GitHubRepository, GitHubWebhookSignatureVerifier, GitHubWebhookVerificationError, GitHubWorkflowRunAttempt, GitHubWorkflowRunCompletion, GitHubWorkflowRunSourceVersion, GitHubWorkflowRunWatch, GitHubWorkflowRunWebhook, GitHubWorkflowRuns, GitHubWorkflowRunsError, acceptVerifiedGitHubWorkflowRunWebhook, githubWorkflowRunsHttpLayer, makeGitHubWorkflowRunSource, webCryptoGitHubWebhookSignatureVerifierLayer };
208
+
209
+ //# sourceMappingURL=GitHubWorkflowSource.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitHubWorkflowSource.mjs","names":[],"sources":["../../src/durable/GitHubWorkflowSource.ts"],"sourcesContent":["import { Context, Effect, Encoding, ByteSize, Layer, Redacted, Schema } from \"effect\";\nimport { HttpClient, HttpIncomingMessage, HttpClientRequest } from \"effect/unstable/http\";\n\nimport { strictSchema } from \"../core/internal/strict-schema.ts\";\nimport { makeEventSource, type EventSource } from \"./EventSource.ts\";\nimport type { Principal } from \"./SubmissionLedger.ts\";\nimport type { EventAcknowledgement } from \"./Subscription.ts\";\nimport { SubscriptionSourceError } from \"./Subscription.ts\";\nimport { SubscriptionIntake } from \"./Subscriptions.ts\";\n\nconst PositiveId = Schema.Int.check(Schema.isGreaterThan(0));\n\nconst GitHubName = Schema.NonEmptyString.check(\n Schema.isMaxLength(100),\n Schema.isPattern(/^[A-Za-z0-9_.-]+$/),\n);\n\nconst GitCommitSha = Schema.String.check(Schema.isPattern(/^(?:[0-9a-f]{40}|[0-9a-f]{64})$/));\nconst GitHubConclusion = Schema.NonEmptyString.check(Schema.isMaxLength(64));\nconst GitHubStatus = Schema.NonEmptyString.check(Schema.isMaxLength(32));\n\n/** One repository whose identity and credentials are selected by the host. */\nexport const GitHubRepository = Schema.Struct({\n id: PositiveId,\n owner: GitHubName,\n name: GitHubName,\n}).pipe(strictSchema);\n\nexport type GitHubRepository = typeof GitHubRepository.Type;\n\n/** Exact workflow attempt requested by an Agent through a host-permitted source. */\nexport const GitHubWorkflowRunWatch = Schema.Struct({\n runId: PositiveId,\n attempt: PositiveId,\n expectedHeadSha: GitCommitSha,\n}).pipe(strictSchema);\n\nexport type GitHubWorkflowRunWatch = typeof GitHubWorkflowRunWatch.Type;\n\n/**\n * Small canonical completion shared by webhook intake and REST reconciliation. Provider delivery\n * IDs, URLs, actors, and mutable metadata are deliberately omitted from durable event identity.\n */\nexport const GitHubWorkflowRunCompletion = Schema.Struct({\n repositoryId: PositiveId,\n runId: PositiveId,\n attempt: PositiveId,\n headSha: GitCommitSha,\n conclusion: GitHubConclusion,\n}).pipe(strictSchema);\n\nexport type GitHubWorkflowRunCompletion = typeof GitHubWorkflowRunCompletion.Type;\n\n// Provider wire payloads intentionally project the fields we own. GitHub adds many fields and\n// may add more; canonical values below remain strict after this projection.\nconst GitHubWorkflowRunWire = Schema.Struct({\n id: PositiveId,\n run_attempt: PositiveId,\n head_sha: GitCommitSha,\n status: GitHubStatus,\n conclusion: Schema.NullOr(GitHubConclusion),\n repository: Schema.Struct({ id: PositiveId }),\n});\n\nexport const GitHubWorkflowRunWebhook = Schema.Struct({\n action: Schema.Literal(\"completed\"),\n repository: Schema.Struct({ id: PositiveId }),\n workflow_run: GitHubWorkflowRunWire,\n});\n\nexport type GitHubWorkflowRunWebhook = typeof GitHubWorkflowRunWebhook.Type;\n\nexport const GitHubWorkflowRunAttempt = GitHubWorkflowRunWire;\nexport type GitHubWorkflowRunAttempt = typeof GitHubWorkflowRunAttempt.Type;\n\nexport const GitHubWorkflowRunSourceVersion = {\n name: \"github-workflow-run-completed\",\n version: \"1\",\n} as const;\n\nexport class GitHubWorkflowRunsError extends Schema.TaggedError<GitHubWorkflowRunsError>()(\n \"GitHubWorkflowRunsError\",\n {\n reason: Schema.Literals([\n \"rate-limited\",\n \"unavailable\",\n \"unauthorized\",\n \"not-found\",\n \"invalid-response\",\n ]),\n retryable: Schema.Boolean,\n },\n) {}\n\nexport interface GitHubWorkflowRunAttemptRequest {\n readonly repository: GitHubRepository;\n readonly runId: number;\n readonly attempt: number;\n}\n\n/**\n * Credentialed, read-only GitHub boundary. Implementations must authorize the repository and read\n * the exact attempt endpoint; the source never receives or persists a credential.\n */\nexport class GitHubWorkflowRuns extends Context.Service<\n GitHubWorkflowRuns,\n {\n readonly getAttempt: (\n request: GitHubWorkflowRunAttemptRequest,\n ) => Effect.Effect<GitHubWorkflowRunAttempt, GitHubWorkflowRunsError>;\n }\n>()(\"@effect-agent/thread/GitHubWorkflowRuns\") {}\n\nexport interface GitHubWorkflowRunsHttpOptions {\n /** Repository this credentialed adapter is authorized to read. */\n readonly repository: GitHubRepository;\n readonly token: Redacted.Redacted<string>;\n readonly apiUrl?: string | undefined;\n readonly userAgent?: string | undefined;\n}\n\nconst httpFailure = (\n reason: GitHubWorkflowRunsError[\"reason\"],\n retryable: boolean,\n): GitHubWorkflowRunsError => GitHubWorkflowRunsError.make({ reason, retryable });\n\n/**\n * GitHub REST adapter for `GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt}`.\n * It performs one bounded read. Scheduling retries and backoff remain owned by SubscriptionDriver.\n */\nexport const githubWorkflowRunsHttpLayer = (\n options: GitHubWorkflowRunsHttpOptions,\n): Layer.Layer<GitHubWorkflowRuns, GitHubWorkflowRunsError, HttpClient.HttpClient> =>\n Layer.effect(\n GitHubWorkflowRuns,\n Effect.gen(function* () {\n const client = yield* HttpClient.HttpClient;\n\n const permittedRepository = yield* Schema.decodeEffect(GitHubRepository, {\n onExcessProperty: \"error\",\n })(options.repository).pipe(Effect.mapError(() => httpFailure(\"invalid-response\", false)));\n\n const apiUrl = (options.apiUrl ?? \"https://api.github.com\").replace(/\\/$/, \"\");\n\n const getAttempt = Effect.fn(\"GitHubWorkflowRuns.getAttempt\")(function* (\n request: GitHubWorkflowRunAttemptRequest,\n ) {\n const repository = yield* Schema.decodeEffect(GitHubRepository, {\n onExcessProperty: \"error\",\n })(request.repository).pipe(Effect.mapError(() => httpFailure(\"invalid-response\", false)));\n\n if (\n repository.id !== permittedRepository.id ||\n repository.owner !== permittedRepository.owner ||\n repository.name !== permittedRepository.name\n ) {\n return yield* httpFailure(\"unauthorized\", false);\n }\n\n const watch = yield* Schema.decodeEffect(GitHubWorkflowRunWatch, {\n onExcessProperty: \"error\",\n })({\n runId: request.runId,\n attempt: request.attempt,\n expectedHeadSha: \"0\".repeat(40),\n }).pipe(Effect.mapError(() => httpFailure(\"invalid-response\", false)));\n\n const url = `${apiUrl}/repos/${repository.owner}/${repository.name}/actions/runs/${String(watch.runId)}/attempts/${String(watch.attempt)}`;\n\n const response = yield* client\n .execute(\n HttpClientRequest.get(url).pipe(\n HttpClientRequest.setHeaders({\n Accept: \"application/vnd.github+json\",\n \"X-GitHub-Api-Version\": \"2026-03-10\",\n \"User-Agent\": options.userAgent ?? \"effect-agent-subscriptions\",\n }),\n HttpClientRequest.bearerToken(options.token),\n ),\n )\n .pipe(Effect.mapError(() => httpFailure(\"unavailable\", true)));\n\n if (\n response.status === 429 ||\n (response.status === 403 &&\n (response.headers[\"x-ratelimit-remaining\"] === \"0\" ||\n response.headers[\"retry-after\"] !== undefined))\n ) {\n return yield* httpFailure(\"rate-limited\", true);\n }\n if (response.status === 401 || response.status === 403) {\n return yield* httpFailure(\"unauthorized\", false);\n }\n if (response.status === 404) return yield* httpFailure(\"not-found\", true);\n if (response.status < 200 || response.status >= 300) {\n return yield* httpFailure(\"unavailable\", response.status >= 500);\n }\n\n return yield* response.json.pipe(\n Effect.provideService(HttpIncomingMessage.MaxBodySize, ByteSize.mebibytes(1)),\n Effect.mapError(() => httpFailure(\"invalid-response\", false)),\n Effect.flatMap(Schema.decodeUnknownEffect(GitHubWorkflowRunAttempt)),\n Effect.mapError(() => httpFailure(\"invalid-response\", false)),\n );\n });\n\n return GitHubWorkflowRuns.of({ getAttempt });\n }),\n );\n\nconst sourceError = (code: string, retryable: boolean) =>\n SubscriptionSourceError.make({ code, retryable });\n\nconst completionIdentity = (completion: GitHubWorkflowRunCompletion): string =>\n `github-workflow-run:${String(completion.repositoryId)}:${String(completion.runId)}:${String(completion.attempt)}:completed`;\n\nconst watchIdentity = (repositoryId: number, watch: GitHubWorkflowRunWatch): string =>\n `github-workflow-run:${String(repositoryId)}:${String(watch.runId)}:${String(watch.attempt)}:completed`;\n\nconst completionFromWire = Effect.fn(\"GitHubWorkflowRun.completionFromWire\")(function* (\n repository: GitHubRepository,\n watch: GitHubWorkflowRunWatch,\n wire: GitHubWorkflowRunAttempt,\n) {\n if (\n wire.repository.id !== repository.id ||\n wire.id !== watch.runId ||\n wire.run_attempt !== watch.attempt ||\n wire.head_sha !== watch.expectedHeadSha\n ) {\n return yield* sourceError(\"github-identity-mismatch\", false);\n }\n if (wire.status !== \"completed\") return null;\n if (wire.conclusion === null) {\n return yield* sourceError(\"github-completed-without-conclusion\", false);\n }\n\n return GitHubWorkflowRunCompletion.make({\n repositoryId: repository.id,\n runId: wire.id,\n attempt: wire.run_attempt,\n headSha: wire.head_sha,\n conclusion: wire.conclusion,\n });\n});\n\nexport interface GitHubWorkflowRunSourceOptions {\n readonly repository: GitHubRepository;\n}\n\n/**\n * Build the exact-attempt completion source, shared by all destination Agents in this partition.\n * Reconciliation depends on GitHub retaining a readable exact attempt.\n */\nexport const makeGitHubWorkflowRunSource = Effect.fn(\"makeGitHubWorkflowRunSource\")(function* (\n options: GitHubWorkflowRunSourceOptions,\n): Effect.fn.Return<EventSource, SubscriptionSourceError, GitHubWorkflowRuns> {\n const repository = yield* Schema.decodeEffect(GitHubRepository, { onExcessProperty: \"error\" })(\n options.repository,\n ).pipe(Effect.mapError(() => sourceError(\"github-repository-configuration\", false)));\n\n const runs = yield* GitHubWorkflowRuns;\n\n return yield* makeEventSource({\n source: GitHubWorkflowRunSourceVersion,\n continuity:\n \"Webhook delivery is not replayed by GitHub; reconciliation can recover only while the exact workflow run attempt remains readable and authorized.\",\n event: GitHubWorkflowRunCompletion.check(\n Schema.makeFilter((completion) => completion.repositoryId === repository.id, {\n title: \"GitHub completion belongs to the host-bound repository\",\n }),\n ),\n parameters: GitHubWorkflowRunWatch,\n identity: completionIdentity,\n eventKey: completionIdentity,\n parameterKey: (watch) => watchIdentity(repository.id, watch),\n matches: (completion, watch) =>\n completion.repositoryId === repository.id &&\n completion.runId === watch.runId &&\n completion.attempt === watch.attempt &&\n completion.headSha === watch.expectedHeadSha,\n reconcile: (watch) =>\n runs.getAttempt({ repository, runId: watch.runId, attempt: watch.attempt }).pipe(\n Effect.mapError((error) => sourceError(`github-${error.reason}`, error.retryable)),\n Effect.flatMap((wire) => completionFromWire(repository, watch, wire)),\n ),\n });\n});\n\nexport class GitHubWebhookVerificationError extends Schema.TaggedError<GitHubWebhookVerificationError>()(\n \"GitHubWebhookVerificationError\",\n {\n reason: Schema.Literals([\n \"invalid-signature\",\n \"invalid-event\",\n \"invalid-payload\",\n \"payload-too-large\",\n \"crypto-unavailable\",\n ]),\n },\n) {}\n\n/** Host-held webhook secret verification; callers cannot bypass it by supplying parsed JSON. */\nexport class GitHubWebhookSignatureVerifier extends Context.Service<\n GitHubWebhookSignatureVerifier,\n {\n readonly verify: (\n body: Uint8Array,\n signature: string,\n ) => Effect.Effect<void, GitHubWebhookVerificationError>;\n }\n>()(\"@effect-agent/thread/GitHubWebhookSignatureVerifier\") {}\n\n/** Narrow host WebCrypto capability used for GitHub HMAC-SHA256 verification. */\nexport interface GitHubWebhookSubtleCrypto<Key> {\n readonly importKey: (\n format: \"raw\",\n keyData: ArrayBuffer,\n algorithm: { readonly name: \"HMAC\"; readonly hash: \"SHA-256\" },\n extractable: false,\n usages: [\"verify\"],\n ) => PromiseLike<Key>;\n readonly verify: (\n algorithm: \"HMAC\",\n key: Key,\n signature: ArrayBuffer,\n data: ArrayBuffer,\n ) => PromiseLike<boolean>;\n}\n\n/** GitHub-compatible HMAC-SHA256 verifier over the exact raw request bytes. */\nexport const webCryptoGitHubWebhookSignatureVerifierLayer = <Key>(\n secret: Redacted.Redacted<string>,\n subtle: GitHubWebhookSubtleCrypto<Key>,\n): Layer.Layer<GitHubWebhookSignatureVerifier> =>\n Layer.effect(\n GitHubWebhookSignatureVerifier,\n Effect.sync(() => {\n const verify = Effect.fn(\"GitHubWebhookSignatureVerifier.verify\")(function* (\n body: Uint8Array,\n signature: string,\n ) {\n if (!/^sha256=[0-9a-f]{64}$/.test(signature)) {\n return yield* GitHubWebhookVerificationError.make({ reason: \"invalid-signature\" });\n }\n\n const signatureBytes = yield* Effect.fromResult(\n Encoding.decodeHex(signature.slice(\"sha256=\".length)),\n ).pipe(\n Effect.mapError(() =>\n GitHubWebhookVerificationError.make({ reason: \"invalid-signature\" }),\n ),\n );\n\n const keyBytes = new TextEncoder().encode(Redacted.value(secret));\n const keyBuffer = new ArrayBuffer(keyBytes.byteLength);\n\n new Uint8Array(keyBuffer).set(keyBytes);\n\n const key = yield* Effect.tryPromise({\n try: () =>\n subtle.importKey(\"raw\", keyBuffer, { name: \"HMAC\", hash: \"SHA-256\" }, false, [\n \"verify\",\n ]),\n catch: () => GitHubWebhookVerificationError.make({ reason: \"crypto-unavailable\" }),\n });\n\n const signatureBuffer = new ArrayBuffer(signatureBytes.byteLength);\n\n new Uint8Array(signatureBuffer).set(signatureBytes);\n const bodyBuffer = new ArrayBuffer(body.byteLength);\n\n new Uint8Array(bodyBuffer).set(body);\n\n const valid = yield* Effect.tryPromise({\n try: () => subtle.verify(\"HMAC\", key, signatureBuffer, bodyBuffer),\n catch: () => GitHubWebhookVerificationError.make({ reason: \"crypto-unavailable\" }),\n });\n\n if (!valid) {\n return yield* GitHubWebhookVerificationError.make({ reason: \"invalid-signature\" });\n }\n });\n\n return GitHubWebhookSignatureVerifier.of({ verify });\n }),\n );\n\nexport interface VerifiedGitHubWorkflowRunWebhookRequest {\n readonly body: Uint8Array;\n readonly eventHeader: string | undefined;\n readonly signatureHeader: string | undefined;\n readonly principal: Principal;\n}\n\n/**\n * Verify raw ingress, decode only a completed `workflow_run`, and hand its canonical completion to\n * durable intake. The acknowledgement means routing work is retained; it is not a Submission Receipt.\n */\nexport const acceptVerifiedGitHubWorkflowRunWebhook = Effect.fn(\n \"acceptVerifiedGitHubWorkflowRunWebhook\",\n)(function* (\n request: VerifiedGitHubWorkflowRunWebhookRequest,\n): Effect.fn.Return<\n EventAcknowledgement,\n | GitHubWebhookVerificationError\n | Effect.Error<ReturnType<SubscriptionIntake[\"Service\"][\"accept\"]>>,\n GitHubWebhookSignatureVerifier | SubscriptionIntake\n> {\n if (request.body.byteLength > 1024 * 1024) {\n return yield* GitHubWebhookVerificationError.make({ reason: \"payload-too-large\" });\n }\n if (request.eventHeader !== \"workflow_run\" || request.signatureHeader === undefined) {\n return yield* GitHubWebhookVerificationError.make({ reason: \"invalid-event\" });\n }\n const verifier = yield* GitHubWebhookSignatureVerifier;\n\n yield* verifier.verify(request.body, request.signatureHeader);\n\n const text = yield* Effect.try({\n try: () => new TextDecoder(\"utf-8\", { fatal: true, ignoreBOM: false }).decode(request.body),\n catch: () => GitHubWebhookVerificationError.make({ reason: \"invalid-payload\" }),\n });\n\n const webhook = yield* Schema.decodeEffect(Schema.fromJsonString(GitHubWorkflowRunWebhook))(\n text,\n ).pipe(Effect.mapError(() => GitHubWebhookVerificationError.make({ reason: \"invalid-payload\" })));\n\n if (webhook.repository.id !== webhook.workflow_run.repository.id) {\n return yield* GitHubWebhookVerificationError.make({ reason: \"invalid-payload\" });\n }\n if (webhook.workflow_run.status !== \"completed\" || webhook.workflow_run.conclusion === null) {\n return yield* GitHubWebhookVerificationError.make({ reason: \"invalid-payload\" });\n }\n\n const completion = GitHubWorkflowRunCompletion.make({\n repositoryId: webhook.repository.id,\n runId: webhook.workflow_run.id,\n attempt: webhook.workflow_run.run_attempt,\n headSha: webhook.workflow_run.head_sha,\n conclusion: webhook.workflow_run.conclusion,\n });\n\n const intake = yield* SubscriptionIntake;\n\n return yield* intake.accept(request.principal, GitHubWorkflowRunSourceVersion, completion);\n});\n"],"mappings":"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"}