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,420 @@
|
|
|
1
|
+
import { AgentId, ReceiptId, SubmissionId, ThreadId } from "../core/Identifiers.mjs";
|
|
2
|
+
import { IdempotencyKey, Principal, QueueSequence, Receipt } from "../core/Receipt.mjs";
|
|
3
|
+
import { DefinitionDigests, Digest } from "./Records.mjs";
|
|
4
|
+
import { ScheduleCapacityError, ScheduleId, ScheduleStore } from "./Schedule.mjs";
|
|
5
|
+
import { Effect, Result, Schema } from "effect";
|
|
6
|
+
//#region src/durable/ScheduleStoreConformance.ts
|
|
7
|
+
var ScheduleStoreConformanceViolation = class extends Schema.TaggedError()("ScheduleStoreConformanceViolation", {
|
|
8
|
+
caseName: Schema.String,
|
|
9
|
+
message: Schema.String
|
|
10
|
+
}) {};
|
|
11
|
+
const id = Schema.decodeSync(ScheduleId);
|
|
12
|
+
const principal = Schema.decodeSync(Principal)("schedule-conformance-principal");
|
|
13
|
+
const agentId = Schema.decodeSync(AgentId)("schedule-conformance-agent");
|
|
14
|
+
const threadId = Schema.decodeSync(ThreadId)("schedule-conformance-thread");
|
|
15
|
+
const digest = Schema.decodeSync(Digest)("d".repeat(64));
|
|
16
|
+
const definitions = DefinitionDigests.make({
|
|
17
|
+
agent: digest,
|
|
18
|
+
model: digest,
|
|
19
|
+
tools: digest
|
|
20
|
+
});
|
|
21
|
+
const key = (name, ownerId = "owner") => ({
|
|
22
|
+
owner: {
|
|
23
|
+
tenantId: "schedule-conformance-tenant",
|
|
24
|
+
ownerId
|
|
25
|
+
},
|
|
26
|
+
scheduleId: id(name)
|
|
27
|
+
});
|
|
28
|
+
const record = (name, input = { value: name }, ownerId = "owner") => ({
|
|
29
|
+
schemaVersion: 1,
|
|
30
|
+
...key(name, ownerId),
|
|
31
|
+
creationFingerprint: Schema.decodeSync(Digest)("a".repeat(64)),
|
|
32
|
+
createdBy: principal,
|
|
33
|
+
createdAtMillis: 1,
|
|
34
|
+
updatedAtMillis: 1,
|
|
35
|
+
configurationRevision: 1,
|
|
36
|
+
version: 1,
|
|
37
|
+
configuration: {
|
|
38
|
+
timing: {
|
|
39
|
+
_tag: "At",
|
|
40
|
+
atMillis: 100
|
|
41
|
+
},
|
|
42
|
+
destination: {
|
|
43
|
+
_tag: "ExistingThread",
|
|
44
|
+
threadId
|
|
45
|
+
},
|
|
46
|
+
deliveryPrincipal: principal,
|
|
47
|
+
agentId,
|
|
48
|
+
definitions,
|
|
49
|
+
input,
|
|
50
|
+
inputDigest: digest
|
|
51
|
+
},
|
|
52
|
+
state: "active",
|
|
53
|
+
nextAtMillis: 100,
|
|
54
|
+
pending: null,
|
|
55
|
+
lastReceipt: null,
|
|
56
|
+
lastRefusal: null,
|
|
57
|
+
lastSkippedRange: null
|
|
58
|
+
});
|
|
59
|
+
const pendingRecord = (name) => {
|
|
60
|
+
const base = record(name);
|
|
61
|
+
const occurrenceId = Schema.decodeSync(Digest)("e".repeat(64));
|
|
62
|
+
return {
|
|
63
|
+
...base,
|
|
64
|
+
nextAtMillis: null,
|
|
65
|
+
pending: {
|
|
66
|
+
envelope: {
|
|
67
|
+
schemaVersion: 1,
|
|
68
|
+
...key(name),
|
|
69
|
+
configurationRevision: 1,
|
|
70
|
+
intendedAtMillis: 100,
|
|
71
|
+
preparedAtMillis: 110,
|
|
72
|
+
occurrenceId,
|
|
73
|
+
threadId,
|
|
74
|
+
deliveryPrincipal: principal,
|
|
75
|
+
agentId,
|
|
76
|
+
definitions,
|
|
77
|
+
input: base.configuration.input,
|
|
78
|
+
inputDigest: digest,
|
|
79
|
+
admissionKey: Schema.decodeSync(IdempotencyKey)(`schedule:${name}`),
|
|
80
|
+
authorization: {
|
|
81
|
+
policyId: "policy",
|
|
82
|
+
decisionId: "decision"
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
retry: {
|
|
86
|
+
generation: 0,
|
|
87
|
+
attempts: 0,
|
|
88
|
+
automaticAttempts: 0,
|
|
89
|
+
parked: false,
|
|
90
|
+
nextAttemptAtMillis: 120,
|
|
91
|
+
lastAttemptAtMillis: null,
|
|
92
|
+
lastFailure: null
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
};
|
|
97
|
+
const receipt = Receipt.make({
|
|
98
|
+
receiptId: Schema.decodeSync(ReceiptId)("schedule-conformance-receipt"),
|
|
99
|
+
submissionId: Schema.decodeSync(SubmissionId)("schedule-conformance-submission"),
|
|
100
|
+
threadId,
|
|
101
|
+
queueSequence: Schema.decodeSync(QueueSequence)(1)
|
|
102
|
+
});
|
|
103
|
+
const conformanceCase = (name, run) => ({
|
|
104
|
+
name,
|
|
105
|
+
run: run((condition, message) => condition ? Effect.void : Effect.fail(ScheduleStoreConformanceViolation.make({
|
|
106
|
+
caseName: name,
|
|
107
|
+
message
|
|
108
|
+
}))).pipe(Effect.withSpan(`ScheduleStoreConformance.${name}`))
|
|
109
|
+
});
|
|
110
|
+
/** Adapter-neutral contract cases. Each case uses disjoint owner and Schedule identities. */
|
|
111
|
+
const scheduleStoreConformanceCases = [
|
|
112
|
+
conformanceCase("returns the current record when creation replays after an edit", (ensure) => Effect.gen(function* () {
|
|
113
|
+
const store = yield* ScheduleStore;
|
|
114
|
+
const original = record("creation-replay");
|
|
115
|
+
yield* store.insert(original, 10);
|
|
116
|
+
const edited = yield* store.change(key("creation-replay"), {
|
|
117
|
+
_tag: "Update",
|
|
118
|
+
expectedRevision: 1,
|
|
119
|
+
configuration: {
|
|
120
|
+
...original.configuration,
|
|
121
|
+
input: { value: "edited" }
|
|
122
|
+
},
|
|
123
|
+
nextAtMillis: 200,
|
|
124
|
+
nowMillis: 10
|
|
125
|
+
});
|
|
126
|
+
const replayed = yield* store.insert(original, 10);
|
|
127
|
+
yield* ensure(replayed.version === edited.version, "creation replay returned stale state");
|
|
128
|
+
yield* ensure(replayed.configurationRevision === 2, "creation replay lost the edited configuration revision");
|
|
129
|
+
yield* ensure(JSON.stringify(replayed.configuration.input) === JSON.stringify({ value: "edited" }), "creation replay returned the original input");
|
|
130
|
+
})),
|
|
131
|
+
conformanceCase("makes stale completions and retry regressions full no-ops", (ensure) => Effect.gen(function* () {
|
|
132
|
+
const store = yield* ScheduleStore;
|
|
133
|
+
const original = pendingRecord("stale-completion");
|
|
134
|
+
yield* store.insert(original, 10);
|
|
135
|
+
const stale = yield* store.change(key("stale-completion"), {
|
|
136
|
+
_tag: "Complete",
|
|
137
|
+
occurrenceId: Schema.decodeSync(Digest)("f".repeat(64)),
|
|
138
|
+
receipt,
|
|
139
|
+
nowMillis: 130
|
|
140
|
+
});
|
|
141
|
+
yield* ensure(stale.version === original.version, "stale completion changed the version");
|
|
142
|
+
yield* ensure(stale.pending !== null, "stale completion cleared pending work");
|
|
143
|
+
yield* ensure(stale.lastReceipt === null, "stale completion changed bounded status");
|
|
144
|
+
const advanced = yield* store.change(key("stale-completion"), {
|
|
145
|
+
_tag: "Retry",
|
|
146
|
+
occurrenceId: original.pending?.envelope.occurrenceId ?? digest,
|
|
147
|
+
retry: {
|
|
148
|
+
generation: 0,
|
|
149
|
+
automaticAttempts: 0,
|
|
150
|
+
parked: false,
|
|
151
|
+
attempts: 2,
|
|
152
|
+
nextAttemptAtMillis: 500,
|
|
153
|
+
lastAttemptAtMillis: 200,
|
|
154
|
+
lastFailure: "transport"
|
|
155
|
+
},
|
|
156
|
+
nowMillis: 200
|
|
157
|
+
});
|
|
158
|
+
const regressed = yield* store.change(key("stale-completion"), {
|
|
159
|
+
_tag: "Retry",
|
|
160
|
+
occurrenceId: original.pending?.envelope.occurrenceId ?? digest,
|
|
161
|
+
retry: {
|
|
162
|
+
generation: 0,
|
|
163
|
+
automaticAttempts: 0,
|
|
164
|
+
parked: false,
|
|
165
|
+
attempts: 1,
|
|
166
|
+
nextAttemptAtMillis: 300,
|
|
167
|
+
lastAttemptAtMillis: 150,
|
|
168
|
+
lastFailure: "timeout"
|
|
169
|
+
},
|
|
170
|
+
nowMillis: 210
|
|
171
|
+
});
|
|
172
|
+
yield* ensure(regressed.version === advanced.version, "retry regression changed the version");
|
|
173
|
+
yield* ensure(regressed.pending?.retry.nextAttemptAtMillis === 500, "retry regression moved the deadline backward");
|
|
174
|
+
})),
|
|
175
|
+
conformanceCase("isolates owner pages, prioritizes pending deadlines, and clones writes", (ensure) => Effect.gen(function* () {
|
|
176
|
+
const store = yield* ScheduleStore;
|
|
177
|
+
const mutableInput = { value: "before" };
|
|
178
|
+
yield* store.insert(record("z-page", mutableInput), 10);
|
|
179
|
+
mutableInput.value = "after";
|
|
180
|
+
yield* store.insert(record("a-page"), 10);
|
|
181
|
+
yield* store.insert(pendingRecord("pending-first"), 10);
|
|
182
|
+
yield* store.insert(record("foreign", { value: "foreign" }, "other-owner"), 10);
|
|
183
|
+
const page = yield* store.list({
|
|
184
|
+
owner: key("ignored").owner,
|
|
185
|
+
limit: 2
|
|
186
|
+
});
|
|
187
|
+
yield* ensure(page.items.length === 2, "owner page returned the wrong item count");
|
|
188
|
+
yield* ensure(page.items[0]?.scheduleId === id("a-page"), "owner page order is unstable");
|
|
189
|
+
yield* ensure(page.next === id("pending-first"), "owner page cursor is not its last item");
|
|
190
|
+
yield* ensure(page.items.every((item) => item.owner.ownerId === "owner"), "owner page leaked a foreign owner");
|
|
191
|
+
const stored = yield* store.get(key("z-page"));
|
|
192
|
+
yield* ensure(JSON.stringify(stored?.configuration.input) === JSON.stringify({ value: "before" }), "caller mutation changed the authoritative stored input");
|
|
193
|
+
const due = yield* store.due(150, 10, key("ignored").owner);
|
|
194
|
+
yield* ensure(due[0]?.scheduleId === id("a-page") || due[0]?.scheduleId === id("z-page"), "due ordering did not use the earliest deadline");
|
|
195
|
+
yield* ensure(due.some((item) => item.scheduleId === id("pending-first")), "due query omitted pending recovery");
|
|
196
|
+
})),
|
|
197
|
+
conformanceCase("enforces owner capacity without affecting other owners", (ensure) => Effect.gen(function* () {
|
|
198
|
+
const store = yield* ScheduleStore;
|
|
199
|
+
yield* store.insert(record("capacity-one", { value: 1 }, "capacity-owner"), 1);
|
|
200
|
+
const attempted = yield* store.insert(record("capacity-two", { value: 2 }, "capacity-owner"), 1).pipe(Effect.result);
|
|
201
|
+
yield* ensure(Result.isFailure(attempted) && attempted.failure instanceof ScheduleCapacityError, "owner capacity did not fail with ScheduleCapacityError");
|
|
202
|
+
yield* ensure((yield* store.insert(record("capacity-other", { value: 3 }, "capacity-other"), 1)).scheduleId === id("capacity-other"), "capacity leaked across owners");
|
|
203
|
+
})),
|
|
204
|
+
conformanceCase("releases terminal capacity without deleting replay evidence and fences reactivation", (ensure) => Effect.gen(function* () {
|
|
205
|
+
const store = yield* ScheduleStore;
|
|
206
|
+
const original = pendingRecord("capacity-retained");
|
|
207
|
+
yield* store.insert(original, 1);
|
|
208
|
+
const paused = yield* store.change(original, {
|
|
209
|
+
_tag: "Control",
|
|
210
|
+
expectedRevision: 1,
|
|
211
|
+
expectedVersion: original.version,
|
|
212
|
+
action: "pause",
|
|
213
|
+
nextAtMillis: null,
|
|
214
|
+
nowMillis: 120,
|
|
215
|
+
skippedRange: null
|
|
216
|
+
});
|
|
217
|
+
const cancelled = yield* store.change(original, {
|
|
218
|
+
_tag: "Control",
|
|
219
|
+
expectedRevision: 1,
|
|
220
|
+
expectedVersion: paused.version,
|
|
221
|
+
action: "cancel",
|
|
222
|
+
nextAtMillis: null,
|
|
223
|
+
nowMillis: 130,
|
|
224
|
+
skippedRange: null
|
|
225
|
+
});
|
|
226
|
+
const blocked = yield* store.insert(record("capacity-next"), 1).pipe(Effect.result);
|
|
227
|
+
yield* ensure(Result.isFailure(blocked) && blocked.failure._tag === "ScheduleCapacityError", "cancellation released unresolved pending capacity");
|
|
228
|
+
const parked = yield* store.change(original, {
|
|
229
|
+
_tag: "Retry",
|
|
230
|
+
occurrenceId: original.pending?.envelope.occurrenceId ?? digest,
|
|
231
|
+
retry: {
|
|
232
|
+
generation: 0,
|
|
233
|
+
attempts: 3,
|
|
234
|
+
automaticAttempts: 3,
|
|
235
|
+
parked: true,
|
|
236
|
+
nextAttemptAtMillis: 140,
|
|
237
|
+
lastAttemptAtMillis: 130,
|
|
238
|
+
lastFailure: "transport"
|
|
239
|
+
},
|
|
240
|
+
nowMillis: 130
|
|
241
|
+
});
|
|
242
|
+
yield* ensure((yield* store.due(140, 10, original.owner)).length === 0, "Parked work must not retry automatically");
|
|
243
|
+
const recovered = yield* store.change(original, {
|
|
244
|
+
_tag: "Recover",
|
|
245
|
+
expectedGeneration: 0,
|
|
246
|
+
expectedRevision: parked.configurationRevision,
|
|
247
|
+
occurrenceId: original.pending?.envelope.occurrenceId ?? digest,
|
|
248
|
+
nowMillis: 140
|
|
249
|
+
});
|
|
250
|
+
yield* ensure(recovered.state === "cancelled" && recovered.pending?.retry.automaticAttempts === 0 && recovered.pending.retry.attempts === 3 && recovered.pending.retry.parked === false && JSON.stringify(recovered.pending.envelope) === JSON.stringify(original.pending?.envelope), "Explicit recovery must preserve cancelled pending identity and total attempts");
|
|
251
|
+
const staleRetry = yield* store.change(original, {
|
|
252
|
+
_tag: "Retry",
|
|
253
|
+
occurrenceId: original.pending?.envelope.occurrenceId ?? digest,
|
|
254
|
+
retry: {
|
|
255
|
+
generation: 0,
|
|
256
|
+
attempts: 99,
|
|
257
|
+
automaticAttempts: 99,
|
|
258
|
+
parked: true,
|
|
259
|
+
nextAttemptAtMillis: 150,
|
|
260
|
+
lastAttemptAtMillis: 145,
|
|
261
|
+
lastFailure: "transport"
|
|
262
|
+
},
|
|
263
|
+
nowMillis: 145
|
|
264
|
+
});
|
|
265
|
+
yield* ensure(JSON.stringify(staleRetry) === JSON.stringify(recovered), "A pre-recovery retry consumed the new generation");
|
|
266
|
+
const repeatedRecovery = yield* store.change(original, {
|
|
267
|
+
_tag: "Recover",
|
|
268
|
+
expectedGeneration: 0,
|
|
269
|
+
expectedRevision: recovered.configurationRevision,
|
|
270
|
+
occurrenceId: original.pending?.envelope.occurrenceId ?? digest,
|
|
271
|
+
nowMillis: 146
|
|
272
|
+
});
|
|
273
|
+
yield* ensure(JSON.stringify(repeatedRecovery) === JSON.stringify(recovered), "A repeated recovery changed its original generation");
|
|
274
|
+
const completed = yield* store.change(original, {
|
|
275
|
+
_tag: "Complete",
|
|
276
|
+
occurrenceId: original.pending?.envelope.occurrenceId ?? digest,
|
|
277
|
+
receipt,
|
|
278
|
+
nowMillis: 140
|
|
279
|
+
});
|
|
280
|
+
yield* ensure(completed.pending === null && cancelled.pending !== null, "completion did not clear pending work");
|
|
281
|
+
yield* store.insert(record("capacity-next"), 1);
|
|
282
|
+
const replay = yield* store.insert(original, 1);
|
|
283
|
+
yield* ensure(replay.version === completed.version && replay.state === "cancelled", "terminal replay lost its creation evidence");
|
|
284
|
+
const second = record("capacity-next");
|
|
285
|
+
const pausedSecond = yield* store.change(second, {
|
|
286
|
+
_tag: "Control",
|
|
287
|
+
expectedRevision: 1,
|
|
288
|
+
expectedVersion: second.version,
|
|
289
|
+
action: "pause",
|
|
290
|
+
nextAtMillis: second.nextAtMillis,
|
|
291
|
+
nowMillis: 150,
|
|
292
|
+
skippedRange: null
|
|
293
|
+
});
|
|
294
|
+
const pausedCapacity = yield* store.insert(record("capacity-third"), 1).pipe(Effect.result);
|
|
295
|
+
yield* ensure(Result.isFailure(pausedCapacity) && pausedCapacity.failure._tag === "ScheduleCapacityError", "paused future work did not reserve capacity");
|
|
296
|
+
yield* store.change(second, {
|
|
297
|
+
_tag: "Control",
|
|
298
|
+
expectedRevision: 1,
|
|
299
|
+
expectedVersion: pausedSecond.version,
|
|
300
|
+
action: "cancel",
|
|
301
|
+
nextAtMillis: null,
|
|
302
|
+
nowMillis: 160,
|
|
303
|
+
skippedRange: null
|
|
304
|
+
});
|
|
305
|
+
const admitted = pendingRecord("capacity-completed");
|
|
306
|
+
yield* store.insert(admitted, 1);
|
|
307
|
+
const settled = yield* store.change(admitted, {
|
|
308
|
+
_tag: "Complete",
|
|
309
|
+
occurrenceId: admitted.pending?.envelope.occurrenceId ?? digest,
|
|
310
|
+
receipt,
|
|
311
|
+
nowMillis: 170
|
|
312
|
+
});
|
|
313
|
+
yield* store.insert(record("capacity-third"), 1);
|
|
314
|
+
const reactivated = yield* store.change(admitted, {
|
|
315
|
+
_tag: "Update",
|
|
316
|
+
expectedRevision: 1,
|
|
317
|
+
configuration: admitted.configuration,
|
|
318
|
+
nextAtMillis: 200,
|
|
319
|
+
nowMillis: 180
|
|
320
|
+
}, 1).pipe(Effect.result);
|
|
321
|
+
yield* ensure(Result.isFailure(reactivated) && reactivated.failure._tag === "ScheduleCapacityError", "reactivation exceeded operational capacity");
|
|
322
|
+
yield* ensure((yield* store.get(admitted))?.version === settled.version, "capacity failure mutated the completed record");
|
|
323
|
+
})),
|
|
324
|
+
conformanceCase("advances due pagination beyond unchanged rows with equal deadlines", (ensure) => Effect.gen(function* () {
|
|
325
|
+
const store = yield* ScheduleStore;
|
|
326
|
+
for (const name of [
|
|
327
|
+
"due-a",
|
|
328
|
+
"due-b",
|
|
329
|
+
"due-c"
|
|
330
|
+
]) yield* store.insert(record(name), 10);
|
|
331
|
+
const first = yield* store.due(100, 1);
|
|
332
|
+
const second = yield* store.due(100, 1, void 0, first[0]);
|
|
333
|
+
const third = yield* store.due(100, 1, void 0, second[0]);
|
|
334
|
+
yield* ensure(first[0]?.scheduleId === id("due-a") && second[0]?.scheduleId === id("due-b") && third[0]?.scheduleId === id("due-c"), "due pages repeated or skipped a key");
|
|
335
|
+
yield* ensure((yield* store.due(100, 1, void 0, third[0])).length === 0, "due cursor did not terminate");
|
|
336
|
+
})),
|
|
337
|
+
conformanceCase("fences stale preparation and control while preserving frozen pending work", (ensure) => Effect.gen(function* () {
|
|
338
|
+
const store = yield* ScheduleStore;
|
|
339
|
+
const prepareOriginal = record("stale-prepare");
|
|
340
|
+
yield* store.insert(prepareOriginal, 10);
|
|
341
|
+
const edited = yield* store.change(key("stale-prepare"), {
|
|
342
|
+
_tag: "Update",
|
|
343
|
+
expectedRevision: 1,
|
|
344
|
+
configuration: {
|
|
345
|
+
...prepareOriginal.configuration,
|
|
346
|
+
timing: {
|
|
347
|
+
_tag: "At",
|
|
348
|
+
atMillis: 200
|
|
349
|
+
},
|
|
350
|
+
input: { value: "edited-before-prepare" }
|
|
351
|
+
},
|
|
352
|
+
nextAtMillis: 200,
|
|
353
|
+
nowMillis: 10
|
|
354
|
+
});
|
|
355
|
+
const staleEnvelope = pendingRecord("stale-prepare").pending?.envelope;
|
|
356
|
+
if (staleEnvelope === void 0) return yield* ScheduleStoreConformanceViolation.make({
|
|
357
|
+
caseName: "fences stale preparation and control while preserving frozen pending work",
|
|
358
|
+
message: "fixture did not contain a pending envelope"
|
|
359
|
+
});
|
|
360
|
+
const stalePrepare = yield* store.change(key("stale-prepare"), {
|
|
361
|
+
_tag: "Prepare",
|
|
362
|
+
expectedRevision: 1,
|
|
363
|
+
expectedCursor: 100,
|
|
364
|
+
envelope: staleEnvelope,
|
|
365
|
+
nextAtMillis: null,
|
|
366
|
+
skippedRange: null,
|
|
367
|
+
nowMillis: 110
|
|
368
|
+
}).pipe(Effect.result);
|
|
369
|
+
yield* ensure(Result.isFailure(stalePrepare) && stalePrepare.failure._tag === "ScheduleConflict", "stale preparation did not conflict");
|
|
370
|
+
yield* ensure(JSON.stringify(yield* store.get(key("stale-prepare"))) === JSON.stringify(edited), "stale preparation changed the edited record");
|
|
371
|
+
const frozen = pendingRecord("pending-update");
|
|
372
|
+
yield* store.insert(frozen, 10);
|
|
373
|
+
const frozenEnvelope = JSON.stringify(frozen.pending?.envelope);
|
|
374
|
+
const updatedPending = yield* store.change(key("pending-update"), {
|
|
375
|
+
_tag: "Update",
|
|
376
|
+
expectedRevision: 1,
|
|
377
|
+
configuration: {
|
|
378
|
+
...frozen.configuration,
|
|
379
|
+
timing: {
|
|
380
|
+
_tag: "At",
|
|
381
|
+
atMillis: 300
|
|
382
|
+
},
|
|
383
|
+
input: { value: "new-configuration" }
|
|
384
|
+
},
|
|
385
|
+
nextAtMillis: 300,
|
|
386
|
+
nowMillis: 20
|
|
387
|
+
});
|
|
388
|
+
yield* ensure(JSON.stringify(updatedPending.pending?.envelope) === frozenEnvelope, "configuration update changed the frozen pending envelope");
|
|
389
|
+
const completedOriginal = pendingRecord("stale-control");
|
|
390
|
+
yield* store.insert(completedOriginal, 10);
|
|
391
|
+
const occurrenceId = completedOriginal.pending?.envelope.occurrenceId;
|
|
392
|
+
if (occurrenceId === void 0) return yield* ScheduleStoreConformanceViolation.make({
|
|
393
|
+
caseName: "fences stale preparation and control while preserving frozen pending work",
|
|
394
|
+
message: "fixture did not contain an occurrence identifier"
|
|
395
|
+
});
|
|
396
|
+
const completed = yield* store.change(key("stale-control"), {
|
|
397
|
+
_tag: "Complete",
|
|
398
|
+
occurrenceId,
|
|
399
|
+
receipt,
|
|
400
|
+
nowMillis: 130
|
|
401
|
+
});
|
|
402
|
+
const staleControl = yield* store.change(key("stale-control"), {
|
|
403
|
+
_tag: "Control",
|
|
404
|
+
expectedRevision: 1,
|
|
405
|
+
expectedVersion: 1,
|
|
406
|
+
action: "resume",
|
|
407
|
+
nextAtMillis: 100,
|
|
408
|
+
nowMillis: 140,
|
|
409
|
+
skippedRange: null
|
|
410
|
+
}).pipe(Effect.result);
|
|
411
|
+
yield* ensure(Result.isFailure(staleControl) && staleControl.failure._tag === "ScheduleConflict", "stale control did not conflict");
|
|
412
|
+
const afterControl = yield* store.get(key("stale-control"));
|
|
413
|
+
yield* ensure(afterControl?.nextAtMillis === null, "stale control revived a completed one-shot");
|
|
414
|
+
yield* ensure(afterControl?.version === completed.version && afterControl.lastReceipt !== null, "stale control changed completed state");
|
|
415
|
+
}))
|
|
416
|
+
];
|
|
417
|
+
//#endregion
|
|
418
|
+
export { ScheduleStoreConformanceViolation, scheduleStoreConformanceCases };
|
|
419
|
+
|
|
420
|
+
//# sourceMappingURL=ScheduleStoreConformance.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScheduleStoreConformance.mjs","names":[],"sources":["../../src/durable/ScheduleStoreConformance.ts"],"sourcesContent":["import { Effect, Result, Schema } from \"effect\";\n\nimport { AgentId, ThreadId, ReceiptId, SubmissionId } from \"../core/Identifiers.ts\";\nimport { Receipt } from \"./DurableAgentRuntime.ts\";\nimport { DefinitionDigests, Digest, type PersistedJson } from \"./Records.ts\";\nimport {\n ScheduleCapacityError,\n ScheduleId,\n type ScheduleKey,\n type ScheduleRecord,\n ScheduleStore,\n type ScheduleStoreFailure,\n} from \"./Schedule.ts\";\nimport { IdempotencyKey, Principal, QueueSequence } from \"./SubmissionLedger.ts\";\n\nexport class ScheduleStoreConformanceViolation extends Schema.TaggedError<ScheduleStoreConformanceViolation>()(\n \"ScheduleStoreConformanceViolation\",\n { caseName: Schema.String, message: Schema.String },\n) {}\n\nexport type ScheduleStoreConformanceFailure =\n | ScheduleStoreFailure\n | ScheduleStoreConformanceViolation;\n\nexport interface ScheduleStoreConformanceCase {\n readonly name: string;\n readonly run: Effect.Effect<void, ScheduleStoreConformanceFailure, ScheduleStore>;\n}\n\nconst id = Schema.decodeSync(ScheduleId);\nconst principal = Schema.decodeSync(Principal)(\"schedule-conformance-principal\");\nconst agentId = Schema.decodeSync(AgentId)(\"schedule-conformance-agent\");\nconst threadId = Schema.decodeSync(ThreadId)(\"schedule-conformance-thread\");\nconst digest = Schema.decodeSync(Digest)(\"d\".repeat(64));\nconst definitions = DefinitionDigests.make({ agent: digest, model: digest, tools: digest });\n\nconst key = (name: string, ownerId = \"owner\"): ScheduleKey => ({\n owner: { tenantId: \"schedule-conformance-tenant\", ownerId },\n scheduleId: id(name),\n});\n\nconst record = (\n name: string,\n input: PersistedJson = { value: name },\n ownerId = \"owner\",\n): ScheduleRecord => ({\n schemaVersion: 1,\n ...key(name, ownerId),\n creationFingerprint: Schema.decodeSync(Digest)(\"a\".repeat(64)),\n createdBy: principal,\n createdAtMillis: 1,\n updatedAtMillis: 1,\n configurationRevision: 1,\n version: 1,\n configuration: {\n timing: { _tag: \"At\", atMillis: 100 },\n destination: { _tag: \"ExistingThread\", threadId },\n deliveryPrincipal: principal,\n agentId,\n definitions,\n input,\n inputDigest: digest,\n },\n state: \"active\",\n nextAtMillis: 100,\n pending: null,\n lastReceipt: null,\n lastRefusal: null,\n lastSkippedRange: null,\n});\n\nconst pendingRecord = (name: string): ScheduleRecord => {\n const base = record(name);\n const occurrenceId = Schema.decodeSync(Digest)(\"e\".repeat(64));\n\n return {\n ...base,\n nextAtMillis: null,\n pending: {\n envelope: {\n schemaVersion: 1,\n ...key(name),\n configurationRevision: 1,\n intendedAtMillis: 100,\n preparedAtMillis: 110,\n occurrenceId,\n threadId,\n deliveryPrincipal: principal,\n agentId,\n definitions,\n input: base.configuration.input,\n inputDigest: digest,\n admissionKey: Schema.decodeSync(IdempotencyKey)(`schedule:${name}`),\n authorization: { policyId: \"policy\", decisionId: \"decision\" },\n },\n retry: {\n generation: 0,\n attempts: 0,\n automaticAttempts: 0,\n parked: false,\n nextAttemptAtMillis: 120,\n lastAttemptAtMillis: null,\n lastFailure: null,\n },\n },\n };\n};\n\nconst receipt = Receipt.make({\n receiptId: Schema.decodeSync(ReceiptId)(\"schedule-conformance-receipt\"),\n submissionId: Schema.decodeSync(SubmissionId)(\"schedule-conformance-submission\"),\n threadId,\n queueSequence: Schema.decodeSync(QueueSequence)(1),\n});\n\nconst conformanceCase = (\n name: string,\n run: (\n ensure: (\n condition: boolean,\n message: string,\n ) => Effect.Effect<void, ScheduleStoreConformanceViolation>,\n ) => Effect.Effect<void, ScheduleStoreConformanceFailure, ScheduleStore>,\n): ScheduleStoreConformanceCase => ({\n name,\n run: run((condition, message) =>\n condition\n ? Effect.void\n : Effect.fail(ScheduleStoreConformanceViolation.make({ caseName: name, message })),\n ).pipe(Effect.withSpan(`ScheduleStoreConformance.${name}`)),\n});\n\nconst creationReplay = conformanceCase(\n \"returns the current record when creation replays after an edit\",\n (ensure) =>\n Effect.gen(function* () {\n const store = yield* ScheduleStore;\n const original = record(\"creation-replay\");\n\n yield* store.insert(original, 10);\n\n const edited = yield* store.change(key(\"creation-replay\"), {\n _tag: \"Update\",\n expectedRevision: 1,\n configuration: {\n ...original.configuration,\n input: { value: \"edited\" },\n },\n nextAtMillis: 200,\n nowMillis: 10,\n });\n\n const replayed = yield* store.insert(original, 10);\n\n yield* ensure(replayed.version === edited.version, \"creation replay returned stale state\");\n yield* ensure(\n replayed.configurationRevision === 2,\n \"creation replay lost the edited configuration revision\",\n );\n yield* ensure(\n JSON.stringify(replayed.configuration.input) === JSON.stringify({ value: \"edited\" }),\n \"creation replay returned the original input\",\n );\n }),\n);\n\nconst staleCompletion = conformanceCase(\n \"makes stale completions and retry regressions full no-ops\",\n (ensure) =>\n Effect.gen(function* () {\n const store = yield* ScheduleStore;\n const original = pendingRecord(\"stale-completion\");\n\n yield* store.insert(original, 10);\n\n const stale = yield* store.change(key(\"stale-completion\"), {\n _tag: \"Complete\",\n occurrenceId: Schema.decodeSync(Digest)(\"f\".repeat(64)),\n receipt,\n nowMillis: 130,\n });\n\n yield* ensure(stale.version === original.version, \"stale completion changed the version\");\n yield* ensure(stale.pending !== null, \"stale completion cleared pending work\");\n yield* ensure(stale.lastReceipt === null, \"stale completion changed bounded status\");\n\n const advanced = yield* store.change(key(\"stale-completion\"), {\n _tag: \"Retry\",\n occurrenceId: original.pending?.envelope.occurrenceId ?? digest,\n retry: {\n generation: 0,\n automaticAttempts: 0,\n parked: false,\n attempts: 2,\n nextAttemptAtMillis: 500,\n lastAttemptAtMillis: 200,\n lastFailure: \"transport\",\n },\n nowMillis: 200,\n });\n\n const regressed = yield* store.change(key(\"stale-completion\"), {\n _tag: \"Retry\",\n occurrenceId: original.pending?.envelope.occurrenceId ?? digest,\n retry: {\n generation: 0,\n automaticAttempts: 0,\n parked: false,\n attempts: 1,\n nextAttemptAtMillis: 300,\n lastAttemptAtMillis: 150,\n lastFailure: \"timeout\",\n },\n nowMillis: 210,\n });\n\n yield* ensure(regressed.version === advanced.version, \"retry regression changed the version\");\n yield* ensure(\n regressed.pending?.retry.nextAttemptAtMillis === 500,\n \"retry regression moved the deadline backward\",\n );\n }),\n);\n\nconst isolationAndCloning = conformanceCase(\n \"isolates owner pages, prioritizes pending deadlines, and clones writes\",\n (ensure) =>\n Effect.gen(function* () {\n const store = yield* ScheduleStore;\n const mutableInput = { value: \"before\" };\n\n yield* store.insert(record(\"z-page\", mutableInput), 10);\n mutableInput.value = \"after\";\n yield* store.insert(record(\"a-page\"), 10);\n yield* store.insert(pendingRecord(\"pending-first\"), 10);\n yield* store.insert(record(\"foreign\", { value: \"foreign\" }, \"other-owner\"), 10);\n\n const page = yield* store.list({ owner: key(\"ignored\").owner, limit: 2 });\n\n yield* ensure(page.items.length === 2, \"owner page returned the wrong item count\");\n yield* ensure(page.items[0]?.scheduleId === id(\"a-page\"), \"owner page order is unstable\");\n yield* ensure(page.next === id(\"pending-first\"), \"owner page cursor is not its last item\");\n yield* ensure(\n page.items.every((item) => item.owner.ownerId === \"owner\"),\n \"owner page leaked a foreign owner\",\n );\n\n const stored = yield* store.get(key(\"z-page\"));\n\n yield* ensure(\n JSON.stringify(stored?.configuration.input) === JSON.stringify({ value: \"before\" }),\n \"caller mutation changed the authoritative stored input\",\n );\n const due = yield* store.due(150, 10, key(\"ignored\").owner);\n\n yield* ensure(\n due[0]?.scheduleId === id(\"a-page\") || due[0]?.scheduleId === id(\"z-page\"),\n \"due ordering did not use the earliest deadline\",\n );\n yield* ensure(\n due.some((item) => item.scheduleId === id(\"pending-first\")),\n \"due query omitted pending recovery\",\n );\n }),\n);\n\nconst ownerCapacity = conformanceCase(\n \"enforces owner capacity without affecting other owners\",\n (ensure) =>\n Effect.gen(function* () {\n const store = yield* ScheduleStore;\n\n yield* store.insert(record(\"capacity-one\", { value: 1 }, \"capacity-owner\"), 1);\n\n const attempted = yield* store\n .insert(record(\"capacity-two\", { value: 2 }, \"capacity-owner\"), 1)\n .pipe(Effect.result);\n\n yield* ensure(\n Result.isFailure(attempted) && attempted.failure instanceof ScheduleCapacityError,\n \"owner capacity did not fail with ScheduleCapacityError\",\n );\n\n const other = yield* store.insert(\n record(\"capacity-other\", { value: 3 }, \"capacity-other\"),\n 1,\n );\n\n yield* ensure(other.scheduleId === id(\"capacity-other\"), \"capacity leaked across owners\");\n }),\n);\n\nconst retainedEvidence = conformanceCase(\n \"releases terminal capacity without deleting replay evidence and fences reactivation\",\n (ensure) =>\n Effect.gen(function* () {\n const store = yield* ScheduleStore;\n const original = pendingRecord(\"capacity-retained\");\n\n yield* store.insert(original, 1);\n\n const paused = yield* store.change(original, {\n _tag: \"Control\",\n expectedRevision: 1,\n expectedVersion: original.version,\n action: \"pause\",\n nextAtMillis: null,\n nowMillis: 120,\n skippedRange: null,\n });\n\n const cancelled = yield* store.change(original, {\n _tag: \"Control\",\n expectedRevision: 1,\n expectedVersion: paused.version,\n action: \"cancel\",\n nextAtMillis: null,\n nowMillis: 130,\n skippedRange: null,\n });\n\n const blocked = yield* store.insert(record(\"capacity-next\"), 1).pipe(Effect.result);\n\n yield* ensure(\n Result.isFailure(blocked) && blocked.failure._tag === \"ScheduleCapacityError\",\n \"cancellation released unresolved pending capacity\",\n );\n\n const parked = yield* store.change(original, {\n _tag: \"Retry\",\n occurrenceId: original.pending?.envelope.occurrenceId ?? digest,\n retry: {\n generation: 0,\n attempts: 3,\n automaticAttempts: 3,\n parked: true,\n nextAttemptAtMillis: 140,\n lastAttemptAtMillis: 130,\n lastFailure: \"transport\",\n },\n nowMillis: 130,\n });\n\n yield* ensure(\n (yield* store.due(140, 10, original.owner)).length === 0,\n \"Parked work must not retry automatically\",\n );\n\n const recovered = yield* store.change(original, {\n _tag: \"Recover\",\n expectedGeneration: 0,\n expectedRevision: parked.configurationRevision,\n occurrenceId: original.pending?.envelope.occurrenceId ?? digest,\n nowMillis: 140,\n });\n\n yield* ensure(\n recovered.state === \"cancelled\" &&\n recovered.pending?.retry.automaticAttempts === 0 &&\n recovered.pending.retry.attempts === 3 &&\n recovered.pending.retry.parked === false &&\n JSON.stringify(recovered.pending.envelope) === JSON.stringify(original.pending?.envelope),\n \"Explicit recovery must preserve cancelled pending identity and total attempts\",\n );\n\n const staleRetry = yield* store.change(original, {\n _tag: \"Retry\",\n occurrenceId: original.pending?.envelope.occurrenceId ?? digest,\n retry: {\n generation: 0,\n attempts: 99,\n automaticAttempts: 99,\n parked: true,\n nextAttemptAtMillis: 150,\n lastAttemptAtMillis: 145,\n lastFailure: \"transport\",\n },\n nowMillis: 145,\n });\n\n yield* ensure(\n JSON.stringify(staleRetry) === JSON.stringify(recovered),\n \"A pre-recovery retry consumed the new generation\",\n );\n\n const repeatedRecovery = yield* store.change(original, {\n _tag: \"Recover\",\n expectedGeneration: 0,\n expectedRevision: recovered.configurationRevision,\n occurrenceId: original.pending?.envelope.occurrenceId ?? digest,\n nowMillis: 146,\n });\n\n yield* ensure(\n JSON.stringify(repeatedRecovery) === JSON.stringify(recovered),\n \"A repeated recovery changed its original generation\",\n );\n\n const completed = yield* store.change(original, {\n _tag: \"Complete\",\n occurrenceId: original.pending?.envelope.occurrenceId ?? digest,\n receipt,\n nowMillis: 140,\n });\n\n yield* ensure(\n completed.pending === null && cancelled.pending !== null,\n \"completion did not clear pending work\",\n );\n yield* store.insert(record(\"capacity-next\"), 1);\n const replay = yield* store.insert(original, 1);\n\n yield* ensure(\n replay.version === completed.version && replay.state === \"cancelled\",\n \"terminal replay lost its creation evidence\",\n );\n\n const second = record(\"capacity-next\");\n\n const pausedSecond = yield* store.change(second, {\n _tag: \"Control\",\n expectedRevision: 1,\n expectedVersion: second.version,\n action: \"pause\",\n nextAtMillis: second.nextAtMillis,\n nowMillis: 150,\n skippedRange: null,\n });\n\n const pausedCapacity = yield* store.insert(record(\"capacity-third\"), 1).pipe(Effect.result);\n\n yield* ensure(\n Result.isFailure(pausedCapacity) && pausedCapacity.failure._tag === \"ScheduleCapacityError\",\n \"paused future work did not reserve capacity\",\n );\n yield* store.change(second, {\n _tag: \"Control\",\n expectedRevision: 1,\n expectedVersion: pausedSecond.version,\n action: \"cancel\",\n nextAtMillis: null,\n nowMillis: 160,\n skippedRange: null,\n });\n const admitted = pendingRecord(\"capacity-completed\");\n\n yield* store.insert(admitted, 1);\n\n const settled = yield* store.change(admitted, {\n _tag: \"Complete\",\n occurrenceId: admitted.pending?.envelope.occurrenceId ?? digest,\n receipt,\n nowMillis: 170,\n });\n\n yield* store.insert(record(\"capacity-third\"), 1);\n\n const reactivated = yield* store\n .change(\n admitted,\n {\n _tag: \"Update\",\n expectedRevision: 1,\n configuration: admitted.configuration,\n nextAtMillis: 200,\n nowMillis: 180,\n },\n 1,\n )\n .pipe(Effect.result);\n\n yield* ensure(\n Result.isFailure(reactivated) && reactivated.failure._tag === \"ScheduleCapacityError\",\n \"reactivation exceeded operational capacity\",\n );\n yield* ensure(\n (yield* store.get(admitted))?.version === settled.version,\n \"capacity failure mutated the completed record\",\n );\n }),\n);\n\nconst duePagination = conformanceCase(\n \"advances due pagination beyond unchanged rows with equal deadlines\",\n (ensure) =>\n Effect.gen(function* () {\n const store = yield* ScheduleStore;\n\n for (const name of [\"due-a\", \"due-b\", \"due-c\"]) yield* store.insert(record(name), 10);\n const first = yield* store.due(100, 1);\n const second = yield* store.due(100, 1, undefined, first[0]);\n const third = yield* store.due(100, 1, undefined, second[0]);\n\n yield* ensure(\n first[0]?.scheduleId === id(\"due-a\") &&\n second[0]?.scheduleId === id(\"due-b\") &&\n third[0]?.scheduleId === id(\"due-c\"),\n \"due pages repeated or skipped a key\",\n );\n yield* ensure(\n (yield* store.due(100, 1, undefined, third[0])).length === 0,\n \"due cursor did not terminate\",\n );\n }),\n);\n\nconst transitionFencing = conformanceCase(\n \"fences stale preparation and control while preserving frozen pending work\",\n (ensure) =>\n Effect.gen(function* () {\n const store = yield* ScheduleStore;\n\n const prepareOriginal = record(\"stale-prepare\");\n\n yield* store.insert(prepareOriginal, 10);\n\n const edited = yield* store.change(key(\"stale-prepare\"), {\n _tag: \"Update\",\n expectedRevision: 1,\n configuration: {\n ...prepareOriginal.configuration,\n timing: { _tag: \"At\", atMillis: 200 },\n input: { value: \"edited-before-prepare\" },\n },\n nextAtMillis: 200,\n nowMillis: 10,\n });\n\n const staleEnvelope = pendingRecord(\"stale-prepare\").pending?.envelope;\n\n if (staleEnvelope === undefined) {\n return yield* ScheduleStoreConformanceViolation.make({\n caseName: \"fences stale preparation and control while preserving frozen pending work\",\n message: \"fixture did not contain a pending envelope\",\n });\n }\n\n const stalePrepare = yield* store\n .change(key(\"stale-prepare\"), {\n _tag: \"Prepare\",\n expectedRevision: 1,\n expectedCursor: 100,\n envelope: staleEnvelope,\n nextAtMillis: null,\n skippedRange: null,\n nowMillis: 110,\n })\n .pipe(Effect.result);\n\n yield* ensure(\n Result.isFailure(stalePrepare) && stalePrepare.failure._tag === \"ScheduleConflict\",\n \"stale preparation did not conflict\",\n );\n yield* ensure(\n JSON.stringify(yield* store.get(key(\"stale-prepare\"))) === JSON.stringify(edited),\n \"stale preparation changed the edited record\",\n );\n\n const frozen = pendingRecord(\"pending-update\");\n\n yield* store.insert(frozen, 10);\n const frozenEnvelope = JSON.stringify(frozen.pending?.envelope);\n\n const updatedPending = yield* store.change(key(\"pending-update\"), {\n _tag: \"Update\",\n expectedRevision: 1,\n configuration: {\n ...frozen.configuration,\n timing: { _tag: \"At\", atMillis: 300 },\n input: { value: \"new-configuration\" },\n },\n nextAtMillis: 300,\n nowMillis: 20,\n });\n\n yield* ensure(\n JSON.stringify(updatedPending.pending?.envelope) === frozenEnvelope,\n \"configuration update changed the frozen pending envelope\",\n );\n\n const completedOriginal = pendingRecord(\"stale-control\");\n\n yield* store.insert(completedOriginal, 10);\n const occurrenceId = completedOriginal.pending?.envelope.occurrenceId;\n\n if (occurrenceId === undefined) {\n return yield* ScheduleStoreConformanceViolation.make({\n caseName: \"fences stale preparation and control while preserving frozen pending work\",\n message: \"fixture did not contain an occurrence identifier\",\n });\n }\n\n const completed = yield* store.change(key(\"stale-control\"), {\n _tag: \"Complete\",\n occurrenceId,\n receipt,\n nowMillis: 130,\n });\n\n const staleControl = yield* store\n .change(key(\"stale-control\"), {\n _tag: \"Control\",\n expectedRevision: 1,\n expectedVersion: 1,\n action: \"resume\",\n nextAtMillis: 100,\n nowMillis: 140,\n skippedRange: null,\n })\n .pipe(Effect.result);\n\n yield* ensure(\n Result.isFailure(staleControl) && staleControl.failure._tag === \"ScheduleConflict\",\n \"stale control did not conflict\",\n );\n const afterControl = yield* store.get(key(\"stale-control\"));\n\n yield* ensure(\n afterControl?.nextAtMillis === null,\n \"stale control revived a completed one-shot\",\n );\n yield* ensure(\n afterControl?.version === completed.version && afterControl.lastReceipt !== null,\n \"stale control changed completed state\",\n );\n }),\n);\n\n/** Adapter-neutral contract cases. Each case uses disjoint owner and Schedule identities. */\nexport const scheduleStoreConformanceCases: ReadonlyArray<ScheduleStoreConformanceCase> = [\n creationReplay,\n staleCompletion,\n isolationAndCloning,\n ownerCapacity,\n retainedEvidence,\n duePagination,\n transitionFencing,\n];\n"],"mappings":";;;;;;AAeA,IAAa,oCAAb,cAAuD,OAAO,YAA+C,CAAC,CAC5G,qCACA;CAAE,UAAU,OAAO;CAAQ,SAAS,OAAO;AAAO,CACpD,CAAC,CAAC,CAAC;AAWH,MAAM,KAAK,OAAO,WAAW,UAAU;AACvC,MAAM,YAAY,OAAO,WAAW,SAAS,CAAC,CAAC,gCAAgC;AAC/E,MAAM,UAAU,OAAO,WAAW,OAAO,CAAC,CAAC,4BAA4B;AACvE,MAAM,WAAW,OAAO,WAAW,QAAQ,CAAC,CAAC,6BAA6B;AAC1E,MAAM,SAAS,OAAO,WAAW,MAAM,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;AACvD,MAAM,cAAc,kBAAkB,KAAK;CAAE,OAAO;CAAQ,OAAO;CAAQ,OAAO;AAAO,CAAC;AAE1F,MAAM,OAAO,MAAc,UAAU,aAA0B;CAC7D,OAAO;EAAE,UAAU;EAA+B;CAAQ;CAC1D,YAAY,GAAG,IAAI;AACrB;AAEA,MAAM,UACJ,MACA,QAAuB,EAAE,OAAO,KAAK,GACrC,UAAU,aACU;CACpB,eAAe;CACf,GAAG,IAAI,MAAM,OAAO;CACpB,qBAAqB,OAAO,WAAW,MAAM,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;CAC7D,WAAW;CACX,iBAAiB;CACjB,iBAAiB;CACjB,uBAAuB;CACvB,SAAS;CACT,eAAe;EACb,QAAQ;GAAE,MAAM;GAAM,UAAU;EAAI;EACpC,aAAa;GAAE,MAAM;GAAkB;EAAS;EAChD,mBAAmB;EACnB;EACA;EACA;EACA,aAAa;CACf;CACA,OAAO;CACP,cAAc;CACd,SAAS;CACT,aAAa;CACb,aAAa;CACb,kBAAkB;AACpB;AAEA,MAAM,iBAAiB,SAAiC;CACtD,MAAM,OAAO,OAAO,IAAI;CACxB,MAAM,eAAe,OAAO,WAAW,MAAM,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;CAE7D,OAAO;EACL,GAAG;EACH,cAAc;EACd,SAAS;GACP,UAAU;IACR,eAAe;IACf,GAAG,IAAI,IAAI;IACX,uBAAuB;IACvB,kBAAkB;IAClB,kBAAkB;IAClB;IACA;IACA,mBAAmB;IACnB;IACA;IACA,OAAO,KAAK,cAAc;IAC1B,aAAa;IACb,cAAc,OAAO,WAAW,cAAc,CAAC,CAAC,YAAY,MAAM;IAClE,eAAe;KAAE,UAAU;KAAU,YAAY;IAAW;GAC9D;GACA,OAAO;IACL,YAAY;IACZ,UAAU;IACV,mBAAmB;IACnB,QAAQ;IACR,qBAAqB;IACrB,qBAAqB;IACrB,aAAa;GACf;EACF;CACF;AACF;AAEA,MAAM,UAAU,QAAQ,KAAK;CAC3B,WAAW,OAAO,WAAW,SAAS,CAAC,CAAC,8BAA8B;CACtE,cAAc,OAAO,WAAW,YAAY,CAAC,CAAC,iCAAiC;CAC/E;CACA,eAAe,OAAO,WAAW,aAAa,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,mBACJ,MACA,SAMkC;CAClC;CACA,KAAK,KAAK,WAAW,YACnB,YACI,OAAO,OACP,OAAO,KAAK,kCAAkC,KAAK;EAAE,UAAU;EAAM;CAAQ,CAAC,CAAC,CACrF,CAAC,CAAC,KAAK,OAAO,SAAS,4BAA4B,MAAM,CAAC;AAC5D;;AAmfA,MAAa,gCAA6E;CAjfnE,gBACrB,mEACC,WACC,OAAO,IAAI,aAAa;EACtB,MAAM,QAAQ,OAAO;EACrB,MAAM,WAAW,OAAO,iBAAiB;EAEzC,OAAO,MAAM,OAAO,UAAU,EAAE;EAEhC,MAAM,SAAS,OAAO,MAAM,OAAO,IAAI,iBAAiB,GAAG;GACzD,MAAM;GACN,kBAAkB;GAClB,eAAe;IACb,GAAG,SAAS;IACZ,OAAO,EAAE,OAAO,SAAS;GAC3B;GACA,cAAc;GACd,WAAW;EACb,CAAC;EAED,MAAM,WAAW,OAAO,MAAM,OAAO,UAAU,EAAE;EAEjD,OAAO,OAAO,SAAS,YAAY,OAAO,SAAS,sCAAsC;EACzF,OAAO,OACL,SAAS,0BAA0B,GACnC,wDACF;EACA,OAAO,OACL,KAAK,UAAU,SAAS,cAAc,KAAK,MAAM,KAAK,UAAU,EAAE,OAAO,SAAS,CAAC,GACnF,6CACF;CACF,CAAC,CAmdH;CAhdsB,gBACtB,8DACC,WACC,OAAO,IAAI,aAAa;EACtB,MAAM,QAAQ,OAAO;EACrB,MAAM,WAAW,cAAc,kBAAkB;EAEjD,OAAO,MAAM,OAAO,UAAU,EAAE;EAEhC,MAAM,QAAQ,OAAO,MAAM,OAAO,IAAI,kBAAkB,GAAG;GACzD,MAAM;GACN,cAAc,OAAO,WAAW,MAAM,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;GACtD;GACA,WAAW;EACb,CAAC;EAED,OAAO,OAAO,MAAM,YAAY,SAAS,SAAS,sCAAsC;EACxF,OAAO,OAAO,MAAM,YAAY,MAAM,uCAAuC;EAC7E,OAAO,OAAO,MAAM,gBAAgB,MAAM,yCAAyC;EAEnF,MAAM,WAAW,OAAO,MAAM,OAAO,IAAI,kBAAkB,GAAG;GAC5D,MAAM;GACN,cAAc,SAAS,SAAS,SAAS,gBAAgB;GACzD,OAAO;IACL,YAAY;IACZ,mBAAmB;IACnB,QAAQ;IACR,UAAU;IACV,qBAAqB;IACrB,qBAAqB;IACrB,aAAa;GACf;GACA,WAAW;EACb,CAAC;EAED,MAAM,YAAY,OAAO,MAAM,OAAO,IAAI,kBAAkB,GAAG;GAC7D,MAAM;GACN,cAAc,SAAS,SAAS,SAAS,gBAAgB;GACzD,OAAO;IACL,YAAY;IACZ,mBAAmB;IACnB,QAAQ;IACR,UAAU;IACV,qBAAqB;IACrB,qBAAqB;IACrB,aAAa;GACf;GACA,WAAW;EACb,CAAC;EAED,OAAO,OAAO,UAAU,YAAY,SAAS,SAAS,sCAAsC;EAC5F,OAAO,OACL,UAAU,SAAS,MAAM,wBAAwB,KACjD,8CACF;CACF,CAAC,CA0ZH;CAvZ0B,gBAC1B,2EACC,WACC,OAAO,IAAI,aAAa;EACtB,MAAM,QAAQ,OAAO;EACrB,MAAM,eAAe,EAAE,OAAO,SAAS;EAEvC,OAAO,MAAM,OAAO,OAAO,UAAU,YAAY,GAAG,EAAE;EACtD,aAAa,QAAQ;EACrB,OAAO,MAAM,OAAO,OAAO,QAAQ,GAAG,EAAE;EACxC,OAAO,MAAM,OAAO,cAAc,eAAe,GAAG,EAAE;EACtD,OAAO,MAAM,OAAO,OAAO,WAAW,EAAE,OAAO,UAAU,GAAG,aAAa,GAAG,EAAE;EAE9E,MAAM,OAAO,OAAO,MAAM,KAAK;GAAE,OAAO,IAAI,SAAS,CAAC,CAAC;GAAO,OAAO;EAAE,CAAC;EAExE,OAAO,OAAO,KAAK,MAAM,WAAW,GAAG,0CAA0C;EACjF,OAAO,OAAO,KAAK,MAAM,EAAE,EAAE,eAAe,GAAG,QAAQ,GAAG,8BAA8B;EACxF,OAAO,OAAO,KAAK,SAAS,GAAG,eAAe,GAAG,wCAAwC;EACzF,OAAO,OACL,KAAK,MAAM,OAAO,SAAS,KAAK,MAAM,YAAY,OAAO,GACzD,mCACF;EAEA,MAAM,SAAS,OAAO,MAAM,IAAI,IAAI,QAAQ,CAAC;EAE7C,OAAO,OACL,KAAK,UAAU,QAAQ,cAAc,KAAK,MAAM,KAAK,UAAU,EAAE,OAAO,SAAS,CAAC,GAClF,wDACF;EACA,MAAM,MAAM,OAAO,MAAM,IAAI,KAAK,IAAI,IAAI,SAAS,CAAC,CAAC,KAAK;EAE1D,OAAO,OACL,IAAI,EAAE,EAAE,eAAe,GAAG,QAAQ,KAAK,IAAI,EAAE,EAAE,eAAe,GAAG,QAAQ,GACzE,gDACF;EACA,OAAO,OACL,IAAI,MAAM,SAAS,KAAK,eAAe,GAAG,eAAe,CAAC,GAC1D,oCACF;CACF,CAAC,CAiXH;CA9WoB,gBACpB,2DACC,WACC,OAAO,IAAI,aAAa;EACtB,MAAM,QAAQ,OAAO;EAErB,OAAO,MAAM,OAAO,OAAO,gBAAgB,EAAE,OAAO,EAAE,GAAG,gBAAgB,GAAG,CAAC;EAE7E,MAAM,YAAY,OAAO,MACtB,OAAO,OAAO,gBAAgB,EAAE,OAAO,EAAE,GAAG,gBAAgB,GAAG,CAAC,CAAC,CACjE,KAAK,OAAO,MAAM;EAErB,OAAO,OACL,OAAO,UAAU,SAAS,KAAK,UAAU,mBAAmB,uBAC5D,wDACF;EAOA,OAAO,QAAO,OALO,MAAM,OACzB,OAAO,kBAAkB,EAAE,OAAO,EAAE,GAAG,gBAAgB,GACvD,CACF,EAAA,CAEoB,eAAe,GAAG,gBAAgB,GAAG,+BAA+B;CAC1F,CAAC,CAwVH;CArVuB,gBACvB,wFACC,WACC,OAAO,IAAI,aAAa;EACtB,MAAM,QAAQ,OAAO;EACrB,MAAM,WAAW,cAAc,mBAAmB;EAElD,OAAO,MAAM,OAAO,UAAU,CAAC;EAE/B,MAAM,SAAS,OAAO,MAAM,OAAO,UAAU;GAC3C,MAAM;GACN,kBAAkB;GAClB,iBAAiB,SAAS;GAC1B,QAAQ;GACR,cAAc;GACd,WAAW;GACX,cAAc;EAChB,CAAC;EAED,MAAM,YAAY,OAAO,MAAM,OAAO,UAAU;GAC9C,MAAM;GACN,kBAAkB;GAClB,iBAAiB,OAAO;GACxB,QAAQ;GACR,cAAc;GACd,WAAW;GACX,cAAc;EAChB,CAAC;EAED,MAAM,UAAU,OAAO,MAAM,OAAO,OAAO,eAAe,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,MAAM;EAElF,OAAO,OACL,OAAO,UAAU,OAAO,KAAK,QAAQ,QAAQ,SAAS,yBACtD,mDACF;EAEA,MAAM,SAAS,OAAO,MAAM,OAAO,UAAU;GAC3C,MAAM;GACN,cAAc,SAAS,SAAS,SAAS,gBAAgB;GACzD,OAAO;IACL,YAAY;IACZ,UAAU;IACV,mBAAmB;IACnB,QAAQ;IACR,qBAAqB;IACrB,qBAAqB;IACrB,aAAa;GACf;GACA,WAAW;EACb,CAAC;EAED,OAAO,QACJ,OAAO,MAAM,IAAI,KAAK,IAAI,SAAS,KAAK,EAAA,CAAG,WAAW,GACvD,0CACF;EAEA,MAAM,YAAY,OAAO,MAAM,OAAO,UAAU;GAC9C,MAAM;GACN,oBAAoB;GACpB,kBAAkB,OAAO;GACzB,cAAc,SAAS,SAAS,SAAS,gBAAgB;GACzD,WAAW;EACb,CAAC;EAED,OAAO,OACL,UAAU,UAAU,eAClB,UAAU,SAAS,MAAM,sBAAsB,KAC/C,UAAU,QAAQ,MAAM,aAAa,KACrC,UAAU,QAAQ,MAAM,WAAW,SACnC,KAAK,UAAU,UAAU,QAAQ,QAAQ,MAAM,KAAK,UAAU,SAAS,SAAS,QAAQ,GAC1F,+EACF;EAEA,MAAM,aAAa,OAAO,MAAM,OAAO,UAAU;GAC/C,MAAM;GACN,cAAc,SAAS,SAAS,SAAS,gBAAgB;GACzD,OAAO;IACL,YAAY;IACZ,UAAU;IACV,mBAAmB;IACnB,QAAQ;IACR,qBAAqB;IACrB,qBAAqB;IACrB,aAAa;GACf;GACA,WAAW;EACb,CAAC;EAED,OAAO,OACL,KAAK,UAAU,UAAU,MAAM,KAAK,UAAU,SAAS,GACvD,kDACF;EAEA,MAAM,mBAAmB,OAAO,MAAM,OAAO,UAAU;GACrD,MAAM;GACN,oBAAoB;GACpB,kBAAkB,UAAU;GAC5B,cAAc,SAAS,SAAS,SAAS,gBAAgB;GACzD,WAAW;EACb,CAAC;EAED,OAAO,OACL,KAAK,UAAU,gBAAgB,MAAM,KAAK,UAAU,SAAS,GAC7D,qDACF;EAEA,MAAM,YAAY,OAAO,MAAM,OAAO,UAAU;GAC9C,MAAM;GACN,cAAc,SAAS,SAAS,SAAS,gBAAgB;GACzD;GACA,WAAW;EACb,CAAC;EAED,OAAO,OACL,UAAU,YAAY,QAAQ,UAAU,YAAY,MACpD,uCACF;EACA,OAAO,MAAM,OAAO,OAAO,eAAe,GAAG,CAAC;EAC9C,MAAM,SAAS,OAAO,MAAM,OAAO,UAAU,CAAC;EAE9C,OAAO,OACL,OAAO,YAAY,UAAU,WAAW,OAAO,UAAU,aACzD,4CACF;EAEA,MAAM,SAAS,OAAO,eAAe;EAErC,MAAM,eAAe,OAAO,MAAM,OAAO,QAAQ;GAC/C,MAAM;GACN,kBAAkB;GAClB,iBAAiB,OAAO;GACxB,QAAQ;GACR,cAAc,OAAO;GACrB,WAAW;GACX,cAAc;EAChB,CAAC;EAED,MAAM,iBAAiB,OAAO,MAAM,OAAO,OAAO,gBAAgB,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,MAAM;EAE1F,OAAO,OACL,OAAO,UAAU,cAAc,KAAK,eAAe,QAAQ,SAAS,yBACpE,6CACF;EACA,OAAO,MAAM,OAAO,QAAQ;GAC1B,MAAM;GACN,kBAAkB;GAClB,iBAAiB,aAAa;GAC9B,QAAQ;GACR,cAAc;GACd,WAAW;GACX,cAAc;EAChB,CAAC;EACD,MAAM,WAAW,cAAc,oBAAoB;EAEnD,OAAO,MAAM,OAAO,UAAU,CAAC;EAE/B,MAAM,UAAU,OAAO,MAAM,OAAO,UAAU;GAC5C,MAAM;GACN,cAAc,SAAS,SAAS,SAAS,gBAAgB;GACzD;GACA,WAAW;EACb,CAAC;EAED,OAAO,MAAM,OAAO,OAAO,gBAAgB,GAAG,CAAC;EAE/C,MAAM,cAAc,OAAO,MACxB,OACC,UACA;GACE,MAAM;GACN,kBAAkB;GAClB,eAAe,SAAS;GACxB,cAAc;GACd,WAAW;EACb,GACA,CACF,CAAC,CACA,KAAK,OAAO,MAAM;EAErB,OAAO,OACL,OAAO,UAAU,WAAW,KAAK,YAAY,QAAQ,SAAS,yBAC9D,4CACF;EACA,OAAO,QACJ,OAAO,MAAM,IAAI,QAAQ,EAAA,EAAI,YAAY,QAAQ,SAClD,+CACF;CACF,CAAC,CA2JH;CAxJoB,gBACpB,uEACC,WACC,OAAO,IAAI,aAAa;EACtB,MAAM,QAAQ,OAAO;EAErB,KAAK,MAAM,QAAQ;GAAC;GAAS;GAAS;EAAO,GAAG,OAAO,MAAM,OAAO,OAAO,IAAI,GAAG,EAAE;EACpF,MAAM,QAAQ,OAAO,MAAM,IAAI,KAAK,CAAC;EACrC,MAAM,SAAS,OAAO,MAAM,IAAI,KAAK,GAAG,KAAA,GAAW,MAAM,EAAE;EAC3D,MAAM,QAAQ,OAAO,MAAM,IAAI,KAAK,GAAG,KAAA,GAAW,OAAO,EAAE;EAE3D,OAAO,OACL,MAAM,EAAE,EAAE,eAAe,GAAG,OAAO,KACjC,OAAO,EAAE,EAAE,eAAe,GAAG,OAAO,KACpC,MAAM,EAAE,EAAE,eAAe,GAAG,OAAO,GACrC,qCACF;EACA,OAAO,QACJ,OAAO,MAAM,IAAI,KAAK,GAAG,KAAA,GAAW,MAAM,EAAE,EAAA,CAAG,WAAW,GAC3D,8BACF;CACF,CAAC,CAoIH;CAjIwB,gBACxB,8EACC,WACC,OAAO,IAAI,aAAa;EACtB,MAAM,QAAQ,OAAO;EAErB,MAAM,kBAAkB,OAAO,eAAe;EAE9C,OAAO,MAAM,OAAO,iBAAiB,EAAE;EAEvC,MAAM,SAAS,OAAO,MAAM,OAAO,IAAI,eAAe,GAAG;GACvD,MAAM;GACN,kBAAkB;GAClB,eAAe;IACb,GAAG,gBAAgB;IACnB,QAAQ;KAAE,MAAM;KAAM,UAAU;IAAI;IACpC,OAAO,EAAE,OAAO,wBAAwB;GAC1C;GACA,cAAc;GACd,WAAW;EACb,CAAC;EAED,MAAM,gBAAgB,cAAc,eAAe,CAAC,CAAC,SAAS;EAE9D,IAAI,kBAAkB,KAAA,GACpB,OAAO,OAAO,kCAAkC,KAAK;GACnD,UAAU;GACV,SAAS;EACX,CAAC;EAGH,MAAM,eAAe,OAAO,MACzB,OAAO,IAAI,eAAe,GAAG;GAC5B,MAAM;GACN,kBAAkB;GAClB,gBAAgB;GAChB,UAAU;GACV,cAAc;GACd,cAAc;GACd,WAAW;EACb,CAAC,CAAC,CACD,KAAK,OAAO,MAAM;EAErB,OAAO,OACL,OAAO,UAAU,YAAY,KAAK,aAAa,QAAQ,SAAS,oBAChE,oCACF;EACA,OAAO,OACL,KAAK,UAAU,OAAO,MAAM,IAAI,IAAI,eAAe,CAAC,CAAC,MAAM,KAAK,UAAU,MAAM,GAChF,6CACF;EAEA,MAAM,SAAS,cAAc,gBAAgB;EAE7C,OAAO,MAAM,OAAO,QAAQ,EAAE;EAC9B,MAAM,iBAAiB,KAAK,UAAU,OAAO,SAAS,QAAQ;EAE9D,MAAM,iBAAiB,OAAO,MAAM,OAAO,IAAI,gBAAgB,GAAG;GAChE,MAAM;GACN,kBAAkB;GAClB,eAAe;IACb,GAAG,OAAO;IACV,QAAQ;KAAE,MAAM;KAAM,UAAU;IAAI;IACpC,OAAO,EAAE,OAAO,oBAAoB;GACtC;GACA,cAAc;GACd,WAAW;EACb,CAAC;EAED,OAAO,OACL,KAAK,UAAU,eAAe,SAAS,QAAQ,MAAM,gBACrD,0DACF;EAEA,MAAM,oBAAoB,cAAc,eAAe;EAEvD,OAAO,MAAM,OAAO,mBAAmB,EAAE;EACzC,MAAM,eAAe,kBAAkB,SAAS,SAAS;EAEzD,IAAI,iBAAiB,KAAA,GACnB,OAAO,OAAO,kCAAkC,KAAK;GACnD,UAAU;GACV,SAAS;EACX,CAAC;EAGH,MAAM,YAAY,OAAO,MAAM,OAAO,IAAI,eAAe,GAAG;GAC1D,MAAM;GACN;GACA;GACA,WAAW;EACb,CAAC;EAED,MAAM,eAAe,OAAO,MACzB,OAAO,IAAI,eAAe,GAAG;GAC5B,MAAM;GACN,kBAAkB;GAClB,iBAAiB;GACjB,QAAQ;GACR,cAAc;GACd,WAAW;GACX,cAAc;EAChB,CAAC,CAAC,CACD,KAAK,OAAO,MAAM;EAErB,OAAO,OACL,OAAO,UAAU,YAAY,KAAK,aAAa,QAAQ,SAAS,oBAChE,gCACF;EACA,MAAM,eAAe,OAAO,MAAM,IAAI,IAAI,eAAe,CAAC;EAE1D,OAAO,OACL,cAAc,iBAAiB,MAC/B,4CACF;EACA,OAAO,OACL,cAAc,YAAY,UAAU,WAAW,aAAa,gBAAgB,MAC5E,uCACF;CACF,CAAC,CAWH;AACF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { C as ScheduleRecord, a as ScheduleChange, m as ScheduleKey, s as ScheduleConflict, y as ScheduleOwner } from "../Schedule-H3SEYX9g.mjs";
|
|
2
|
+
import { Result } from "effect";
|
|
3
|
+
declare namespace ScheduleTransition_d_exports {
|
|
4
|
+
export { applyScheduleChange, compareScheduleKeys, compareScheduleNames, scheduleDeadline, scheduleKeyOf, scheduleKeyString, scheduleOwnerKey, scheduleUsesCapacity };
|
|
5
|
+
}
|
|
6
|
+
declare const scheduleOwnerKey: (owner: ScheduleOwner) => string;
|
|
7
|
+
declare const scheduleKeyString: (key: ScheduleKey) => string;
|
|
8
|
+
/** Locale-independent Unicode scalar ordering, matching UTF-8/BINARY order for valid text. */
|
|
9
|
+
declare const compareScheduleNames: (left: string, right: string) => number;
|
|
10
|
+
declare const compareScheduleKeys: (left: ScheduleKey, right: ScheduleKey) => number;
|
|
11
|
+
declare const scheduleKeyOf: (record: ScheduleRecord) => ScheduleKey;
|
|
12
|
+
/** Pending recovery always outranks preparation, even after pause or cancellation. */
|
|
13
|
+
declare const scheduleDeadline: (record: ScheduleRecord) => number | null;
|
|
14
|
+
/** Paused work reserves capacity; terminal replay evidence does not. */
|
|
15
|
+
declare const scheduleUsesCapacity: (record: ScheduleRecord) => boolean;
|
|
16
|
+
/**
|
|
17
|
+
* The adapter-neutral local transaction reducer. Adapters call it only after decoding the row and
|
|
18
|
+
* command. A stale delivery completion returns the original record without changing even bounded
|
|
19
|
+
* status or the CAS version.
|
|
20
|
+
*/
|
|
21
|
+
declare const applyScheduleChange: (record: ScheduleRecord, change: ScheduleChange) => Result.Result<ScheduleRecord, ScheduleConflict>;
|
|
22
|
+
//#endregion
|
|
23
|
+
export { applyScheduleChange, compareScheduleKeys, compareScheduleNames, scheduleDeadline, scheduleKeyOf, scheduleKeyString, scheduleOwnerKey, scheduleUsesCapacity, ScheduleTransition_d_exports as t };
|
|
24
|
+
//# sourceMappingURL=ScheduleTransition.d.mts.map
|