effect-agent 0.1.0-beta.160 → 0.1.0-beta.162
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/{Admin-Dirux8PR.d.mts → Admin-Vhz6NdaH.d.mts} +10 -2
- package/dist/{DurableAgentRuntime-pr7cCaZw.mjs → DurableAgentRuntime-BpB5rBcu.mjs} +41 -35
- package/dist/DurableAgentRuntime-BpB5rBcu.mjs.map +1 -0
- package/dist/{EventSource-DOXB0RJR.d.mts → EventSource-CtS0RBM7.d.mts} +2 -2
- package/dist/{PreparedInputAdmission-B7r401xJ.d.mts → PreparedInputAdmission-CS_zlCvD.d.mts} +3 -3
- package/dist/{Subscription-B3ScCBaN.d.mts → Subscription-nbSNY6Hs.d.mts} +2 -2
- package/dist/{SubscriptionInput-BP5WVsX_.d.mts → SubscriptionInput-DbXnOMS2.d.mts} +2 -2
- package/dist/durable/Admin.d.mts +1 -1
- package/dist/durable/AgentRegistration.d.mts +1 -1
- package/dist/durable/Certification.d.mts +1 -1
- package/dist/durable/CommittedActivity.d.mts +1 -1
- package/dist/durable/DurableAgentRuntime.d.mts +1 -1
- package/dist/durable/DurableAgentRuntime.mjs +1 -1
- package/dist/durable/EventSource.d.mts +1 -1
- package/dist/durable/GitHubWorkflowSource.d.mts +3 -3
- package/dist/durable/LifecyclePublication.d.mts +1 -1
- package/dist/durable/LifecyclePublication.mjs +25 -16
- package/dist/durable/LifecyclePublication.mjs.map +1 -1
- package/dist/durable/MessageDelivery.d.mts +3 -3
- package/dist/durable/MessageDeliveryStoreConformance.d.mts +1 -1
- package/dist/durable/PersistentHistory.d.mts +1 -1
- package/dist/durable/PreparedInputAdmission.d.mts +1 -1
- package/dist/durable/Recovery.d.mts +1 -1
- package/dist/durable/RunJournal.d.mts +1 -1
- package/dist/durable/Scheduling.d.mts +1 -1
- package/dist/durable/SubmissionLedger.d.mts +1 -1
- package/dist/durable/SubmissionLedgerConformance.d.mts +1 -1
- package/dist/durable/SubmissionStatus.d.mts +1 -1
- package/dist/durable/Subscription.d.mts +1 -1
- package/dist/durable/SubscriptionInput.d.mts +1 -1
- package/dist/durable/SubscriptionStoreConformance.d.mts +1 -1
- package/dist/durable/SubscriptionTools.d.mts +2 -2
- package/dist/durable/SubscriptionTransition.d.mts +1 -1
- package/dist/durable/Subscriptions.d.mts +5 -5
- package/dist/durable/ThreadContextHistory.d.mts +1 -1
- package/dist/durable/ThreadInvariants.d.mts +1 -1
- package/dist/durable/ThreadProjectionMaintenance.d.mts +1 -1
- package/dist/durable/ThreadStore.d.mts +1 -1
- package/dist/durable/ThreadStoreConformance.d.mts +1 -1
- package/dist/durable/WorkerAdmission.d.mts +1 -1
- package/dist/durable/WorkerHost.d.mts +1 -1
- package/dist/index.d.mts +5 -5
- package/dist/index.mjs +1 -1
- package/package.json +1 -1
- package/src/durable/DurableAgentRuntime.ts +63 -50
- package/src/durable/LifecyclePublication.ts +52 -29
- package/src/durable/internal/journal-checkpoint.ts +8 -7
- package/dist/DurableAgentRuntime-pr7cCaZw.mjs.map +0 -1
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"effect-agent","version":"0.1.0-beta.160","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.162","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"}}
|
|
@@ -1670,7 +1670,7 @@ const make = Effect.fn("DurableAgentRuntime.make")(function* (
|
|
|
1670
1670
|
submissionId: SubmissionId,
|
|
1671
1671
|
): boolean => {
|
|
1672
1672
|
const runId = runIdForSubmission(submissionId);
|
|
1673
|
-
const certificate = makeThreadContextCertificate();
|
|
1673
|
+
const certificate = makeThreadContextCertificate(runId.length);
|
|
1674
1674
|
|
|
1675
1675
|
for (const entry of records) {
|
|
1676
1676
|
const { payload, recordId } = entry.record;
|
|
@@ -1727,7 +1727,7 @@ const make = Effect.fn("DurableAgentRuntime.make")(function* (
|
|
|
1727
1727
|
if (
|
|
1728
1728
|
state.context !== undefined &&
|
|
1729
1729
|
submissionId !== undefined &&
|
|
1730
|
-
|
|
1730
|
+
submissionId.length === state.submissionId.length &&
|
|
1731
1731
|
(journalOwner === undefined || journalOwner === runIdForSubmission(submissionId))
|
|
1732
1732
|
) {
|
|
1733
1733
|
const runId = runIdForSubmission(submissionId);
|
|
@@ -1804,33 +1804,33 @@ const make = Effect.fn("DurableAgentRuntime.make")(function* (
|
|
|
1804
1804
|
return { canonical: Stream.fromIterable([...state.records, ...suffix]), seed: state.seed };
|
|
1805
1805
|
});
|
|
1806
1806
|
|
|
1807
|
+
const encodeRecoveryCheckpoint = Effect.fnUntraced(function* (
|
|
1808
|
+
state: RecoveryCheckpointState,
|
|
1809
|
+
): Effect.fn.Return<Option.Option<PersistedJson>, DurableWorkerFailure> {
|
|
1810
|
+
const encoded = yield* Schema.encodeEffect(RecoveryCheckpointState)(state).pipe(Effect.option);
|
|
1811
|
+
|
|
1812
|
+
if (Option.isNone(encoded)) return Option.none();
|
|
1813
|
+
const digest = yield* withCrypto(digestJson(encoded.value));
|
|
1814
|
+
|
|
1815
|
+
// Serialization removes shared in-memory references before applying persisted JSON bounds.
|
|
1816
|
+
return yield* Schema.encodeEffect(Schema.fromJsonString(RecoveryCheckpointContents))(
|
|
1817
|
+
RecoveryCheckpointContents.make({ state, digest }),
|
|
1818
|
+
).pipe(
|
|
1819
|
+
Effect.flatMap(Schema.decodeUnknownEffect(Schema.fromJsonString(PersistedJson))),
|
|
1820
|
+
Effect.option,
|
|
1821
|
+
);
|
|
1822
|
+
});
|
|
1823
|
+
|
|
1807
1824
|
const persistRecoveryCheckpoint = Effect.fn("DurableAgentRuntime.persistRecoveryCheckpoint")(
|
|
1808
1825
|
function* (
|
|
1809
1826
|
ctx: AttemptAppendContext,
|
|
1810
1827
|
submission: SubmissionSnapshot,
|
|
1811
|
-
|
|
1828
|
+
contents: PersistedJson,
|
|
1812
1829
|
tail: { readonly sequence: CanonicalSequence; readonly digest: Digest },
|
|
1813
1830
|
createdAt: DateTime.Utc,
|
|
1814
1831
|
): Effect.fn.Return<void, DurableWorkerFailure> {
|
|
1815
1832
|
if (store.recoveryCheckpoints === undefined) return;
|
|
1816
1833
|
|
|
1817
|
-
const encoded = yield* Schema.encodeEffect(RecoveryCheckpointState)(state).pipe(
|
|
1818
|
-
Effect.option,
|
|
1819
|
-
);
|
|
1820
|
-
|
|
1821
|
-
if (Option.isNone(encoded)) return;
|
|
1822
|
-
const digest = yield* withCrypto(digestJson(encoded.value));
|
|
1823
|
-
|
|
1824
|
-
// Serialization removes shared in-memory references before applying persisted JSON bounds.
|
|
1825
|
-
const contents = yield* Schema.encodeEffect(
|
|
1826
|
-
Schema.fromJsonString(RecoveryCheckpointContents),
|
|
1827
|
-
)(RecoveryCheckpointContents.make({ state, digest })).pipe(
|
|
1828
|
-
Effect.flatMap(Schema.decodeUnknownEffect(Schema.fromJsonString(PersistedJson))),
|
|
1829
|
-
Effect.option,
|
|
1830
|
-
);
|
|
1831
|
-
|
|
1832
|
-
if (Option.isNone(contents)) return;
|
|
1833
|
-
|
|
1834
1834
|
const checkpoint = ThreadCheckpoint.make({
|
|
1835
1835
|
schemaVersion: 1,
|
|
1836
1836
|
threadId: ctx.threadId,
|
|
@@ -1840,7 +1840,7 @@ const make = Effect.fn("DurableAgentRuntime.make")(function* (
|
|
|
1840
1840
|
agentDefinitionDigest: submission.agentDigests.agent,
|
|
1841
1841
|
modelDigest: submission.agentDigests.model,
|
|
1842
1842
|
toolDigest: submission.agentDigests.tools,
|
|
1843
|
-
state: contents
|
|
1843
|
+
state: contents,
|
|
1844
1844
|
createdAt,
|
|
1845
1845
|
});
|
|
1846
1846
|
|
|
@@ -1890,7 +1890,11 @@ const make = Effect.fn("DurableAgentRuntime.make")(function* (
|
|
|
1890
1890
|
|
|
1891
1891
|
if (projection === undefined) {
|
|
1892
1892
|
const source = canonicalRange(ctx.threadId, tail.sequence);
|
|
1893
|
-
|
|
1893
|
+
|
|
1894
|
+
const certificate = makeThreadContextCertificate(
|
|
1895
|
+
runIdForSubmission(submission.submissionId).length,
|
|
1896
|
+
);
|
|
1897
|
+
|
|
1894
1898
|
const metadata = makeJournalMetadata(undefined);
|
|
1895
1899
|
const retained: Array<CanonicalRecordEnvelope> = [];
|
|
1896
1900
|
|
|
@@ -1920,9 +1924,23 @@ const make = Effect.fn("DurableAgentRuntime.make")(function* (
|
|
|
1920
1924
|
);
|
|
1921
1925
|
|
|
1922
1926
|
if (Option.isNone(prompt)) return;
|
|
1923
|
-
|
|
1924
|
-
|
|
1925
|
-
|
|
1927
|
+
|
|
1928
|
+
const contextState = RecoveryCheckpointState.make({
|
|
1929
|
+
schemaVersion: 2,
|
|
1930
|
+
policyAccountingVersion: 1,
|
|
1931
|
+
submissionId: submission.submissionId,
|
|
1932
|
+
submissionIds: [submission.submissionId],
|
|
1933
|
+
context: ThreadContextCheckpoint.make({
|
|
1934
|
+
throughSequence: tail.sequence,
|
|
1935
|
+
prompt: prompt.value,
|
|
1936
|
+
...(projection.contextWindowId === undefined
|
|
1937
|
+
? {}
|
|
1938
|
+
: { contextWindowId: projection.contextWindowId }),
|
|
1939
|
+
}),
|
|
1940
|
+
records: identities,
|
|
1941
|
+
});
|
|
1942
|
+
|
|
1943
|
+
let state = contextState;
|
|
1926
1944
|
|
|
1927
1945
|
if (
|
|
1928
1946
|
previous.state.submissionId === submission.submissionId &&
|
|
@@ -1934,33 +1952,24 @@ const make = Effect.fn("DurableAgentRuntime.make")(function* (
|
|
|
1934
1952
|
);
|
|
1935
1953
|
|
|
1936
1954
|
if (checkpointSuffixCompatible(previous.state.seed, suffix, previous.state.records)) {
|
|
1937
|
-
|
|
1938
|
-
|
|
1939
|
-
|
|
1955
|
+
state = RecoveryCheckpointState.make({
|
|
1956
|
+
...contextState,
|
|
1957
|
+
seed: previous.state.seed,
|
|
1958
|
+
records: [...previous.state.records, ...suffix],
|
|
1959
|
+
submissionIds: previous.state.submissionIds,
|
|
1960
|
+
});
|
|
1940
1961
|
}
|
|
1941
1962
|
}
|
|
1942
1963
|
|
|
1943
|
-
yield*
|
|
1944
|
-
|
|
1945
|
-
|
|
1946
|
-
|
|
1947
|
-
|
|
1948
|
-
|
|
1949
|
-
|
|
1950
|
-
|
|
1951
|
-
|
|
1952
|
-
context: ThreadContextCheckpoint.make({
|
|
1953
|
-
throughSequence: tail.sequence,
|
|
1954
|
-
prompt: prompt.value,
|
|
1955
|
-
...(projection.contextWindowId === undefined
|
|
1956
|
-
? {}
|
|
1957
|
-
: { contextWindowId: projection.contextWindowId }),
|
|
1958
|
-
}),
|
|
1959
|
-
records,
|
|
1960
|
-
}),
|
|
1961
|
-
tail,
|
|
1962
|
-
yield* DateTime.now,
|
|
1963
|
-
);
|
|
1964
|
+
let contents = yield* encodeRecoveryCheckpoint(state);
|
|
1965
|
+
|
|
1966
|
+
// Prefer retaining same-Run recovery, but keep eligible Thread context when the combined
|
|
1967
|
+
// cache exceeds bounds. That Run can still recover from its unchanged canonical history.
|
|
1968
|
+
if (Option.isNone(contents) && state.seed !== undefined)
|
|
1969
|
+
contents = yield* encodeRecoveryCheckpoint(contextState);
|
|
1970
|
+
if (Option.isNone(contents)) return;
|
|
1971
|
+
|
|
1972
|
+
yield* persistRecoveryCheckpoint(ctx, submission, contents.value, tail, yield* DateTime.now);
|
|
1964
1973
|
});
|
|
1965
1974
|
|
|
1966
1975
|
const readAllTolerant = Effect.fn("DurableAgentRuntime.readAllTolerant")(
|
|
@@ -5183,10 +5192,14 @@ const make = Effect.fn("DurableAgentRuntime.make")(function* (
|
|
|
5183
5192
|
)
|
|
5184
5193
|
return;
|
|
5185
5194
|
|
|
5195
|
+
const contents = yield* encodeRecoveryCheckpoint(validated.value);
|
|
5196
|
+
|
|
5197
|
+
if (Option.isNone(contents)) return;
|
|
5198
|
+
|
|
5186
5199
|
yield* persistRecoveryCheckpoint(
|
|
5187
5200
|
ctx,
|
|
5188
5201
|
submission,
|
|
5189
|
-
|
|
5202
|
+
contents.value,
|
|
5190
5203
|
tail,
|
|
5191
5204
|
replacement.record.createdAt,
|
|
5192
5205
|
);
|
|
@@ -158,6 +158,14 @@ export interface LifecyclePublicationStorage {
|
|
|
158
158
|
readonly acknowledge: (
|
|
159
159
|
publications: LifecyclePublicationBatch,
|
|
160
160
|
) => Effect.Effect<void, LifecyclePublicationError>;
|
|
161
|
+
/** Optional atomic acknowledgement of up to 100 successfully published owner batches.
|
|
162
|
+
* Validate every exact batch before consuming any debt. Empty waves succeed without writes.
|
|
163
|
+
* Wrappers that validate acknowledgement authority must wrap this method too.
|
|
164
|
+
* Custom services may omit this; drains then acknowledge each batch immediately.
|
|
165
|
+
*/
|
|
166
|
+
readonly acknowledgeMany?: (
|
|
167
|
+
batches: ReadonlyArray<LifecyclePublicationBatch>,
|
|
168
|
+
) => Effect.Effect<void, LifecyclePublicationError>;
|
|
161
169
|
/**
|
|
162
170
|
* Claim a due owner batch and persist its retry before dispatch. Eight automatic attempts;
|
|
163
171
|
* 1s exponential backoff capped at 60s, after the dispatch timeout. The final attempt parks
|
|
@@ -265,7 +273,9 @@ const withSource = Effect.fn("LifecyclePublication.withSource")(
|
|
|
265
273
|
* One finite wave for the host's existing maintenance coordinator. Persist the next deadline
|
|
266
274
|
* before dispatch, so interruption and process loss retain the same facts without another timer.
|
|
267
275
|
* Finish independent owner batches before surfacing failures; interruption stops the wave.
|
|
268
|
-
* Acknowledgements are exact and idempotent.
|
|
276
|
+
* Acknowledgements are exact and idempotent. An optional storage wave acknowledgement commits
|
|
277
|
+
* completed batches in groups of up to 100, including when a later dispatch is interrupted. No producer or
|
|
278
|
+
* external Tool is re-executed here.
|
|
269
279
|
*/
|
|
270
280
|
export const drainLifecyclePublications = Effect.fn("LifecyclePublication.drain")(function* (
|
|
271
281
|
storage: LifecyclePublicationStorage,
|
|
@@ -275,37 +285,50 @@ export const drainLifecyclePublications = Effect.fn("LifecyclePublication.drain"
|
|
|
275
285
|
) {
|
|
276
286
|
const handler = yield* LifecyclePublicationHandler;
|
|
277
287
|
const pending = yield* storage.pending(yield* Clock.currentTimeMillis, limit, options);
|
|
278
|
-
|
|
288
|
+
const acknowledgeMany = storage.acknowledgeMany;
|
|
289
|
+
const published: Array<LifecyclePublicationBatch> = [];
|
|
279
290
|
let failures: Cause.Cause<LifecyclePublicationError> = Cause.empty;
|
|
280
291
|
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
Effect.
|
|
286
|
-
|
|
292
|
+
return yield* Effect.gen(function* () {
|
|
293
|
+
for (const batch of pending) {
|
|
294
|
+
yield* Effect.gen(function* () {
|
|
295
|
+
if (!(yield* storage.claim(batch, yield* Clock.currentTimeMillis, timeoutMillis))) return;
|
|
296
|
+
yield* Effect.scoped(
|
|
297
|
+
Effect.gen(function* () {
|
|
298
|
+
const publications = yield* Effect.forEach(batch, withSource);
|
|
287
299
|
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
300
|
+
yield* handler.publish(publications);
|
|
301
|
+
}),
|
|
302
|
+
).pipe(
|
|
303
|
+
Effect.timeoutOrElse({
|
|
304
|
+
duration: timeoutMillis,
|
|
305
|
+
orElse: () => LifecyclePublicationError.make({ reason: "unavailable" }),
|
|
306
|
+
}),
|
|
307
|
+
);
|
|
308
|
+
if (acknowledgeMany === undefined) yield* storage.acknowledge(batch);
|
|
309
|
+
else published.push(batch);
|
|
310
|
+
}).pipe(
|
|
311
|
+
Effect.catchCauseIf(
|
|
312
|
+
(cause) => !Cause.hasInterrupts(cause),
|
|
313
|
+
(cause) => {
|
|
314
|
+
failures = Cause.combine(failures, cause);
|
|
302
315
|
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
316
|
+
return Effect.void;
|
|
317
|
+
},
|
|
318
|
+
),
|
|
319
|
+
);
|
|
320
|
+
}
|
|
321
|
+
if (failures.reasons.length > 0) return yield* Effect.failCause(failures);
|
|
309
322
|
|
|
310
|
-
|
|
323
|
+
return pending.length;
|
|
324
|
+
}).pipe(
|
|
325
|
+
Effect.onExit(() =>
|
|
326
|
+
acknowledgeMany === undefined || published.length === 0
|
|
327
|
+
? Effect.void
|
|
328
|
+
: Effect.gen(function* () {
|
|
329
|
+
for (let offset = 0; offset < published.length; offset += 100)
|
|
330
|
+
yield* acknowledgeMany(published.slice(offset, offset + 100));
|
|
331
|
+
}),
|
|
332
|
+
),
|
|
333
|
+
);
|
|
311
334
|
});
|
|
@@ -66,16 +66,17 @@ export class RecoveryCheckpointContents extends Schema.Class<RecoveryCheckpointC
|
|
|
66
66
|
digest: Digest,
|
|
67
67
|
}) {}
|
|
68
68
|
|
|
69
|
-
export const RECOVERY_ENGINE_VERSION = "effect-agent/recovery@
|
|
69
|
+
export const RECOVERY_ENGINE_VERSION = "effect-agent/recovery@4";
|
|
70
70
|
|
|
71
71
|
/**
|
|
72
72
|
* Prove that indexed original-input absence also means absent prefix Run/control evidence.
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
73
|
+
* A certificate covers only Run IDs with the given length. Every possible control marker for
|
|
74
|
+
* those IDs is exactly :<run-id>:, including markers nested inside opaque IDs. Cache consumers
|
|
75
|
+
* must have the checkpoint owner's ID length; shorter/longer aliases require full replay.
|
|
76
|
+
* Parsing here can only decline caching; it never supplies an execution identity.
|
|
76
77
|
* The temporary anchor set is discarded after certification, not persisted with the context.
|
|
77
78
|
*/
|
|
78
|
-
export const makeThreadContextCertificate = () => {
|
|
79
|
+
export const makeThreadContextCertificate = (runIdLength: number) => {
|
|
79
80
|
const anchored = new Set<string>();
|
|
80
81
|
let valid = true;
|
|
81
82
|
|
|
@@ -99,9 +100,9 @@ export const makeThreadContextCertificate = () => {
|
|
|
99
100
|
start !== -1;
|
|
100
101
|
start = record.recordId.indexOf(":run:", start + 1)
|
|
101
102
|
) {
|
|
102
|
-
const end =
|
|
103
|
+
const end = start + 1 + runIdLength;
|
|
103
104
|
|
|
104
|
-
if (end
|
|
105
|
+
if (record.recordId[end] === ":" && !anchored.has(record.recordId.slice(start + 1, end))) {
|
|
105
106
|
valid = false;
|
|
106
107
|
|
|
107
108
|
return;
|