effect-agent 0.1.0-beta.9 → 0.1.0-beta.91
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Agent-CN0EWRsR.d.mts +226 -0
- package/dist/Agent-RklVROrm.mjs +83 -0
- package/dist/Agent-RklVROrm.mjs.map +1 -0
- package/dist/AgentError-CggcAQ7V.d.mts +101 -0
- package/dist/AgentPolicy-CetmQrf3.d.mts +96 -0
- package/dist/AgentRuntime-CHipL2jG.mjs +4598 -0
- package/dist/AgentRuntime-CHipL2jG.mjs.map +1 -0
- package/dist/AgentRuntime-uxR_a4VM.d.mts +346 -0
- package/dist/AgentUpdates-DMJ-_xow.d.mts +53 -0
- package/dist/ContextCompactor-Dxu5zhOL.d.mts +161 -0
- package/dist/ContextWindow-DRQ5Mbm2.d.mts +58 -0
- package/dist/DurableAgentRuntime-D7gDKGjH.mjs +6368 -0
- package/dist/DurableAgentRuntime-D7gDKGjH.mjs.map +1 -0
- package/dist/DurableFailpoint-Oinuuedm.d.mts +41 -0
- package/dist/DurableStep-Cry_iol4.d.mts +103 -0
- package/dist/Ephemeral.d.mts +22 -0
- package/dist/Ephemeral.mjs +22 -0
- package/dist/Ephemeral.mjs.map +1 -0
- package/dist/EventSource-OqS_P9ug.d.mts +51 -0
- package/dist/Identifiers-CN2s30fF.d.mts +40 -0
- package/dist/MemoryNamespace-BbRW5p71.d.mts +36 -0
- package/dist/MemoryReference-B8Q3UJoJ.d.mts +79 -0
- package/dist/Messaging-CkcIdt4I.d.mts +490 -0
- package/dist/MessagingHost-CRk0kXzT.d.mts +246 -0
- package/dist/MessagingHost-CWi_PP3g.mjs +137 -0
- package/dist/MessagingHost-CWi_PP3g.mjs.map +1 -0
- package/dist/OperationAuthorizer-TzcQtpX5.d.mts +61 -0
- package/dist/Output-D6SkedVx.d.mts +25 -0
- package/dist/PageCapture-Df8Xwskw.d.mts +583 -0
- package/dist/PageScreenshot-BpgZKAxl.d.mts +48 -0
- package/dist/PreparedInputAdmission-C4HbjHgl.d.mts +38 -0
- package/dist/Receipt-BAHyigAF.d.mts +33 -0
- package/dist/Records-BAGkekt8.d.mts +3570 -0
- package/dist/RunEvent-DIrzkjLr.d.mts +460 -0
- package/dist/RunEventSink-D5aVhISG.d.mts +108 -0
- package/dist/RunJournal-Cgg1kNvc.mjs +825 -0
- package/dist/RunJournal-Cgg1kNvc.mjs.map +1 -0
- package/dist/RunOptions-g1aigcKI.d.mts +915 -0
- package/dist/RunPolicyUsage-ClZxyR46.d.mts +21 -0
- package/dist/Sandbox-CEsDWBLq.d.mts +173 -0
- package/dist/Schedule-H3SEYX9g.d.mts +842 -0
- package/dist/Scheduling-C9aIP8zT.mjs +691 -0
- package/dist/Scheduling-C9aIP8zT.mjs.map +1 -0
- package/dist/Subagent-DyfzHNdv.d.mts +826 -0
- package/dist/Subagent-U5qXOFE8.mjs +1469 -0
- package/dist/Subagent-U5qXOFE8.mjs.map +1 -0
- package/dist/SubagentContract-DdT7Cqe6.d.mts +116 -0
- package/dist/SubagentHost-CJUBQlcc.d.mts +140 -0
- package/dist/Subscription-BEP8oQO5.d.mts +921 -0
- package/dist/SubscriptionInput-vAAOBrK7.d.mts +41 -0
- package/dist/Thread-DOBQ0QUY.d.mts +96 -0
- package/dist/ThreadHistory-tS1KwxHR.d.mts +60 -0
- package/dist/ToolBroker-DWs4tZra.d.mts +133 -0
- package/dist/ToolExposure-9uF_Yo0T.mjs +10 -0
- package/dist/ToolExposure-9uF_Yo0T.mjs.map +1 -0
- package/dist/ToolExposure-C93U1sPu.mjs +30 -0
- package/dist/ToolExposure-C93U1sPu.mjs.map +1 -0
- package/dist/ToolExposure-UCN12eCd.d.mts +39 -0
- package/dist/ToolExposure-r2eOWk4F.d.mts +46 -0
- package/dist/ToolExposure.d.mts +8 -0
- package/dist/ToolExposure.mjs +21 -0
- package/dist/ToolExposure.mjs.map +1 -0
- package/dist/ToolReconciler-DQVaJfpE.d.mts +76 -0
- package/dist/ToolResult-DmmgoChv.d.mts +61 -0
- package/dist/Usage-Dx0aknfk.d.mts +121 -0
- package/dist/WakeScheduler-EjUF-GhC.d.mts +56 -0
- package/dist/Worker-CaPYykpe.d.mts +228 -0
- package/dist/agent-registration-CWDMOAZA.mjs +172 -0
- package/dist/agent-registration-CWDMOAZA.mjs.map +1 -0
- package/dist/capabilities/Approval.d.mts +114 -0
- package/dist/capabilities/Approval.mjs +226 -0
- package/dist/capabilities/Approval.mjs.map +1 -0
- package/dist/capabilities/Budget.d.mts +112 -0
- package/dist/capabilities/Budget.mjs +346 -0
- package/dist/capabilities/Budget.mjs.map +1 -0
- package/dist/capabilities/CodeMode.d.mts +157 -0
- package/dist/capabilities/CodeMode.mjs +522 -0
- package/dist/capabilities/CodeMode.mjs.map +1 -0
- package/dist/capabilities/Commands.d.mts +55 -0
- package/dist/capabilities/Commands.mjs +57 -0
- package/dist/capabilities/Commands.mjs.map +1 -0
- package/dist/capabilities/ContextTools.d.mts +321 -0
- package/dist/capabilities/ContextTools.mjs +126 -0
- package/dist/capabilities/ContextTools.mjs.map +1 -0
- package/dist/capabilities/Mcp.d.mts +108 -0
- package/dist/capabilities/Mcp.mjs +260 -0
- package/dist/capabilities/Mcp.mjs.map +1 -0
- package/dist/capabilities/McpClient.d.mts +115 -0
- package/dist/capabilities/McpClient.mjs +506 -0
- package/dist/capabilities/McpClient.mjs.map +1 -0
- package/dist/capabilities/MemoryNotes.d.mts +424 -0
- package/dist/capabilities/MemoryNotes.mjs +128 -0
- package/dist/capabilities/MemoryNotes.mjs.map +1 -0
- package/dist/capabilities/Messaging.d.mts +3 -0
- package/dist/capabilities/Messaging.mjs +151 -0
- package/dist/capabilities/Messaging.mjs.map +1 -0
- package/dist/capabilities/ModelContext.d.mts +89 -0
- package/dist/capabilities/ModelContext.mjs +168 -0
- package/dist/capabilities/ModelContext.mjs.map +1 -0
- package/dist/capabilities/Redaction.d.mts +37 -0
- package/dist/capabilities/Redaction.mjs +104 -0
- package/dist/capabilities/Redaction.mjs.map +1 -0
- package/dist/capabilities/Remembering.d.mts +434 -0
- package/dist/capabilities/Remembering.mjs +290 -0
- package/dist/capabilities/Remembering.mjs.map +1 -0
- package/dist/capabilities/RunHooks.d.mts +82 -0
- package/dist/capabilities/RunHooks.mjs +144 -0
- package/dist/capabilities/RunHooks.mjs.map +1 -0
- package/dist/capabilities/SemanticMemory.d.mts +431 -0
- package/dist/capabilities/SemanticMemory.mjs +315 -0
- package/dist/capabilities/SemanticMemory.mjs.map +1 -0
- package/dist/capabilities/Subagent.d.mts +4 -0
- package/dist/capabilities/Subagent.mjs +5 -0
- package/dist/capabilities/SubagentReservations.d.mts +186 -0
- package/dist/capabilities/SubagentReservations.mjs +479 -0
- package/dist/capabilities/SubagentReservations.mjs.map +1 -0
- package/dist/capabilities/ToolDiscovery.d.mts +109 -0
- package/dist/capabilities/ToolDiscovery.mjs +211 -0
- package/dist/capabilities/ToolDiscovery.mjs.map +1 -0
- package/dist/capabilities/WebCapture.d.mts +163 -0
- package/dist/capabilities/WebCapture.mjs +335 -0
- package/dist/capabilities/WebCapture.mjs.map +1 -0
- package/dist/capabilities/WebSearch.d.mts +71 -0
- package/dist/capabilities/WebSearch.mjs +112 -0
- package/dist/capabilities/WebSearch.mjs.map +1 -0
- package/dist/compaction-C2OTceKw.mjs +505 -0
- package/dist/compaction-C2OTceKw.mjs.map +1 -0
- package/dist/core/Agent.d.mts +2 -0
- package/dist/core/Agent.mjs +2 -0
- package/dist/core/AgentError.d.mts +2 -0
- package/dist/core/AgentError.mjs +117 -0
- package/dist/core/AgentError.mjs.map +1 -0
- package/dist/core/AgentPolicy.d.mts +2 -0
- package/dist/core/AgentPolicy.mjs +94 -0
- package/dist/core/AgentPolicy.mjs.map +1 -0
- package/dist/core/AgentUpdates.d.mts +2 -0
- package/dist/core/AgentUpdates.mjs +63 -0
- package/dist/core/AgentUpdates.mjs.map +1 -0
- package/dist/core/IdGenerator.d.mts +26 -0
- package/dist/core/IdGenerator.mjs +27 -0
- package/dist/core/IdGenerator.mjs.map +1 -0
- package/dist/core/Identifiers.d.mts +2 -0
- package/dist/core/Identifiers.mjs +43 -0
- package/dist/core/Identifiers.mjs.map +1 -0
- package/dist/core/Memory.d.mts +57 -0
- package/dist/core/Memory.mjs +203 -0
- package/dist/core/Memory.mjs.map +1 -0
- package/dist/core/MemoryNamespace.d.mts +2 -0
- package/dist/core/MemoryNamespace.mjs +116 -0
- package/dist/core/MemoryNamespace.mjs.map +1 -0
- package/dist/core/MemoryReference.d.mts +2 -0
- package/dist/core/MemoryReference.mjs +109 -0
- package/dist/core/MemoryReference.mjs.map +1 -0
- package/dist/core/MemoryRevalidation.d.mts +65 -0
- package/dist/core/MemoryRevalidation.mjs +126 -0
- package/dist/core/MemoryRevalidation.mjs.map +1 -0
- package/dist/core/MemoryStore.d.mts +186 -0
- package/dist/core/MemoryStore.mjs +243 -0
- package/dist/core/MemoryStore.mjs.map +1 -0
- package/dist/core/Receipt.d.mts +2 -0
- package/dist/core/Receipt.mjs +36 -0
- package/dist/core/Receipt.mjs.map +1 -0
- package/dist/core/RememberingStore.d.mts +1562 -0
- package/dist/core/RememberingStore.mjs +190 -0
- package/dist/core/RememberingStore.mjs.map +1 -0
- package/dist/core/RunEvent.d.mts +2 -0
- package/dist/core/RunEvent.mjs +337 -0
- package/dist/core/RunEvent.mjs.map +1 -0
- package/dist/core/RunPolicyUsage.d.mts +2 -0
- package/dist/core/RunPolicyUsage.mjs +21 -0
- package/dist/core/RunPolicyUsage.mjs.map +1 -0
- package/dist/core/SemanticMemoryIndex.d.mts +826 -0
- package/dist/core/SemanticMemoryIndex.mjs +185 -0
- package/dist/core/SemanticMemoryIndex.mjs.map +1 -0
- package/dist/core/SemanticMemoryRevalidation.d.mts +45 -0
- package/dist/core/SemanticMemoryRevalidation.mjs +191 -0
- package/dist/core/SemanticMemoryRevalidation.mjs.map +1 -0
- package/dist/core/SubagentContract.d.mts +2 -0
- package/dist/core/SubagentContract.mjs +148 -0
- package/dist/core/SubagentContract.mjs.map +1 -0
- package/dist/core/Thread.d.mts +2 -0
- package/dist/core/Thread.mjs +250 -0
- package/dist/core/Thread.mjs.map +1 -0
- package/dist/core/ToolResult.d.mts +2 -0
- package/dist/core/ToolResult.mjs +140 -0
- package/dist/core/ToolResult.mjs.map +1 -0
- package/dist/core/Usage.d.mts +2 -0
- package/dist/core/Usage.mjs +319 -0
- package/dist/core/Usage.mjs.map +1 -0
- package/dist/core/Worker.d.mts +3 -0
- package/dist/core/Worker.mjs +147 -0
- package/dist/core/Worker.mjs.map +1 -0
- package/dist/durable/ActivityStore.d.mts +116 -0
- package/dist/durable/ActivityStore.mjs +131 -0
- package/dist/durable/ActivityStore.mjs.map +1 -0
- package/dist/durable/Admin.d.mts +2 -0
- package/dist/durable/Admin.mjs +328 -0
- package/dist/durable/Admin.mjs.map +1 -0
- package/dist/durable/AgentRegistration.d.mts +2 -0
- package/dist/durable/AgentRegistration.mjs +14 -0
- package/dist/durable/AgentRegistration.mjs.map +1 -0
- package/dist/durable/Certification.d.mts +111 -0
- package/dist/durable/Certification.mjs +159 -0
- package/dist/durable/Certification.mjs.map +1 -0
- package/dist/durable/CommittedActivity.d.mts +62 -0
- package/dist/durable/CommittedActivity.mjs +159 -0
- package/dist/durable/CommittedActivity.mjs.map +1 -0
- package/dist/durable/Digest.d.mts +2 -0
- package/dist/durable/Digest.mjs +50 -0
- package/dist/durable/Digest.mjs.map +1 -0
- package/dist/durable/DurableAgentRuntime.d.mts +3 -0
- package/dist/durable/DurableAgentRuntime.mjs +3 -0
- package/dist/durable/DurableFailpoint.d.mts +2 -0
- package/dist/durable/DurableFailpoint.mjs +94 -0
- package/dist/durable/DurableFailpoint.mjs.map +1 -0
- package/dist/durable/DurableFailpointTestControl.d.mts +15 -0
- package/dist/durable/DurableFailpointTestControl.mjs +19 -0
- package/dist/durable/DurableFailpointTestControl.mjs.map +1 -0
- package/dist/durable/EventSource.d.mts +2 -0
- package/dist/durable/EventSource.mjs +65 -0
- package/dist/durable/EventSource.mjs.map +1 -0
- package/dist/durable/GitHubWorkflowSource.d.mts +144 -0
- package/dist/durable/GitHubWorkflowSource.mjs +209 -0
- package/dist/durable/GitHubWorkflowSource.mjs.map +1 -0
- package/dist/durable/MessageDelivery.d.mts +492 -0
- package/dist/durable/MessageDelivery.mjs +495 -0
- package/dist/durable/MessageDelivery.mjs.map +1 -0
- package/dist/durable/MessageDeliveryStoreConformance.d.mts +358 -0
- package/dist/durable/MessageDeliveryStoreConformance.mjs +243 -0
- package/dist/durable/MessageDeliveryStoreConformance.mjs.map +1 -0
- package/dist/durable/OperationAuthorizer.d.mts +2 -0
- package/dist/durable/OperationAuthorizer.mjs +70 -0
- package/dist/durable/OperationAuthorizer.mjs.map +1 -0
- package/dist/durable/PersistentHistory.d.mts +16 -0
- package/dist/durable/PersistentHistory.mjs +125 -0
- package/dist/durable/PersistentHistory.mjs.map +1 -0
- package/dist/durable/PreparedInputAdmission.d.mts +2 -0
- package/dist/durable/PreparedInputAdmission.mjs +34 -0
- package/dist/durable/PreparedInputAdmission.mjs.map +1 -0
- package/dist/durable/Records.d.mts +2 -0
- package/dist/durable/Records.mjs +795 -0
- package/dist/durable/Records.mjs.map +1 -0
- package/dist/durable/Recovery.d.mts +2 -0
- package/dist/durable/Recovery.mjs +739 -0
- package/dist/durable/Recovery.mjs.map +1 -0
- package/dist/durable/RunJournal.d.mts +2 -0
- package/dist/durable/RunJournal.mjs +2 -0
- package/dist/durable/Schedule.d.mts +2 -0
- package/dist/durable/Schedule.mjs +382 -0
- package/dist/durable/Schedule.mjs.map +1 -0
- package/dist/durable/ScheduleStoreConformance.d.mts +18 -0
- package/dist/durable/ScheduleStoreConformance.mjs +420 -0
- package/dist/durable/ScheduleStoreConformance.mjs.map +1 -0
- package/dist/durable/ScheduleTransition.d.mts +24 -0
- package/dist/durable/ScheduleTransition.mjs +180 -0
- package/dist/durable/ScheduleTransition.mjs.map +1 -0
- package/dist/durable/Scheduling.d.mts +54 -0
- package/dist/durable/Scheduling.mjs +2 -0
- package/dist/durable/SqlMemoryStore.d.mts +30 -0
- package/dist/durable/SqlMemoryStore.mjs +436 -0
- package/dist/durable/SqlMemoryStore.mjs.map +1 -0
- package/dist/durable/SqlMessageDeliveryStore.d.mts +40 -0
- package/dist/durable/SqlMessageDeliveryStore.mjs +167 -0
- package/dist/durable/SqlMessageDeliveryStore.mjs.map +1 -0
- package/dist/durable/SqlStorageV2Upgrade.d.mts +22 -0
- package/dist/durable/SqlStorageV2Upgrade.mjs +459 -0
- package/dist/durable/SqlStorageV2Upgrade.mjs.map +1 -0
- package/dist/durable/SqlSubscriptionStore.d.mts +63 -0
- package/dist/durable/SqlSubscriptionStore.mjs +751 -0
- package/dist/durable/SqlSubscriptionStore.mjs.map +1 -0
- package/dist/durable/SubmissionLedger.d.mts +3 -0
- package/dist/durable/SubmissionLedger.mjs +914 -0
- package/dist/durable/SubmissionLedger.mjs.map +1 -0
- package/dist/durable/SubmissionLedgerConformance.d.mts +30 -0
- package/dist/durable/SubmissionLedgerConformance.mjs +1986 -0
- package/dist/durable/SubmissionLedgerConformance.mjs.map +1 -0
- package/dist/durable/SubmissionStatus.d.mts +2 -0
- package/dist/durable/SubmissionStatus.mjs +18 -0
- package/dist/durable/SubmissionStatus.mjs.map +1 -0
- package/dist/durable/Subscription.d.mts +2 -0
- package/dist/durable/Subscription.mjs +360 -0
- package/dist/durable/Subscription.mjs.map +1 -0
- package/dist/durable/SubscriptionInput.d.mts +2 -0
- package/dist/durable/SubscriptionInput.mjs +52 -0
- package/dist/durable/SubscriptionInput.mjs.map +1 -0
- package/dist/durable/SubscriptionStoreConformance.d.mts +17 -0
- package/dist/durable/SubscriptionStoreConformance.mjs +625 -0
- package/dist/durable/SubscriptionStoreConformance.mjs.map +1 -0
- package/dist/durable/SubscriptionTools.d.mts +273 -0
- package/dist/durable/SubscriptionTools.mjs +190 -0
- package/dist/durable/SubscriptionTools.mjs.map +1 -0
- package/dist/durable/SubscriptionTransition.d.mts +21 -0
- package/dist/durable/SubscriptionTransition.mjs +148 -0
- package/dist/durable/SubscriptionTransition.mjs.map +1 -0
- package/dist/durable/Subscriptions.d.mts +73 -0
- package/dist/durable/Subscriptions.mjs +627 -0
- package/dist/durable/Subscriptions.mjs.map +1 -0
- package/dist/durable/ThreadContextHistory.d.mts +32 -0
- package/dist/durable/ThreadContextHistory.mjs +152 -0
- package/dist/durable/ThreadContextHistory.mjs.map +1 -0
- package/dist/durable/ThreadContextHistoryProjection.d.mts +60 -0
- package/dist/durable/ThreadContextHistoryProjection.mjs +149 -0
- package/dist/durable/ThreadContextHistoryProjection.mjs.map +1 -0
- package/dist/durable/ThreadInvariants.d.mts +74 -0
- package/dist/durable/ThreadInvariants.mjs +200 -0
- package/dist/durable/ThreadInvariants.mjs.map +1 -0
- package/dist/durable/ThreadProjection.d.mts +78 -0
- package/dist/durable/ThreadProjection.mjs +158 -0
- package/dist/durable/ThreadProjection.mjs.map +1 -0
- package/dist/durable/ThreadProjectionMaintenance.d.mts +49 -0
- package/dist/durable/ThreadProjectionMaintenance.mjs +33 -0
- package/dist/durable/ThreadProjectionMaintenance.mjs.map +1 -0
- package/dist/durable/ThreadStore.d.mts +2 -0
- package/dist/durable/ThreadStore.mjs +147 -0
- package/dist/durable/ThreadStore.mjs.map +1 -0
- package/dist/durable/ThreadStoreConformance.d.mts +29 -0
- package/dist/durable/ThreadStoreConformance.mjs +248 -0
- package/dist/durable/ThreadStoreConformance.mjs.map +1 -0
- package/dist/durable/ToolReconciler.d.mts +2 -0
- package/dist/durable/ToolReconciler.mjs +81 -0
- package/dist/durable/ToolReconciler.mjs.map +1 -0
- package/dist/durable/WakeScheduler.d.mts +2 -0
- package/dist/durable/WakeScheduler.mjs +85 -0
- package/dist/durable/WakeScheduler.mjs.map +1 -0
- package/dist/durable/WorkerHost.d.mts +129 -0
- package/dist/durable/WorkerHost.mjs +77 -0
- package/dist/durable/WorkerHost.mjs.map +1 -0
- package/dist/engine/AgentRuntime.d.mts +2 -0
- package/dist/engine/AgentRuntime.mjs +2 -0
- package/dist/engine/Compaction.d.mts +7 -0
- package/dist/engine/Compaction.mjs +16 -0
- package/dist/engine/Compaction.mjs.map +1 -0
- package/dist/engine/ContextCompactor.d.mts +2 -0
- package/dist/engine/ContextCompactor.mjs +119 -0
- package/dist/engine/ContextCompactor.mjs.map +1 -0
- package/dist/engine/ContextHistory.d.mts +65 -0
- package/dist/engine/ContextHistory.mjs +76 -0
- package/dist/engine/ContextHistory.mjs.map +1 -0
- package/dist/engine/ContextWindow.d.mts +2 -0
- package/dist/engine/ContextWindow.mjs +59 -0
- package/dist/engine/ContextWindow.mjs.map +1 -0
- package/dist/engine/DurableStep.d.mts +2 -0
- package/dist/engine/DurableStep.mjs +62 -0
- package/dist/engine/DurableStep.mjs.map +1 -0
- package/dist/engine/MessagingHost.d.mts +2 -0
- package/dist/engine/MessagingHost.mjs +2 -0
- package/dist/engine/Output.d.mts +2 -0
- package/dist/engine/Output.mjs +8 -0
- package/dist/engine/Output.mjs.map +1 -0
- package/dist/engine/RunEventSink.d.mts +2 -0
- package/dist/engine/RunEventSink.mjs +22 -0
- package/dist/engine/RunEventSink.mjs.map +1 -0
- package/dist/engine/RunOptions.d.mts +2 -0
- package/dist/engine/RunOptions.mjs +122 -0
- package/dist/engine/RunOptions.mjs.map +1 -0
- package/dist/engine/SubagentHost.d.mts +2 -0
- package/dist/engine/SubagentHost.mjs +72 -0
- package/dist/engine/SubagentHost.mjs.map +1 -0
- package/dist/engine/ThreadHistory.d.mts +2 -0
- package/dist/engine/ThreadHistory.mjs +67 -0
- package/dist/engine/ThreadHistory.mjs.map +1 -0
- package/dist/engine/ToolBroker.d.mts +2 -0
- package/dist/engine/ToolBroker.mjs +42 -0
- package/dist/engine/ToolBroker.mjs.map +1 -0
- package/dist/foreign-diagnostic-DBQ1XHKh.mjs +37 -0
- package/dist/foreign-diagnostic-DBQ1XHKh.mjs.map +1 -0
- package/dist/index.d.mts +89 -6
- package/dist/index.mjs +98 -6
- package/dist/output-contract-BC7tjlGw.mjs +84 -0
- package/dist/output-contract-BC7tjlGw.mjs.map +1 -0
- package/dist/rolldown-runtime-D7D4PA-g.mjs +13 -0
- package/dist/sandbox/CodeExecutor.d.mts +194 -0
- package/dist/sandbox/CodeExecutor.mjs +278 -0
- package/dist/sandbox/CodeExecutor.mjs.map +1 -0
- package/dist/sandbox/InteractiveBrowser.d.mts +142 -0
- package/dist/sandbox/InteractiveBrowser.mjs +165 -0
- package/dist/sandbox/InteractiveBrowser.mjs.map +1 -0
- package/dist/sandbox/PageCapture.d.mts +2 -0
- package/dist/sandbox/PageCapture.mjs +450 -0
- package/dist/sandbox/PageCapture.mjs.map +1 -0
- package/dist/sandbox/PageCrawl.d.mts +88 -0
- package/dist/sandbox/PageCrawl.mjs +124 -0
- package/dist/sandbox/PageCrawl.mjs.map +1 -0
- package/dist/sandbox/PageScreenshot.d.mts +2 -0
- package/dist/sandbox/PageScreenshot.mjs +53 -0
- package/dist/sandbox/PageScreenshot.mjs.map +1 -0
- package/dist/sandbox/ProtectedBrowser.d.mts +273 -0
- package/dist/sandbox/ProtectedBrowser.mjs +287 -0
- package/dist/sandbox/ProtectedBrowser.mjs.map +1 -0
- package/dist/sandbox/Sandbox.d.mts +2 -0
- package/dist/sandbox/Sandbox.mjs +208 -0
- package/dist/sandbox/Sandbox.mjs.map +1 -0
- package/dist/utf8-BYfhEkcj.mjs +11 -0
- package/dist/utf8-BYfhEkcj.mjs.map +1 -0
- package/dist/utf8-DchGZRBd.mjs +23 -0
- package/dist/utf8-DchGZRBd.mjs.map +1 -0
- package/package.json +1 -40
- package/src/Ephemeral.ts +17 -0
- package/src/ToolExposure.ts +2 -0
- package/src/capabilities/Approval.ts +352 -0
- package/src/capabilities/Budget.ts +536 -0
- package/src/capabilities/CodeMode.ts +1090 -0
- package/src/capabilities/Commands.ts +86 -0
- package/src/capabilities/ContextTools.ts +184 -0
- package/src/capabilities/Mcp.ts +427 -0
- package/src/capabilities/McpClient.ts +967 -0
- package/src/capabilities/MemoryNotes.ts +174 -0
- package/src/capabilities/Messaging.ts +261 -0
- package/src/capabilities/ModelContext.ts +354 -0
- package/src/capabilities/Redaction.ts +157 -0
- package/src/capabilities/Remembering.ts +550 -0
- package/src/capabilities/RunHooks.ts +280 -0
- package/src/capabilities/SemanticMemory.ts +447 -0
- package/src/capabilities/Subagent.ts +2277 -0
- package/src/capabilities/SubagentReservations.ts +850 -0
- package/src/capabilities/ToolDiscovery.ts +339 -0
- package/src/capabilities/WebCapture.ts +722 -0
- package/src/capabilities/WebSearch.ts +184 -0
- package/src/capabilities/internal/subagent-background.ts +1106 -0
- package/src/capabilities/internal/subagent-contract.ts +142 -0
- package/src/capabilities/internal/subagent-policy.ts +235 -0
- package/src/capabilities/internal/subagent-reporting.ts +261 -0
- package/src/capabilities/internal/utf8.ts +10 -0
- package/src/core/Agent.ts +575 -0
- package/src/core/AgentError.ts +152 -0
- package/src/core/AgentPolicy.ts +153 -0
- package/src/core/AgentUpdates.ts +100 -0
- package/src/core/IdGenerator.ts +39 -0
- package/src/core/Identifiers.ts +48 -0
- package/src/core/Memory.ts +290 -0
- package/src/core/MemoryNamespace.ts +196 -0
- package/src/core/MemoryReference.ts +121 -0
- package/src/core/MemoryRevalidation.ts +185 -0
- package/src/core/MemoryStore.ts +368 -0
- package/src/core/Messaging.ts +90 -0
- package/src/core/Receipt.ts +42 -0
- package/src/core/RememberingStore.ts +300 -0
- package/src/core/RunEvent.ts +366 -0
- package/src/core/RunPolicyUsage.ts +17 -0
- package/src/core/SemanticMemoryIndex.ts +250 -0
- package/src/core/SemanticMemoryRevalidation.ts +254 -0
- package/src/core/SubagentContract.ts +196 -0
- package/src/core/Thread.ts +371 -0
- package/src/core/ToolExposure.ts +74 -0
- package/src/core/ToolResult.ts +170 -0
- package/src/core/Usage.ts +529 -0
- package/src/core/Worker.ts +173 -0
- package/src/core/internal/agent-updates.ts +32 -0
- package/src/core/internal/utf8.ts +23 -0
- package/src/durable/ActivityStore.ts +160 -0
- package/src/durable/Admin.ts +496 -0
- package/src/durable/AgentRegistration.ts +13 -0
- package/src/durable/Certification.ts +210 -0
- package/src/durable/CommittedActivity.ts +296 -0
- package/src/durable/Digest.ts +93 -0
- package/src/durable/DurableAgentRuntime.ts +10340 -0
- package/src/durable/DurableFailpoint.ts +103 -0
- package/src/durable/DurableFailpointTestControl.ts +39 -0
- package/src/durable/EventSource.ts +172 -0
- package/src/durable/GitHubWorkflowSource.ts +453 -0
- package/src/durable/MessageDelivery.ts +708 -0
- package/src/durable/MessageDeliveryStoreConformance.ts +363 -0
- package/src/durable/OperationAuthorizer.ts +85 -0
- package/src/durable/PersistentHistory.ts +260 -0
- package/src/durable/PreparedInputAdmission.ts +44 -0
- package/src/durable/Records.ts +1010 -0
- package/src/durable/Recovery.ts +1018 -0
- package/src/durable/RunJournal.ts +1479 -0
- package/src/durable/Schedule.ts +504 -0
- package/src/durable/ScheduleStoreConformance.ts +638 -0
- package/src/durable/ScheduleTransition.ts +265 -0
- package/src/durable/Scheduling.ts +1077 -0
- package/src/durable/SqlMemoryStore.ts +778 -0
- package/src/durable/SqlMessageDeliveryStore.ts +302 -0
- package/src/durable/SqlStorageV2Upgrade.ts +500 -0
- package/src/durable/SqlSubscriptionStore.ts +1440 -0
- package/src/durable/SubmissionLedger.ts +1201 -0
- package/src/durable/SubmissionLedgerConformance.ts +4579 -0
- package/src/durable/SubmissionStatus.ts +14 -0
- package/src/durable/Subscription.ts +544 -0
- package/src/durable/SubscriptionInput.ts +144 -0
- package/src/durable/SubscriptionStoreConformance.ts +945 -0
- package/src/durable/SubscriptionTools.ts +327 -0
- package/src/durable/SubscriptionTransition.ts +302 -0
- package/src/durable/Subscriptions.ts +1210 -0
- package/src/durable/ThreadContextHistory.ts +227 -0
- package/src/durable/ThreadContextHistoryProjection.ts +216 -0
- package/src/durable/ThreadInvariants.ts +442 -0
- package/src/durable/ThreadProjection.ts +269 -0
- package/src/durable/ThreadProjectionMaintenance.ts +67 -0
- package/src/durable/ThreadStore.ts +242 -0
- package/src/durable/ThreadStoreConformance.ts +710 -0
- package/src/durable/ToolReconciler.ts +105 -0
- package/src/durable/WakeScheduler.ts +134 -0
- package/src/durable/WorkerHost.ts +171 -0
- package/src/durable/internal/agent-registration.ts +525 -0
- package/src/durable/internal/agent-updates.ts +302 -0
- package/src/durable/internal/foreign-diagnostic.ts +47 -0
- package/src/durable/internal/journal-checkpoint.ts +104 -0
- package/src/durable/internal/journal-metadata.ts +107 -0
- package/src/durable/internal/messaging-host.ts +608 -0
- package/src/durable/internal/schedule-time.ts +303 -0
- package/src/durable/internal/storage-v2-layout.ts +163 -0
- package/src/durable/internal/storage-v2.ts +73 -0
- package/src/durable/internal/worker-host.ts +2467 -0
- package/src/durable/internal/worker-runtime.ts +9 -0
- package/src/engine/AgentRuntime.ts +37 -0
- package/src/engine/Compaction.ts +11 -0
- package/src/engine/ContextCompactor.ts +277 -0
- package/src/engine/ContextHistory.ts +73 -0
- package/src/engine/ContextWindow.ts +72 -0
- package/src/engine/DurableStep.ts +132 -0
- package/src/engine/MessagingHost.ts +110 -0
- package/src/engine/Output.ts +2 -0
- package/src/engine/RunEventSink.ts +132 -0
- package/src/engine/RunOptions.ts +1077 -0
- package/src/engine/SubagentHost.ts +181 -0
- package/src/engine/ThreadHistory.ts +120 -0
- package/src/engine/ToolBroker.ts +157 -0
- package/src/engine/ToolExposure.ts +48 -0
- package/src/engine/internal/agent-runtime.ts +10162 -0
- package/src/engine/internal/bounded-value.ts +315 -0
- package/src/engine/internal/compaction.ts +678 -0
- package/src/engine/internal/error-diagnostic.ts +39 -0
- package/src/engine/internal/output-contract.ts +173 -0
- package/src/engine/internal/primitive-delta.ts +80 -0
- package/src/engine/internal/provider-result-staging.ts +211 -0
- package/src/engine/internal/tool-derivative.ts +106 -0
- package/src/engine/internal/tool-exposure.ts +224 -0
- package/src/engine/internal/tool-telemetry.ts +484 -0
- package/src/index.ts +97 -22
- package/src/sandbox/CodeExecutor.ts +352 -0
- package/src/sandbox/InteractiveBrowser.ts +257 -0
- package/src/sandbox/PageCapture.ts +692 -0
- package/src/sandbox/PageCrawl.ts +148 -0
- package/src/sandbox/PageScreenshot.ts +81 -0
- package/src/sandbox/ProtectedBrowser.ts +436 -0
- package/src/sandbox/Sandbox.ts +241 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
|
|
3
|
+
import { Settlement } from "./SubmissionLedger.ts";
|
|
4
|
+
|
|
5
|
+
/** A Submission still owes its canonical Settlement, including while suspended. */
|
|
6
|
+
export class PendingSubmission extends Schema.TaggedClass<PendingSubmission>()("pending", {}) {}
|
|
7
|
+
|
|
8
|
+
/** The existing durable Settlement is the only authority for completion. */
|
|
9
|
+
export class SettledSubmission extends Schema.TaggedClass<SettledSubmission>()("settled", {
|
|
10
|
+
settlement: Settlement,
|
|
11
|
+
}) {}
|
|
12
|
+
|
|
13
|
+
export const SubmissionStatus = Schema.Union([PendingSubmission, SettledSubmission]);
|
|
14
|
+
export type SubmissionStatus = typeof SubmissionStatus.Type;
|
|
@@ -0,0 +1,544 @@
|
|
|
1
|
+
import { Context, Effect, Schema } from "effect";
|
|
2
|
+
|
|
3
|
+
import { InputMessage } from "../capabilities/Messaging.ts";
|
|
4
|
+
import { AgentId, ThreadId } from "../core/Identifiers.ts";
|
|
5
|
+
import { Receipt } from "../core/Receipt.ts";
|
|
6
|
+
import { DefinitionDigests, Digest, PersistedJson, WorkerAdmission } from "./Records.ts";
|
|
7
|
+
import {
|
|
8
|
+
ScheduleAuthorizationDecision,
|
|
9
|
+
ScheduleDestination,
|
|
10
|
+
ScheduleInstant,
|
|
11
|
+
ScheduleRetry,
|
|
12
|
+
} from "./Schedule.ts";
|
|
13
|
+
import { AdmissionFence, AdmissionGroup, IdempotencyKey, Principal } from "./SubmissionLedger.ts";
|
|
14
|
+
|
|
15
|
+
export const SubscriptionName = Schema.NonEmptyString.check(
|
|
16
|
+
Schema.isMaxLength(256),
|
|
17
|
+
Schema.isPattern(/^[^\p{Surrogate}]*$/u),
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
const Positive = Schema.Int.check(Schema.isGreaterThan(0));
|
|
21
|
+
|
|
22
|
+
/** Stable storage identity. Deployment and payload values must never change its routing. */
|
|
23
|
+
export const SourcePartition = Schema.Struct({
|
|
24
|
+
tenantId: SubscriptionName,
|
|
25
|
+
address: SubscriptionName,
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
export type SourcePartition = typeof SourcePartition.Type;
|
|
29
|
+
|
|
30
|
+
export const EventSourceVersion = Schema.Struct({
|
|
31
|
+
name: SubscriptionName,
|
|
32
|
+
version: SubscriptionName,
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
export type EventSourceVersion = typeof EventSourceVersion.Type;
|
|
36
|
+
|
|
37
|
+
export const SubscriptionKey = Schema.Struct({
|
|
38
|
+
partition: SourcePartition,
|
|
39
|
+
ownerId: SubscriptionName,
|
|
40
|
+
subscriptionId: SubscriptionName,
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
export type SubscriptionKey = typeof SubscriptionKey.Type;
|
|
44
|
+
|
|
45
|
+
export const SubscriptionScope = Schema.Struct({
|
|
46
|
+
partition: SourcePartition,
|
|
47
|
+
ownerId: SubscriptionName,
|
|
48
|
+
principal: Principal,
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
export type SubscriptionScope = typeof SubscriptionScope.Type;
|
|
52
|
+
|
|
53
|
+
export const SubscriptionConfiguration = Schema.Struct({
|
|
54
|
+
source: EventSourceVersion,
|
|
55
|
+
matchingKey: SubscriptionName,
|
|
56
|
+
parameters: PersistedJson,
|
|
57
|
+
context: PersistedJson,
|
|
58
|
+
mode: Schema.Literals(["once", "continuous"]),
|
|
59
|
+
/** Null disables time-based expiry; once selection and cancellation still apply. */
|
|
60
|
+
expiresAtMillis: Schema.NullOr(ScheduleInstant),
|
|
61
|
+
destination: ScheduleDestination,
|
|
62
|
+
deliveryPrincipal: Principal,
|
|
63
|
+
admissionGroup: Schema.optionalKey(AdmissionGroup),
|
|
64
|
+
admissionFence: Schema.optionalKey(AdmissionFence),
|
|
65
|
+
agentId: AgentId,
|
|
66
|
+
definitions: DefinitionDigests,
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
export type SubscriptionConfiguration = typeof SubscriptionConfiguration.Type;
|
|
70
|
+
|
|
71
|
+
export const SourceRecovery = Schema.Struct({
|
|
72
|
+
attempts: Schema.Natural,
|
|
73
|
+
/** Null retains a conclusive source failure without continuing provider polling. */
|
|
74
|
+
nextAttemptAtMillis: Schema.NullOr(ScheduleInstant),
|
|
75
|
+
lastFailure: Schema.NullOr(SubscriptionName),
|
|
76
|
+
}).check(
|
|
77
|
+
Schema.makeFilter((value) => value.nextAttemptAtMillis !== null || value.lastFailure !== null),
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
export const SubscriptionRecord = Schema.Struct({
|
|
81
|
+
schemaVersion: Schema.Literal(1),
|
|
82
|
+
key: SubscriptionKey,
|
|
83
|
+
creationFingerprint: Digest,
|
|
84
|
+
configurationRevision: Positive,
|
|
85
|
+
configurationFingerprint: Digest,
|
|
86
|
+
creationConfiguration: SubscriptionConfiguration,
|
|
87
|
+
createdBy: Principal,
|
|
88
|
+
createdAtMillis: ScheduleInstant,
|
|
89
|
+
/** Assigned atomically in the same order as event eligibility cutoffs. */
|
|
90
|
+
ordinal: Schema.Natural,
|
|
91
|
+
configuration: SubscriptionConfiguration,
|
|
92
|
+
state: Schema.Literals(["active", "paused", "consumed", "cancelled"]),
|
|
93
|
+
recovery: Schema.NullOr(SourceRecovery),
|
|
94
|
+
}).check(
|
|
95
|
+
Schema.makeFilter(
|
|
96
|
+
(value) =>
|
|
97
|
+
(value.state !== "consumed" || value.configuration.mode === "once") &&
|
|
98
|
+
(value.recovery === null ||
|
|
99
|
+
(value.configuration.mode === "once" &&
|
|
100
|
+
(value.state === "active" || value.state === "paused"))),
|
|
101
|
+
),
|
|
102
|
+
);
|
|
103
|
+
|
|
104
|
+
export type SubscriptionRecord = typeof SubscriptionRecord.Type;
|
|
105
|
+
|
|
106
|
+
export const AcceptedEvent = Schema.Struct({
|
|
107
|
+
schemaVersion: Schema.Literal(1),
|
|
108
|
+
partition: SourcePartition,
|
|
109
|
+
eventId: SubscriptionName,
|
|
110
|
+
source: EventSourceVersion,
|
|
111
|
+
matchingKey: SubscriptionName,
|
|
112
|
+
payload: PersistedJson,
|
|
113
|
+
payloadDigest: Digest,
|
|
114
|
+
acceptedAtMillis: ScheduleInstant,
|
|
115
|
+
occurredAtMillis: Schema.optionalKey(ScheduleInstant),
|
|
116
|
+
/** Deduplication evidence after completed payload/delivery retention ends. */
|
|
117
|
+
tombstone: Schema.optionalKey(Schema.Boolean),
|
|
118
|
+
cutoff: Schema.Natural,
|
|
119
|
+
cursor: Schema.Natural,
|
|
120
|
+
routingComplete: Schema.Boolean,
|
|
121
|
+
routingFailure: Schema.NullOr(SubscriptionName),
|
|
122
|
+
nextAttemptAtMillis: ScheduleInstant,
|
|
123
|
+
}).check(
|
|
124
|
+
Schema.makeFilter(
|
|
125
|
+
(value) =>
|
|
126
|
+
value.cursor <= value.cutoff &&
|
|
127
|
+
(value.tombstone !== true || (value.payload === null && value.routingComplete)),
|
|
128
|
+
),
|
|
129
|
+
);
|
|
130
|
+
|
|
131
|
+
export type AcceptedEvent = typeof AcceptedEvent.Type;
|
|
132
|
+
|
|
133
|
+
export const EventAcknowledgement = Schema.Struct({
|
|
134
|
+
partition: SourcePartition,
|
|
135
|
+
eventId: SubscriptionName,
|
|
136
|
+
acceptedAtMillis: ScheduleInstant,
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
export type EventAcknowledgement = typeof EventAcknowledgement.Type;
|
|
140
|
+
|
|
141
|
+
/** Common admission data; neither a schedule cursor nor a subscription lifecycle lives here. */
|
|
142
|
+
export const PreparedInput = Schema.Struct({
|
|
143
|
+
schemaVersion: Schema.Literal(1),
|
|
144
|
+
threadId: ThreadId,
|
|
145
|
+
deliveryPrincipal: Principal,
|
|
146
|
+
admissionGroup: Schema.optionalKey(AdmissionGroup),
|
|
147
|
+
admissionFence: Schema.optionalKey(AdmissionFence),
|
|
148
|
+
agentId: AgentId,
|
|
149
|
+
definitions: DefinitionDigests,
|
|
150
|
+
input: PersistedJson,
|
|
151
|
+
inputDigest: Digest,
|
|
152
|
+
admissionKey: IdempotencyKey,
|
|
153
|
+
authorization: ScheduleAuthorizationDecision,
|
|
154
|
+
workerAdmission: Schema.optionalKey(WorkerAdmission),
|
|
155
|
+
messageAdmission: Schema.optionalKey(InputMessage),
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
export type PreparedInput = typeof PreparedInput.Type;
|
|
159
|
+
|
|
160
|
+
export const SubscriptionDeliveryKey = Schema.Struct({
|
|
161
|
+
subscription: SubscriptionKey,
|
|
162
|
+
eventId: SubscriptionName,
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
export type SubscriptionDeliveryKey = typeof SubscriptionDeliveryKey.Type;
|
|
166
|
+
|
|
167
|
+
export const SubscriptionRefusal = Schema.Struct({
|
|
168
|
+
phase: Schema.Literals(["preparation", "admission"]),
|
|
169
|
+
code: SubscriptionName,
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
export const SubscriptionDelivery = Schema.Struct({
|
|
173
|
+
schemaVersion: Schema.Literal(1),
|
|
174
|
+
key: SubscriptionDeliveryKey,
|
|
175
|
+
deliveryId: Digest,
|
|
176
|
+
subscriptionFingerprint: Digest,
|
|
177
|
+
configurationRevision: Positive,
|
|
178
|
+
configuration: SubscriptionConfiguration,
|
|
179
|
+
eventDigest: Digest,
|
|
180
|
+
source: EventSourceVersion,
|
|
181
|
+
threadId: ThreadId,
|
|
182
|
+
admissionKey: IdempotencyKey,
|
|
183
|
+
selectedAtMillis: ScheduleInstant,
|
|
184
|
+
observeSettlement: Schema.optionalKey(Schema.Boolean),
|
|
185
|
+
settledAtMillis: Schema.optionalKey(ScheduleInstant),
|
|
186
|
+
completedAtMillis: Schema.optionalKey(ScheduleInstant),
|
|
187
|
+
state: Schema.Literals(["selected", "prepared", "delivered", "refused"]),
|
|
188
|
+
envelope: Schema.NullOr(PreparedInput),
|
|
189
|
+
envelopeDigest: Schema.NullOr(Digest),
|
|
190
|
+
retry: ScheduleRetry,
|
|
191
|
+
receipt: Schema.NullOr(Receipt),
|
|
192
|
+
refusal: Schema.NullOr(SubscriptionRefusal),
|
|
193
|
+
}).check(
|
|
194
|
+
Schema.makeFilter((value) => {
|
|
195
|
+
const hasEnvelope = value.envelope !== null && value.envelopeDigest !== null;
|
|
196
|
+
const noEnvelope = value.envelope === null && value.envelopeDigest === null;
|
|
197
|
+
|
|
198
|
+
switch (value.state) {
|
|
199
|
+
case "selected":
|
|
200
|
+
return noEnvelope && value.receipt === null && value.refusal === null;
|
|
201
|
+
case "prepared":
|
|
202
|
+
return hasEnvelope && value.receipt === null && value.refusal === null;
|
|
203
|
+
case "delivered":
|
|
204
|
+
return hasEnvelope && value.receipt !== null && value.refusal === null;
|
|
205
|
+
case "refused":
|
|
206
|
+
return (
|
|
207
|
+
value.receipt === null &&
|
|
208
|
+
value.refusal !== null &&
|
|
209
|
+
(value.refusal.phase === "preparation" ? noEnvelope : hasEnvelope)
|
|
210
|
+
);
|
|
211
|
+
}
|
|
212
|
+
}),
|
|
213
|
+
);
|
|
214
|
+
|
|
215
|
+
export type SubscriptionDelivery = typeof SubscriptionDelivery.Type;
|
|
216
|
+
|
|
217
|
+
/** Management projections intentionally exclude parameters, context, payload, and input. */
|
|
218
|
+
export const SubscriptionSnapshot = Schema.Struct({
|
|
219
|
+
key: SubscriptionKey,
|
|
220
|
+
source: EventSourceVersion,
|
|
221
|
+
mode: Schema.Literals(["once", "continuous"]),
|
|
222
|
+
state: Schema.Literals(["active", "paused", "consumed", "cancelled", "expired"]),
|
|
223
|
+
configurationRevision: Positive,
|
|
224
|
+
configurationFingerprint: Digest,
|
|
225
|
+
admissionGroup: SubscriptionConfiguration.fields.admissionGroup,
|
|
226
|
+
admissionFence: SubscriptionConfiguration.fields.admissionFence,
|
|
227
|
+
createdAtMillis: ScheduleInstant,
|
|
228
|
+
/** Null disables time-based expiry; once selection and cancellation still apply. */
|
|
229
|
+
expiresAtMillis: Schema.NullOr(ScheduleInstant),
|
|
230
|
+
recovery: Schema.NullOr(SourceRecovery),
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
export type SubscriptionSnapshot = typeof SubscriptionSnapshot.Type;
|
|
234
|
+
|
|
235
|
+
export const SubscriptionDeliverySnapshot = Schema.Struct({
|
|
236
|
+
key: SubscriptionDeliveryKey,
|
|
237
|
+
state: SubscriptionDelivery.fields.state,
|
|
238
|
+
configurationRevision: Positive,
|
|
239
|
+
observeSettlement: Schema.optionalKey(Schema.Boolean),
|
|
240
|
+
settledAtMillis: Schema.optionalKey(ScheduleInstant),
|
|
241
|
+
retry: ScheduleRetry,
|
|
242
|
+
receipt: Schema.NullOr(Receipt),
|
|
243
|
+
refusal: Schema.NullOr(SubscriptionRefusal),
|
|
244
|
+
});
|
|
245
|
+
|
|
246
|
+
export class SubscriptionError extends Schema.TaggedError<SubscriptionError>()(
|
|
247
|
+
"SubscriptionError",
|
|
248
|
+
{
|
|
249
|
+
reason: Schema.Literals([
|
|
250
|
+
"validation",
|
|
251
|
+
"conflict",
|
|
252
|
+
"not-found",
|
|
253
|
+
"capacity",
|
|
254
|
+
"unauthorized",
|
|
255
|
+
"unsupported-source",
|
|
256
|
+
"unsupported-binding",
|
|
257
|
+
"storage",
|
|
258
|
+
"corrupt",
|
|
259
|
+
]),
|
|
260
|
+
code: SubscriptionName,
|
|
261
|
+
cause: Schema.optionalKey(Schema.Defect()),
|
|
262
|
+
currentRevision: Schema.optionalKey(Positive),
|
|
263
|
+
currentState: Schema.optionalKey(
|
|
264
|
+
Schema.Literals(["active", "paused", "consumed", "cancelled"]),
|
|
265
|
+
),
|
|
266
|
+
},
|
|
267
|
+
) {}
|
|
268
|
+
|
|
269
|
+
/** Host source adapters classify expected failures; raw provider diagnostics are never stored. */
|
|
270
|
+
export class SubscriptionSourceError extends Schema.TaggedError<SubscriptionSourceError>()(
|
|
271
|
+
"SubscriptionSourceError",
|
|
272
|
+
{
|
|
273
|
+
code: SubscriptionName,
|
|
274
|
+
retryable: Schema.Boolean,
|
|
275
|
+
},
|
|
276
|
+
) {}
|
|
277
|
+
|
|
278
|
+
export class SubscriptionFailpointError extends Schema.TaggedError<SubscriptionFailpointError>()(
|
|
279
|
+
"SubscriptionFailpointError",
|
|
280
|
+
{ point: Schema.String },
|
|
281
|
+
) {}
|
|
282
|
+
|
|
283
|
+
export type SubscriptionStoreFailure = SubscriptionError | SubscriptionFailpointError;
|
|
284
|
+
|
|
285
|
+
export const SubscriptionFailpoint = Context.Reference<{
|
|
286
|
+
readonly hit: (point: string) => Effect.Effect<void, SubscriptionFailpointError>;
|
|
287
|
+
}>("@effect-agent/thread/SubscriptionFailpoint", {
|
|
288
|
+
defaultValue: () => ({ hit: () => Effect.void }),
|
|
289
|
+
});
|
|
290
|
+
|
|
291
|
+
export const SubscriptionRetentionPolicy = Schema.Struct({
|
|
292
|
+
replayHorizonMillis: Positive,
|
|
293
|
+
completedRetentionMillis: Schema.Natural,
|
|
294
|
+
maxTombstones: Positive.check(Schema.isLessThanOrEqualTo(100_000)),
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
export type SubscriptionRetentionPolicy = typeof SubscriptionRetentionPolicy.Type;
|
|
298
|
+
|
|
299
|
+
export const SubscriptionLimits = Schema.Struct({
|
|
300
|
+
retention: Schema.optionalKey(SubscriptionRetentionPolicy),
|
|
301
|
+
maxRegistrations: Positive.check(Schema.isLessThanOrEqualTo(100_000)),
|
|
302
|
+
maxRegistrationsPerOwner: Positive.check(Schema.isLessThanOrEqualTo(10_000)),
|
|
303
|
+
maxEvents: Positive.check(Schema.isLessThanOrEqualTo(100_000)),
|
|
304
|
+
maxDeliveries: Positive.check(Schema.isLessThanOrEqualTo(100_000)),
|
|
305
|
+
maxDeliveriesPerOwner: Positive.check(Schema.isLessThanOrEqualTo(10_000)),
|
|
306
|
+
maxPayloadBytes: Positive.check(Schema.isLessThanOrEqualTo(65_536)),
|
|
307
|
+
maxContextBytes: Positive.check(Schema.isLessThanOrEqualTo(16_384)),
|
|
308
|
+
maxLifetimeMillis: Positive.check(Schema.isLessThanOrEqualTo(8_640_000_000_000_000)),
|
|
309
|
+
batchSize: Positive.check(Schema.isLessThanOrEqualTo(100)),
|
|
310
|
+
concurrency: Positive.check(Schema.isLessThanOrEqualTo(16)),
|
|
311
|
+
retryMillis: Positive.check(Schema.isLessThanOrEqualTo(86_400_000)),
|
|
312
|
+
maxAutomaticAttempts: Schema.optionalKey(Positive),
|
|
313
|
+
operationTimeoutMillis: Positive.check(Schema.isLessThanOrEqualTo(300_000)),
|
|
314
|
+
});
|
|
315
|
+
|
|
316
|
+
export type SubscriptionLimits = typeof SubscriptionLimits.Type;
|
|
317
|
+
|
|
318
|
+
export const defaultSubscriptionLimits: SubscriptionLimits = {
|
|
319
|
+
maxRegistrations: 10_000,
|
|
320
|
+
maxRegistrationsPerOwner: 1_000,
|
|
321
|
+
maxEvents: 10_000,
|
|
322
|
+
maxDeliveries: 10_000,
|
|
323
|
+
maxDeliveriesPerOwner: 1_000,
|
|
324
|
+
maxPayloadBytes: 65_536,
|
|
325
|
+
maxContextBytes: 16_384,
|
|
326
|
+
maxLifetimeMillis: 30 * 86_400_000,
|
|
327
|
+
batchSize: 16,
|
|
328
|
+
concurrency: 4,
|
|
329
|
+
retryMillis: 30_000,
|
|
330
|
+
operationTimeoutMillis: 30_000,
|
|
331
|
+
maxAutomaticAttempts: 8,
|
|
332
|
+
};
|
|
333
|
+
|
|
334
|
+
export const SubscriptionChange = Schema.Union([
|
|
335
|
+
Schema.Struct({ _tag: Schema.Literal("Recover"), nowMillis: ScheduleInstant }),
|
|
336
|
+
Schema.Struct({
|
|
337
|
+
_tag: Schema.Literal("Update"),
|
|
338
|
+
configuration: SubscriptionConfiguration,
|
|
339
|
+
configurationFingerprint: Digest,
|
|
340
|
+
recovery: Schema.NullOr(SourceRecovery),
|
|
341
|
+
}),
|
|
342
|
+
Schema.Struct({ _tag: Schema.Literals(["Pause", "Resume"]) }),
|
|
343
|
+
]);
|
|
344
|
+
|
|
345
|
+
export type SubscriptionChange = typeof SubscriptionChange.Type;
|
|
346
|
+
|
|
347
|
+
export const DeliveryChange = Schema.Union([
|
|
348
|
+
Schema.Struct({
|
|
349
|
+
_tag: Schema.Literal("ObserveSettlement"),
|
|
350
|
+
receipt: Receipt,
|
|
351
|
+
settled: Schema.Boolean,
|
|
352
|
+
nowMillis: ScheduleInstant,
|
|
353
|
+
nextAttemptAtMillis: ScheduleInstant,
|
|
354
|
+
}),
|
|
355
|
+
Schema.Struct({
|
|
356
|
+
_tag: Schema.Literal("Recover"),
|
|
357
|
+
expectedGeneration: Schema.Natural,
|
|
358
|
+
nowMillis: ScheduleInstant,
|
|
359
|
+
}),
|
|
360
|
+
Schema.Struct({
|
|
361
|
+
_tag: Schema.Literal("Prepare"),
|
|
362
|
+
envelope: PreparedInput,
|
|
363
|
+
envelopeDigest: Digest,
|
|
364
|
+
nowMillis: ScheduleInstant,
|
|
365
|
+
}),
|
|
366
|
+
Schema.Struct({ _tag: Schema.Literal("Complete"), receipt: Receipt, nowMillis: ScheduleInstant }),
|
|
367
|
+
Schema.Struct({
|
|
368
|
+
_tag: Schema.Literal("Refuse"),
|
|
369
|
+
refusal: SubscriptionRefusal,
|
|
370
|
+
nowMillis: ScheduleInstant,
|
|
371
|
+
}),
|
|
372
|
+
Schema.Struct({
|
|
373
|
+
_tag: Schema.Literal("Retry"),
|
|
374
|
+
retry: ScheduleRetry,
|
|
375
|
+
nowMillis: ScheduleInstant,
|
|
376
|
+
}),
|
|
377
|
+
]);
|
|
378
|
+
|
|
379
|
+
export type DeliveryChange = typeof DeliveryChange.Type;
|
|
380
|
+
|
|
381
|
+
/** Progress of bounded recovery sweeps, independent of individual work success. */
|
|
382
|
+
export const SubscriptionScanCursors = Schema.Struct({
|
|
383
|
+
events: Schema.String,
|
|
384
|
+
deliveries: Schema.String,
|
|
385
|
+
recovery: Schema.Natural,
|
|
386
|
+
});
|
|
387
|
+
|
|
388
|
+
export type SubscriptionScanCursors = typeof SubscriptionScanCursors.Type;
|
|
389
|
+
|
|
390
|
+
/**
|
|
391
|
+
* One store instance owns exactly one tenant/source partition. Every mutation is local and
|
|
392
|
+
* atomic, including required Cloudflare wakes. Node has one process owner per database.
|
|
393
|
+
* Records are retained for the partition lifetime; hard quotas reject new retained work.
|
|
394
|
+
* No pruning may discard creation replay, deduplication, or unfinished-work evidence.
|
|
395
|
+
*/
|
|
396
|
+
export class SubscriptionStore extends Context.Service<
|
|
397
|
+
SubscriptionStore,
|
|
398
|
+
{
|
|
399
|
+
readonly partition: SourcePartition;
|
|
400
|
+
readonly compact: (
|
|
401
|
+
nowMillis: number,
|
|
402
|
+
policy: SubscriptionRetentionPolicy,
|
|
403
|
+
limit: number,
|
|
404
|
+
) => Effect.Effect<number, SubscriptionStoreFailure>;
|
|
405
|
+
readonly readScanCursors: Effect.Effect<SubscriptionScanCursors, SubscriptionError>;
|
|
406
|
+
readonly advanceScanCursors: (
|
|
407
|
+
cursors: SubscriptionScanCursors,
|
|
408
|
+
) => Effect.Effect<void, SubscriptionStoreFailure>;
|
|
409
|
+
readonly register: (
|
|
410
|
+
record: SubscriptionRecord,
|
|
411
|
+
limits: SubscriptionLimits,
|
|
412
|
+
) => Effect.Effect<SubscriptionRecord, SubscriptionStoreFailure>;
|
|
413
|
+
readonly get: (
|
|
414
|
+
key: SubscriptionKey,
|
|
415
|
+
) => Effect.Effect<SubscriptionRecord | null, SubscriptionError>;
|
|
416
|
+
readonly list: (
|
|
417
|
+
ownerId: string,
|
|
418
|
+
after: number,
|
|
419
|
+
limit: number,
|
|
420
|
+
) => Effect.Effect<ReadonlyArray<SubscriptionRecord>, SubscriptionError>;
|
|
421
|
+
readonly change: (
|
|
422
|
+
key: SubscriptionKey,
|
|
423
|
+
expectedRevision: number,
|
|
424
|
+
change: SubscriptionChange,
|
|
425
|
+
) => Effect.Effect<SubscriptionRecord, SubscriptionStoreFailure>;
|
|
426
|
+
readonly cancel: (
|
|
427
|
+
key: SubscriptionKey,
|
|
428
|
+
expectedRevision?: number,
|
|
429
|
+
) => Effect.Effect<SubscriptionRecord, SubscriptionStoreFailure>;
|
|
430
|
+
/** Duplicate identity returns the original cutoff and routing progress; payload/version conflicts fail. */
|
|
431
|
+
readonly accept: (
|
|
432
|
+
event: AcceptedEvent,
|
|
433
|
+
limits: SubscriptionLimits,
|
|
434
|
+
) => Effect.Effect<AcceptedEvent, SubscriptionStoreFailure>;
|
|
435
|
+
readonly event: (eventId: string) => Effect.Effect<AcceptedEvent | null, SubscriptionError>;
|
|
436
|
+
readonly pendingEvents: (
|
|
437
|
+
nowMillis: number,
|
|
438
|
+
after: string,
|
|
439
|
+
limit: number,
|
|
440
|
+
) => Effect.Effect<ReadonlyArray<string>, SubscriptionError>;
|
|
441
|
+
/** Indexed by partition, source/version, matchingKey, ordinal; never scan arbitrary parameters. */
|
|
442
|
+
readonly candidates: (
|
|
443
|
+
event: AcceptedEvent,
|
|
444
|
+
limit: number,
|
|
445
|
+
) => Effect.Effect<ReadonlyArray<SubscriptionRecord>, SubscriptionError>;
|
|
446
|
+
/** Recheck cursor, eligibility, lifecycle and expiry; consume once + insert obligations + cursor together. */
|
|
447
|
+
readonly select: (
|
|
448
|
+
event: AcceptedEvent,
|
|
449
|
+
deliveries: ReadonlyArray<SubscriptionDelivery>,
|
|
450
|
+
cursor: number,
|
|
451
|
+
complete: boolean,
|
|
452
|
+
nowMillis: number,
|
|
453
|
+
limits: SubscriptionLimits,
|
|
454
|
+
) => Effect.Effect<void, SubscriptionStoreFailure>;
|
|
455
|
+
/** Only the explicitly reconciled watch may bypass cutoff, never reopen ordinary routing. */
|
|
456
|
+
readonly catchUp: (
|
|
457
|
+
event: AcceptedEvent,
|
|
458
|
+
delivery: SubscriptionDelivery,
|
|
459
|
+
nowMillis: number,
|
|
460
|
+
limits: SubscriptionLimits,
|
|
461
|
+
) => Effect.Effect<void, SubscriptionStoreFailure>;
|
|
462
|
+
readonly deferEvent: (
|
|
463
|
+
eventId: string,
|
|
464
|
+
nextAttemptAtMillis: number,
|
|
465
|
+
code?: string,
|
|
466
|
+
) => Effect.Effect<void, SubscriptionStoreFailure>;
|
|
467
|
+
readonly delivery: (
|
|
468
|
+
key: SubscriptionDeliveryKey,
|
|
469
|
+
) => Effect.Effect<SubscriptionDelivery | null, SubscriptionError>;
|
|
470
|
+
readonly pendingDeliveries: (
|
|
471
|
+
nowMillis: number,
|
|
472
|
+
after: string,
|
|
473
|
+
limit: number,
|
|
474
|
+
) => Effect.Effect<ReadonlyArray<SubscriptionDeliveryKey>, SubscriptionError>;
|
|
475
|
+
readonly listDeliveries: (
|
|
476
|
+
key: SubscriptionKey,
|
|
477
|
+
after: string,
|
|
478
|
+
limit: number,
|
|
479
|
+
) => Effect.Effect<ReadonlyArray<SubscriptionDelivery>, SubscriptionError>;
|
|
480
|
+
/**
|
|
481
|
+
* A matching deliveryId fences stale outcomes. Prepare rechecks cancellation and expiry atomically.
|
|
482
|
+
* Retry advances only with a higher attempt count and a nondecreasing next-attempt time.
|
|
483
|
+
*/
|
|
484
|
+
readonly changeDelivery: (
|
|
485
|
+
key: SubscriptionDeliveryKey,
|
|
486
|
+
deliveryId: Digest,
|
|
487
|
+
change: DeliveryChange,
|
|
488
|
+
) => Effect.Effect<SubscriptionDelivery, SubscriptionStoreFailure>;
|
|
489
|
+
readonly recovering: (
|
|
490
|
+
nowMillis: number,
|
|
491
|
+
after: number,
|
|
492
|
+
limit: number,
|
|
493
|
+
) => Effect.Effect<
|
|
494
|
+
ReadonlyArray<{ readonly key: SubscriptionKey; readonly ordinal: number }>,
|
|
495
|
+
SubscriptionError
|
|
496
|
+
>;
|
|
497
|
+
readonly deferRecovery: (
|
|
498
|
+
key: SubscriptionKey,
|
|
499
|
+
expectedRevision: number,
|
|
500
|
+
recovery: typeof SourceRecovery.Type | null,
|
|
501
|
+
) => Effect.Effect<void, SubscriptionStoreFailure>;
|
|
502
|
+
readonly nextDeadline: Effect.Effect<number | null, SubscriptionError>;
|
|
503
|
+
}
|
|
504
|
+
>()("@effect-agent/thread/SubscriptionStore") {}
|
|
505
|
+
|
|
506
|
+
/** Explicit host policy. Management scope is not inferred from handle possession. */
|
|
507
|
+
export class SubscriptionAuthorizer extends Context.Service<
|
|
508
|
+
SubscriptionAuthorizer,
|
|
509
|
+
{
|
|
510
|
+
readonly manage: (
|
|
511
|
+
operation:
|
|
512
|
+
| "get"
|
|
513
|
+
| "subscribe"
|
|
514
|
+
| "update"
|
|
515
|
+
| "pause"
|
|
516
|
+
| "resume"
|
|
517
|
+
| "recover"
|
|
518
|
+
| "list"
|
|
519
|
+
| "cancel"
|
|
520
|
+
| "deliveries",
|
|
521
|
+
scope: SubscriptionScope,
|
|
522
|
+
configuration?: SubscriptionConfiguration,
|
|
523
|
+
) => Effect.Effect<void, SubscriptionError>;
|
|
524
|
+
readonly intake: (
|
|
525
|
+
partition: SourcePartition,
|
|
526
|
+
source: EventSourceVersion,
|
|
527
|
+
principal: Principal,
|
|
528
|
+
) => Effect.Effect<void, SubscriptionError>;
|
|
529
|
+
/** Host recovery authority, independent of the principal who registered the watch. */
|
|
530
|
+
readonly reconcile: (
|
|
531
|
+
subscription: SubscriptionRecord,
|
|
532
|
+
) => Effect.Effect<void, SubscriptionError>;
|
|
533
|
+
readonly prepare: (
|
|
534
|
+
subscription: SubscriptionRecord,
|
|
535
|
+
event: AcceptedEvent,
|
|
536
|
+
) => Effect.Effect<typeof ScheduleAuthorizationDecision.Type, SubscriptionError>;
|
|
537
|
+
}
|
|
538
|
+
>()("@effect-agent/thread/SubscriptionAuthorizer") {}
|
|
539
|
+
|
|
540
|
+
export const subscriptionKeyString = (key: SubscriptionKey): string =>
|
|
541
|
+
JSON.stringify([key.partition.tenantId, key.partition.address, key.ownerId, key.subscriptionId]);
|
|
542
|
+
|
|
543
|
+
export const subscriptionDeliveryKeyString = (key: SubscriptionDeliveryKey): string =>
|
|
544
|
+
JSON.stringify([key.subscription.ownerId, key.subscription.subscriptionId, key.eventId]);
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { Context, Effect, Schema, type Scope } from "effect";
|
|
2
|
+
|
|
3
|
+
import { type AgentId } from "../core/Identifiers.ts";
|
|
4
|
+
import { definitionDigestsEqual } from "./internal/agent-registration.ts";
|
|
5
|
+
import { type DefinitionDigests, PersistedJson } from "./Records.ts";
|
|
6
|
+
import {
|
|
7
|
+
type AcceptedEvent,
|
|
8
|
+
type EventSourceVersion,
|
|
9
|
+
type SubscriptionConfiguration,
|
|
10
|
+
type SubscriptionRecord,
|
|
11
|
+
SubscriptionError,
|
|
12
|
+
SubscriptionSourceError,
|
|
13
|
+
} from "./Subscription.ts";
|
|
14
|
+
|
|
15
|
+
/** Host-retained preparation code for one source and exact destination Agent definition. */
|
|
16
|
+
export interface SubscriptionInputBinding {
|
|
17
|
+
readonly source: EventSourceVersion;
|
|
18
|
+
readonly agentId: AgentId;
|
|
19
|
+
readonly definitions: DefinitionDigests;
|
|
20
|
+
readonly context: (value: unknown) => Effect.Effect<PersistedJson, SubscriptionSourceError>;
|
|
21
|
+
readonly prepare: (
|
|
22
|
+
event: AcceptedEvent,
|
|
23
|
+
subscription: SubscriptionRecord,
|
|
24
|
+
) => Effect.Effect<PersistedJson, SubscriptionSourceError>;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export class SubscriptionInputBindings extends Context.Service<
|
|
28
|
+
SubscriptionInputBindings,
|
|
29
|
+
{ readonly bindings: ReadonlyArray<SubscriptionInputBinding> }
|
|
30
|
+
>()("@effect-agent/thread/SubscriptionInputBindings") {}
|
|
31
|
+
|
|
32
|
+
/** Missing or ambiguous code stays pending. Never substitute a newer destination definition. */
|
|
33
|
+
export const resolveSubscriptionInput = (
|
|
34
|
+
bindings: ReadonlyArray<SubscriptionInputBinding>,
|
|
35
|
+
configuration: Pick<SubscriptionConfiguration, "source" | "agentId" | "definitions">,
|
|
36
|
+
): Effect.Effect<SubscriptionInputBinding, SubscriptionError> => {
|
|
37
|
+
const found = bindings.filter(
|
|
38
|
+
(binding) =>
|
|
39
|
+
binding.source.name === configuration.source.name &&
|
|
40
|
+
binding.source.version === configuration.source.version &&
|
|
41
|
+
binding.agentId === configuration.agentId &&
|
|
42
|
+
definitionDigestsEqual(binding.definitions, configuration.definitions),
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
const binding = found[0];
|
|
46
|
+
|
|
47
|
+
return found.length === 1 && binding !== undefined
|
|
48
|
+
? Effect.succeed(binding)
|
|
49
|
+
: Effect.fail(SubscriptionError.make({ reason: "unsupported-binding", code: "input-binding" }));
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Capture explicit dependencies at host assembly. Pass the destination definition's input Schema.
|
|
54
|
+
* Include the context Schema and mapper in its retained definition version; changing either
|
|
55
|
+
* requires new definition digests. Preparation may repeat until its envelope is committed.
|
|
56
|
+
* Each operation owns a fresh Scope for its callbacks and codecs; captured host services
|
|
57
|
+
* retain their host lifetime. Operation resources finalize on success, failure, or interruption.
|
|
58
|
+
*/
|
|
59
|
+
export const makeSubscriptionInputBinding = Effect.fn("Thread.makeSubscriptionInputBinding")(
|
|
60
|
+
function* <
|
|
61
|
+
Event extends Schema.Top,
|
|
62
|
+
Parameters extends Schema.Top,
|
|
63
|
+
Continuation extends Schema.Top,
|
|
64
|
+
Input extends Schema.Top,
|
|
65
|
+
R,
|
|
66
|
+
>(options: {
|
|
67
|
+
readonly source: EventSourceVersion;
|
|
68
|
+
readonly agentId: AgentId;
|
|
69
|
+
readonly definitions: DefinitionDigests;
|
|
70
|
+
readonly event: Event;
|
|
71
|
+
readonly parameters: Parameters;
|
|
72
|
+
readonly context: Continuation;
|
|
73
|
+
readonly input: Input;
|
|
74
|
+
readonly prepare: (
|
|
75
|
+
event: Event["Type"],
|
|
76
|
+
parameters: Parameters["Type"],
|
|
77
|
+
context: Continuation["Type"],
|
|
78
|
+
) => Effect.Effect<Input["Type"], SubscriptionSourceError, R>;
|
|
79
|
+
}): Effect.fn.Return<
|
|
80
|
+
SubscriptionInputBinding,
|
|
81
|
+
never,
|
|
82
|
+
Exclude<
|
|
83
|
+
| R
|
|
84
|
+
| Event["DecodingServices"]
|
|
85
|
+
| Parameters["DecodingServices"]
|
|
86
|
+
| Continuation["DecodingServices"]
|
|
87
|
+
| Continuation["EncodingServices"]
|
|
88
|
+
| Input["EncodingServices"],
|
|
89
|
+
Scope.Scope
|
|
90
|
+
>
|
|
91
|
+
> {
|
|
92
|
+
const services =
|
|
93
|
+
yield* Effect.context<
|
|
94
|
+
Exclude<
|
|
95
|
+
| R
|
|
96
|
+
| Event["DecodingServices"]
|
|
97
|
+
| Parameters["DecodingServices"]
|
|
98
|
+
| Continuation["DecodingServices"]
|
|
99
|
+
| Continuation["EncodingServices"]
|
|
100
|
+
| Input["EncodingServices"],
|
|
101
|
+
Scope.Scope
|
|
102
|
+
>
|
|
103
|
+
>();
|
|
104
|
+
|
|
105
|
+
const invalid = () =>
|
|
106
|
+
SubscriptionSourceError.make({ code: "input-binding-schema", retryable: false });
|
|
107
|
+
|
|
108
|
+
const encode = <S extends Schema.Top>(schema: S, value: S["Type"]) =>
|
|
109
|
+
Schema.encodeEffect(schema)(value).pipe(
|
|
110
|
+
Effect.flatMap(Schema.decodeUnknownEffect(PersistedJson)),
|
|
111
|
+
Effect.mapError(invalid),
|
|
112
|
+
);
|
|
113
|
+
|
|
114
|
+
return {
|
|
115
|
+
source: options.source,
|
|
116
|
+
agentId: options.agentId,
|
|
117
|
+
definitions: options.definitions,
|
|
118
|
+
context: (value) =>
|
|
119
|
+
Schema.decodeUnknownEffect(PersistedJson)(value).pipe(
|
|
120
|
+
Effect.flatMap(Schema.decodeUnknownEffect(options.context)),
|
|
121
|
+
Effect.mapError(invalid),
|
|
122
|
+
Effect.flatMap((decoded) => encode(options.context, decoded)),
|
|
123
|
+
Effect.scoped,
|
|
124
|
+
Effect.provideContext(services),
|
|
125
|
+
),
|
|
126
|
+
prepare: (event, subscription) =>
|
|
127
|
+
Effect.gen(function* () {
|
|
128
|
+
const e = yield* Schema.decodeEffect(options.event)(event.payload).pipe(
|
|
129
|
+
Effect.mapError(invalid),
|
|
130
|
+
);
|
|
131
|
+
|
|
132
|
+
const p = yield* Schema.decodeEffect(options.parameters)(
|
|
133
|
+
subscription.configuration.parameters,
|
|
134
|
+
).pipe(Effect.mapError(invalid));
|
|
135
|
+
|
|
136
|
+
const c = yield* Schema.decodeEffect(options.context)(
|
|
137
|
+
subscription.configuration.context,
|
|
138
|
+
).pipe(Effect.mapError(invalid));
|
|
139
|
+
|
|
140
|
+
return yield* encode(options.input, yield* options.prepare(e, p, c));
|
|
141
|
+
}).pipe(Effect.scoped, Effect.provideContext(services)),
|
|
142
|
+
};
|
|
143
|
+
},
|
|
144
|
+
);
|