effect-agent 0.1.0-beta.157 → 0.1.0-beta.158
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/{AgentRuntime-GQACxY_m.mjs → AgentRuntime-D4eoBpIW.mjs} +12 -6
- package/dist/{AgentRuntime-GQACxY_m.mjs.map → AgentRuntime-D4eoBpIW.mjs.map} +1 -1
- package/dist/{DurableAgentRuntime-BAQvZK1e.mjs → DurableAgentRuntime-eImXoGqD.mjs} +50 -11
- package/dist/DurableAgentRuntime-eImXoGqD.mjs.map +1 -0
- package/dist/{Subagent-JjcidJ7q.mjs → Subagent-211Oz2IN.mjs} +2 -2
- package/dist/{Subagent-JjcidJ7q.mjs.map → Subagent-211Oz2IN.mjs.map} +1 -1
- package/dist/capabilities/Subagent.mjs +1 -1
- package/dist/durable/DurableAgentRuntime.mjs +1 -1
- package/dist/durable/MessageDelivery.d.mts +20 -6
- package/dist/durable/MessageDelivery.mjs +49 -17
- package/dist/durable/MessageDelivery.mjs.map +1 -1
- package/dist/durable/MessageDeliveryStoreConformance.d.mts +40 -40
- package/dist/engine/AgentRuntime.mjs +1 -1
- package/dist/index.mjs +3 -3
- package/package.json +1 -1
- package/src/durable/DurableAgentRuntime.ts +79 -9
- package/src/durable/MessageDelivery.ts +64 -20
- package/src/engine/internal/agent-runtime.ts +23 -15
- package/dist/DurableAgentRuntime-BAQvZK1e.mjs.map +0 -1
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"effect-agent","version":"0.1.0-beta.157","devDependencies":{"@effect/platform-node":"4.0.0-rc.117","@effect/vitest":"4.0.0-rc.117","effect":"4.0.0-rc.117","typescript":"7.0.2","vite-plus":"0.3.3"},"peerDependencies":{"effect":"^4.0.0-rc.117"},"exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"./activity-store":{"types":"./dist/durable/ActivityStore.d.mts","default":"./dist/durable/ActivityStore.mjs"},"./admin":{"types":"./dist/durable/Admin.d.mts","default":"./dist/durable/Admin.mjs"},"./agent":{"types":"./dist/core/Agent.d.mts","default":"./dist/core/Agent.mjs"},"./agent-error":{"types":"./dist/core/AgentError.d.mts","default":"./dist/core/AgentError.mjs"},"./agent-policy":{"types":"./dist/core/AgentPolicy.d.mts","default":"./dist/core/AgentPolicy.mjs"},"./agent-registration":{"types":"./dist/durable/AgentRegistration.d.mts","default":"./dist/durable/AgentRegistration.mjs"},"./agent-runtime":{"types":"./dist/engine/AgentRuntime.d.mts","default":"./dist/engine/AgentRuntime.mjs"},"./agent-updates":{"types":"./dist/core/AgentUpdates.d.mts","default":"./dist/core/AgentUpdates.mjs"},"./approval":{"types":"./dist/capabilities/Approval.d.mts","default":"./dist/capabilities/Approval.mjs"},"./browser-use":{"types":"./dist/capabilities/BrowserUse.d.mts","default":"./dist/capabilities/BrowserUse.mjs"},"./budget":{"types":"./dist/capabilities/Budget.d.mts","default":"./dist/capabilities/Budget.mjs"},"./code-executor":{"types":"./dist/sandbox/CodeExecutor.d.mts","default":"./dist/sandbox/CodeExecutor.mjs"},"./code-mode":{"types":"./dist/capabilities/CodeMode.d.mts","default":"./dist/capabilities/CodeMode.mjs"},"./commands":{"types":"./dist/capabilities/Commands.d.mts","default":"./dist/capabilities/Commands.mjs"},"./committed-activity":{"types":"./dist/durable/CommittedActivity.d.mts","default":"./dist/durable/CommittedActivity.mjs"},"./compaction":{"types":"./dist/engine/Compaction.d.mts","default":"./dist/engine/Compaction.mjs"},"./context-compactor":{"types":"./dist/engine/ContextCompactor.d.mts","default":"./dist/engine/ContextCompactor.mjs"},"./context-history":{"types":"./dist/engine/ContextHistory.d.mts","default":"./dist/engine/ContextHistory.mjs"},"./context-tools":{"types":"./dist/capabilities/ContextTools.d.mts","default":"./dist/capabilities/ContextTools.mjs"},"./context-window":{"types":"./dist/engine/ContextWindow.d.mts","default":"./dist/engine/ContextWindow.mjs"},"./digest":{"types":"./dist/durable/Digest.d.mts","default":"./dist/durable/Digest.mjs"},"./durable-agent-runtime":{"types":"./dist/durable/DurableAgentRuntime.d.mts","default":"./dist/durable/DurableAgentRuntime.mjs"},"./durable-failpoint":{"types":"./dist/durable/DurableFailpoint.d.mts","default":"./dist/durable/DurableFailpoint.mjs"},"./durable-step":{"types":"./dist/engine/DurableStep.d.mts","default":"./dist/engine/DurableStep.mjs"},"./event-source":{"types":"./dist/durable/EventSource.d.mts","default":"./dist/durable/EventSource.mjs"},"./failure-diagnostic":{"types":"./dist/core/FailureDiagnostic.d.mts","default":"./dist/core/FailureDiagnostic.mjs"},"./git-hub-workflow-source":{"types":"./dist/durable/GitHubWorkflowSource.d.mts","default":"./dist/durable/GitHubWorkflowSource.mjs"},"./id-generator":{"types":"./dist/core/IdGenerator.d.mts","default":"./dist/core/IdGenerator.mjs"},"./identifiers":{"types":"./dist/core/Identifiers.d.mts","default":"./dist/core/Identifiers.mjs"},"./in-memory":{"types":"./dist/InMemory.d.mts","default":"./dist/InMemory.mjs"},"./interactive-browser":{"types":"./dist/sandbox/InteractiveBrowser.d.mts","default":"./dist/sandbox/InteractiveBrowser.mjs"},"./mcp":{"types":"./dist/capabilities/Mcp.d.mts","default":"./dist/capabilities/Mcp.mjs"},"./mcp-client":{"types":"./dist/capabilities/McpClient.d.mts","default":"./dist/capabilities/McpClient.mjs"},"./memory":{"types":"./dist/core/Memory.d.mts","default":"./dist/core/Memory.mjs"},"./memory-namespace":{"types":"./dist/core/MemoryNamespace.d.mts","default":"./dist/core/MemoryNamespace.mjs"},"./memory-notes":{"types":"./dist/capabilities/MemoryNotes.d.mts","default":"./dist/capabilities/MemoryNotes.mjs"},"./memory-reference":{"types":"./dist/core/MemoryReference.d.mts","default":"./dist/core/MemoryReference.mjs"},"./memory-revalidation":{"types":"./dist/core/MemoryRevalidation.d.mts","default":"./dist/core/MemoryRevalidation.mjs"},"./memory-store":{"types":"./dist/core/MemoryStore.d.mts","default":"./dist/core/MemoryStore.mjs"},"./message-delivery":{"types":"./dist/durable/MessageDelivery.d.mts","default":"./dist/durable/MessageDelivery.mjs"},"./messaging":{"types":"./dist/capabilities/Messaging.d.mts","default":"./dist/capabilities/Messaging.mjs"},"./messaging-host":{"types":"./dist/engine/MessagingHost.d.mts","default":"./dist/engine/MessagingHost.mjs"},"./model-context":{"types":"./dist/capabilities/ModelContext.d.mts","default":"./dist/capabilities/ModelContext.mjs"},"./operation-authorizer":{"types":"./dist/durable/OperationAuthorizer.d.mts","default":"./dist/durable/OperationAuthorizer.mjs"},"./output":{"types":"./dist/engine/Output.d.mts","default":"./dist/engine/Output.mjs"},"./page-capture":{"types":"./dist/sandbox/PageCapture.d.mts","default":"./dist/sandbox/PageCapture.mjs"},"./page-crawl":{"types":"./dist/sandbox/PageCrawl.d.mts","default":"./dist/sandbox/PageCrawl.mjs"},"./page-screenshot":{"types":"./dist/sandbox/PageScreenshot.d.mts","default":"./dist/sandbox/PageScreenshot.mjs"},"./persistent-history":{"types":"./dist/durable/PersistentHistory.d.mts","default":"./dist/durable/PersistentHistory.mjs"},"./prepared-input-admission":{"types":"./dist/durable/PreparedInputAdmission.d.mts","default":"./dist/durable/PreparedInputAdmission.mjs"},"./receipt":{"types":"./dist/core/Receipt.d.mts","default":"./dist/core/Receipt.mjs"},"./records":{"types":"./dist/durable/Records.d.mts","default":"./dist/durable/Records.mjs"},"./recovery":{"types":"./dist/durable/Recovery.d.mts","default":"./dist/durable/Recovery.mjs"},"./redaction":{"types":"./dist/capabilities/Redaction.d.mts","default":"./dist/capabilities/Redaction.mjs"},"./remembering":{"types":"./dist/capabilities/Remembering.d.mts","default":"./dist/capabilities/Remembering.mjs"},"./remembering-store":{"types":"./dist/core/RememberingStore.d.mts","default":"./dist/core/RememberingStore.mjs"},"./run-event":{"types":"./dist/core/RunEvent.d.mts","default":"./dist/core/RunEvent.mjs"},"./run-event-sink":{"types":"./dist/engine/RunEventSink.d.mts","default":"./dist/engine/RunEventSink.mjs"},"./run-hooks":{"types":"./dist/capabilities/RunHooks.d.mts","default":"./dist/capabilities/RunHooks.mjs"},"./run-journal":{"types":"./dist/durable/RunJournal.d.mts","default":"./dist/durable/RunJournal.mjs"},"./run-options":{"types":"./dist/engine/RunOptions.d.mts","default":"./dist/engine/RunOptions.mjs"},"./run-policy-usage":{"types":"./dist/core/RunPolicyUsage.d.mts","default":"./dist/core/RunPolicyUsage.mjs"},"./sandbox":{"types":"./dist/sandbox/Sandbox.d.mts","default":"./dist/sandbox/Sandbox.mjs"},"./schedule":{"types":"./dist/durable/Schedule.d.mts","default":"./dist/durable/Schedule.mjs"},"./schedule-transition":{"types":"./dist/durable/ScheduleTransition.d.mts","default":"./dist/durable/ScheduleTransition.mjs"},"./scheduling":{"types":"./dist/durable/Scheduling.d.mts","default":"./dist/durable/Scheduling.mjs"},"./semantic-memory":{"types":"./dist/capabilities/SemanticMemory.d.mts","default":"./dist/capabilities/SemanticMemory.mjs"},"./semantic-memory-index":{"types":"./dist/core/SemanticMemoryIndex.d.mts","default":"./dist/core/SemanticMemoryIndex.mjs"},"./semantic-memory-revalidation":{"types":"./dist/core/SemanticMemoryRevalidation.d.mts","default":"./dist/core/SemanticMemoryRevalidation.mjs"},"./sql-memory-store":{"types":"./dist/durable/SqlMemoryStore.d.mts","default":"./dist/durable/SqlMemoryStore.mjs"},"./subagent":{"types":"./dist/capabilities/Subagent.d.mts","default":"./dist/capabilities/Subagent.mjs"},"./subagent-contract":{"types":"./dist/core/SubagentContract.d.mts","default":"./dist/core/SubagentContract.mjs"},"./subagent-host":{"types":"./dist/engine/SubagentHost.d.mts","default":"./dist/engine/SubagentHost.mjs"},"./subagent-reservations":{"types":"./dist/capabilities/SubagentReservations.d.mts","default":"./dist/capabilities/SubagentReservations.mjs"},"./submission-ledger":{"types":"./dist/durable/SubmissionLedger.d.mts","default":"./dist/durable/SubmissionLedger.mjs"},"./submission-status":{"types":"./dist/durable/SubmissionStatus.d.mts","default":"./dist/durable/SubmissionStatus.mjs"},"./subscription":{"types":"./dist/durable/Subscription.d.mts","default":"./dist/durable/Subscription.mjs"},"./subscription-input":{"types":"./dist/durable/SubscriptionInput.d.mts","default":"./dist/durable/SubscriptionInput.mjs"},"./subscription-tools":{"types":"./dist/durable/SubscriptionTools.d.mts","default":"./dist/durable/SubscriptionTools.mjs"},"./subscription-transition":{"types":"./dist/durable/SubscriptionTransition.d.mts","default":"./dist/durable/SubscriptionTransition.mjs"},"./subscriptions":{"types":"./dist/durable/Subscriptions.d.mts","default":"./dist/durable/Subscriptions.mjs"},"./testing/certification":{"types":"./dist/durable/Certification.d.mts","default":"./dist/durable/Certification.mjs"},"./testing/durable-failpoint-test-control":{"types":"./dist/durable/DurableFailpointTestControl.d.mts","default":"./dist/durable/DurableFailpointTestControl.mjs"},"./testing/message-delivery-store-conformance":{"types":"./dist/durable/MessageDeliveryStoreConformance.d.mts","default":"./dist/durable/MessageDeliveryStoreConformance.mjs"},"./testing/schedule-store-conformance":{"types":"./dist/durable/ScheduleStoreConformance.d.mts","default":"./dist/durable/ScheduleStoreConformance.mjs"},"./testing/submission-ledger-conformance":{"types":"./dist/durable/SubmissionLedgerConformance.d.mts","default":"./dist/durable/SubmissionLedgerConformance.mjs"},"./testing/subscription-store-conformance":{"types":"./dist/durable/SubscriptionStoreConformance.d.mts","default":"./dist/durable/SubscriptionStoreConformance.mjs"},"./testing/thread-store-conformance":{"types":"./dist/durable/ThreadStoreConformance.d.mts","default":"./dist/durable/ThreadStoreConformance.mjs"},"./thread":{"types":"./dist/core/Thread.d.mts","default":"./dist/core/Thread.mjs"},"./thread-context-history":{"types":"./dist/durable/ThreadContextHistory.d.mts","default":"./dist/durable/ThreadContextHistory.mjs"},"./thread-context-history-projection":{"types":"./dist/durable/ThreadContextHistoryProjection.d.mts","default":"./dist/durable/ThreadContextHistoryProjection.mjs"},"./thread-history":{"types":"./dist/engine/ThreadHistory.d.mts","default":"./dist/engine/ThreadHistory.mjs"},"./thread-invariants":{"types":"./dist/durable/ThreadInvariants.d.mts","default":"./dist/durable/ThreadInvariants.mjs"},"./thread-projection":{"types":"./dist/durable/ThreadProjection.d.mts","default":"./dist/durable/ThreadProjection.mjs"},"./thread-projection-maintenance":{"types":"./dist/durable/ThreadProjectionMaintenance.d.mts","default":"./dist/durable/ThreadProjectionMaintenance.mjs"},"./thread-store":{"types":"./dist/durable/ThreadStore.d.mts","default":"./dist/durable/ThreadStore.mjs"},"./tool-broker":{"types":"./dist/engine/ToolBroker.d.mts","default":"./dist/engine/ToolBroker.mjs"},"./tool-discovery":{"types":"./dist/capabilities/ToolDiscovery.d.mts","default":"./dist/capabilities/ToolDiscovery.mjs"},"./tool-exposure":{"types":"./dist/ToolExposure.d.mts","default":"./dist/ToolExposure.mjs"},"./tool-reconciler":{"types":"./dist/durable/ToolReconciler.d.mts","default":"./dist/durable/ToolReconciler.mjs"},"./tool-result":{"types":"./dist/core/ToolResult.d.mts","default":"./dist/core/ToolResult.mjs"},"./usage":{"types":"./dist/core/Usage.d.mts","default":"./dist/core/Usage.mjs"},"./wake-scheduler":{"types":"./dist/durable/WakeScheduler.d.mts","default":"./dist/durable/WakeScheduler.mjs"},"./web-capture":{"types":"./dist/capabilities/WebCapture.d.mts","default":"./dist/capabilities/WebCapture.mjs"},"./web-search":{"types":"./dist/capabilities/WebSearch.d.mts","default":"./dist/capabilities/WebSearch.mjs"},"./worker":{"types":"./dist/core/Worker.d.mts","default":"./dist/core/Worker.mjs"},"./worker-admission":{"types":"./dist/durable/WorkerAdmission.d.mts","default":"./dist/durable/WorkerAdmission.mjs"},"./worker-host":{"types":"./dist/durable/WorkerHost.d.mts","default":"./dist/durable/WorkerHost.mjs"},"./lifecycle-publication":{"types":"./dist/durable/LifecyclePublication.d.mts","default":"./dist/durable/LifecyclePublication.mjs"}},"description":"Effect-native agents, execution, subagents, and sandbox contracts in one tree-shakeable package.","license":"MIT","repository":{"type":"git","url":"git+https://github.com/danieljvdm/effect-agent.git","directory":"packages/effect-agent"},"files":["dist","src"],"type":"module","sideEffects":[],"publishConfig":{"access":"public"},"scripts":{"build":"vp pack","check":"tsc --noEmit -p tsconfig.json","test":"vp test --passWithNoTests"}}
|
|
1
|
+
{"name":"effect-agent","version":"0.1.0-beta.158","devDependencies":{"@effect/platform-node":"4.0.0-rc.117","@effect/vitest":"4.0.0-rc.117","effect":"4.0.0-rc.117","typescript":"7.0.2","vite-plus":"0.3.3"},"peerDependencies":{"effect":"^4.0.0-rc.117"},"exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"./activity-store":{"types":"./dist/durable/ActivityStore.d.mts","default":"./dist/durable/ActivityStore.mjs"},"./admin":{"types":"./dist/durable/Admin.d.mts","default":"./dist/durable/Admin.mjs"},"./agent":{"types":"./dist/core/Agent.d.mts","default":"./dist/core/Agent.mjs"},"./agent-error":{"types":"./dist/core/AgentError.d.mts","default":"./dist/core/AgentError.mjs"},"./agent-policy":{"types":"./dist/core/AgentPolicy.d.mts","default":"./dist/core/AgentPolicy.mjs"},"./agent-registration":{"types":"./dist/durable/AgentRegistration.d.mts","default":"./dist/durable/AgentRegistration.mjs"},"./agent-runtime":{"types":"./dist/engine/AgentRuntime.d.mts","default":"./dist/engine/AgentRuntime.mjs"},"./agent-updates":{"types":"./dist/core/AgentUpdates.d.mts","default":"./dist/core/AgentUpdates.mjs"},"./approval":{"types":"./dist/capabilities/Approval.d.mts","default":"./dist/capabilities/Approval.mjs"},"./browser-use":{"types":"./dist/capabilities/BrowserUse.d.mts","default":"./dist/capabilities/BrowserUse.mjs"},"./budget":{"types":"./dist/capabilities/Budget.d.mts","default":"./dist/capabilities/Budget.mjs"},"./code-executor":{"types":"./dist/sandbox/CodeExecutor.d.mts","default":"./dist/sandbox/CodeExecutor.mjs"},"./code-mode":{"types":"./dist/capabilities/CodeMode.d.mts","default":"./dist/capabilities/CodeMode.mjs"},"./commands":{"types":"./dist/capabilities/Commands.d.mts","default":"./dist/capabilities/Commands.mjs"},"./committed-activity":{"types":"./dist/durable/CommittedActivity.d.mts","default":"./dist/durable/CommittedActivity.mjs"},"./compaction":{"types":"./dist/engine/Compaction.d.mts","default":"./dist/engine/Compaction.mjs"},"./context-compactor":{"types":"./dist/engine/ContextCompactor.d.mts","default":"./dist/engine/ContextCompactor.mjs"},"./context-history":{"types":"./dist/engine/ContextHistory.d.mts","default":"./dist/engine/ContextHistory.mjs"},"./context-tools":{"types":"./dist/capabilities/ContextTools.d.mts","default":"./dist/capabilities/ContextTools.mjs"},"./context-window":{"types":"./dist/engine/ContextWindow.d.mts","default":"./dist/engine/ContextWindow.mjs"},"./digest":{"types":"./dist/durable/Digest.d.mts","default":"./dist/durable/Digest.mjs"},"./durable-agent-runtime":{"types":"./dist/durable/DurableAgentRuntime.d.mts","default":"./dist/durable/DurableAgentRuntime.mjs"},"./durable-failpoint":{"types":"./dist/durable/DurableFailpoint.d.mts","default":"./dist/durable/DurableFailpoint.mjs"},"./durable-step":{"types":"./dist/engine/DurableStep.d.mts","default":"./dist/engine/DurableStep.mjs"},"./event-source":{"types":"./dist/durable/EventSource.d.mts","default":"./dist/durable/EventSource.mjs"},"./failure-diagnostic":{"types":"./dist/core/FailureDiagnostic.d.mts","default":"./dist/core/FailureDiagnostic.mjs"},"./git-hub-workflow-source":{"types":"./dist/durable/GitHubWorkflowSource.d.mts","default":"./dist/durable/GitHubWorkflowSource.mjs"},"./id-generator":{"types":"./dist/core/IdGenerator.d.mts","default":"./dist/core/IdGenerator.mjs"},"./identifiers":{"types":"./dist/core/Identifiers.d.mts","default":"./dist/core/Identifiers.mjs"},"./in-memory":{"types":"./dist/InMemory.d.mts","default":"./dist/InMemory.mjs"},"./interactive-browser":{"types":"./dist/sandbox/InteractiveBrowser.d.mts","default":"./dist/sandbox/InteractiveBrowser.mjs"},"./mcp":{"types":"./dist/capabilities/Mcp.d.mts","default":"./dist/capabilities/Mcp.mjs"},"./mcp-client":{"types":"./dist/capabilities/McpClient.d.mts","default":"./dist/capabilities/McpClient.mjs"},"./memory":{"types":"./dist/core/Memory.d.mts","default":"./dist/core/Memory.mjs"},"./memory-namespace":{"types":"./dist/core/MemoryNamespace.d.mts","default":"./dist/core/MemoryNamespace.mjs"},"./memory-notes":{"types":"./dist/capabilities/MemoryNotes.d.mts","default":"./dist/capabilities/MemoryNotes.mjs"},"./memory-reference":{"types":"./dist/core/MemoryReference.d.mts","default":"./dist/core/MemoryReference.mjs"},"./memory-revalidation":{"types":"./dist/core/MemoryRevalidation.d.mts","default":"./dist/core/MemoryRevalidation.mjs"},"./memory-store":{"types":"./dist/core/MemoryStore.d.mts","default":"./dist/core/MemoryStore.mjs"},"./message-delivery":{"types":"./dist/durable/MessageDelivery.d.mts","default":"./dist/durable/MessageDelivery.mjs"},"./messaging":{"types":"./dist/capabilities/Messaging.d.mts","default":"./dist/capabilities/Messaging.mjs"},"./messaging-host":{"types":"./dist/engine/MessagingHost.d.mts","default":"./dist/engine/MessagingHost.mjs"},"./model-context":{"types":"./dist/capabilities/ModelContext.d.mts","default":"./dist/capabilities/ModelContext.mjs"},"./operation-authorizer":{"types":"./dist/durable/OperationAuthorizer.d.mts","default":"./dist/durable/OperationAuthorizer.mjs"},"./output":{"types":"./dist/engine/Output.d.mts","default":"./dist/engine/Output.mjs"},"./page-capture":{"types":"./dist/sandbox/PageCapture.d.mts","default":"./dist/sandbox/PageCapture.mjs"},"./page-crawl":{"types":"./dist/sandbox/PageCrawl.d.mts","default":"./dist/sandbox/PageCrawl.mjs"},"./page-screenshot":{"types":"./dist/sandbox/PageScreenshot.d.mts","default":"./dist/sandbox/PageScreenshot.mjs"},"./persistent-history":{"types":"./dist/durable/PersistentHistory.d.mts","default":"./dist/durable/PersistentHistory.mjs"},"./prepared-input-admission":{"types":"./dist/durable/PreparedInputAdmission.d.mts","default":"./dist/durable/PreparedInputAdmission.mjs"},"./receipt":{"types":"./dist/core/Receipt.d.mts","default":"./dist/core/Receipt.mjs"},"./records":{"types":"./dist/durable/Records.d.mts","default":"./dist/durable/Records.mjs"},"./recovery":{"types":"./dist/durable/Recovery.d.mts","default":"./dist/durable/Recovery.mjs"},"./redaction":{"types":"./dist/capabilities/Redaction.d.mts","default":"./dist/capabilities/Redaction.mjs"},"./remembering":{"types":"./dist/capabilities/Remembering.d.mts","default":"./dist/capabilities/Remembering.mjs"},"./remembering-store":{"types":"./dist/core/RememberingStore.d.mts","default":"./dist/core/RememberingStore.mjs"},"./run-event":{"types":"./dist/core/RunEvent.d.mts","default":"./dist/core/RunEvent.mjs"},"./run-event-sink":{"types":"./dist/engine/RunEventSink.d.mts","default":"./dist/engine/RunEventSink.mjs"},"./run-hooks":{"types":"./dist/capabilities/RunHooks.d.mts","default":"./dist/capabilities/RunHooks.mjs"},"./run-journal":{"types":"./dist/durable/RunJournal.d.mts","default":"./dist/durable/RunJournal.mjs"},"./run-options":{"types":"./dist/engine/RunOptions.d.mts","default":"./dist/engine/RunOptions.mjs"},"./run-policy-usage":{"types":"./dist/core/RunPolicyUsage.d.mts","default":"./dist/core/RunPolicyUsage.mjs"},"./sandbox":{"types":"./dist/sandbox/Sandbox.d.mts","default":"./dist/sandbox/Sandbox.mjs"},"./schedule":{"types":"./dist/durable/Schedule.d.mts","default":"./dist/durable/Schedule.mjs"},"./schedule-transition":{"types":"./dist/durable/ScheduleTransition.d.mts","default":"./dist/durable/ScheduleTransition.mjs"},"./scheduling":{"types":"./dist/durable/Scheduling.d.mts","default":"./dist/durable/Scheduling.mjs"},"./semantic-memory":{"types":"./dist/capabilities/SemanticMemory.d.mts","default":"./dist/capabilities/SemanticMemory.mjs"},"./semantic-memory-index":{"types":"./dist/core/SemanticMemoryIndex.d.mts","default":"./dist/core/SemanticMemoryIndex.mjs"},"./semantic-memory-revalidation":{"types":"./dist/core/SemanticMemoryRevalidation.d.mts","default":"./dist/core/SemanticMemoryRevalidation.mjs"},"./sql-memory-store":{"types":"./dist/durable/SqlMemoryStore.d.mts","default":"./dist/durable/SqlMemoryStore.mjs"},"./subagent":{"types":"./dist/capabilities/Subagent.d.mts","default":"./dist/capabilities/Subagent.mjs"},"./subagent-contract":{"types":"./dist/core/SubagentContract.d.mts","default":"./dist/core/SubagentContract.mjs"},"./subagent-host":{"types":"./dist/engine/SubagentHost.d.mts","default":"./dist/engine/SubagentHost.mjs"},"./subagent-reservations":{"types":"./dist/capabilities/SubagentReservations.d.mts","default":"./dist/capabilities/SubagentReservations.mjs"},"./submission-ledger":{"types":"./dist/durable/SubmissionLedger.d.mts","default":"./dist/durable/SubmissionLedger.mjs"},"./submission-status":{"types":"./dist/durable/SubmissionStatus.d.mts","default":"./dist/durable/SubmissionStatus.mjs"},"./subscription":{"types":"./dist/durable/Subscription.d.mts","default":"./dist/durable/Subscription.mjs"},"./subscription-input":{"types":"./dist/durable/SubscriptionInput.d.mts","default":"./dist/durable/SubscriptionInput.mjs"},"./subscription-tools":{"types":"./dist/durable/SubscriptionTools.d.mts","default":"./dist/durable/SubscriptionTools.mjs"},"./subscription-transition":{"types":"./dist/durable/SubscriptionTransition.d.mts","default":"./dist/durable/SubscriptionTransition.mjs"},"./subscriptions":{"types":"./dist/durable/Subscriptions.d.mts","default":"./dist/durable/Subscriptions.mjs"},"./testing/certification":{"types":"./dist/durable/Certification.d.mts","default":"./dist/durable/Certification.mjs"},"./testing/durable-failpoint-test-control":{"types":"./dist/durable/DurableFailpointTestControl.d.mts","default":"./dist/durable/DurableFailpointTestControl.mjs"},"./testing/message-delivery-store-conformance":{"types":"./dist/durable/MessageDeliveryStoreConformance.d.mts","default":"./dist/durable/MessageDeliveryStoreConformance.mjs"},"./testing/schedule-store-conformance":{"types":"./dist/durable/ScheduleStoreConformance.d.mts","default":"./dist/durable/ScheduleStoreConformance.mjs"},"./testing/submission-ledger-conformance":{"types":"./dist/durable/SubmissionLedgerConformance.d.mts","default":"./dist/durable/SubmissionLedgerConformance.mjs"},"./testing/subscription-store-conformance":{"types":"./dist/durable/SubscriptionStoreConformance.d.mts","default":"./dist/durable/SubscriptionStoreConformance.mjs"},"./testing/thread-store-conformance":{"types":"./dist/durable/ThreadStoreConformance.d.mts","default":"./dist/durable/ThreadStoreConformance.mjs"},"./thread":{"types":"./dist/core/Thread.d.mts","default":"./dist/core/Thread.mjs"},"./thread-context-history":{"types":"./dist/durable/ThreadContextHistory.d.mts","default":"./dist/durable/ThreadContextHistory.mjs"},"./thread-context-history-projection":{"types":"./dist/durable/ThreadContextHistoryProjection.d.mts","default":"./dist/durable/ThreadContextHistoryProjection.mjs"},"./thread-history":{"types":"./dist/engine/ThreadHistory.d.mts","default":"./dist/engine/ThreadHistory.mjs"},"./thread-invariants":{"types":"./dist/durable/ThreadInvariants.d.mts","default":"./dist/durable/ThreadInvariants.mjs"},"./thread-projection":{"types":"./dist/durable/ThreadProjection.d.mts","default":"./dist/durable/ThreadProjection.mjs"},"./thread-projection-maintenance":{"types":"./dist/durable/ThreadProjectionMaintenance.d.mts","default":"./dist/durable/ThreadProjectionMaintenance.mjs"},"./thread-store":{"types":"./dist/durable/ThreadStore.d.mts","default":"./dist/durable/ThreadStore.mjs"},"./tool-broker":{"types":"./dist/engine/ToolBroker.d.mts","default":"./dist/engine/ToolBroker.mjs"},"./tool-discovery":{"types":"./dist/capabilities/ToolDiscovery.d.mts","default":"./dist/capabilities/ToolDiscovery.mjs"},"./tool-exposure":{"types":"./dist/ToolExposure.d.mts","default":"./dist/ToolExposure.mjs"},"./tool-reconciler":{"types":"./dist/durable/ToolReconciler.d.mts","default":"./dist/durable/ToolReconciler.mjs"},"./tool-result":{"types":"./dist/core/ToolResult.d.mts","default":"./dist/core/ToolResult.mjs"},"./usage":{"types":"./dist/core/Usage.d.mts","default":"./dist/core/Usage.mjs"},"./wake-scheduler":{"types":"./dist/durable/WakeScheduler.d.mts","default":"./dist/durable/WakeScheduler.mjs"},"./web-capture":{"types":"./dist/capabilities/WebCapture.d.mts","default":"./dist/capabilities/WebCapture.mjs"},"./web-search":{"types":"./dist/capabilities/WebSearch.d.mts","default":"./dist/capabilities/WebSearch.mjs"},"./worker":{"types":"./dist/core/Worker.d.mts","default":"./dist/core/Worker.mjs"},"./worker-admission":{"types":"./dist/durable/WorkerAdmission.d.mts","default":"./dist/durable/WorkerAdmission.mjs"},"./worker-host":{"types":"./dist/durable/WorkerHost.d.mts","default":"./dist/durable/WorkerHost.mjs"},"./lifecycle-publication":{"types":"./dist/durable/LifecyclePublication.d.mts","default":"./dist/durable/LifecyclePublication.mjs"}},"description":"Effect-native agents, execution, subagents, and sandbox contracts in one tree-shakeable package.","license":"MIT","repository":{"type":"git","url":"git+https://github.com/danieljvdm/effect-agent.git","directory":"packages/effect-agent"},"files":["dist","src"],"type":"module","sideEffects":[],"publishConfig":{"access":"public"},"scripts":{"build":"vp pack","check":"tsc --noEmit -p tsconfig.json","test":"vp test --passWithNoTests"}}
|
|
@@ -167,6 +167,7 @@ import { makeMessagingRuntime } from "./internal/messaging-host.ts";
|
|
|
167
167
|
import * as ThreadInitialization from "./internal/thread-initialization.ts";
|
|
168
168
|
import { makeWorkerRuntime, WorkerInputControl } from "./internal/worker-host.ts";
|
|
169
169
|
import { WorkerRuntime } from "./internal/worker-runtime.ts";
|
|
170
|
+
import { MessageDeliveryStore } from "./MessageDelivery.ts";
|
|
170
171
|
import {
|
|
171
172
|
OperationAuthorizationRequest,
|
|
172
173
|
OperationAuthorizer,
|
|
@@ -1266,6 +1267,7 @@ const make = Effect.fn("DurableAgentRuntime.make")(function* (
|
|
|
1266
1267
|
const ledger = yield* SubmissionLedger;
|
|
1267
1268
|
const submissionScheduling = yield* SubmissionScheduling;
|
|
1268
1269
|
const store = yield* ThreadStore;
|
|
1270
|
+
const deliveries = yield* Effect.serviceOption(MessageDeliveryStore);
|
|
1269
1271
|
|
|
1270
1272
|
// Disposable: canonical tail and owner identify the exact projection, never ownership.
|
|
1271
1273
|
// Retain only the most recent view; persisted checkpoints still govern cold recovery.
|
|
@@ -3112,7 +3114,75 @@ const make = Effect.fn("DurableAgentRuntime.make")(function* (
|
|
|
3112
3114
|
*/
|
|
3113
3115
|
const notifyParentOfChildSettlement = Effect.fn(
|
|
3114
3116
|
"DurableAgentRuntime.notifyParentOfChildSettlement",
|
|
3115
|
-
)(function* (
|
|
3117
|
+
)(function* (
|
|
3118
|
+
submission: SubmissionSnapshot,
|
|
3119
|
+
record: RecordEnvelope,
|
|
3120
|
+
): Effect.fn.Return<void, LedgerError> {
|
|
3121
|
+
const admission = submission.messageAdmission;
|
|
3122
|
+
const worker = submission.workerAdmission;
|
|
3123
|
+
|
|
3124
|
+
const key =
|
|
3125
|
+
admission === undefined
|
|
3126
|
+
? worker === undefined
|
|
3127
|
+
? undefined
|
|
3128
|
+
: {
|
|
3129
|
+
ownerThreadId: worker.origin.source.threadId,
|
|
3130
|
+
messageId: worker.messageId,
|
|
3131
|
+
}
|
|
3132
|
+
: Schema.is(MessageAdmission)(admission)
|
|
3133
|
+
? admission.message
|
|
3134
|
+
: {
|
|
3135
|
+
ownerThreadId:
|
|
3136
|
+
admission._tag === "WorkerCompletion"
|
|
3137
|
+
? admission.report.worker.threadId
|
|
3138
|
+
: admission.worker.threadId,
|
|
3139
|
+
messageId: submission.idempotencyKey,
|
|
3140
|
+
};
|
|
3141
|
+
|
|
3142
|
+
// Commit the destination's exact canonical acknowledgement at the source before
|
|
3143
|
+
// making the ledger terminal. A failed/lost response is replayed during recovery.
|
|
3144
|
+
if (key !== undefined && Option.isSome(deliveries)) {
|
|
3145
|
+
const settled = yield* settlementPayloadFromRecord(record, submission.submissionId);
|
|
3146
|
+
|
|
3147
|
+
yield* deliveries.value
|
|
3148
|
+
.change(key, {
|
|
3149
|
+
_tag: "Complete",
|
|
3150
|
+
nowMillis: yield* Clock.currentTimeMillis,
|
|
3151
|
+
admissionKey: submission.idempotencyKey,
|
|
3152
|
+
inputDigest: submission.inputDigest,
|
|
3153
|
+
receipt: Receipt.make({
|
|
3154
|
+
threadId: submission.threadId,
|
|
3155
|
+
submissionId: submission.submissionId,
|
|
3156
|
+
receiptId: submission.receiptId,
|
|
3157
|
+
queueSequence: submission.queueSequence,
|
|
3158
|
+
}),
|
|
3159
|
+
settlement: Settlement.make({
|
|
3160
|
+
submissionId: settled.submissionId,
|
|
3161
|
+
receiptId: settled.receiptId,
|
|
3162
|
+
settlementId: settled.settlementId,
|
|
3163
|
+
outcome: settled.outcome,
|
|
3164
|
+
settledAt: record.createdAt,
|
|
3165
|
+
...(settled.outcome === "failed" ? { failure: settled.result } : {}),
|
|
3166
|
+
...(settled.usageSummary === undefined ? {} : { usageSummary: settled.usageSummary }),
|
|
3167
|
+
...(settled.runDisposition === undefined
|
|
3168
|
+
? {}
|
|
3169
|
+
: { runDisposition: settled.runDisposition }),
|
|
3170
|
+
}),
|
|
3171
|
+
})
|
|
3172
|
+
.pipe(
|
|
3173
|
+
Effect.catchCause((cause) =>
|
|
3174
|
+
Effect.failCause(
|
|
3175
|
+
Cause.map(cause, (error) =>
|
|
3176
|
+
LedgerError.make({
|
|
3177
|
+
operation: "delivery-completion",
|
|
3178
|
+
message: "Destination acknowledgement remains pending",
|
|
3179
|
+
cause: error,
|
|
3180
|
+
}),
|
|
3181
|
+
),
|
|
3182
|
+
),
|
|
3183
|
+
),
|
|
3184
|
+
);
|
|
3185
|
+
}
|
|
3116
3186
|
if (submission.workerAdmission?.origin.reporting?.mode === "standard")
|
|
3117
3187
|
yield* updateRuntime.repair(submission.threadId).pipe(
|
|
3118
3188
|
Effect.mapError(() =>
|
|
@@ -3227,14 +3297,14 @@ const make = Effect.fn("DurableAgentRuntime.make")(function* (
|
|
|
3227
3297
|
Effect.asVoid,
|
|
3228
3298
|
);
|
|
3229
3299
|
yield* hit("terminalize:after-canonical-append");
|
|
3230
|
-
yield* notifyParentOfChildSettlement(submission);
|
|
3300
|
+
yield* notifyParentOfChildSettlement(submission, record);
|
|
3231
3301
|
|
|
3232
3302
|
const settlement = yield* ledger.finalizeSettlement(
|
|
3233
3303
|
SettlementFinalization.make({ submissionId, settlementId }),
|
|
3234
3304
|
);
|
|
3235
3305
|
|
|
3236
3306
|
yield* wake.notify(submission.threadId);
|
|
3237
|
-
yield* notifyParentOfChildSettlement(submission);
|
|
3307
|
+
yield* notifyParentOfChildSettlement(submission, record);
|
|
3238
3308
|
|
|
3239
3309
|
return settlement;
|
|
3240
3310
|
});
|
|
@@ -3349,7 +3419,7 @@ const make = Effect.fn("DurableAgentRuntime.make")(function* (
|
|
|
3349
3419
|
Effect.asVoid,
|
|
3350
3420
|
);
|
|
3351
3421
|
yield* hit("terminalize:after-canonical-append");
|
|
3352
|
-
yield* notifyParentOfChildSettlement(submission);
|
|
3422
|
+
yield* notifyParentOfChildSettlement(submission, reserved.record);
|
|
3353
3423
|
|
|
3354
3424
|
const settlement = yield* ledger.finalizeSettlement(
|
|
3355
3425
|
SettlementFinalization.make({ submissionId, settlementId }),
|
|
@@ -3358,7 +3428,7 @@ const make = Effect.fn("DurableAgentRuntime.make")(function* (
|
|
|
3358
3428
|
const canonicalSettlement = yield* settlementPayloadFromRecord(reserved.record, submissionId);
|
|
3359
3429
|
|
|
3360
3430
|
yield* wake.notify(submission.threadId);
|
|
3361
|
-
yield* notifyParentOfChildSettlement(submission);
|
|
3431
|
+
yield* notifyParentOfChildSettlement(submission, reserved.record);
|
|
3362
3432
|
yield* settleJoinedSubmissions(ctx, canonicalSettlement);
|
|
3363
3433
|
|
|
3364
3434
|
return materializeSettlement(settlement, reserved.record);
|
|
@@ -3385,7 +3455,7 @@ const make = Effect.fn("DurableAgentRuntime.make")(function* (
|
|
|
3385
3455
|
);
|
|
3386
3456
|
yield* hit("terminalize:after-canonical-append");
|
|
3387
3457
|
}
|
|
3388
|
-
yield* notifyParentOfChildSettlement(submission);
|
|
3458
|
+
yield* notifyParentOfChildSettlement(submission, reservation.record);
|
|
3389
3459
|
|
|
3390
3460
|
const settlement = yield* ledger.finalizeSettlement(
|
|
3391
3461
|
SettlementFinalization.make({
|
|
@@ -3400,7 +3470,7 @@ const make = Effect.fn("DurableAgentRuntime.make")(function* (
|
|
|
3400
3470
|
);
|
|
3401
3471
|
|
|
3402
3472
|
yield* wake.notify(submission.threadId);
|
|
3403
|
-
yield* notifyParentOfChildSettlement(submission);
|
|
3473
|
+
yield* notifyParentOfChildSettlement(submission, reservation.record);
|
|
3404
3474
|
yield* settleJoinedSubmissions(ctx, canonicalSettlement);
|
|
3405
3475
|
|
|
3406
3476
|
return materializeSettlement(settlement, reservation.record);
|
|
@@ -3413,7 +3483,7 @@ const make = Effect.fn("DurableAgentRuntime.make")(function* (
|
|
|
3413
3483
|
): Effect.fn.Return<Settlement, LedgerError | SettlementConflict> {
|
|
3414
3484
|
const canonicalSettlement = yield* settlementPayloadFromRecord(record, submission.submissionId);
|
|
3415
3485
|
|
|
3416
|
-
yield* notifyParentOfChildSettlement(submission);
|
|
3486
|
+
yield* notifyParentOfChildSettlement(submission, record);
|
|
3417
3487
|
|
|
3418
3488
|
const settlement = yield* ledger.finalizeSettlement(
|
|
3419
3489
|
SettlementFinalization.make({
|
|
@@ -3427,7 +3497,7 @@ const make = Effect.fn("DurableAgentRuntime.make")(function* (
|
|
|
3427
3497
|
);
|
|
3428
3498
|
|
|
3429
3499
|
yield* wake.notify(submission.threadId);
|
|
3430
|
-
yield* notifyParentOfChildSettlement(submission);
|
|
3500
|
+
yield* notifyParentOfChildSettlement(submission, record);
|
|
3431
3501
|
|
|
3432
3502
|
return materializeSettlement(settlement, snapshot.reservation?.record);
|
|
3433
3503
|
});
|
|
@@ -14,6 +14,8 @@ import { PreparedInput } from "./Subscription.ts";
|
|
|
14
14
|
|
|
15
15
|
const Positive = Schema.Int.check(Schema.isGreaterThan(0));
|
|
16
16
|
const BoundedName = Schema.String.check(Schema.isMinLength(1), Schema.isMaxLength(256));
|
|
17
|
+
const receiptsEqual = Schema.toEquivalence(Receipt);
|
|
18
|
+
const settlementsEqual = Schema.toEquivalence(Settlement);
|
|
17
19
|
|
|
18
20
|
/** An owner is always a source Thread. Destination admission has its own frozen key. */
|
|
19
21
|
export const MessageDeliveryKey = Schema.Struct({
|
|
@@ -66,7 +68,12 @@ export const defaultMessageDeliveryStoreLimits: MessageDeliveryStoreLimits = {
|
|
|
66
68
|
maxRetainedUpdatesPerOwner: 256,
|
|
67
69
|
};
|
|
68
70
|
|
|
69
|
-
const ParkReason = Schema.Literals([
|
|
71
|
+
const ParkReason = Schema.Literals([
|
|
72
|
+
"exhausted",
|
|
73
|
+
"deadline",
|
|
74
|
+
"status-unavailable",
|
|
75
|
+
"awaiting-settlement",
|
|
76
|
+
]);
|
|
70
77
|
|
|
71
78
|
export const MessageDeliveryRecord = Schema.Struct({
|
|
72
79
|
schemaVersion: Schema.Literal(1),
|
|
@@ -152,7 +159,20 @@ export const MessageDeliveryFailpoint = Context.Reference<{
|
|
|
152
159
|
|
|
153
160
|
const fence = { expectedVersion: Positive, nowMillis: ScheduleInstant };
|
|
154
161
|
|
|
162
|
+
/** Terminal destination evidence, independent of an expiring source transport claim. */
|
|
163
|
+
export const MessageDeliveryCompletion = Schema.Struct({
|
|
164
|
+
receipt: Receipt,
|
|
165
|
+
settlement: Settlement,
|
|
166
|
+
admissionKey: IdempotencyKey,
|
|
167
|
+
inputDigest: Digest,
|
|
168
|
+
});
|
|
169
|
+
|
|
155
170
|
export const MessageDeliveryChange = Schema.Union([
|
|
171
|
+
Schema.Struct({
|
|
172
|
+
_tag: Schema.Literal("Complete"),
|
|
173
|
+
nowMillis: ScheduleInstant,
|
|
174
|
+
...MessageDeliveryCompletion.fields,
|
|
175
|
+
}),
|
|
156
176
|
Schema.Struct({ _tag: Schema.Literal("Claim"), ...fence }),
|
|
157
177
|
Schema.Struct({ _tag: Schema.Literal("Accept"), ...fence, receipt: Receipt }),
|
|
158
178
|
Schema.Struct({ _tag: Schema.Literal("Process"), ...fence, settlement: Settlement }),
|
|
@@ -424,6 +444,34 @@ export const applyMessageDeliveryChange = (
|
|
|
424
444
|
): Result.Result<MessageDeliveryRecord, MessageDeliveryError> => {
|
|
425
445
|
const conflict = () => Result.fail(error("conflict", change._tag));
|
|
426
446
|
|
|
447
|
+
if (change._tag === "Complete") {
|
|
448
|
+
if (
|
|
449
|
+
change.admissionKey !== record.envelope.admissionKey ||
|
|
450
|
+
change.inputDigest !== record.envelope.inputDigest ||
|
|
451
|
+
change.receipt.threadId !== record.envelope.threadId ||
|
|
452
|
+
change.settlement.submissionId !== change.receipt.submissionId ||
|
|
453
|
+
change.settlement.receiptId !== change.receipt.receiptId ||
|
|
454
|
+
(record.receipt !== null && !receiptsEqual(record.receipt, change.receipt))
|
|
455
|
+
)
|
|
456
|
+
return Result.fail(error("corrupt", "completion-identity"));
|
|
457
|
+
if (record.status === "refused") return conflict();
|
|
458
|
+
if (record.status === "processed")
|
|
459
|
+
return record.settlement !== null && settlementsEqual(record.settlement, change.settlement)
|
|
460
|
+
? Result.succeed(record)
|
|
461
|
+
: Result.fail(error("corrupt", "completion-identity"));
|
|
462
|
+
|
|
463
|
+
return Result.succeed({
|
|
464
|
+
...record,
|
|
465
|
+
version: record.version + 1,
|
|
466
|
+
status: "processed",
|
|
467
|
+
receipt: change.receipt,
|
|
468
|
+
settlement: change.settlement,
|
|
469
|
+
leaseUntilMillis: null,
|
|
470
|
+
parkReason: null,
|
|
471
|
+
retry: { ...record.retry, parked: false },
|
|
472
|
+
});
|
|
473
|
+
}
|
|
474
|
+
|
|
427
475
|
if (record.version !== change.expectedVersion) return conflict();
|
|
428
476
|
if (record.status === "processed" || record.status === "refused") return conflict();
|
|
429
477
|
const now = change.nowMillis;
|
|
@@ -540,21 +588,8 @@ export const applyMessageDeliveryChange = (
|
|
|
540
588
|
}
|
|
541
589
|
if (change._tag === "ObservePending") {
|
|
542
590
|
if (record.status !== "accepted") return conflict();
|
|
543
|
-
if (now >= record.deadlineAtMillis) return Result.succeed(parked("deadline"));
|
|
544
591
|
|
|
545
|
-
return Result.succeed(
|
|
546
|
-
...base,
|
|
547
|
-
leaseUntilMillis: null,
|
|
548
|
-
retry: {
|
|
549
|
-
...record.retry,
|
|
550
|
-
automaticAttempts: 0,
|
|
551
|
-
lastFailure: null,
|
|
552
|
-
nextAttemptAtMillis: Math.min(
|
|
553
|
-
now + record.policy.settlementPollMillis,
|
|
554
|
-
record.deadlineAtMillis,
|
|
555
|
-
),
|
|
556
|
-
},
|
|
557
|
-
});
|
|
592
|
+
return Result.succeed(parked("awaiting-settlement"));
|
|
558
593
|
}
|
|
559
594
|
if (change._tag === "Refuse") {
|
|
560
595
|
if (record.status !== "pending") return conflict();
|
|
@@ -700,9 +735,10 @@ export class MessageDeliveryDriver extends Context.Service<
|
|
|
700
735
|
// Digest computation cannot extend this claim's admission authority.
|
|
701
736
|
if (timeout <= 0) return claimed;
|
|
702
737
|
|
|
703
|
-
type WithoutFence<T> =
|
|
704
|
-
|
|
705
|
-
|
|
738
|
+
type WithoutFence<T> =
|
|
739
|
+
T extends Exclude<MessageDeliveryChange, { _tag: "Complete" }>
|
|
740
|
+
? Omit<T, "expectedVersion" | "nowMillis">
|
|
741
|
+
: never;
|
|
706
742
|
|
|
707
743
|
const commit = (change: WithoutFence<MessageDeliveryChange>) =>
|
|
708
744
|
Clock.currentTimeMillis.pipe(
|
|
@@ -722,8 +758,16 @@ export class MessageDeliveryDriver extends Context.Service<
|
|
|
722
758
|
).pipe(Effect.mapError((cause) => error("corrupt", "admission", cause)));
|
|
723
759
|
|
|
724
760
|
yield* failpoint.hit("message-delivery:admission:after");
|
|
725
|
-
if (outcome._tag === "Receipt")
|
|
726
|
-
|
|
761
|
+
if (outcome._tag === "Receipt") {
|
|
762
|
+
const accepted = yield* commit({ _tag: "Accept", receipt: outcome.receipt });
|
|
763
|
+
|
|
764
|
+
return yield* store.change(key, {
|
|
765
|
+
_tag: "Park",
|
|
766
|
+
reason: "awaiting-settlement",
|
|
767
|
+
expectedVersion: accepted.version,
|
|
768
|
+
nowMillis: yield* Clock.currentTimeMillis,
|
|
769
|
+
});
|
|
770
|
+
}
|
|
727
771
|
if (outcome._tag === "Refused")
|
|
728
772
|
return yield* commit({
|
|
729
773
|
_tag: "Refuse",
|
|
@@ -7977,23 +7977,31 @@ const enforceDurationDeadline = <A, E, R>(
|
|
|
7977
7977
|
execution: Stream.Stream<A, E, R>,
|
|
7978
7978
|
durationDeadlineMillis: number,
|
|
7979
7979
|
durationLimit: AgentPolicyError,
|
|
7980
|
-
): Stream.Stream<A, E | AgentPolicyError, R> =>
|
|
7981
|
-
|
|
7982
|
-
Effect.
|
|
7983
|
-
|
|
7984
|
-
|
|
7980
|
+
): Stream.Stream<A, E | AgentPolicyError, R> => {
|
|
7981
|
+
const beforeDeadline = Effect.fnUntraced(function* <Value, Error, Requirements>(
|
|
7982
|
+
effect: Effect.Effect<Value, Error, Requirements>,
|
|
7983
|
+
): Effect.fn.Return<Value, Error | AgentPolicyError, Requirements> {
|
|
7984
|
+
const now = yield* Clock.currentTimeMillis;
|
|
7985
|
+
const remaining = durationDeadlineMillis - now;
|
|
7985
7986
|
|
|
7986
|
-
|
|
7987
|
-
|
|
7988
|
-
|
|
7987
|
+
if (remaining <= 0) {
|
|
7988
|
+
return yield* Effect.fail(durationLimit);
|
|
7989
|
+
}
|
|
7989
7990
|
|
|
7990
|
-
|
|
7991
|
-
|
|
7992
|
-
|
|
7993
|
-
),
|
|
7994
|
-
)
|
|
7995
|
-
|
|
7996
|
-
);
|
|
7991
|
+
return yield* effect.pipe(
|
|
7992
|
+
Effect.timeoutOrElse({
|
|
7993
|
+
duration: remaining,
|
|
7994
|
+
orElse: () => Effect.fail(durationLimit),
|
|
7995
|
+
}),
|
|
7996
|
+
);
|
|
7997
|
+
});
|
|
7998
|
+
|
|
7999
|
+
// Guard acquisition and each pull against the same deadline. A merged timer
|
|
8000
|
+
// stream can deadlock at a cooperative scheduler yield (see #692).
|
|
8001
|
+
return Stream.fromPull(
|
|
8002
|
+
beforeDeadline(Stream.toPull(execution)).pipe(Effect.map(beforeDeadline)),
|
|
8003
|
+
).pipe(Stream.scoped);
|
|
8004
|
+
};
|
|
7997
8005
|
|
|
7998
8006
|
const guardBudgetStream = <A, E, R, HookError, HookRequirements>(
|
|
7999
8007
|
stream: Stream.Stream<A, E, R>,
|