effect-agent 0.1.0-beta.85 → 0.1.0-beta.87
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-BLyETCPo.mjs +4562 -0
- package/dist/AgentRuntime-BLyETCPo.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-uggeJpv3.mjs +6368 -0
- package/dist/DurableAgentRuntime-uggeJpv3.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-Cy_hU1tv.mjs +1469 -0
- package/dist/Subagent-Cy_hU1tv.mjs.map +1 -0
- package/dist/Subagent-DyfzHNdv.d.mts +826 -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 +6 -5
- package/dist/ToolExposure.mjs +17 -9
- package/dist/ToolExposure.mjs.map +1 -1
- 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 +435 -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 +88 -54
- package/dist/index.mjs +97 -54
- 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 +252 -0
- package/dist/sandbox/ProtectedBrowser.mjs +270 -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 -1
- package/src/Ephemeral.ts +17 -0
- package/src/ToolExposure.ts +2 -2
- 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 +774 -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 +10117 -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 +96 -53
- 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 +413 -0
- package/src/sandbox/Sandbox.ts +241 -0
- package/dist/Agent.d.mts +0 -5
- package/dist/Agent.mjs +0 -10
- package/dist/Agent.mjs.map +0 -1
- package/dist/AgentError.d.mts +0 -5
- package/dist/AgentError.mjs +0 -10
- package/dist/AgentError.mjs.map +0 -1
- package/dist/AgentPolicy.d.mts +0 -5
- package/dist/AgentPolicy.mjs +0 -10
- package/dist/AgentPolicy.mjs.map +0 -1
- package/dist/AgentRuntime.d.mts +0 -5
- package/dist/AgentRuntime.mjs +0 -10
- package/dist/AgentRuntime.mjs.map +0 -1
- package/dist/AgentUpdates.d.mts +0 -5
- package/dist/AgentUpdates.mjs +0 -10
- package/dist/AgentUpdates.mjs.map +0 -1
- package/dist/Approval.d.mts +0 -5
- package/dist/Approval.mjs +0 -10
- package/dist/Approval.mjs.map +0 -1
- package/dist/Budget.d.mts +0 -5
- package/dist/Budget.mjs +0 -10
- package/dist/Budget.mjs.map +0 -1
- package/dist/CodeMode.d.mts +0 -5
- package/dist/CodeMode.mjs +0 -10
- package/dist/CodeMode.mjs.map +0 -1
- package/dist/Commands.d.mts +0 -5
- package/dist/Commands.mjs +0 -10
- package/dist/Commands.mjs.map +0 -1
- package/dist/Compaction.d.mts +0 -5
- package/dist/Compaction.mjs +0 -10
- package/dist/Compaction.mjs.map +0 -1
- package/dist/ContextCompactor.d.mts +0 -5
- package/dist/ContextCompactor.mjs +0 -10
- package/dist/ContextCompactor.mjs.map +0 -1
- package/dist/ContextHistory.d.mts +0 -5
- package/dist/ContextHistory.mjs +0 -10
- package/dist/ContextHistory.mjs.map +0 -1
- package/dist/ContextTools.d.mts +0 -5
- package/dist/ContextTools.mjs +0 -10
- package/dist/ContextTools.mjs.map +0 -1
- package/dist/ContextWindow.d.mts +0 -5
- package/dist/ContextWindow.mjs +0 -10
- package/dist/ContextWindow.mjs.map +0 -1
- package/dist/DurableStep.d.mts +0 -5
- package/dist/DurableStep.mjs +0 -10
- package/dist/DurableStep.mjs.map +0 -1
- package/dist/EphemeralThreads.d.mts +0 -5
- package/dist/EphemeralThreads.mjs +0 -10
- package/dist/EphemeralThreads.mjs.map +0 -1
- package/dist/IdGenerator.d.mts +0 -5
- package/dist/IdGenerator.mjs +0 -10
- package/dist/IdGenerator.mjs.map +0 -1
- package/dist/Identifiers.d.mts +0 -5
- package/dist/Identifiers.mjs +0 -10
- package/dist/Identifiers.mjs.map +0 -1
- package/dist/Mcp.d.mts +0 -5
- package/dist/Mcp.mjs +0 -10
- package/dist/Mcp.mjs.map +0 -1
- package/dist/McpClient.d.mts +0 -5
- package/dist/McpClient.mjs +0 -10
- package/dist/McpClient.mjs.map +0 -1
- package/dist/Memory.d.mts +0 -5
- package/dist/Memory.mjs +0 -10
- package/dist/Memory.mjs.map +0 -1
- package/dist/MemoryNamespace.d.mts +0 -5
- package/dist/MemoryNamespace.mjs +0 -10
- package/dist/MemoryNamespace.mjs.map +0 -1
- package/dist/MemoryNotes.d.mts +0 -5
- package/dist/MemoryNotes.mjs +0 -10
- package/dist/MemoryNotes.mjs.map +0 -1
- package/dist/MemoryReference.d.mts +0 -5
- package/dist/MemoryReference.mjs +0 -10
- package/dist/MemoryReference.mjs.map +0 -1
- package/dist/MemoryRevalidation.d.mts +0 -5
- package/dist/MemoryRevalidation.mjs +0 -10
- package/dist/MemoryRevalidation.mjs.map +0 -1
- package/dist/MemoryStore.d.mts +0 -5
- package/dist/MemoryStore.mjs +0 -10
- package/dist/MemoryStore.mjs.map +0 -1
- package/dist/Messaging.d.mts +0 -5
- package/dist/Messaging.mjs +0 -10
- package/dist/Messaging.mjs.map +0 -1
- package/dist/MessagingHost.d.mts +0 -5
- package/dist/MessagingHost.mjs +0 -10
- package/dist/MessagingHost.mjs.map +0 -1
- package/dist/ModelContext.d.mts +0 -5
- package/dist/ModelContext.mjs +0 -10
- package/dist/ModelContext.mjs.map +0 -1
- package/dist/Receipt.d.mts +0 -5
- package/dist/Receipt.mjs +0 -10
- package/dist/Receipt.mjs.map +0 -1
- package/dist/Redaction.d.mts +0 -5
- package/dist/Redaction.mjs +0 -10
- package/dist/Redaction.mjs.map +0 -1
- package/dist/Remembering.d.mts +0 -5
- package/dist/Remembering.mjs +0 -10
- package/dist/Remembering.mjs.map +0 -1
- package/dist/RememberingStore.d.mts +0 -5
- package/dist/RememberingStore.mjs +0 -10
- package/dist/RememberingStore.mjs.map +0 -1
- package/dist/RunEvent.d.mts +0 -5
- package/dist/RunEvent.mjs +0 -10
- package/dist/RunEvent.mjs.map +0 -1
- package/dist/RunEventSink.d.mts +0 -5
- package/dist/RunEventSink.mjs +0 -10
- package/dist/RunEventSink.mjs.map +0 -1
- package/dist/RunHooks.d.mts +0 -5
- package/dist/RunHooks.mjs +0 -10
- package/dist/RunHooks.mjs.map +0 -1
- package/dist/RunOptions.d.mts +0 -5
- package/dist/RunOptions.mjs +0 -10
- package/dist/RunOptions.mjs.map +0 -1
- package/dist/RunPolicyUsage.d.mts +0 -5
- package/dist/RunPolicyUsage.mjs +0 -10
- package/dist/RunPolicyUsage.mjs.map +0 -1
- package/dist/SemanticMemory.d.mts +0 -5
- package/dist/SemanticMemory.mjs +0 -10
- package/dist/SemanticMemory.mjs.map +0 -1
- package/dist/SemanticMemoryIndex.d.mts +0 -5
- package/dist/SemanticMemoryIndex.mjs +0 -10
- package/dist/SemanticMemoryIndex.mjs.map +0 -1
- package/dist/SemanticMemoryRevalidation.d.mts +0 -5
- package/dist/SemanticMemoryRevalidation.mjs +0 -10
- package/dist/SemanticMemoryRevalidation.mjs.map +0 -1
- package/dist/Subagent.d.mts +0 -5
- package/dist/Subagent.mjs +0 -10
- package/dist/Subagent.mjs.map +0 -1
- package/dist/SubagentContract.d.mts +0 -5
- package/dist/SubagentContract.mjs +0 -10
- package/dist/SubagentContract.mjs.map +0 -1
- package/dist/SubagentHost.d.mts +0 -5
- package/dist/SubagentHost.mjs +0 -10
- package/dist/SubagentHost.mjs.map +0 -1
- package/dist/SubagentReservations.d.mts +0 -5
- package/dist/SubagentReservations.mjs +0 -10
- package/dist/SubagentReservations.mjs.map +0 -1
- package/dist/ThreadHistory.d.mts +0 -5
- package/dist/ThreadHistory.mjs +0 -10
- package/dist/ThreadHistory.mjs.map +0 -1
- package/dist/ToolBroker.d.mts +0 -5
- package/dist/ToolBroker.mjs +0 -10
- package/dist/ToolBroker.mjs.map +0 -1
- package/dist/ToolDiscovery.d.mts +0 -5
- package/dist/ToolDiscovery.mjs +0 -10
- package/dist/ToolDiscovery.mjs.map +0 -1
- package/dist/ToolResult.d.mts +0 -5
- package/dist/ToolResult.mjs +0 -10
- package/dist/ToolResult.mjs.map +0 -1
- package/dist/Usage.d.mts +0 -5
- package/dist/Usage.mjs +0 -10
- package/dist/Usage.mjs.map +0 -1
- package/dist/WebCapture.d.mts +0 -5
- package/dist/WebCapture.mjs +0 -10
- package/dist/WebCapture.mjs.map +0 -1
- package/dist/WebSearch.d.mts +0 -5
- package/dist/WebSearch.mjs +0 -10
- package/dist/WebSearch.mjs.map +0 -1
- package/dist/Worker.d.mts +0 -5
- package/dist/Worker.mjs +0 -10
- package/dist/Worker.mjs.map +0 -1
- package/dist/rolldown-runtime-BBjsoOtd.mjs +0 -27
- package/src/Agent.ts +0 -1
- package/src/AgentError.ts +0 -1
- package/src/AgentPolicy.ts +0 -1
- package/src/AgentRuntime.ts +0 -1
- package/src/AgentUpdates.ts +0 -1
- package/src/Approval.ts +0 -1
- package/src/Budget.ts +0 -1
- package/src/CodeMode.ts +0 -1
- package/src/Commands.ts +0 -1
- package/src/Compaction.ts +0 -1
- package/src/ContextCompactor.ts +0 -1
- package/src/ContextHistory.ts +0 -1
- package/src/ContextTools.ts +0 -1
- package/src/ContextWindow.ts +0 -1
- package/src/DurableStep.ts +0 -1
- package/src/EphemeralThreads.ts +0 -1
- package/src/IdGenerator.ts +0 -1
- package/src/Identifiers.ts +0 -1
- package/src/Mcp.ts +0 -1
- package/src/McpClient.ts +0 -1
- package/src/Memory.ts +0 -1
- package/src/MemoryNamespace.ts +0 -1
- package/src/MemoryNotes.ts +0 -1
- package/src/MemoryReference.ts +0 -1
- package/src/MemoryRevalidation.ts +0 -1
- package/src/MemoryStore.ts +0 -1
- package/src/Messaging.ts +0 -1
- package/src/MessagingHost.ts +0 -1
- package/src/ModelContext.ts +0 -1
- package/src/Receipt.ts +0 -1
- package/src/Redaction.ts +0 -1
- package/src/Remembering.ts +0 -1
- package/src/RememberingStore.ts +0 -1
- package/src/RunEvent.ts +0 -1
- package/src/RunEventSink.ts +0 -1
- package/src/RunHooks.ts +0 -1
- package/src/RunOptions.ts +0 -1
- package/src/RunPolicyUsage.ts +0 -1
- package/src/SemanticMemory.ts +0 -1
- package/src/SemanticMemoryIndex.ts +0 -1
- package/src/SemanticMemoryRevalidation.ts +0 -1
- package/src/Subagent.ts +0 -1
- package/src/SubagentContract.ts +0 -1
- package/src/SubagentHost.ts +0 -1
- package/src/SubagentReservations.ts +0 -1
- package/src/ThreadHistory.ts +0 -1
- package/src/ToolBroker.ts +0 -1
- package/src/ToolDiscovery.ts +0 -1
- package/src/ToolResult.ts +0 -1
- package/src/Usage.ts +0 -1
- package/src/WebCapture.ts +0 -1
- package/src/WebSearch.ts +0 -1
- package/src/Worker.ts +0 -1
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Ht as FencedAppendRequest, zt as AppendResult } from "../Records-BAGkekt8.mjs";
|
|
2
|
+
import { Context, Effect, Layer, Option, Schema } from "effect";
|
|
3
|
+
declare namespace ThreadProjectionMaintenance_d_exports {
|
|
4
|
+
export { ThreadProjectionError, ThreadProjectionMaintenance, ThreadProjectionMaintenanceService, drainDue };
|
|
5
|
+
}
|
|
6
|
+
declare const ThreadProjectionError_base: Schema.Class<ThreadProjectionError, Schema.TaggedStruct<"ThreadProjectionError", {
|
|
7
|
+
readonly operation: Schema.String;
|
|
8
|
+
readonly message: Schema.String;
|
|
9
|
+
readonly cause: Schema.optionalKey<Schema.Defect>;
|
|
10
|
+
}>, import("effect/Cause").YieldableError>;
|
|
11
|
+
/** A derived projection failed; the canonical source remains authoritative. */
|
|
12
|
+
declare class ThreadProjectionError extends ThreadProjectionError_base {}
|
|
13
|
+
/**
|
|
14
|
+
* Host-owned, disposable indexes over a canonical Thread. Hooks receive raw local source
|
|
15
|
+
* ports at construction and must not mutate them or acquire source producer ownership.
|
|
16
|
+
* Rows and their contiguous watermark commit atomically; an empty projection still consumes
|
|
17
|
+
* its record. Concurrent work must compare the starting watermark before committing.
|
|
18
|
+
*
|
|
19
|
+
* No method owns a scheduler. The platform owns wakeups, durable scheduling metadata and
|
|
20
|
+
* source-producer fencing. Per-call resources belong to Scope; interruption remains interruption.
|
|
21
|
+
*/
|
|
22
|
+
interface ThreadProjectionMaintenanceService {
|
|
23
|
+
/**
|
|
24
|
+
* Runs after a successful source commit and before dependent Tools can execute. An index
|
|
25
|
+
* caught up through firstSequence - 1 must process the entire committed range, including
|
|
26
|
+
* empty records, before returning. Canonical batches contain at most 256 records: chunk
|
|
27
|
+
* within local byte limits and stop at result.lastSequence, never chase a changing tail.
|
|
28
|
+
* An earlier gap defers to drain. Replayed or superseded ranges are idempotent no-ops.
|
|
29
|
+
* Failure must leave the unprocessed prefix visible to pendingDeadline.
|
|
30
|
+
*/
|
|
31
|
+
readonly applyCommitted: (request: FencedAppendRequest, result: AppendResult) => Effect.Effect<void, ThreadProjectionError>;
|
|
32
|
+
/** One bounded, restartable backfill batch. Never drain until caught up in a loop. */
|
|
33
|
+
readonly drain: Effect.Effect<void, ThreadProjectionError>;
|
|
34
|
+
/**
|
|
35
|
+
* Bounded local inspection. None means caught up; a pending epoch-millisecond deadline
|
|
36
|
+
* survives reconstruction and repeated reads must not postpone it. Projection backlog
|
|
37
|
+
* does not gate canonical execution or host approval publication.
|
|
38
|
+
*/
|
|
39
|
+
readonly pendingDeadline: Effect.Effect<Option.Option<number>, ThreadProjectionError>;
|
|
40
|
+
}
|
|
41
|
+
declare const ThreadProjectionMaintenance_base: Context.ServiceClass<ThreadProjectionMaintenance, "@effect-agent/thread/ThreadProjectionMaintenance", ThreadProjectionMaintenanceService>;
|
|
42
|
+
declare class ThreadProjectionMaintenance extends ThreadProjectionMaintenance_base {
|
|
43
|
+
static readonly layer: Layer.Layer<ThreadProjectionMaintenance, never, never>;
|
|
44
|
+
}
|
|
45
|
+
/** Run at most one due backfill batch, preserving typed failures, defects and interruption. */
|
|
46
|
+
declare const drainDue: Effect.Effect<boolean, ThreadProjectionError, ThreadProjectionMaintenance>;
|
|
47
|
+
//#endregion
|
|
48
|
+
export { ThreadProjectionError, ThreadProjectionMaintenance, ThreadProjectionMaintenanceService, drainDue, ThreadProjectionMaintenance_d_exports as t };
|
|
49
|
+
//# sourceMappingURL=ThreadProjectionMaintenance.d.mts.map
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { t as __exportAll } from "../rolldown-runtime-D7D4PA-g.mjs";
|
|
2
|
+
import { Clock, Context, Effect, Layer, Option, Schema } from "effect";
|
|
3
|
+
//#region src/durable/ThreadProjectionMaintenance.ts
|
|
4
|
+
var ThreadProjectionMaintenance_exports = /* @__PURE__ */ __exportAll({
|
|
5
|
+
ThreadProjectionError: () => ThreadProjectionError,
|
|
6
|
+
ThreadProjectionMaintenance: () => ThreadProjectionMaintenance,
|
|
7
|
+
drainDue: () => drainDue
|
|
8
|
+
});
|
|
9
|
+
/** A derived projection failed; the canonical source remains authoritative. */
|
|
10
|
+
var ThreadProjectionError = class extends Schema.TaggedError()("ThreadProjectionError", {
|
|
11
|
+
operation: Schema.String,
|
|
12
|
+
message: Schema.String,
|
|
13
|
+
cause: Schema.optionalKey(Schema.Defect())
|
|
14
|
+
}) {};
|
|
15
|
+
var ThreadProjectionMaintenance = class extends Context.Service()("@effect-agent/thread/ThreadProjectionMaintenance") {
|
|
16
|
+
static layer = Layer.succeed(this)({
|
|
17
|
+
applyCommitted: () => Effect.void,
|
|
18
|
+
drain: Effect.void,
|
|
19
|
+
pendingDeadline: Effect.succeed(Option.none())
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
/** Run at most one due backfill batch, preserving typed failures, defects and interruption. */
|
|
23
|
+
const drainDue = Effect.gen(function* () {
|
|
24
|
+
const projection = yield* ThreadProjectionMaintenance;
|
|
25
|
+
const deadline = yield* projection.pendingDeadline;
|
|
26
|
+
if (Option.isNone(deadline) || deadline.value > (yield* Clock.currentTimeMillis)) return false;
|
|
27
|
+
yield* projection.drain;
|
|
28
|
+
return true;
|
|
29
|
+
});
|
|
30
|
+
//#endregion
|
|
31
|
+
export { ThreadProjectionError, ThreadProjectionMaintenance, drainDue, ThreadProjectionMaintenance_exports as t };
|
|
32
|
+
|
|
33
|
+
//# sourceMappingURL=ThreadProjectionMaintenance.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThreadProjectionMaintenance.mjs","names":[],"sources":["../../src/durable/ThreadProjectionMaintenance.ts"],"sourcesContent":["import { Clock, Context, Effect, Layer, Option, Schema } from \"effect\";\n\nimport type { AppendResult, FencedAppendRequest } from \"./ThreadStore.ts\";\n\n/** A derived projection failed; the canonical source remains authoritative. */\nexport class ThreadProjectionError extends Schema.TaggedError<ThreadProjectionError>()(\n \"ThreadProjectionError\",\n {\n operation: Schema.String,\n message: Schema.String,\n cause: Schema.optionalKey(Schema.Defect()),\n },\n) {}\n\n/**\n * Host-owned, disposable indexes over a canonical Thread. Hooks receive raw local source\n * ports at construction and must not mutate them or acquire source producer ownership.\n * Rows and their contiguous watermark commit atomically; an empty projection still consumes\n * its record. Concurrent work must compare the starting watermark before committing.\n *\n * No method owns a scheduler. The platform owns wakeups, durable scheduling metadata and\n * source-producer fencing. Per-call resources belong to Scope; interruption remains interruption.\n */\nexport interface ThreadProjectionMaintenanceService {\n /**\n * Runs after a successful source commit and before dependent Tools can execute. An index\n * caught up through firstSequence - 1 must process the entire committed range, including\n * empty records, before returning. Canonical batches contain at most 256 records: chunk\n * within local byte limits and stop at result.lastSequence, never chase a changing tail.\n * An earlier gap defers to drain. Replayed or superseded ranges are idempotent no-ops.\n * Failure must leave the unprocessed prefix visible to pendingDeadline.\n */\n readonly applyCommitted: (\n request: FencedAppendRequest,\n result: AppendResult,\n ) => Effect.Effect<void, ThreadProjectionError>;\n /** One bounded, restartable backfill batch. Never drain until caught up in a loop. */\n readonly drain: Effect.Effect<void, ThreadProjectionError>;\n /**\n * Bounded local inspection. None means caught up; a pending epoch-millisecond deadline\n * survives reconstruction and repeated reads must not postpone it. Projection backlog\n * does not gate canonical execution or host approval publication.\n */\n readonly pendingDeadline: Effect.Effect<Option.Option<number>, ThreadProjectionError>;\n}\n\nexport class ThreadProjectionMaintenance extends Context.Service<\n ThreadProjectionMaintenance,\n ThreadProjectionMaintenanceService\n>()(\"@effect-agent/thread/ThreadProjectionMaintenance\") {\n static readonly layer = Layer.succeed(this)({\n applyCommitted: () => Effect.void,\n drain: Effect.void,\n pendingDeadline: Effect.succeed(Option.none()),\n });\n}\n\n/** Run at most one due backfill batch, preserving typed failures, defects and interruption. */\nexport const drainDue = Effect.gen(function* () {\n const projection = yield* ThreadProjectionMaintenance;\n const deadline = yield* projection.pendingDeadline;\n\n if (Option.isNone(deadline) || deadline.value > (yield* Clock.currentTimeMillis)) return false;\n yield* projection.drain;\n\n return true;\n});\n"],"mappings":";;;;;;;;;AAKA,IAAa,wBAAb,cAA2C,OAAO,YAAmC,CAAC,CACpF,yBACA;CACE,WAAW,OAAO;CAClB,SAAS,OAAO;CAChB,OAAO,OAAO,YAAY,OAAO,OAAO,CAAC;AAC3C,CACF,CAAC,CAAC,CAAC;AAkCH,IAAa,8BAAb,cAAiD,QAAQ,QAGvD,CAAC,CAAC,kDAAkD,CAAC,CAAC;CACtD,OAAgB,QAAQ,MAAM,QAAQ,IAAI,CAAC,CAAC;EAC1C,sBAAsB,OAAO;EAC7B,OAAO,OAAO;EACd,iBAAiB,OAAO,QAAQ,OAAO,KAAK,CAAC;CAC/C,CAAC;AACH;;AAGA,MAAa,WAAW,OAAO,IAAI,aAAa;CAC9C,MAAM,aAAa,OAAO;CAC1B,MAAM,WAAW,OAAO,WAAW;CAEnC,IAAI,OAAO,OAAO,QAAQ,KAAK,SAAS,SAAS,OAAO,MAAM,oBAAoB,OAAO;CACzF,OAAO,WAAW;CAElB,OAAO;AACT,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { $t as ThreadObservation, Bt as CheckpointRejected, Gt as SaveCheckpointRequest, Ht as FencedAppendRequest, Jt as ThreadCheckpoints, Kt as SaveRecoveryCheckpointRequest, Qt as ThreadNotMaterialized, Rt as AppendConflict, Ut as LoadCheckpointRequest, Vt as FenceRejected, Wt as MAX_THREAD_EXPORT_RECORDS, Xt as ThreadExportRequest, Yt as ThreadExport, Zt as ThreadMaterialization, en as ThreadRead, in as ThreadStoreFailure, nn as ThreadStore, on as ThreadTail, qt as ThreadCheckpoint, rn as ThreadStoreError, sn as ThreadTailRequest, tn as ThreadRecoveryCheckpoints, zt as AppendResult } from "../Records-BAGkekt8.mjs";
|
|
2
|
+
export { AppendConflict, AppendResult, CheckpointRejected, FenceRejected, FencedAppendRequest, LoadCheckpointRequest, MAX_THREAD_EXPORT_RECORDS, SaveCheckpointRequest, SaveRecoveryCheckpointRequest, ThreadCheckpoint, ThreadCheckpoints, ThreadExport, ThreadExportRequest, ThreadMaterialization, ThreadNotMaterialized, ThreadObservation, ThreadRead, ThreadRecoveryCheckpoints, ThreadStore, ThreadStoreError, ThreadStoreFailure, ThreadTail, ThreadTailRequest };
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { t as __exportAll } from "../rolldown-runtime-D7D4PA-g.mjs";
|
|
2
|
+
import { ThreadId } from "../core/Identifiers.mjs";
|
|
3
|
+
import { BatchId, CanonicalBatch, CanonicalRecordEnvelope, CanonicalSequence, Digest, ObservationOffset, PersistedJson, ProducerEpoch } from "./Records.mjs";
|
|
4
|
+
import { Context, Schema } from "effect";
|
|
5
|
+
//#region src/durable/ThreadStore.ts
|
|
6
|
+
var ThreadStore_exports = /* @__PURE__ */ __exportAll({
|
|
7
|
+
AppendConflict: () => AppendConflict,
|
|
8
|
+
AppendResult: () => AppendResult,
|
|
9
|
+
CheckpointRejected: () => CheckpointRejected,
|
|
10
|
+
FenceRejected: () => FenceRejected,
|
|
11
|
+
FencedAppendRequest: () => FencedAppendRequest,
|
|
12
|
+
LoadCheckpointRequest: () => LoadCheckpointRequest,
|
|
13
|
+
MAX_THREAD_EXPORT_RECORDS: () => MAX_THREAD_EXPORT_RECORDS,
|
|
14
|
+
SaveCheckpointRequest: () => SaveCheckpointRequest,
|
|
15
|
+
SaveRecoveryCheckpointRequest: () => SaveRecoveryCheckpointRequest,
|
|
16
|
+
ThreadCheckpoint: () => ThreadCheckpoint,
|
|
17
|
+
ThreadExport: () => ThreadExport,
|
|
18
|
+
ThreadExportRequest: () => ThreadExportRequest,
|
|
19
|
+
ThreadMaterialization: () => ThreadMaterialization,
|
|
20
|
+
ThreadNotMaterialized: () => ThreadNotMaterialized,
|
|
21
|
+
ThreadObservation: () => ThreadObservation,
|
|
22
|
+
ThreadRead: () => ThreadRead,
|
|
23
|
+
ThreadStore: () => ThreadStore,
|
|
24
|
+
ThreadStoreError: () => ThreadStoreError,
|
|
25
|
+
ThreadTail: () => ThreadTail,
|
|
26
|
+
ThreadTailRequest: () => ThreadTailRequest
|
|
27
|
+
});
|
|
28
|
+
var ThreadMaterialization = class extends Schema.Class("@effect-agent/thread/ThreadMaterialization")({
|
|
29
|
+
threadId: ThreadId,
|
|
30
|
+
producerEpoch: ProducerEpoch
|
|
31
|
+
}) {};
|
|
32
|
+
var FencedAppendRequest = class extends Schema.Class("@effect-agent/thread/FencedAppendRequest")({
|
|
33
|
+
threadId: ThreadId,
|
|
34
|
+
batch: CanonicalBatch,
|
|
35
|
+
expectedTailSequence: CanonicalSequence,
|
|
36
|
+
expectedTailDigest: Digest,
|
|
37
|
+
producerEpoch: ProducerEpoch
|
|
38
|
+
}) {};
|
|
39
|
+
var AppendResult = class extends Schema.Class("@effect-agent/thread/AppendResult")({
|
|
40
|
+
firstSequence: CanonicalSequence,
|
|
41
|
+
lastSequence: CanonicalSequence,
|
|
42
|
+
tailDigest: Digest,
|
|
43
|
+
replayed: Schema.Boolean
|
|
44
|
+
}) {};
|
|
45
|
+
var ThreadRead = class extends Schema.Class("@effect-agent/thread/ThreadRead")({
|
|
46
|
+
threadId: ThreadId,
|
|
47
|
+
afterSequence: Schema.optionalKey(CanonicalSequence),
|
|
48
|
+
limit: Schema.Natural.check(Schema.isGreaterThan(0), Schema.isLessThanOrEqualTo(1024))
|
|
49
|
+
}) {};
|
|
50
|
+
var ThreadObservation = class extends Schema.Class("@effect-agent/thread/ThreadObservation")({
|
|
51
|
+
threadId: ThreadId,
|
|
52
|
+
afterOffset: Schema.optionalKey(ObservationOffset)
|
|
53
|
+
}) {};
|
|
54
|
+
var ThreadExportRequest = class extends Schema.Class("@effect-agent/thread/ThreadExportRequest")({ threadId: ThreadId }) {};
|
|
55
|
+
var ThreadTailRequest = class extends Schema.Class("@effect-agent/thread/ThreadTailRequest")({ threadId: ThreadId }) {};
|
|
56
|
+
/**
|
|
57
|
+
* The committed tail of one Thread Log. A resuming producer composes its next
|
|
58
|
+
* FencedAppendRequest from this value instead of exporting the whole log.
|
|
59
|
+
*/
|
|
60
|
+
var ThreadTail = class extends Schema.Class("@effect-agent/thread/ThreadTail")({
|
|
61
|
+
threadId: ThreadId,
|
|
62
|
+
tailSequence: CanonicalSequence,
|
|
63
|
+
tailDigest: Digest,
|
|
64
|
+
producerEpoch: ProducerEpoch
|
|
65
|
+
}) {};
|
|
66
|
+
/** Maximum canonical records represented by one Thread export. */
|
|
67
|
+
const MAX_THREAD_EXPORT_RECORDS = 131072;
|
|
68
|
+
var ThreadExport = class extends Schema.Class("@effect-agent/thread/ThreadExport")({
|
|
69
|
+
format: Schema.Literal("effect-agent/thread@1"),
|
|
70
|
+
threadId: ThreadId,
|
|
71
|
+
tailSequence: CanonicalSequence,
|
|
72
|
+
tailDigest: Digest,
|
|
73
|
+
records: Schema.Array(CanonicalRecordEnvelope).check(Schema.isMaxLength(MAX_THREAD_EXPORT_RECORDS))
|
|
74
|
+
}) {};
|
|
75
|
+
/**
|
|
76
|
+
* A disposable projection snapshot. Adapters bind its sequence and digest to the canonical
|
|
77
|
+
* log; consumers decode `state` and decide projection compatibility before suffix replay.
|
|
78
|
+
* Legacy metadata is optional for application projections and preserved when supplied.
|
|
79
|
+
* Runtime-owned recovery checkpoints populate and compare it before using cached state.
|
|
80
|
+
*/
|
|
81
|
+
var ThreadCheckpoint = class extends Schema.Class("@effect-agent/thread/ThreadCheckpoint")({
|
|
82
|
+
schemaVersion: Schema.Literal(1),
|
|
83
|
+
threadId: ThreadId,
|
|
84
|
+
throughSequence: CanonicalSequence,
|
|
85
|
+
tailDigest: Digest,
|
|
86
|
+
/** @deprecated For application projections; retained for existing data and runtime recovery. */
|
|
87
|
+
engineVersion: Schema.optionalKey(Schema.NonEmptyString),
|
|
88
|
+
/** @deprecated For application projections; retained for existing data and runtime recovery. */
|
|
89
|
+
agentDefinitionDigest: Schema.optionalKey(Digest),
|
|
90
|
+
/** @deprecated For application projections; retained for existing data and runtime recovery. */
|
|
91
|
+
modelDigest: Schema.optionalKey(Digest),
|
|
92
|
+
/** @deprecated For application projections; retained for existing data and runtime recovery. */
|
|
93
|
+
toolDigest: Schema.optionalKey(Digest),
|
|
94
|
+
state: PersistedJson,
|
|
95
|
+
createdAt: Schema.DateTimeUtcFromString
|
|
96
|
+
}) {};
|
|
97
|
+
var SaveCheckpointRequest = class extends Schema.Class("@effect-agent/thread/SaveCheckpointRequest")({ checkpoint: ThreadCheckpoint }) {};
|
|
98
|
+
/** Replace the disposable recovery view only under the current canonical producer fence. */
|
|
99
|
+
var SaveRecoveryCheckpointRequest = class extends Schema.Class("@effect-agent/thread/SaveRecoveryCheckpointRequest")({
|
|
100
|
+
checkpoint: ThreadCheckpoint,
|
|
101
|
+
producerEpoch: ProducerEpoch
|
|
102
|
+
}) {};
|
|
103
|
+
var LoadCheckpointRequest = class extends Schema.Class("@effect-agent/thread/LoadCheckpointRequest")({
|
|
104
|
+
threadId: ThreadId,
|
|
105
|
+
atOrBeforeSequence: Schema.optionalKey(CanonicalSequence)
|
|
106
|
+
}) {};
|
|
107
|
+
var ThreadStoreError = class extends Schema.TaggedError()("ThreadStoreError", {
|
|
108
|
+
operation: Schema.String,
|
|
109
|
+
message: Schema.String,
|
|
110
|
+
cause: Schema.optionalKey(Schema.Defect())
|
|
111
|
+
}) {};
|
|
112
|
+
var ThreadNotMaterialized = class extends Schema.TaggedError()("ThreadNotMaterialized", { threadId: ThreadId }) {};
|
|
113
|
+
/**
|
|
114
|
+
* A canonical append that cannot commit: `batch-digest` replays a batch ID with different
|
|
115
|
+
* content, `record-identity` reuses a canonical record ID, and `tail` declares a stale expected
|
|
116
|
+
* tail. Tail conflicts carry the actual committed tail as a diagnostic resume hint.
|
|
117
|
+
*/
|
|
118
|
+
var AppendConflict = class extends Schema.TaggedError()("AppendConflict", {
|
|
119
|
+
threadId: ThreadId,
|
|
120
|
+
batchId: BatchId,
|
|
121
|
+
reason: Schema.Literals([
|
|
122
|
+
"batch-digest",
|
|
123
|
+
"record-identity",
|
|
124
|
+
"tail"
|
|
125
|
+
]),
|
|
126
|
+
actualTailSequence: Schema.optionalKey(CanonicalSequence),
|
|
127
|
+
actualTailDigest: Schema.optionalKey(Digest)
|
|
128
|
+
}) {};
|
|
129
|
+
var FenceRejected = class extends Schema.TaggedError()("FenceRejected", {
|
|
130
|
+
threadId: ThreadId,
|
|
131
|
+
actualEpoch: ProducerEpoch,
|
|
132
|
+
attemptedEpoch: ProducerEpoch
|
|
133
|
+
}) {};
|
|
134
|
+
var CheckpointRejected = class extends Schema.TaggedError()("CheckpointRejected", {
|
|
135
|
+
threadId: ThreadId,
|
|
136
|
+
reason: Schema.Literals([
|
|
137
|
+
"ahead-of-tail",
|
|
138
|
+
"digest-mismatch",
|
|
139
|
+
"unsupported-version",
|
|
140
|
+
"corrupt"
|
|
141
|
+
])
|
|
142
|
+
}) {};
|
|
143
|
+
var ThreadStore = class extends Context.Service()("@effect-agent/thread/ThreadStore") {};
|
|
144
|
+
//#endregion
|
|
145
|
+
export { AppendConflict, AppendResult, CheckpointRejected, FenceRejected, FencedAppendRequest, LoadCheckpointRequest, MAX_THREAD_EXPORT_RECORDS, SaveCheckpointRequest, SaveRecoveryCheckpointRequest, ThreadCheckpoint, ThreadExport, ThreadExportRequest, ThreadMaterialization, ThreadNotMaterialized, ThreadObservation, ThreadRead, ThreadStore, ThreadStoreError, ThreadTail, ThreadTailRequest, ThreadStore_exports as t };
|
|
146
|
+
|
|
147
|
+
//# sourceMappingURL=ThreadStore.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThreadStore.mjs","names":[],"sources":["../../src/durable/ThreadStore.ts"],"sourcesContent":["import type { Effect, Option, Stream } from \"effect\";\nimport { Context, Schema } from \"effect\";\n\nimport { ThreadId } from \"../core/Identifiers.ts\";\nimport {\n BatchId,\n CanonicalBatch,\n CanonicalRecordEnvelope,\n CanonicalSequence,\n Digest,\n ObservationOffset,\n PersistedJson,\n ProducerEpoch,\n} from \"./Records.ts\";\n\nexport class ThreadMaterialization extends Schema.Class<ThreadMaterialization>(\n \"@effect-agent/thread/ThreadMaterialization\",\n)({\n threadId: ThreadId,\n producerEpoch: ProducerEpoch,\n}) {}\n\nexport class FencedAppendRequest extends Schema.Class<FencedAppendRequest>(\n \"@effect-agent/thread/FencedAppendRequest\",\n)({\n threadId: ThreadId,\n batch: CanonicalBatch,\n expectedTailSequence: CanonicalSequence,\n expectedTailDigest: Digest,\n producerEpoch: ProducerEpoch,\n}) {}\n\nexport class AppendResult extends Schema.Class<AppendResult>(\"@effect-agent/thread/AppendResult\")({\n firstSequence: CanonicalSequence,\n lastSequence: CanonicalSequence,\n tailDigest: Digest,\n replayed: Schema.Boolean,\n}) {}\n\nexport class ThreadRead extends Schema.Class<ThreadRead>(\"@effect-agent/thread/ThreadRead\")({\n threadId: ThreadId,\n afterSequence: Schema.optionalKey(CanonicalSequence),\n limit: Schema.Natural.check(Schema.isGreaterThan(0), Schema.isLessThanOrEqualTo(1_024)),\n}) {}\n\nexport class ThreadObservation extends Schema.Class<ThreadObservation>(\n \"@effect-agent/thread/ThreadObservation\",\n)({\n threadId: ThreadId,\n afterOffset: Schema.optionalKey(ObservationOffset),\n}) {}\n\nexport class ThreadExportRequest extends Schema.Class<ThreadExportRequest>(\n \"@effect-agent/thread/ThreadExportRequest\",\n)({\n threadId: ThreadId,\n}) {}\n\nexport class ThreadTailRequest extends Schema.Class<ThreadTailRequest>(\n \"@effect-agent/thread/ThreadTailRequest\",\n)({\n threadId: ThreadId,\n}) {}\n\n/**\n * The committed tail of one Thread Log. A resuming producer composes its next\n * FencedAppendRequest from this value instead of exporting the whole log.\n */\nexport class ThreadTail extends Schema.Class<ThreadTail>(\"@effect-agent/thread/ThreadTail\")({\n threadId: ThreadId,\n tailSequence: CanonicalSequence,\n tailDigest: Digest,\n producerEpoch: ProducerEpoch,\n}) {}\n\n/** Maximum canonical records represented by one Thread export. */\nexport const MAX_THREAD_EXPORT_RECORDS = 131_072;\n\nexport class ThreadExport extends Schema.Class<ThreadExport>(\"@effect-agent/thread/ThreadExport\")({\n format: Schema.Literal(\"effect-agent/thread@1\"),\n threadId: ThreadId,\n tailSequence: CanonicalSequence,\n tailDigest: Digest,\n records: Schema.Array(CanonicalRecordEnvelope).check(\n Schema.isMaxLength(MAX_THREAD_EXPORT_RECORDS),\n ),\n}) {}\n\n/**\n * A disposable projection snapshot. Adapters bind its sequence and digest to the canonical\n * log; consumers decode `state` and decide projection compatibility before suffix replay.\n * Legacy metadata is optional for application projections and preserved when supplied.\n * Runtime-owned recovery checkpoints populate and compare it before using cached state.\n */\nexport class ThreadCheckpoint extends Schema.Class<ThreadCheckpoint>(\n \"@effect-agent/thread/ThreadCheckpoint\",\n)({\n schemaVersion: Schema.Literal(1),\n threadId: ThreadId,\n throughSequence: CanonicalSequence,\n tailDigest: Digest,\n /** @deprecated For application projections; retained for existing data and runtime recovery. */\n engineVersion: Schema.optionalKey(Schema.NonEmptyString),\n /** @deprecated For application projections; retained for existing data and runtime recovery. */\n agentDefinitionDigest: Schema.optionalKey(Digest),\n /** @deprecated For application projections; retained for existing data and runtime recovery. */\n modelDigest: Schema.optionalKey(Digest),\n /** @deprecated For application projections; retained for existing data and runtime recovery. */\n toolDigest: Schema.optionalKey(Digest),\n state: PersistedJson,\n createdAt: Schema.DateTimeUtcFromString,\n}) {}\n\nexport class SaveCheckpointRequest extends Schema.Class<SaveCheckpointRequest>(\n \"@effect-agent/thread/SaveCheckpointRequest\",\n)({\n checkpoint: ThreadCheckpoint,\n}) {}\n\n/** Replace the disposable recovery view only under the current canonical producer fence. */\nexport class SaveRecoveryCheckpointRequest extends Schema.Class<SaveRecoveryCheckpointRequest>(\n \"@effect-agent/thread/SaveRecoveryCheckpointRequest\",\n)({\n checkpoint: ThreadCheckpoint,\n producerEpoch: ProducerEpoch,\n}) {}\n\nexport class LoadCheckpointRequest extends Schema.Class<LoadCheckpointRequest>(\n \"@effect-agent/thread/LoadCheckpointRequest\",\n)({\n threadId: ThreadId,\n atOrBeforeSequence: Schema.optionalKey(CanonicalSequence),\n}) {}\n\nexport class ThreadStoreError extends Schema.TaggedError<ThreadStoreError>()(\"ThreadStoreError\", {\n operation: Schema.String,\n message: Schema.String,\n cause: Schema.optionalKey(Schema.Defect()),\n}) {}\n\nexport class ThreadNotMaterialized extends Schema.TaggedError<ThreadNotMaterialized>()(\n \"ThreadNotMaterialized\",\n { threadId: ThreadId },\n) {}\n\n/**\n * A canonical append that cannot commit: `batch-digest` replays a batch ID with different\n * content, `record-identity` reuses a canonical record ID, and `tail` declares a stale expected\n * tail. Tail conflicts carry the actual committed tail as a diagnostic resume hint.\n */\nexport class AppendConflict extends Schema.TaggedError<AppendConflict>()(\"AppendConflict\", {\n threadId: ThreadId,\n batchId: BatchId,\n reason: Schema.Literals([\"batch-digest\", \"record-identity\", \"tail\"]),\n actualTailSequence: Schema.optionalKey(CanonicalSequence),\n actualTailDigest: Schema.optionalKey(Digest),\n}) {}\n\nexport class FenceRejected extends Schema.TaggedError<FenceRejected>()(\"FenceRejected\", {\n threadId: ThreadId,\n actualEpoch: ProducerEpoch,\n attemptedEpoch: ProducerEpoch,\n}) {}\n\nexport class CheckpointRejected extends Schema.TaggedError<CheckpointRejected>()(\n \"CheckpointRejected\",\n {\n threadId: ThreadId,\n reason: Schema.Literals([\"ahead-of-tail\", \"digest-mismatch\", \"unsupported-version\", \"corrupt\"]),\n },\n) {}\n\nexport type ThreadStoreFailure =\n | ThreadStoreError\n | ThreadNotMaterialized\n | AppendConflict\n | FenceRejected;\n\n/**\n * Optional, disposable projection storage. Neither history execution nor durable recovery\n * requires it. Adapters that offer it must bind every checkpoint to a canonical batch tail.\n * Application consumers own projection compatibility; this port does not interpret metadata.\n */\nexport interface ThreadCheckpoints {\n readonly save: (\n request: SaveCheckpointRequest,\n ) => Effect.Effect<void, ThreadStoreError | ThreadNotMaterialized | CheckpointRejected>;\n readonly load: (\n request: LoadCheckpointRequest,\n ) => Effect.Effect<\n Option.Option<ThreadCheckpoint>,\n ThreadStoreError | ThreadNotMaterialized | CheckpointRejected\n >;\n}\n\n/**\n * Optional latest-only recovery cache, independent of application projection checkpoints.\n * Saves atomically validate the producer epoch and canonical batch tail. An older snapshot\n * cannot replace a newer one; equal-tail replacement repairs disposable state. Invalid cached\n * data fails with CheckpointRejected, while infrastructure failures remain ThreadStoreError.\n * Loading at an earlier tail or outside the adapter's cache locality may return none so callers\n * can replay canonical records. Canonical records and the ledger remain authority.\n */\nexport interface ThreadRecoveryCheckpoints {\n readonly save: (\n request: SaveRecoveryCheckpointRequest,\n ) => Effect.Effect<\n void,\n ThreadStoreError | ThreadNotMaterialized | CheckpointRejected | FenceRejected\n >;\n readonly load: ThreadCheckpoints[\"load\"];\n}\n\nexport class ThreadStore extends Context.Service<\n ThreadStore,\n {\n readonly materialize: (\n request: ThreadMaterialization,\n ) => Effect.Effect<void, ThreadStoreError | FenceRejected>;\n readonly append: (\n request: FencedAppendRequest,\n ) => Effect.Effect<\n AppendResult,\n ThreadStoreError | ThreadNotMaterialized | AppendConflict | FenceRejected\n >;\n readonly read: (\n request: ThreadRead,\n ) => Stream.Stream<CanonicalRecordEnvelope, ThreadStoreError | ThreadNotMaterialized>;\n readonly observe: (\n request: ThreadObservation,\n ) => Stream.Stream<CanonicalRecordEnvelope, ThreadStoreError | ThreadNotMaterialized>;\n readonly export: (\n request: ThreadExportRequest,\n ) => Effect.Effect<ThreadExport, ThreadStoreError | ThreadNotMaterialized>;\n readonly inspectTail: (\n request: ThreadTailRequest,\n ) => Effect.Effect<ThreadTail, ThreadStoreError | ThreadNotMaterialized>;\n /** Absent when this adapter does not support disposable checkpoints. */\n readonly checkpoints?: ThreadCheckpoints | undefined;\n readonly recoveryCheckpoints?: ThreadRecoveryCheckpoints | undefined;\n }\n>()(\"@effect-agent/thread/ThreadStore\") {}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAeA,IAAa,wBAAb,cAA2C,OAAO,MAChD,4CACF,CAAC,CAAC;CACA,UAAU;CACV,eAAe;AACjB,CAAC,CAAC,CAAC,CAAC;AAEJ,IAAa,sBAAb,cAAyC,OAAO,MAC9C,0CACF,CAAC,CAAC;CACA,UAAU;CACV,OAAO;CACP,sBAAsB;CACtB,oBAAoB;CACpB,eAAe;AACjB,CAAC,CAAC,CAAC,CAAC;AAEJ,IAAa,eAAb,cAAkC,OAAO,MAAoB,mCAAmC,CAAC,CAAC;CAChG,eAAe;CACf,cAAc;CACd,YAAY;CACZ,UAAU,OAAO;AACnB,CAAC,CAAC,CAAC,CAAC;AAEJ,IAAa,aAAb,cAAgC,OAAO,MAAkB,iCAAiC,CAAC,CAAC;CAC1F,UAAU;CACV,eAAe,OAAO,YAAY,iBAAiB;CACnD,OAAO,OAAO,QAAQ,MAAM,OAAO,cAAc,CAAC,GAAG,OAAO,oBAAoB,IAAK,CAAC;AACxF,CAAC,CAAC,CAAC,CAAC;AAEJ,IAAa,oBAAb,cAAuC,OAAO,MAC5C,wCACF,CAAC,CAAC;CACA,UAAU;CACV,aAAa,OAAO,YAAY,iBAAiB;AACnD,CAAC,CAAC,CAAC,CAAC;AAEJ,IAAa,sBAAb,cAAyC,OAAO,MAC9C,0CACF,CAAC,CAAC,EACA,UAAU,SACZ,CAAC,CAAC,CAAC,CAAC;AAEJ,IAAa,oBAAb,cAAuC,OAAO,MAC5C,wCACF,CAAC,CAAC,EACA,UAAU,SACZ,CAAC,CAAC,CAAC,CAAC;;;;;AAMJ,IAAa,aAAb,cAAgC,OAAO,MAAkB,iCAAiC,CAAC,CAAC;CAC1F,UAAU;CACV,cAAc;CACd,YAAY;CACZ,eAAe;AACjB,CAAC,CAAC,CAAC,CAAC;;AAGJ,MAAa,4BAA4B;AAEzC,IAAa,eAAb,cAAkC,OAAO,MAAoB,mCAAmC,CAAC,CAAC;CAChG,QAAQ,OAAO,QAAQ,uBAAuB;CAC9C,UAAU;CACV,cAAc;CACd,YAAY;CACZ,SAAS,OAAO,MAAM,uBAAuB,CAAC,CAAC,MAC7C,OAAO,YAAY,yBAAyB,CAC9C;AACF,CAAC,CAAC,CAAC,CAAC;;;;;;;AAQJ,IAAa,mBAAb,cAAsC,OAAO,MAC3C,uCACF,CAAC,CAAC;CACA,eAAe,OAAO,QAAQ,CAAC;CAC/B,UAAU;CACV,iBAAiB;CACjB,YAAY;;CAEZ,eAAe,OAAO,YAAY,OAAO,cAAc;;CAEvD,uBAAuB,OAAO,YAAY,MAAM;;CAEhD,aAAa,OAAO,YAAY,MAAM;;CAEtC,YAAY,OAAO,YAAY,MAAM;CACrC,OAAO;CACP,WAAW,OAAO;AACpB,CAAC,CAAC,CAAC,CAAC;AAEJ,IAAa,wBAAb,cAA2C,OAAO,MAChD,4CACF,CAAC,CAAC,EACA,YAAY,iBACd,CAAC,CAAC,CAAC,CAAC;;AAGJ,IAAa,gCAAb,cAAmD,OAAO,MACxD,oDACF,CAAC,CAAC;CACA,YAAY;CACZ,eAAe;AACjB,CAAC,CAAC,CAAC,CAAC;AAEJ,IAAa,wBAAb,cAA2C,OAAO,MAChD,4CACF,CAAC,CAAC;CACA,UAAU;CACV,oBAAoB,OAAO,YAAY,iBAAiB;AAC1D,CAAC,CAAC,CAAC,CAAC;AAEJ,IAAa,mBAAb,cAAsC,OAAO,YAA8B,CAAC,CAAC,oBAAoB;CAC/F,WAAW,OAAO;CAClB,SAAS,OAAO;CAChB,OAAO,OAAO,YAAY,OAAO,OAAO,CAAC;AAC3C,CAAC,CAAC,CAAC,CAAC;AAEJ,IAAa,wBAAb,cAA2C,OAAO,YAAmC,CAAC,CACpF,yBACA,EAAE,UAAU,SAAS,CACvB,CAAC,CAAC,CAAC;;;;;;AAOH,IAAa,iBAAb,cAAoC,OAAO,YAA4B,CAAC,CAAC,kBAAkB;CACzF,UAAU;CACV,SAAS;CACT,QAAQ,OAAO,SAAS;EAAC;EAAgB;EAAmB;CAAM,CAAC;CACnE,oBAAoB,OAAO,YAAY,iBAAiB;CACxD,kBAAkB,OAAO,YAAY,MAAM;AAC7C,CAAC,CAAC,CAAC,CAAC;AAEJ,IAAa,gBAAb,cAAmC,OAAO,YAA2B,CAAC,CAAC,iBAAiB;CACtF,UAAU;CACV,aAAa;CACb,gBAAgB;AAClB,CAAC,CAAC,CAAC,CAAC;AAEJ,IAAa,qBAAb,cAAwC,OAAO,YAAgC,CAAC,CAC9E,sBACA;CACE,UAAU;CACV,QAAQ,OAAO,SAAS;EAAC;EAAiB;EAAmB;EAAuB;CAAS,CAAC;AAChG,CACF,CAAC,CAAC,CAAC;AA2CH,IAAa,cAAb,cAAiC,QAAQ,QA4BvC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Bt as CheckpointRejected, in as ThreadStoreFailure, nn as ThreadStore } from "../Records-BAGkekt8.mjs";
|
|
2
|
+
import { Effect, Schema } from "effect";
|
|
3
|
+
//#region src/durable/ThreadStoreConformance.d.ts
|
|
4
|
+
declare const ThreadStoreConformanceViolation_base: Schema.Class<ThreadStoreConformanceViolation, Schema.TaggedStruct<"ThreadStoreConformanceViolation", {
|
|
5
|
+
readonly caseName: Schema.String;
|
|
6
|
+
readonly message: Schema.String;
|
|
7
|
+
}>, import("effect/Cause").YieldableError>;
|
|
8
|
+
/** A ThreadStore contract invariant that an adapter under test violated. */
|
|
9
|
+
declare class ThreadStoreConformanceViolation extends ThreadStoreConformanceViolation_base {}
|
|
10
|
+
type ThreadStoreConformanceFailure = ThreadStoreFailure | CheckpointRejected | ThreadStoreConformanceViolation;
|
|
11
|
+
/**
|
|
12
|
+
* One adapter-neutral ThreadStore contract case. Each case owns disjoint
|
|
13
|
+
* Thread identities, so a suite may run every case against one shared store
|
|
14
|
+
* instance or against a fresh store per case.
|
|
15
|
+
*/
|
|
16
|
+
interface ThreadStoreConformanceCase {
|
|
17
|
+
readonly name: string;
|
|
18
|
+
readonly run: Effect.Effect<void, ThreadStoreConformanceFailure, ThreadStore>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* The shared, adapter-parameterized ThreadStore contract suite (STORE-010). Every
|
|
22
|
+
* durable adapter test suite must execute each case against its own store provisioning.
|
|
23
|
+
*/
|
|
24
|
+
declare const threadStoreConformanceCases: ReadonlyArray<ThreadStoreConformanceCase>;
|
|
25
|
+
/** Additional contract cases only for adapters advertising `ThreadStore.checkpoints`. */
|
|
26
|
+
declare const threadCheckpointConformanceCases: ReadonlyArray<ThreadStoreConformanceCase>;
|
|
27
|
+
//#endregion
|
|
28
|
+
export { ThreadStoreConformanceCase, ThreadStoreConformanceFailure, ThreadStoreConformanceViolation, threadCheckpointConformanceCases, threadStoreConformanceCases };
|
|
29
|
+
//# sourceMappingURL=ThreadStoreConformance.d.mts.map
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import { RunId, SubmissionId, ThreadId } from "../core/Identifiers.mjs";
|
|
2
|
+
import { BatchId, CanonicalBatch, CanonicalSequence, DeploymentId, ProducerEpoch, ProducerId, RecordEnvelope, RecordId, UserInputRecorded } from "./Records.mjs";
|
|
3
|
+
import { EMPTY_TAIL_DIGEST } from "./Digest.mjs";
|
|
4
|
+
import { AppendConflict, CheckpointRejected, FenceRejected, FencedAppendRequest, LoadCheckpointRequest, SaveCheckpointRequest, ThreadCheckpoint, ThreadExportRequest, ThreadMaterialization, ThreadNotMaterialized, ThreadObservation, ThreadRead, ThreadStore, ThreadTailRequest } from "./ThreadStore.mjs";
|
|
5
|
+
import { DateTime, Effect, Option, Schema, Stream } from "effect";
|
|
6
|
+
//#region src/durable/ThreadStoreConformance.ts
|
|
7
|
+
/** A ThreadStore contract invariant that an adapter under test violated. */
|
|
8
|
+
var ThreadStoreConformanceViolation = class extends Schema.TaggedError()("ThreadStoreConformanceViolation", {
|
|
9
|
+
caseName: Schema.String,
|
|
10
|
+
message: Schema.String
|
|
11
|
+
}) {};
|
|
12
|
+
const decodeThreadId = Schema.decodeSync(ThreadId);
|
|
13
|
+
const decodeRecordId = Schema.decodeSync(RecordId);
|
|
14
|
+
const decodeBatchId = Schema.decodeSync(BatchId);
|
|
15
|
+
const decodeSequence = Schema.decodeSync(CanonicalSequence);
|
|
16
|
+
const decodeEpoch = Schema.decodeSync(ProducerEpoch);
|
|
17
|
+
const CONFORMANCE_DEPLOYMENT = Schema.decodeSync(DeploymentId)("deployment-conformance");
|
|
18
|
+
const CONFORMANCE_PRODUCER = Schema.decodeSync(ProducerId)("producer-conformance");
|
|
19
|
+
const CONFORMANCE_SUBMISSION = Schema.decodeSync(SubmissionId)("submission-conformance");
|
|
20
|
+
const CONFORMANCE_RUN = Schema.decodeSync(RunId)("run-conformance");
|
|
21
|
+
const CONFORMANCE_CREATED_AT = DateTime.toUtc(DateTime.makeUnsafe(1));
|
|
22
|
+
const ZERO_SEQUENCE = decodeSequence(0);
|
|
23
|
+
const EPOCH_ONE = decodeEpoch(1);
|
|
24
|
+
const EPOCH_TWO = decodeEpoch(2);
|
|
25
|
+
const EMPTY_TAIL = {
|
|
26
|
+
lastSequence: ZERO_SEQUENCE,
|
|
27
|
+
tailDigest: EMPTY_TAIL_DIGEST
|
|
28
|
+
};
|
|
29
|
+
const isAppendConflict = Schema.is(AppendConflict);
|
|
30
|
+
const isFenceRejected = Schema.is(FenceRejected);
|
|
31
|
+
const isCheckpointRejected = Schema.is(CheckpointRejected);
|
|
32
|
+
const isThreadNotMaterialized = Schema.is(ThreadNotMaterialized);
|
|
33
|
+
const record = (recordId, input) => RecordEnvelope.make({
|
|
34
|
+
recordId: decodeRecordId(recordId),
|
|
35
|
+
family: "thread",
|
|
36
|
+
schemaVersion: 1,
|
|
37
|
+
createdAt: CONFORMANCE_CREATED_AT,
|
|
38
|
+
deploymentId: CONFORMANCE_DEPLOYMENT,
|
|
39
|
+
payload: UserInputRecorded.make({
|
|
40
|
+
submissionId: CONFORMANCE_SUBMISSION,
|
|
41
|
+
kind: "user",
|
|
42
|
+
runId: CONFORMANCE_RUN,
|
|
43
|
+
input
|
|
44
|
+
})
|
|
45
|
+
});
|
|
46
|
+
const batch = (batchId, records) => CanonicalBatch.make({
|
|
47
|
+
batchId: decodeBatchId(batchId),
|
|
48
|
+
producerId: CONFORMANCE_PRODUCER,
|
|
49
|
+
records
|
|
50
|
+
});
|
|
51
|
+
const materialize = Effect.fn("ThreadStoreConformance.materialize")(function* (threadId, producerEpoch) {
|
|
52
|
+
yield* (yield* ThreadStore).materialize(ThreadMaterialization.make({
|
|
53
|
+
threadId,
|
|
54
|
+
producerEpoch
|
|
55
|
+
}));
|
|
56
|
+
});
|
|
57
|
+
const append = Effect.fn("ThreadStoreConformance.append")(function* (threadId, canonicalBatch, tail = EMPTY_TAIL, producerEpoch = EPOCH_ONE) {
|
|
58
|
+
return yield* (yield* ThreadStore).append(FencedAppendRequest.make({
|
|
59
|
+
threadId,
|
|
60
|
+
batch: canonicalBatch,
|
|
61
|
+
expectedTailSequence: tail.lastSequence,
|
|
62
|
+
expectedTailDigest: tail.tailDigest,
|
|
63
|
+
producerEpoch
|
|
64
|
+
}));
|
|
65
|
+
});
|
|
66
|
+
const readAll = Effect.fn("ThreadStoreConformance.readAll")(function* (threadId) {
|
|
67
|
+
return yield* (yield* ThreadStore).read(ThreadRead.make({
|
|
68
|
+
threadId,
|
|
69
|
+
limit: 1024
|
|
70
|
+
})).pipe(Stream.runCollect);
|
|
71
|
+
});
|
|
72
|
+
const checkpointAt = (threadId, throughSequence, tailDigest) => ThreadCheckpoint.make({
|
|
73
|
+
schemaVersion: 1,
|
|
74
|
+
threadId,
|
|
75
|
+
throughSequence,
|
|
76
|
+
tailDigest,
|
|
77
|
+
state: { conformance: true },
|
|
78
|
+
createdAt: CONFORMANCE_CREATED_AT
|
|
79
|
+
});
|
|
80
|
+
const conformanceCase = (name, build) => ({
|
|
81
|
+
name,
|
|
82
|
+
run: build({
|
|
83
|
+
ensure: (condition, message) => condition ? Effect.void : Effect.fail(ThreadStoreConformanceViolation.make({
|
|
84
|
+
caseName: name,
|
|
85
|
+
message
|
|
86
|
+
})),
|
|
87
|
+
expectFailure: (description, effect) => Effect.flip(effect).pipe(Effect.mapError(() => ThreadStoreConformanceViolation.make({
|
|
88
|
+
caseName: name,
|
|
89
|
+
message: `Expected failure but the operation succeeded: ${description}`
|
|
90
|
+
})))
|
|
91
|
+
}).pipe(Effect.withSpan(`ThreadStoreConformance.${name}`))
|
|
92
|
+
});
|
|
93
|
+
const atomicBatchVisibility = conformanceCase("commits batches atomically with no partial reader visibility", ({ ensure, expectFailure }) => Effect.gen(function* () {
|
|
94
|
+
const threadId = decodeThreadId("conformance-atomic");
|
|
95
|
+
const store = yield* ThreadStore;
|
|
96
|
+
yield* materialize(threadId, EPOCH_ONE);
|
|
97
|
+
const committed = yield* append(threadId, batch("atomic-batch-1", [
|
|
98
|
+
record("atomic-record-1", "first"),
|
|
99
|
+
record("atomic-record-2", "second"),
|
|
100
|
+
record("atomic-record-3", "third")
|
|
101
|
+
]));
|
|
102
|
+
yield* ensure(committed.firstSequence === 1 && committed.lastSequence === 3, "A three-record batch must commit sequences 1 through 3");
|
|
103
|
+
const read = yield* readAll(threadId);
|
|
104
|
+
yield* ensure(read.length === 3, "Readers must observe the full committed batch");
|
|
105
|
+
yield* ensure(read.every((envelope, index) => envelope.sequence === index + 1), "Committed records must be gap-free in declaration order");
|
|
106
|
+
yield* ensure((yield* store.observe(ThreadObservation.make({ threadId })).pipe(Stream.take(3), Stream.runCollect)).map((envelope) => envelope.record.recordId).join(",") === read.map((envelope) => envelope.record.recordId).join(","), "Observers must see exactly the committed batch records in order");
|
|
107
|
+
const duplicate = record("atomic-record-4", "duplicate");
|
|
108
|
+
const intraBatch = yield* expectFailure("a batch containing one record ID twice", append(threadId, batch("atomic-batch-2", [duplicate, duplicate]), committed));
|
|
109
|
+
yield* ensure(isAppendConflict(intraBatch) && intraBatch.reason === "record-identity", "A duplicated record ID inside one batch must conflict with reason record-identity");
|
|
110
|
+
const crossBatch = yield* expectFailure("a batch reusing an already-committed record ID", append(threadId, batch("atomic-batch-3", [record("atomic-record-1", "reused")]), committed));
|
|
111
|
+
yield* ensure(isAppendConflict(crossBatch) && crossBatch.reason === "record-identity", "A record ID reused across batches must conflict with reason record-identity");
|
|
112
|
+
const exported = yield* store.export(ThreadExportRequest.make({ threadId }));
|
|
113
|
+
yield* ensure(exported.records.length === 3 && exported.tailSequence === committed.lastSequence && exported.tailDigest === committed.tailDigest, "A conflicting batch must leave no partial prefix behind");
|
|
114
|
+
}));
|
|
115
|
+
const idempotentReplay = conformanceCase("replays an identical batch idempotently and rejects altered content", ({ ensure, expectFailure }) => Effect.gen(function* () {
|
|
116
|
+
const threadId = decodeThreadId("conformance-replay");
|
|
117
|
+
yield* materialize(threadId, EPOCH_ONE);
|
|
118
|
+
const original = batch("replay-batch-1", [record("replay-record-1", "Lisbon"), record("replay-record-2", "Porto")]);
|
|
119
|
+
const first = yield* append(threadId, original);
|
|
120
|
+
yield* ensure(!first.replayed, "The first append of a batch must not report replayed");
|
|
121
|
+
const replayed = yield* append(threadId, original);
|
|
122
|
+
yield* ensure(replayed.replayed && replayed.firstSequence === first.firstSequence && replayed.lastSequence === first.lastSequence && replayed.tailDigest === first.tailDigest, "Replaying an identical batch must return the original result with replayed set");
|
|
123
|
+
const altered = yield* expectFailure("replaying a batch ID with different canonical content", append(threadId, batch("replay-batch-1", [record("replay-record-3", "Faro")])));
|
|
124
|
+
yield* ensure(isAppendConflict(altered) && altered.reason === "batch-digest", "A batch ID replayed with different content must conflict with reason batch-digest");
|
|
125
|
+
yield* ensure((yield* readAll(threadId)).length === 2, "Replay and conflict must not duplicate committed records");
|
|
126
|
+
}));
|
|
127
|
+
const tailConflict = conformanceCase("rejects stale expected tails and reports the actual tail", ({ ensure, expectFailure }) => Effect.gen(function* () {
|
|
128
|
+
const threadId = decodeThreadId("conformance-tail");
|
|
129
|
+
yield* materialize(threadId, EPOCH_ONE);
|
|
130
|
+
const first = yield* append(threadId, batch("tail-batch-1", [record("tail-record-1", "first")]));
|
|
131
|
+
const staleSequence = yield* expectFailure("an append declaring the pre-append tail sequence", append(threadId, batch("tail-batch-2", [record("tail-record-2", "second")])));
|
|
132
|
+
yield* ensure(isAppendConflict(staleSequence) && staleSequence.reason === "tail", "A stale expected tail sequence must conflict with reason tail");
|
|
133
|
+
yield* ensure(isAppendConflict(staleSequence) && staleSequence.actualTailSequence === first.lastSequence && staleSequence.actualTailDigest === first.tailDigest, "A tail conflict must carry the actual committed tail as a resume hint");
|
|
134
|
+
const staleDigest = yield* expectFailure("an append declaring the right sequence with the wrong digest", append(threadId, batch("tail-batch-2", [record("tail-record-2", "second")]), {
|
|
135
|
+
lastSequence: first.lastSequence,
|
|
136
|
+
tailDigest: EMPTY_TAIL_DIGEST
|
|
137
|
+
}));
|
|
138
|
+
yield* ensure(isAppendConflict(staleDigest) && staleDigest.reason === "tail", "A stale expected tail digest must conflict with reason tail");
|
|
139
|
+
yield* ensure((yield* append(threadId, batch("tail-batch-2", [record("tail-record-2", "second")]), first)).firstSequence === first.lastSequence + 1, "An append declaring the true tail must commit after a tail conflict");
|
|
140
|
+
}));
|
|
141
|
+
const producerFencing = conformanceCase("fences stale producer epochs while allowing epoch takeover", ({ ensure, expectFailure }) => Effect.gen(function* () {
|
|
142
|
+
const threadId = decodeThreadId("conformance-fencing");
|
|
143
|
+
yield* materialize(threadId, EPOCH_ONE);
|
|
144
|
+
const first = yield* append(threadId, batch("fence-batch-1", [record("fence-record-1", "first")]));
|
|
145
|
+
yield* materialize(threadId, EPOCH_TWO);
|
|
146
|
+
const staleAppend = yield* expectFailure("an append using the pre-takeover producer epoch", append(threadId, batch("fence-batch-2", [record("fence-record-2", "second")]), first, EPOCH_ONE));
|
|
147
|
+
yield* ensure(isFenceRejected(staleAppend) && staleAppend.actualEpoch === EPOCH_TWO && staleAppend.attemptedEpoch === EPOCH_ONE, "A stale producer epoch must be fenced with both epochs reported");
|
|
148
|
+
const staleMaterialize = yield* expectFailure("re-materializing with the pre-takeover producer epoch", materialize(threadId, EPOCH_ONE));
|
|
149
|
+
yield* ensure(isFenceRejected(staleMaterialize), "A stale producer epoch must not re-register through materialization");
|
|
150
|
+
const takeover = yield* append(threadId, batch("fence-batch-2", [record("fence-record-2", "second")]), first, EPOCH_TWO);
|
|
151
|
+
yield* ensure(!takeover.replayed && takeover.firstSequence === first.lastSequence + 1, "The takeover epoch must append after the committed tail");
|
|
152
|
+
}));
|
|
153
|
+
const offsetResumability = conformanceCase("resumes observation from a saved offset with exactly the suffix", ({ ensure }) => Effect.gen(function* () {
|
|
154
|
+
const threadId = decodeThreadId("conformance-offsets");
|
|
155
|
+
const store = yield* ThreadStore;
|
|
156
|
+
yield* materialize(threadId, EPOCH_ONE);
|
|
157
|
+
const first = yield* append(threadId, batch("offset-batch-1", [record("offset-record-1", "first"), record("offset-record-2", "second")]));
|
|
158
|
+
const second = yield* append(threadId, batch("offset-batch-2", [record("offset-record-3", "third")]), first);
|
|
159
|
+
yield* append(threadId, batch("offset-batch-3", [record("offset-record-4", "fourth")]), second);
|
|
160
|
+
const committed = yield* readAll(threadId);
|
|
161
|
+
yield* ensure(committed.length === 4, "All committed records must be readable");
|
|
162
|
+
const savedOffset = committed[1]?.offset;
|
|
163
|
+
yield* ensure(savedOffset !== void 0, "Committed records must carry observation offsets");
|
|
164
|
+
if (savedOffset === void 0) return;
|
|
165
|
+
yield* ensure((yield* store.observe(ThreadObservation.make({
|
|
166
|
+
threadId,
|
|
167
|
+
afterOffset: savedOffset
|
|
168
|
+
})).pipe(Stream.take(2), Stream.runCollect)).map((envelope) => envelope.record.recordId).join(",") === committed.slice(2).map((envelope) => envelope.record.recordId).join(","), "Observation from a saved offset must deliver exactly the suffix in order");
|
|
169
|
+
yield* ensure((yield* store.observe(ThreadObservation.make({ threadId })).pipe(Stream.take(4), Stream.runCollect)).map((envelope) => envelope.record.recordId).join(",") === committed.map((envelope) => envelope.record.recordId).join(","), "Observation without an offset must deliver the full log in order");
|
|
170
|
+
}));
|
|
171
|
+
const checkpointBoundaries = conformanceCase("enforces checkpoint save and load boundary rules", ({ ensure, expectFailure }) => Effect.gen(function* () {
|
|
172
|
+
const threadId = decodeThreadId("conformance-checkpoints");
|
|
173
|
+
const checkpoints = (yield* ThreadStore).checkpoints;
|
|
174
|
+
if (checkpoints === void 0) return yield* ThreadStoreConformanceViolation.make({
|
|
175
|
+
caseName: "enforces checkpoint save and load boundary rules",
|
|
176
|
+
message: "The optional checkpoint suite requires checkpoint support"
|
|
177
|
+
});
|
|
178
|
+
yield* ensure([yield* expectFailure("saving a checkpoint for an unmaterialized Thread", checkpoints.save(SaveCheckpointRequest.make({ checkpoint: checkpointAt(threadId, ZERO_SEQUENCE, EMPTY_TAIL_DIGEST) }))), yield* expectFailure("loading a checkpoint for an unmaterialized Thread", checkpoints.load(LoadCheckpointRequest.make({ threadId })))].every(isThreadNotMaterialized), "Checkpoints require a materialized Thread");
|
|
179
|
+
yield* materialize(threadId, EPOCH_ONE);
|
|
180
|
+
const first = yield* append(threadId, batch("checkpoint-batch-1", [record("checkpoint-record-1", "Kyoto")]));
|
|
181
|
+
const aheadOfTail = yield* expectFailure("a checkpoint claiming a sequence beyond the committed tail", checkpoints.save(SaveCheckpointRequest.make({ checkpoint: checkpointAt(threadId, decodeSequence(first.lastSequence + 1), first.tailDigest) })));
|
|
182
|
+
yield* ensure(isCheckpointRejected(aheadOfTail) && aheadOfTail.reason === "ahead-of-tail", "A checkpoint ahead of the tail must be rejected with reason ahead-of-tail");
|
|
183
|
+
const digestMismatch = yield* expectFailure("a checkpoint whose digest does not match the canonical chain", checkpoints.save(SaveCheckpointRequest.make({ checkpoint: checkpointAt(threadId, first.lastSequence, EMPTY_TAIL_DIGEST) })));
|
|
184
|
+
yield* ensure(isCheckpointRejected(digestMismatch) && digestMismatch.reason === "digest-mismatch", "A checkpoint with a mismatched digest must be rejected with reason digest-mismatch");
|
|
185
|
+
yield* ensure(Option.isNone(yield* checkpoints.load(LoadCheckpointRequest.make({ threadId }))), "Rejected checkpoints must not become loadable");
|
|
186
|
+
const valid = checkpointAt(threadId, first.lastSequence, first.tailDigest);
|
|
187
|
+
yield* checkpoints.save(SaveCheckpointRequest.make({ checkpoint: valid }));
|
|
188
|
+
yield* checkpoints.save(SaveCheckpointRequest.make({ checkpoint: valid }));
|
|
189
|
+
const loaded = yield* checkpoints.load(LoadCheckpointRequest.make({ threadId }));
|
|
190
|
+
yield* ensure(Option.isSome(loaded) && loaded.value.throughSequence === first.lastSequence && loaded.value.tailDigest === first.tailDigest, "A valid checkpoint must load bound to its canonical sequence and digest");
|
|
191
|
+
const beforeCheckpoint = yield* checkpoints.load(LoadCheckpointRequest.make({
|
|
192
|
+
threadId,
|
|
193
|
+
atOrBeforeSequence: ZERO_SEQUENCE
|
|
194
|
+
}));
|
|
195
|
+
yield* ensure(Option.isNone(beforeCheckpoint), "Checkpoint lookup must respect the atOrBeforeSequence bound");
|
|
196
|
+
yield* append(threadId, batch("checkpoint-batch-2", [record("checkpoint-record-2", "Nara")]), first);
|
|
197
|
+
const afterAppend = yield* checkpoints.load(LoadCheckpointRequest.make({ threadId }));
|
|
198
|
+
yield* ensure(Option.isSome(afterAppend) && afterAppend.value.throughSequence === first.lastSequence, "An older checkpoint must remain loadable after later appends");
|
|
199
|
+
}));
|
|
200
|
+
/**
|
|
201
|
+
* The shared, adapter-parameterized ThreadStore contract suite (STORE-010). Every
|
|
202
|
+
* durable adapter test suite must execute each case against its own store provisioning.
|
|
203
|
+
*/
|
|
204
|
+
const threadStoreConformanceCases = [
|
|
205
|
+
atomicBatchVisibility,
|
|
206
|
+
idempotentReplay,
|
|
207
|
+
tailConflict,
|
|
208
|
+
producerFencing,
|
|
209
|
+
offsetResumability,
|
|
210
|
+
conformanceCase("inspects the canonical tail so a resuming producer can compose its next append", ({ ensure, expectFailure }) => Effect.gen(function* () {
|
|
211
|
+
const threadId = decodeThreadId("conformance-tail-inspection");
|
|
212
|
+
const store = yield* ThreadStore;
|
|
213
|
+
const missing = yield* expectFailure("inspecting the tail of an unmaterialized Thread", store.inspectTail(ThreadTailRequest.make({ threadId })));
|
|
214
|
+
yield* ensure(isThreadNotMaterialized(missing) && missing.threadId === threadId, "Tail inspection of an unmaterialized Thread must fail as not materialized");
|
|
215
|
+
yield* materialize(threadId, EPOCH_ONE);
|
|
216
|
+
const empty = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));
|
|
217
|
+
yield* ensure(empty.tailSequence === ZERO_SEQUENCE && empty.tailDigest === EMPTY_TAIL_DIGEST && empty.producerEpoch === EPOCH_ONE, "An empty Thread must report the zero tail and its registered epoch");
|
|
218
|
+
const first = yield* append(threadId, batch("inspect-batch-1", [record("inspect-record-1", "first")]));
|
|
219
|
+
const afterAppend = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));
|
|
220
|
+
yield* ensure(afterAppend.tailSequence === first.lastSequence && afterAppend.tailDigest === first.tailDigest, "Tail inspection must match the latest AppendResult");
|
|
221
|
+
const resumed = yield* append(threadId, batch("inspect-batch-2", [record("inspect-record-2", "second")]), {
|
|
222
|
+
lastSequence: afterAppend.tailSequence,
|
|
223
|
+
tailDigest: afterAppend.tailDigest
|
|
224
|
+
}, afterAppend.producerEpoch);
|
|
225
|
+
yield* ensure(resumed.firstSequence === afterAppend.tailSequence + 1, "An append composed from the inspected tail must commit without exporting the log");
|
|
226
|
+
yield* materialize(threadId, EPOCH_TWO);
|
|
227
|
+
const afterTakeover = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));
|
|
228
|
+
yield* ensure(afterTakeover.producerEpoch === EPOCH_TWO && afterTakeover.tailSequence === resumed.lastSequence, "Tail inspection must reflect epoch takeover without disturbing the tail");
|
|
229
|
+
})),
|
|
230
|
+
conformanceCase("fails every read and write against an unmaterialized Thread", ({ ensure, expectFailure }) => Effect.gen(function* () {
|
|
231
|
+
const threadId = decodeThreadId("conformance-not-materialized");
|
|
232
|
+
const store = yield* ThreadStore;
|
|
233
|
+
const failures = [
|
|
234
|
+
yield* expectFailure("appending to an unmaterialized Thread", append(threadId, batch("missing-batch-1", [record("missing-record-1", "first")]))),
|
|
235
|
+
yield* expectFailure("reading an unmaterialized Thread", readAll(threadId)),
|
|
236
|
+
yield* expectFailure("observing an unmaterialized Thread", store.observe(ThreadObservation.make({ threadId })).pipe(Stream.take(1), Stream.runCollect)),
|
|
237
|
+
yield* expectFailure("exporting an unmaterialized Thread", store.export(ThreadExportRequest.make({ threadId }))),
|
|
238
|
+
yield* expectFailure("inspecting the tail of an unmaterialized Thread", store.inspectTail(ThreadTailRequest.make({ threadId })))
|
|
239
|
+
];
|
|
240
|
+
yield* Effect.forEach(failures, (failure) => ensure(isThreadNotMaterialized(failure) && failure.threadId === threadId, "Operations against an unmaterialized Thread must fail as not materialized"), { discard: true });
|
|
241
|
+
}))
|
|
242
|
+
];
|
|
243
|
+
/** Additional contract cases only for adapters advertising `ThreadStore.checkpoints`. */
|
|
244
|
+
const threadCheckpointConformanceCases = [checkpointBoundaries];
|
|
245
|
+
//#endregion
|
|
246
|
+
export { ThreadStoreConformanceViolation, threadCheckpointConformanceCases, threadStoreConformanceCases };
|
|
247
|
+
|
|
248
|
+
//# sourceMappingURL=ThreadStoreConformance.mjs.map
|