@yielded/agent 0.1.0-beta.173 → 0.1.0-beta.175
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-BX9ns28E.d.mts → Admin-Qa3I1oA5.d.mts} +61 -21
- package/dist/{Agent-9aBoIi74.d.mts → Agent-B39jRnFv.d.mts} +2 -2
- package/dist/{Agent-0WvBWWbM.mjs → Agent-BiRbr73L.mjs} +7 -6
- package/dist/Agent-BiRbr73L.mjs.map +1 -0
- package/dist/{AgentRuntime-BfP14534.d.mts → AgentRuntime-CHDyRbSf.d.mts} +12 -12
- package/dist/{AgentRuntime-CQ-qcETl.mjs → AgentRuntime-DaDKMasp.mjs} +290 -273
- package/dist/AgentRuntime-DaDKMasp.mjs.map +1 -0
- package/dist/{Digest-DCuPlhNk.mjs → Digest-C3EODOee.mjs} +42 -15
- package/dist/Digest-C3EODOee.mjs.map +1 -0
- package/dist/{DurableAgentRuntime-BAmSkWYr.mjs → DurableAgentRuntime-CPlw5_7e.mjs} +1557 -1458
- package/dist/DurableAgentRuntime-CPlw5_7e.mjs.map +1 -0
- package/dist/{EventSource-BwliwQz9.d.mts → EventSource-BTu68yDW.d.mts} +2 -2
- package/dist/InMemory.d.mts +2 -2
- package/dist/{MessageDelivery-B943ebI_.d.mts → MessageDelivery-DjAZJ4Fd.d.mts} +42 -42
- package/dist/{Messaging-C_6OOg_s.d.mts → Messaging-SVu6rWV8.d.mts} +12 -6
- package/dist/{MessagingHost-B8oKM7AC.d.mts → MessagingHost-C6SOAcoG.d.mts} +2 -2
- package/dist/{MessagingHost-CRUK4JBi.mjs → MessagingHost-CZCyrnvJ.mjs} +27 -26
- package/dist/MessagingHost-CZCyrnvJ.mjs.map +1 -0
- package/dist/{Output-Dsx6k52t.d.mts → Output-CRamN1Fy.d.mts} +2 -2
- package/dist/{PreparedInputAdmission-CxSJSiTl.d.mts → PreparedInputAdmission-wgY4JMZY.d.mts} +3 -3
- package/dist/{Records-BiuJDWNe.mjs → Records-DzL4Kbtw.mjs} +2 -2
- package/dist/{Records-BiuJDWNe.mjs.map → Records-DzL4Kbtw.mjs.map} +1 -1
- package/dist/{RunContinuation-FHM7XPjq.d.mts → RunContinuation-3jB5pULC.d.mts} +13 -7
- package/dist/{RunContinuation-DHYNAQFi.mjs → RunContinuation-BiyKJK32.mjs} +173 -82
- package/dist/RunContinuation-BiyKJK32.mjs.map +1 -0
- package/dist/{RunJournal-kfKVxJj7.mjs → RunJournal-CPMKcfd0.mjs} +106 -73
- package/dist/RunJournal-CPMKcfd0.mjs.map +1 -0
- package/dist/{RunOptions-D8zxFIrZ.d.mts → RunOptions-Be77lKVZ.d.mts} +2 -2
- package/dist/{RunStorage-uqPxps09.mjs → RunStorage-CzutHJBE.mjs} +10 -6
- package/dist/RunStorage-CzutHJBE.mjs.map +1 -0
- package/dist/{Scheduling-CVyfXlBR.mjs → Scheduling-07_dsGED.mjs} +12 -12
- package/dist/Scheduling-07_dsGED.mjs.map +1 -0
- package/dist/{Subagent-vpffemql.mjs → Subagent-CexndZSp.mjs} +53 -40
- package/dist/Subagent-CexndZSp.mjs.map +1 -0
- package/dist/{Subagent-E6tvd7-k.d.mts → Subagent-xhN_aD1r.d.mts} +20 -9
- package/dist/{SubagentHost-B6w2m-SI.d.mts → SubagentHost-D1xBgn9g.d.mts} +2 -2
- package/dist/{Subscription-DONig54Q.d.mts → Subscription-DmIHlOJK.d.mts} +2 -2
- package/dist/{SubscriptionInput-mJIRxWJM.d.mts → SubscriptionInput-DgcQhvbe.d.mts} +2 -2
- package/dist/{Thread-dk-QiNml.d.mts → Thread-DzdJAY4J.d.mts} +4 -3
- package/dist/{ThreadHistory-ByxS8HU1.d.mts → ThreadHistory-KPPBJLJb.d.mts} +12 -2
- package/dist/{ThreadImport-DckUMEqJ.mjs → ThreadImport-CjlG57vH.mjs} +9 -9
- package/dist/ThreadImport-CjlG57vH.mjs.map +1 -0
- package/dist/{ThreadImport-DpHxjBrA.d.mts → ThreadImport-DP-vOk2F.d.mts} +5 -5
- package/dist/{ThreadStore-CEekRa80.mjs → ThreadStore-EuUilthA.mjs} +162 -85
- package/dist/ThreadStore-EuUilthA.mjs.map +1 -0
- package/dist/{ThreadTransfer-B4gTQLIl.mjs → ThreadTransfer-DB_zsrtJ.mjs} +4 -4
- package/dist/{ThreadTransfer-B4gTQLIl.mjs.map → ThreadTransfer-DB_zsrtJ.mjs.map} +1 -1
- package/dist/{WorkerAdmission-DFVbbVh2.mjs → WorkerAdmission-eBeXt_mu.mjs} +5 -5
- package/dist/{WorkerAdmission-DFVbbVh2.mjs.map → WorkerAdmission-eBeXt_mu.mjs.map} +1 -1
- package/dist/{agent-registration-ByMZ_cK5.mjs → agent-registration-a6QYaG3h.mjs} +70 -57
- package/dist/agent-registration-a6QYaG3h.mjs.map +1 -0
- package/dist/capabilities/Approval.mjs +2 -2
- package/dist/capabilities/Approval.mjs.map +1 -1
- package/dist/capabilities/BrowserUse.d.mts +102 -1867
- package/dist/capabilities/BrowserUse.mjs +74 -798
- package/dist/capabilities/BrowserUse.mjs.map +1 -1
- package/dist/capabilities/Budget.mjs +3 -1
- package/dist/capabilities/Budget.mjs.map +1 -1
- package/dist/capabilities/CodeMode.d.mts +1 -1
- package/dist/capabilities/CodeMode.mjs +16 -9
- package/dist/capabilities/CodeMode.mjs.map +1 -1
- package/dist/capabilities/Commands.d.mts +1 -1
- package/dist/capabilities/McpClient.mjs +1 -1
- package/dist/capabilities/McpClient.mjs.map +1 -1
- package/dist/capabilities/Messaging.d.mts +1 -1
- package/dist/capabilities/Messaging.mjs +5 -5
- package/dist/capabilities/Messaging.mjs.map +1 -1
- package/dist/capabilities/ModelContext.d.mts +1 -1
- package/dist/capabilities/ModelContext.mjs +7 -5
- package/dist/capabilities/ModelContext.mjs.map +1 -1
- package/dist/capabilities/Redaction.mjs +49 -19
- package/dist/capabilities/Redaction.mjs.map +1 -1
- package/dist/capabilities/RunHooks.d.mts +2 -2
- package/dist/capabilities/RunHooks.mjs +1 -1
- package/dist/capabilities/RunHooks.mjs.map +1 -1
- package/dist/capabilities/Subagent.d.mts +1 -1
- package/dist/capabilities/Subagent.mjs +1 -1
- package/dist/capabilities/SubagentReservations.mjs +3 -1
- package/dist/capabilities/SubagentReservations.mjs.map +1 -1
- package/dist/capabilities/WebCapture.mjs.map +1 -1
- package/dist/capabilities/WebSearch.mjs +7 -7
- package/dist/capabilities/WebSearch.mjs.map +1 -1
- package/dist/core/Agent.d.mts +1 -1
- package/dist/core/Agent.mjs +1 -1
- package/dist/core/AgentUpdates.mjs +8 -8
- package/dist/core/AgentUpdates.mjs.map +1 -1
- package/dist/core/Thread.d.mts +2 -2
- package/dist/core/Thread.mjs +6 -4
- package/dist/core/Thread.mjs.map +1 -1
- package/dist/core/Usage.mjs +2 -2
- package/dist/core/Usage.mjs.map +1 -1
- package/dist/durable/ActivityStore.mjs +1 -1
- package/dist/durable/Admin.d.mts +1 -1
- package/dist/durable/Admin.mjs +1 -1
- package/dist/durable/AgentRegistration.d.mts +1 -1
- package/dist/durable/AgentRegistration.mjs +1 -1
- package/dist/durable/Certification.d.mts +1 -1
- package/dist/durable/CommittedActivity.d.mts +1 -1
- package/dist/durable/CommittedActivity.mjs +3 -3
- package/dist/durable/Digest.mjs +1 -1
- package/dist/durable/DurableAgentRuntime.d.mts +1 -1
- package/dist/durable/DurableAgentRuntime.mjs +2 -2
- package/dist/durable/EventSource.d.mts +1 -1
- package/dist/durable/EventSource.mjs +7 -7
- package/dist/durable/EventSource.mjs.map +1 -1
- package/dist/durable/GitHubWorkflowSource.d.mts +3 -3
- package/dist/durable/LifecyclePublication.d.mts +1 -1
- package/dist/durable/LifecyclePublication.mjs +2 -2
- package/dist/durable/MessageDelivery.d.mts +1 -1
- package/dist/durable/MessageDelivery.mjs +2 -2
- package/dist/durable/MessageDeliveryStoreConformance.d.mts +40 -40
- package/dist/durable/MessageDeliveryStoreConformance.mjs +2 -2
- package/dist/durable/PersistentHistory.d.mts +2 -2
- package/dist/durable/PersistentHistory.mjs +4 -4
- package/dist/durable/PreparedInputAdmission.d.mts +1 -1
- package/dist/durable/RecordFormat.mjs +3 -3
- package/dist/durable/RecordFormat.mjs.map +1 -1
- package/dist/durable/Records.mjs +1 -1
- package/dist/durable/Recovery.d.mts +1 -1
- package/dist/durable/Recovery.mjs +1 -1
- package/dist/durable/RunContinuation.d.mts +2 -2
- package/dist/durable/RunContinuation.mjs +3 -3
- package/dist/durable/RunJournal.d.mts +2 -2
- package/dist/durable/RunJournal.mjs +2 -2
- package/dist/durable/RunStorage.d.mts +1 -1
- package/dist/durable/RunStorage.mjs +1 -1
- package/dist/durable/Schedule.mjs +1 -1
- package/dist/durable/ScheduleStoreConformance.mjs +1 -1
- package/dist/durable/ScheduleTransition.mjs +1 -1
- package/dist/durable/Scheduling.d.mts +1 -1
- package/dist/durable/Scheduling.mjs +1 -1
- package/dist/durable/SettlementPublisher.d.mts +1 -1
- package/dist/durable/SettlementPublisher.mjs +3 -3
- package/dist/durable/SqlMemoryStore.mjs +5 -3
- package/dist/durable/SqlMemoryStore.mjs.map +1 -1
- package/dist/durable/SubmissionLedger.d.mts +1 -1
- package/dist/durable/SubmissionLedger.mjs +11 -3
- package/dist/durable/SubmissionLedger.mjs.map +1 -1
- package/dist/durable/SubmissionLedgerConformance.d.mts +1 -1
- package/dist/durable/SubmissionLedgerConformance.mjs +6 -6
- package/dist/durable/SubmissionStatus.d.mts +1 -1
- package/dist/durable/Subscription.d.mts +1 -1
- package/dist/durable/Subscription.mjs +2 -2
- package/dist/durable/SubscriptionInput.d.mts +1 -1
- package/dist/durable/SubscriptionInput.mjs +4 -4
- package/dist/durable/SubscriptionInput.mjs.map +1 -1
- package/dist/durable/SubscriptionStoreConformance.d.mts +1 -1
- package/dist/durable/SubscriptionStoreConformance.mjs +3 -3
- package/dist/durable/SubscriptionStoreConformance.mjs.map +1 -1
- package/dist/durable/SubscriptionTools.d.mts +2 -2
- package/dist/durable/SubscriptionTransition.d.mts +1 -1
- package/dist/durable/SubscriptionTransition.mjs +1 -1
- package/dist/durable/Subscriptions.d.mts +5 -5
- package/dist/durable/Subscriptions.mjs +3 -3
- package/dist/durable/Subscriptions.mjs.map +1 -1
- package/dist/durable/ThreadArchiveRange.d.mts +1 -1
- package/dist/durable/ThreadArchiveRange.mjs +1 -1
- package/dist/durable/ThreadContextHistory.d.mts +1 -1
- package/dist/durable/ThreadContextHistory.mjs +2 -2
- package/dist/durable/ThreadContextHistoryProjection.mjs +1 -1
- package/dist/durable/ThreadImport.d.mts +1 -1
- package/dist/durable/ThreadImport.mjs +1 -1
- package/dist/durable/ThreadInvariants.d.mts +3 -3
- package/dist/durable/ThreadInvariants.mjs +5 -5
- package/dist/durable/ThreadInvariants.mjs.map +1 -1
- package/dist/durable/ThreadProjection.mjs +1 -1
- package/dist/durable/ThreadProjectionMaintenance.d.mts +1 -1
- package/dist/durable/ThreadReader.d.mts +1 -1
- package/dist/durable/ThreadReader.mjs +1 -1
- package/dist/durable/ThreadStore.d.mts +1 -1
- package/dist/durable/ThreadStore.mjs +2 -2
- package/dist/durable/ThreadStoreConformance.d.mts +1 -1
- package/dist/durable/ThreadStoreConformance.mjs +4 -4
- package/dist/durable/ThreadTransfer.d.mts +1 -1
- package/dist/durable/ThreadTransfer.mjs +1 -1
- package/dist/durable/ThreadWork.d.mts +2 -2
- package/dist/durable/ThreadWork.mjs +12 -6
- package/dist/durable/ThreadWork.mjs.map +1 -1
- package/dist/durable/ToolReconciler.mjs +1 -1
- package/dist/durable/WakeScheduler.mjs +23 -39
- package/dist/durable/WakeScheduler.mjs.map +1 -1
- package/dist/durable/WorkerAdmission.d.mts +1 -1
- package/dist/durable/WorkerAdmission.mjs +1 -1
- package/dist/durable/WorkerHost.d.mts +2 -2
- package/dist/engine/AgentRuntime.d.mts +1 -1
- package/dist/engine/AgentRuntime.mjs +1 -1
- package/dist/engine/MessagingHost.d.mts +1 -1
- package/dist/engine/MessagingHost.mjs +1 -1
- package/dist/engine/Output.d.mts +1 -1
- package/dist/engine/Output.mjs +1 -1
- package/dist/engine/RunOptions.d.mts +1 -1
- package/dist/engine/SubagentHost.d.mts +1 -1
- package/dist/engine/ThreadHistory.d.mts +1 -1
- package/dist/engine/ThreadHistory.mjs +3 -2
- package/dist/engine/ThreadHistory.mjs.map +1 -1
- package/dist/index.d.mts +21 -21
- package/dist/index.mjs +16 -16
- package/dist/{output-contract-CMIhu4Cw.mjs → output-contract-DCnLYCdp.mjs} +12 -15
- package/dist/{output-contract-CMIhu4Cw.mjs.map → output-contract-DCnLYCdp.mjs.map} +1 -1
- package/dist/{run-context-reader-OcsZr4bk.d.mts → run-context-reader-DVhJZ1Qe.d.mts} +2 -2
- package/package.json +1 -1
- package/src/capabilities/Approval.ts +58 -60
- package/src/capabilities/BrowserUse.ts +89 -944
- package/src/capabilities/Budget.ts +8 -1
- package/src/capabilities/CodeMode.ts +57 -33
- package/src/capabilities/McpClient.ts +2 -2
- package/src/capabilities/Messaging.ts +51 -55
- package/src/capabilities/ModelContext.ts +5 -2
- package/src/capabilities/Redaction.ts +64 -34
- package/src/capabilities/RunHooks.ts +52 -55
- package/src/capabilities/Subagent.ts +33 -33
- package/src/capabilities/SubagentReservations.ts +9 -1
- package/src/capabilities/WebCapture.ts +6 -0
- package/src/capabilities/WebSearch.ts +10 -7
- package/src/capabilities/internal/subagent-background.ts +202 -158
- package/src/core/Agent.ts +11 -6
- package/src/core/AgentUpdates.ts +8 -8
- package/src/core/Thread.ts +142 -146
- package/src/core/Usage.ts +7 -8
- package/src/core/internal/agent-updates.ts +1 -0
- package/src/durable/DurableAgentRuntime.ts +1024 -829
- package/src/durable/EventSource.ts +15 -9
- package/src/durable/RecordFormat.ts +5 -3
- package/src/durable/RunContinuation.ts +316 -113
- package/src/durable/RunJournal.ts +106 -114
- package/src/durable/RunStorage.ts +129 -124
- package/src/durable/Scheduling.ts +639 -651
- package/src/durable/SqlMemoryStore.ts +8 -6
- package/src/durable/SubmissionLedger.ts +11 -0
- package/src/durable/SubscriptionInput.ts +5 -3
- package/src/durable/SubscriptionStoreConformance.ts +23 -23
- package/src/durable/Subscriptions.ts +18 -19
- package/src/durable/ThreadImport.ts +18 -19
- package/src/durable/ThreadInvariants.ts +2 -1
- package/src/durable/ThreadStore.ts +217 -111
- package/src/durable/ThreadWork.ts +11 -2
- package/src/durable/WakeScheduler.ts +34 -66
- package/src/durable/internal/StorageOwner.ts +10 -4
- package/src/durable/internal/agent-registration.ts +96 -89
- package/src/durable/internal/canonical-json.ts +61 -20
- package/src/durable/internal/prompt-history-cache.ts +13 -4
- package/src/durable/internal/record-encoding.ts +120 -64
- package/src/durable/internal/schedule-time.ts +6 -6
- package/src/durable/internal/usage-totals.ts +35 -0
- package/src/durable/internal/worker-host.ts +69 -74
- package/src/engine/MessagingHost.ts +4 -2
- package/src/engine/ThreadHistory.ts +47 -48
- package/src/engine/internal/agent-runtime.ts +1298 -1217
- package/src/engine/internal/output-contract.ts +15 -15
- package/src/engine/internal/primitive-delta.ts +2 -3
- package/src/engine/internal/provisional-text.ts +12 -10
- package/src/engine/internal/tool-exposure.ts +22 -18
- package/src/engine/internal/tool-telemetry.ts +15 -12
- package/dist/Agent-0WvBWWbM.mjs.map +0 -1
- package/dist/AgentRuntime-CQ-qcETl.mjs.map +0 -1
- package/dist/Digest-DCuPlhNk.mjs.map +0 -1
- package/dist/DurableAgentRuntime-BAmSkWYr.mjs.map +0 -1
- package/dist/MessagingHost-CRUK4JBi.mjs.map +0 -1
- package/dist/RunContinuation-DHYNAQFi.mjs.map +0 -1
- package/dist/RunJournal-kfKVxJj7.mjs.map +0 -1
- package/dist/RunStorage-uqPxps09.mjs.map +0 -1
- package/dist/Scheduling-CVyfXlBR.mjs.map +0 -1
- package/dist/Subagent-vpffemql.mjs.map +0 -1
- package/dist/ThreadImport-DckUMEqJ.mjs.map +0 -1
- package/dist/ThreadStore-CEekRa80.mjs.map +0 -1
- package/dist/agent-registration-ByMZ_cK5.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Subscriptions.mjs","names":[],"sources":["../../src/durable/Subscriptions.ts"],"sourcesContent":["import { Cause, Context, Crypto, DateTime, Effect, Layer, Option, Schema, Semaphore } from \"effect\";\n\nimport { ThreadId } from \"../core/Identifiers.ts\";\nimport { utf8ByteLength } from \"../core/internal/utf8.ts\";\nimport { digestJson } from \"./Digest.ts\";\nimport { EventSources, type NormalizedEvent } from \"./EventSource.ts\";\nimport { admitPreparedInput, PreparedInputAdmission } from \"./PreparedInputAdmission.ts\";\nimport { DefinitionDigests, type PersistedJson } from \"./Records.ts\";\nimport { type ScheduleRetryReason } from \"./Schedule.ts\";\nimport { type AdmissionFence, IdempotencyKey, type Principal } from \"./SubmissionLedger.ts\";\nimport {\n AcceptedEvent,\n type EventAcknowledgement,\n type EventSourceVersion,\n PreparedInput,\n SubscriptionAuthorizer,\n SubscriptionConfiguration,\n SubscriptionDelivery,\n type SubscriptionDeliveryKey,\n type SubscriptionDeliverySnapshot,\n SubscriptionError,\n SubscriptionFailpoint,\n SubscriptionKey,\n SubscriptionLimits,\n type SubscriptionRecord,\n type SubscriptionChange,\n SubscriptionScope,\n type SubscriptionSnapshot,\n SubscriptionSourceError,\n SubscriptionStore,\n type SubscriptionStoreFailure,\n defaultSubscriptionLimits,\n subscriptionDeliveryKeyString,\n} from \"./Subscription.ts\";\nimport { resolveSubscriptionInput, SubscriptionInputBindings } from \"./SubscriptionInput.ts\";\n\nconst now = DateTime.now.pipe(Effect.map(DateTime.toEpochMillis));\n\nconst failure = (reason: SubscriptionError[\"reason\"], code: string) =>\n SubscriptionError.make({ reason, code });\n\nconst bytes = (value: PersistedJson) => utf8ByteLength(JSON.stringify(value));\n\nconst sameSource = (a: EventSourceVersion, b: EventSourceVersion) =>\n a.name === b.name && a.version === b.version;\n\nconst samePartition = Schema.toEquivalence(SubscriptionScope.fields.partition);\n\nconst validate = <S extends Schema.Top>(schema: S, value: unknown) =>\n Schema.decodeUnknownEffect(schema)(value).pipe(\n Effect.mapError(() => failure(\"validation\", \"schema\")),\n );\n\nconst snapshot = (record: SubscriptionRecord, time: number): SubscriptionSnapshot => ({\n key: record.key,\n configurationRevision: record.configurationRevision,\n configurationFingerprint: record.configurationFingerprint,\n ...(record.configuration.admissionGroup === undefined\n ? {}\n : { admissionGroup: record.configuration.admissionGroup }),\n ...(record.configuration.admissionFence === undefined\n ? {}\n : { admissionFence: record.configuration.admissionFence }),\n source: record.configuration.source,\n mode: record.configuration.mode,\n state:\n record.state === \"active\" &&\n record.configuration.expiresAtMillis !== null &&\n record.configuration.expiresAtMillis <= time\n ? \"expired\"\n : record.state,\n createdAtMillis: record.createdAtMillis,\n expiresAtMillis: record.configuration.expiresAtMillis,\n recovery: record.recovery,\n});\n\nconst deliverySnapshot = (\n record: SubscriptionDelivery,\n): typeof SubscriptionDeliverySnapshot.Type => ({\n key: record.key,\n state: record.state,\n configurationRevision: record.configurationRevision,\n ...(record.observeSettlement === undefined\n ? {}\n : { observeSettlement: record.observeSettlement }),\n ...(record.settledAtMillis === undefined ? {} : { settledAtMillis: record.settledAtMillis }),\n retry: record.retry,\n receipt: record.receipt,\n refusal: record.refusal,\n});\n\nexport interface SubscribeOptions {\n readonly subscriptionId: string;\n readonly source: EventSourceVersion;\n readonly parameters: PersistedJson;\n readonly context: PersistedJson;\n readonly mode: \"once\" | \"continuous\";\n readonly expiresAtMillis: number | null;\n readonly destination: SubscriptionConfiguration[\"destination\"];\n readonly deliveryPrincipal: Principal;\n readonly admissionGroup?: string;\n readonly admissionFence?: AdmissionFence;\n readonly agentId: SubscriptionConfiguration[\"agentId\"];\n readonly definitions: SubscriptionConfiguration[\"definitions\"];\n}\n\nexport type SubscriptionFailure = SubscriptionStoreFailure | SubscriptionSourceError;\n\n/** Only management and redacted status. Do not provide intake or drivers to Agent Tools. */\nexport class Subscriptions extends Context.Service<\n Subscriptions,\n {\n readonly recoverSubscription: (\n scope: SubscriptionScope,\n key: SubscriptionKey,\n expectedRevision: number,\n ) => Effect.Effect<SubscriptionSnapshot, SubscriptionStoreFailure>;\n readonly getSubscription: (\n scope: SubscriptionScope,\n key: SubscriptionKey,\n ) => Effect.Effect<SubscriptionSnapshot, SubscriptionError>;\n readonly subscribe: (\n scope: SubscriptionScope,\n options: SubscribeOptions,\n ) => Effect.Effect<SubscriptionSnapshot, SubscriptionFailure>;\n readonly updateSubscription: (\n scope: SubscriptionScope,\n key: SubscriptionKey,\n expectedRevision: number,\n options: Omit<SubscribeOptions, \"subscriptionId\">,\n ) => Effect.Effect<SubscriptionSnapshot, SubscriptionFailure>;\n readonly pauseSubscription: (\n scope: SubscriptionScope,\n key: SubscriptionKey,\n expectedRevision: number,\n ) => Effect.Effect<SubscriptionSnapshot, SubscriptionStoreFailure>;\n readonly resumeSubscription: (\n scope: SubscriptionScope,\n key: SubscriptionKey,\n expectedRevision: number,\n ) => Effect.Effect<SubscriptionSnapshot, SubscriptionStoreFailure>;\n readonly listSubscriptions: (\n scope: SubscriptionScope,\n after?: number,\n limit?: number,\n ) => Effect.Effect<\n { readonly items: ReadonlyArray<SubscriptionSnapshot>; readonly next: number | null },\n SubscriptionError\n >;\n readonly recoverDelivery: (\n scope: SubscriptionScope,\n key: SubscriptionDeliveryKey,\n expectedGeneration: number,\n ) => Effect.Effect<typeof SubscriptionDeliverySnapshot.Type, SubscriptionStoreFailure>;\n readonly cancelSubscription: (\n scope: SubscriptionScope,\n key: SubscriptionKey,\n expectedRevision?: number,\n ) => Effect.Effect<SubscriptionSnapshot, SubscriptionStoreFailure>;\n readonly listDeliveries: (\n scope: SubscriptionScope,\n key: SubscriptionKey,\n after?: string,\n limit?: number,\n ) => Effect.Effect<\n {\n readonly items: ReadonlyArray<typeof SubscriptionDeliverySnapshot.Type>;\n readonly next: string | null;\n },\n SubscriptionError\n >;\n }\n>()(\"@effect-agent/thread/Subscriptions\") {\n static layer(limits: SubscriptionLimits = defaultSubscriptionLimits) {\n return Layer.effect(Subscriptions, makeManagement(limits));\n }\n}\n\n/** Trusted intake acknowledges retained routing work, never a Thread Submission Receipt. */\nexport class SubscriptionIntake extends Context.Service<\n SubscriptionIntake,\n {\n readonly accept: (\n principal: Principal,\n source: EventSourceVersion,\n payload: unknown,\n ) => Effect.Effect<EventAcknowledgement, SubscriptionFailure>;\n readonly status: (\n principal: Principal,\n source: EventSourceVersion,\n eventId: string,\n ) => Effect.Effect<\n EventAcknowledgement & {\n readonly routingComplete: boolean;\n readonly routingFailure: string | null;\n readonly nextAttemptAtMillis: number;\n },\n SubscriptionError\n >;\n }\n>()(\"@effect-agent/thread/SubscriptionIntake\") {\n static layer(limits: SubscriptionLimits = defaultSubscriptionLimits) {\n return Layer.effect(SubscriptionIntake, makeIntake(limits));\n }\n}\n\n/** One bounded sweep. The platform owns polling/alarm recovery; no subscription retains a Run. */\nexport class SubscriptionDriver extends Context.Service<\n SubscriptionDriver,\n {\n readonly runDue: Effect.Effect<\n { readonly processed: number; readonly failed: number },\n SubscriptionStoreFailure\n >;\n readonly processDelivery: (\n key: SubscriptionDeliveryKey,\n ) => Effect.Effect<void, SubscriptionFailure>;\n }\n>()(\"@effect-agent/thread/SubscriptionDriver\") {\n static layer(limits: SubscriptionLimits = defaultSubscriptionLimits) {\n return Layer.effect(SubscriptionDriver, makeDriver(limits));\n }\n}\n\nconst dependencies = Effect.gen(function* () {\n const store = yield* SubscriptionStore;\n const authorizer = yield* SubscriptionAuthorizer;\n const sources = (yield* EventSources).sources;\n const crypto = yield* Crypto.Crypto;\n\n const digest = (value: PersistedJson) =>\n digestJson(value).pipe(\n Effect.provideService(Crypto.Crypto, crypto),\n Effect.mapError(() => failure(\"storage\", \"digest\")),\n );\n\n const source = (version: EventSourceVersion) => {\n const found = sources.filter((s) => sameSource(s.source, version));\n const item = found[0];\n\n return found.length === 1 && item !== undefined\n ? Effect.succeed(item)\n : Effect.fail(failure(\"unsupported-source\", \"source-version\"));\n };\n\n const scope = Effect.fnUntraced(function* (value: SubscriptionScope) {\n const decoded = yield* validate(SubscriptionScope, value);\n\n if (!samePartition(decoded.partition, store.partition))\n return yield* failure(\"unauthorized\", \"partition\");\n\n return decoded;\n });\n\n const acceptNormalized = Effect.fnUntraced(function* (\n version: EventSourceVersion,\n event: NormalizedEvent,\n limits: SubscriptionLimits,\n ) {\n const time = yield* now;\n\n const record = yield* validate(AcceptedEvent, {\n schemaVersion: 1,\n partition: store.partition,\n eventId: event.eventId,\n source: version,\n matchingKey: event.matchingKey,\n payload: event.payload,\n payloadDigest: yield* digest(event.payload),\n acceptedAtMillis: time,\n ...(event.occurredAtMillis === undefined ? {} : { occurredAtMillis: event.occurredAtMillis }),\n cutoff: 0,\n cursor: 0,\n routingComplete: false,\n routingFailure: null,\n nextAttemptAtMillis: time,\n });\n\n const retained = yield* store.accept(record, limits);\n\n if (retained.tombstone !== true && (yield* digest(retained.payload)) !== retained.payloadDigest)\n return yield* failure(\"corrupt\", \"event-digest\");\n\n return retained;\n });\n\n return { store, authorizer, source, digest, scope, acceptNormalized };\n});\n\nconst pageLimit = (value: number) =>\n validate(Schema.Int.check(Schema.isGreaterThan(0), Schema.isLessThanOrEqualTo(100)), value);\n\nconst makeManagement = Effect.fnUntraced(function* (requested: SubscriptionLimits) {\n const limits = yield* validate(SubscriptionLimits, requested);\n const { bindings } = yield* SubscriptionInputBindings;\n const { store, authorizer, source, digest, scope } = yield* dependencies;\n\n const subscribe: Subscriptions[\"Service\"][\"subscribe\"] = Effect.fnUntraced(\n function* (scopeValue, options) {\n const owner = yield* scope(scopeValue);\n\n yield* authorizer.manage(\"subscribe\", owner);\n const behavior = yield* source(options.source);\n const params = yield* behavior.parameters(options.parameters);\n const binding = yield* resolveSubscriptionInput(bindings, options);\n const context = yield* binding.context(options.context);\n\n const configuration = yield* validate(SubscriptionConfiguration, {\n ...options,\n parameters: params.parameters,\n context,\n matchingKey: params.matchingKey,\n });\n\n yield* authorizer.manage(\"subscribe\", owner, configuration);\n\n const key = yield* validate(SubscriptionKey, {\n partition: owner.partition,\n ownerId: owner.ownerId,\n subscriptionId: options.subscriptionId,\n });\n\n const encodedConfiguration = yield* Schema.encodeEffect(SubscriptionConfiguration)(\n configuration,\n ).pipe(Effect.mapError(() => failure(\"validation\", \"configuration\")));\n\n const creationFingerprint = yield* digest({\n key,\n createdBy: owner.principal,\n configuration: encodedConfiguration,\n });\n\n const existing = yield* store.get(key);\n\n if (existing !== null) {\n const retainedConfiguration = yield* Schema.encodeEffect(SubscriptionConfiguration)(\n existing.creationConfiguration,\n ).pipe(Effect.mapError(() => failure(\"corrupt\", \"creation-configuration\")));\n\n const retainedFingerprint = yield* digest({\n key: existing.key,\n createdBy: existing.createdBy,\n configuration: retainedConfiguration,\n });\n\n if (retainedFingerprint !== existing.creationFingerprint)\n return yield* failure(\"corrupt\", \"creation-fingerprint\");\n\n const currentConfiguration = yield* Schema.encodeEffect(SubscriptionConfiguration)(\n existing.configuration,\n ).pipe(Effect.mapError(() => failure(\"corrupt\", \"configuration\")));\n\n if (\n (yield* digest({\n key: existing.key,\n createdBy: existing.createdBy,\n configuration: currentConfiguration,\n })) !== existing.configurationFingerprint\n )\n return yield* failure(\"corrupt\", \"creation-fingerprint\");\n if (existing.creationFingerprint !== creationFingerprint)\n return yield* failure(\"conflict\", \"creation\");\n\n return snapshot(existing, yield* now);\n }\n if (\n bytes(params.parameters) > limits.maxPayloadBytes ||\n bytes(context) > limits.maxContextBytes\n )\n return yield* failure(\"validation\", \"registration-bounds\");\n const time = yield* now;\n\n if (\n configuration.expiresAtMillis !== null &&\n (configuration.expiresAtMillis <= time ||\n configuration.expiresAtMillis - time > limits.maxLifetimeMillis)\n )\n return yield* failure(\"validation\", \"lifetime\");\n if (behavior.reconcile !== undefined && configuration.mode !== \"once\")\n return yield* failure(\"validation\", \"reconciliation-requires-once\");\n\n const record = yield* store.register(\n {\n schemaVersion: 1,\n key,\n creationFingerprint,\n configurationRevision: 1,\n configurationFingerprint: creationFingerprint,\n creationConfiguration: configuration,\n createdBy: owner.principal,\n createdAtMillis: time,\n ordinal: 0,\n configuration,\n state: \"active\",\n recovery:\n behavior.reconcile === undefined\n ? null\n : { attempts: 0, nextAttemptAtMillis: time, lastFailure: null },\n },\n limits,\n );\n\n return snapshot(record, time);\n },\n );\n\n const listSubscriptions: Subscriptions[\"Service\"][\"listSubscriptions\"] = Effect.fnUntraced(\n function* (scopeValue, after = 0, requestedLimit = 50) {\n const owner = yield* scope(scopeValue);\n\n yield* authorizer.manage(\"list\", owner);\n const limit = yield* pageLimit(requestedLimit);\n\n yield* validate(Schema.Natural, after);\n const records = yield* store.list(owner.ownerId, after, limit);\n const time = yield* now;\n\n return {\n items: records.map((record) => snapshot(record, time)),\n next: records.length === limit ? (records.at(-1)?.ordinal ?? null) : null,\n };\n },\n );\n\n const ownedKey = Effect.fnUntraced(function* (owner: SubscriptionScope, key: SubscriptionKey) {\n yield* validate(SubscriptionKey, key);\n if (!samePartition(owner.partition, key.partition) || owner.ownerId !== key.ownerId)\n return yield* failure(\"unauthorized\", \"owner\");\n\n return key;\n });\n\n const updateSubscription: Subscriptions[\"Service\"][\"updateSubscription\"] = Effect.fnUntraced(\n function* (scopeValue, key, expectedRevision, options) {\n const owner = yield* scope(scopeValue);\n\n yield* authorizer.manage(\"update\", owner);\n yield* ownedKey(owner, key);\n const behavior = yield* source(options.source);\n const parameters = yield* behavior.parameters(options.parameters);\n const binding = yield* resolveSubscriptionInput(bindings, options);\n const context = yield* binding.context(options.context);\n\n const configuration = yield* validate(SubscriptionConfiguration, {\n ...options,\n ...parameters,\n context,\n });\n\n yield* authorizer.manage(\"update\", owner, configuration);\n const time = yield* now;\n\n if (\n bytes(parameters.parameters) > limits.maxPayloadBytes ||\n bytes(context) > limits.maxContextBytes\n )\n return yield* failure(\"validation\", \"registration-bounds\");\n if (\n configuration.expiresAtMillis !== null &&\n (configuration.expiresAtMillis <= time ||\n configuration.expiresAtMillis - time > limits.maxLifetimeMillis)\n )\n return yield* failure(\"validation\", \"lifetime\");\n if (behavior.reconcile !== undefined && configuration.mode !== \"once\")\n return yield* failure(\"validation\", \"reconciliation-requires-once\");\n const existing = yield* store.get(key);\n\n if (existing === null) return yield* failure(\"not-found\", \"subscription\");\n\n const encoded = yield* Schema.encodeEffect(SubscriptionConfiguration)(configuration).pipe(\n Effect.mapError(() => failure(\"validation\", \"configuration\")),\n );\n\n const configurationFingerprint = yield* digest({\n key,\n createdBy: existing.createdBy,\n configuration: encoded,\n });\n\n const updated = yield* store.change(\n key,\n expectedRevision,\n {\n _tag: \"Update\",\n configuration,\n configurationFingerprint,\n recovery:\n behavior.reconcile === undefined\n ? null\n : { attempts: 0, nextAttemptAtMillis: time, lastFailure: null },\n },\n limits,\n );\n\n return snapshot(updated, time);\n },\n );\n\n const changeState = Effect.fnUntraced(function* (\n scopeValue: SubscriptionScope,\n key: SubscriptionKey,\n expectedRevision: number,\n change: Extract<SubscriptionChange, { readonly _tag: \"Pause\" | \"Resume\" }>,\n ) {\n const owner = yield* scope(scopeValue);\n\n yield* authorizer.manage(change._tag === \"Pause\" ? \"pause\" : \"resume\", owner);\n\n const updated = yield* store.change(\n yield* ownedKey(owner, key),\n expectedRevision,\n change,\n limits,\n );\n\n return snapshot(updated, yield* now);\n });\n\n const cancelSubscription: Subscriptions[\"Service\"][\"cancelSubscription\"] = Effect.fnUntraced(\n function* (scopeValue, key, expectedRevision) {\n const owner = yield* scope(scopeValue);\n\n yield* authorizer.manage(\"cancel\", owner);\n const record = yield* store.cancel(yield* ownedKey(owner, key), expectedRevision);\n\n return snapshot(record, yield* now);\n },\n );\n\n const listDeliveries: Subscriptions[\"Service\"][\"listDeliveries\"] = Effect.fnUntraced(function* (\n scopeValue,\n key,\n after = \"\",\n requestedLimit = 50,\n ) {\n const owner = yield* scope(scopeValue);\n\n yield* authorizer.manage(\"deliveries\", owner);\n const limit = yield* pageLimit(requestedLimit);\n const records = yield* store.listDeliveries(yield* ownedKey(owner, key), after, limit);\n const last = records.at(-1);\n\n return {\n items: records.map(deliverySnapshot),\n next:\n records.length === limit && last !== undefined\n ? subscriptionDeliveryKeyString(last.key)\n : null,\n };\n });\n\n const recoverDelivery: Subscriptions[\"Service\"][\"recoverDelivery\"] = Effect.fn(\n \"Subscriptions.recoverDelivery\",\n )(function* (scopeValue, key, expectedGeneration) {\n const owner = yield* scope(scopeValue);\n\n yield* authorizer.manage(\"recover\", owner);\n yield* ownedKey(owner, key.subscription);\n const existing = yield* store.delivery(key);\n\n if (existing === null) return yield* failure(\"not-found\", \"delivery\");\n\n const recovered = yield* store.changeDelivery(key, existing.deliveryId, {\n _tag: \"Recover\",\n expectedGeneration,\n nowMillis: yield* now,\n });\n\n return deliverySnapshot(recovered);\n });\n\n const getSubscription: Subscriptions[\"Service\"][\"getSubscription\"] = Effect.fnUntraced(\n function* (scopeValue, key) {\n const owner = yield* scope(scopeValue);\n\n yield* authorizer.manage(\"get\", owner);\n const record = yield* store.get(yield* ownedKey(owner, key));\n\n if (record === null) return yield* failure(\"not-found\", \"subscription\");\n\n return snapshot(record, yield* now);\n },\n );\n\n return Subscriptions.of({\n getSubscription,\n recoverSubscription: (scopeValue, key, expectedRevision) =>\n Effect.gen(function* () {\n const owner = yield* scope(scopeValue);\n\n yield* authorizer.manage(\"recover\", owner);\n\n return snapshot(\n yield* store.change(\n yield* ownedKey(owner, key),\n expectedRevision,\n {\n _tag: \"Recover\",\n nowMillis: yield* now,\n },\n limits,\n ),\n yield* now,\n );\n }),\n recoverDelivery,\n subscribe,\n updateSubscription,\n pauseSubscription: (scope, key, revision) =>\n changeState(scope, key, revision, { _tag: \"Pause\" }),\n resumeSubscription: (scope, key, revision) =>\n changeState(scope, key, revision, { _tag: \"Resume\" }),\n listSubscriptions,\n cancelSubscription,\n listDeliveries,\n });\n});\n\nconst makeIntake = Effect.fnUntraced(function* (requested: SubscriptionLimits) {\n const limits = yield* validate(SubscriptionLimits, requested);\n const { store, authorizer, source, acceptNormalized } = yield* dependencies;\n\n const accept: SubscriptionIntake[\"Service\"][\"accept\"] = Effect.fnUntraced(\n function* (principal, version, payload) {\n yield* authorizer.intake(store.partition, version, principal);\n const behavior = yield* source(version);\n const event = yield* behavior.normalize(payload);\n const accepted = yield* acceptNormalized(version, event, limits);\n\n return {\n partition: accepted.partition,\n eventId: accepted.eventId,\n acceptedAtMillis: accepted.acceptedAtMillis,\n };\n },\n );\n\n const status: SubscriptionIntake[\"Service\"][\"status\"] = Effect.fnUntraced(\n function* (principal, version, eventId) {\n yield* authorizer.intake(store.partition, version, principal);\n const event = yield* store.event(eventId);\n\n if (event === null) return yield* failure(\"not-found\", \"event\");\n if (!sameSource(event.source, version)) return yield* failure(\"conflict\", \"event-source\");\n\n return {\n partition: event.partition,\n eventId: event.eventId,\n acceptedAtMillis: event.acceptedAtMillis,\n routingComplete: event.routingComplete,\n routingFailure: event.routingFailure,\n nextAttemptAtMillis: event.nextAttemptAtMillis,\n };\n },\n );\n\n return SubscriptionIntake.of({ accept, status });\n});\n\nconst makeDriver = Effect.fnUntraced(function* (requested: SubscriptionLimits) {\n const limits = yield* validate(SubscriptionLimits, requested);\n const { bindings } = yield* SubscriptionInputBindings;\n const { store, authorizer, source, digest, acceptNormalized } = yield* dependencies;\n const admission = yield* PreparedInputAdmission;\n\n if (limits.retention !== undefined && admission.submissionStatus === undefined)\n return yield* failure(\"validation\", \"retention-requires-submission-status\");\n const failpoint = yield* SubscriptionFailpoint;\n const semaphore = yield* Semaphore.make(limits.concurrency);\n const sweepSemaphore = yield* Semaphore.make(1);\n const definitionEquals = Schema.toEquivalence(DefinitionDigests);\n const nextAttempt = (time: number) => Math.min(time + limits.retryMillis, 8_640_000_000_000_000);\n\n const selected = Effect.fnUntraced(function* (\n event: AcceptedEvent,\n subscription: SubscriptionRecord,\n ) {\n const deliveryId = yield* digest({\n schemaVersion: 1,\n subscription: subscription.key,\n eventId: event.eventId,\n });\n\n const time = yield* now;\n\n return yield* validate(SubscriptionDelivery, {\n schemaVersion: 1,\n key: { subscription: subscription.key, eventId: event.eventId },\n deliveryId,\n subscriptionFingerprint: subscription.configurationFingerprint,\n configurationRevision: subscription.configurationRevision,\n configuration: subscription.configuration,\n eventDigest: event.payloadDigest,\n source: event.source,\n threadId:\n subscription.configuration.destination._tag === \"ExistingThread\"\n ? subscription.configuration.destination.threadId\n : Schema.decodeSync(ThreadId)(`subscription:${deliveryId}`),\n admissionKey: Schema.decodeSync(IdempotencyKey)(`subscription:${deliveryId}`),\n selectedAtMillis: time,\n ...(limits.retention === undefined ? {} : { observeSettlement: true }),\n state: \"selected\",\n envelope: null,\n envelopeDigest: null,\n retry: {\n generation: 0,\n attempts: 0,\n automaticAttempts: 0,\n parked: false,\n nextAttemptAtMillis: time,\n lastAttemptAtMillis: null,\n lastFailure: null,\n },\n receipt: null,\n refusal: null,\n });\n });\n\n const route = Effect.fnUntraced(function* (event: AcceptedEvent) {\n const behavior = yield* source(event.source);\n const normalized = yield* behavior.normalize(event.payload);\n\n if (\n normalized.eventId !== event.eventId ||\n normalized.occurredAtMillis !== event.occurredAtMillis ||\n normalized.matchingKey !== event.matchingKey ||\n (yield* digest(normalized.payload)) !== event.payloadDigest ||\n (yield* digest(event.payload)) !== event.payloadDigest\n )\n return yield* failure(\"corrupt\", \"event-source-bindings\");\n const candidates = yield* store.candidates(event, limits.batchSize);\n const deliveries: Array<SubscriptionDelivery> = [];\n const time = yield* now;\n\n for (const candidate of candidates) {\n if (\n candidate.state !== \"active\" ||\n (candidate.configuration.expiresAtMillis !== null &&\n candidate.configuration.expiresAtMillis <= time)\n )\n continue;\n\n const config = yield* Schema.encodeEffect(SubscriptionConfiguration)(\n candidate.configuration,\n ).pipe(Effect.mapError(() => failure(\"corrupt\", \"configuration\")));\n\n const fingerprint = yield* digest({\n key: candidate.key,\n createdBy: candidate.createdBy,\n configuration: config,\n });\n\n const parameters = yield* behavior.parameters(candidate.configuration.parameters);\n\n if (\n fingerprint !== candidate.configurationFingerprint ||\n parameters.matchingKey !== candidate.configuration.matchingKey\n )\n return yield* failure(\"corrupt\", \"registration-source-bindings\");\n if (yield* behavior.matches(event, candidate))\n deliveries.push(yield* selected(event, candidate));\n }\n const cursor = candidates.at(-1)?.ordinal ?? event.cursor;\n\n yield* store.select(\n event,\n deliveries,\n cursor,\n candidates.length < limits.batchSize,\n yield* now,\n limits,\n );\n });\n\n const retry = (delivery: SubscriptionDelivery, reason: ScheduleRetryReason) =>\n now.pipe(\n Effect.flatMap((time) =>\n store.changeDelivery(delivery.key, delivery.deliveryId, {\n _tag: \"Retry\",\n nowMillis: time,\n retry: {\n generation: delivery.retry.generation,\n attempts: delivery.retry.attempts + 1,\n automaticAttempts: delivery.retry.automaticAttempts + 1,\n parked: delivery.retry.automaticAttempts + 1 >= (limits.maxAutomaticAttempts ?? 8),\n lastAttemptAtMillis: time,\n nextAttemptAtMillis: nextAttempt(time),\n lastFailure: reason,\n },\n }),\n ),\n Effect.asVoid,\n );\n\n const refuse = (\n delivery: SubscriptionDelivery,\n phase: \"preparation\" | \"admission\",\n code: string,\n ) =>\n now.pipe(\n Effect.flatMap((time) =>\n store.changeDelivery(delivery.key, delivery.deliveryId, {\n _tag: \"Refuse\",\n refusal: { phase, code },\n nowMillis: time,\n }),\n ),\n Effect.asVoid,\n );\n\n const verifySelected = Effect.fnUntraced(function* (delivery: SubscriptionDelivery) {\n const current = yield* store.get(delivery.key.subscription);\n\n const subscription =\n current === null\n ? null\n : {\n ...current,\n configuration: delivery.configuration,\n configurationRevision: delivery.configurationRevision,\n configurationFingerprint: delivery.subscriptionFingerprint,\n };\n\n const event = yield* store.event(delivery.key.eventId);\n\n if (\n subscription === null ||\n event === null ||\n !sameSource(delivery.source, event.source) ||\n !sameSource(delivery.source, subscription.configuration.source)\n )\n return yield* failure(\"corrupt\", \"selected-reference\");\n\n const expectedId = yield* digest({\n schemaVersion: 1,\n subscription: subscription.key,\n eventId: event.eventId,\n });\n\n const configuration = yield* Schema.encodeEffect(SubscriptionConfiguration)(\n subscription.configuration,\n ).pipe(Effect.mapError(() => failure(\"corrupt\", \"configuration\")));\n\n const fingerprint = yield* digest({\n key: subscription.key,\n createdBy: subscription.createdBy,\n configuration,\n });\n\n const destination = subscription.configuration.destination;\n\n if (\n delivery.subscriptionFingerprint !== fingerprint ||\n delivery.eventDigest !== event.payloadDigest ||\n (yield* digest(event.payload)) !== event.payloadDigest ||\n delivery.deliveryId !== expectedId ||\n delivery.admissionKey !== `subscription:${expectedId}` ||\n delivery.threadId !==\n (destination._tag === \"ExistingThread\"\n ? destination.threadId\n : `subscription:${expectedId}`)\n )\n return yield* failure(\"corrupt\", \"selected-bindings\");\n\n return { subscription, event };\n });\n\n const envelopeDigest = Effect.fnUntraced(function* (\n delivery: SubscriptionDelivery,\n envelope: PreparedInput,\n ) {\n const encoded = yield* Schema.encodeEffect(PreparedInput)(envelope).pipe(\n Effect.mapError(() => failure(\"corrupt\", \"prepared-envelope\")),\n );\n\n return yield* digest({\n deliveryId: delivery.deliveryId,\n subscriptionFingerprint: delivery.subscriptionFingerprint,\n eventDigest: delivery.eventDigest,\n envelope: encoded,\n });\n });\n\n const prepare = Effect.fnUntraced(function* (delivery: SubscriptionDelivery) {\n const { subscription, event } = yield* verifySelected(delivery);\n const time = yield* now;\n\n if (\n subscription.state === \"cancelled\" ||\n (subscription.configuration.expiresAtMillis !== null &&\n subscription.configuration.expiresAtMillis <= time)\n ) {\n yield* refuse(\n delivery,\n \"preparation\",\n subscription.state === \"cancelled\" ? \"cancelled\" : \"expired\",\n );\n\n return null;\n }\n const binding = yield* resolveSubscriptionInput(bindings, subscription.configuration);\n\n if ((yield* digest(event.payload)) !== event.payloadDigest)\n return yield* failure(\"corrupt\", \"event-digest\");\n const authorization = yield* authorizer.prepare(subscription, event);\n const input = yield* binding.prepare(event, subscription);\n\n if (bytes(input) > limits.maxPayloadBytes)\n return yield* SubscriptionSourceError.make({ code: \"input-bounds\", retryable: false });\n\n const envelope = yield* validate(PreparedInput, {\n schemaVersion: 1,\n threadId: delivery.threadId,\n admissionKey: delivery.admissionKey,\n deliveryPrincipal: subscription.configuration.deliveryPrincipal,\n ...(subscription.configuration.admissionGroup === undefined\n ? {}\n : { admissionGroup: subscription.configuration.admissionGroup }),\n ...(subscription.configuration.admissionFence === undefined\n ? {}\n : { admissionFence: subscription.configuration.admissionFence }),\n agentId: subscription.configuration.agentId,\n definitions: subscription.configuration.definitions,\n input,\n inputDigest: yield* digest(input),\n authorization,\n });\n\n return yield* store.changeDelivery(delivery.key, delivery.deliveryId, {\n _tag: \"Prepare\",\n envelope,\n envelopeDigest: yield* envelopeDigest(delivery, envelope),\n nowMillis: yield* now,\n });\n });\n\n const process = Effect.fnUntraced(function* (key: SubscriptionDeliveryKey) {\n let delivery = yield* store.delivery(key);\n\n if (delivery === null) return yield* failure(\"not-found\", \"delivery\");\n if (\n delivery.state === \"delivered\" &&\n delivery.observeSettlement === true &&\n delivery.receipt !== null\n ) {\n const settled =\n admission.submissionStatus === undefined\n ? false\n : yield* admission.submissionStatus(delivery.receipt).pipe(\n Effect.timeout(limits.operationTimeoutMillis),\n Effect.map((status) => status._tag === \"settled\"),\n Effect.catch((error) =>\n Effect.logWarning(\"Subscription settlement observation unavailable\", {\n tag: error._tag,\n }).pipe(Effect.as(false)),\n ),\n );\n\n const time = yield* now;\n\n yield* store.changeDelivery(\n delivery.key,\n delivery.deliveryId,\n {\n _tag: \"ObserveSettlement\",\n receipt: delivery.receipt,\n settled,\n nowMillis: time,\n nextAttemptAtMillis: nextAttempt(time),\n },\n limits,\n );\n\n return;\n }\n if (\n delivery.retry.parked === true ||\n delivery.retry.nextAttemptAtMillis > (yield* now) ||\n delivery.state === \"delivered\" ||\n delivery.state === \"refused\"\n )\n return;\n if (delivery.state === \"selected\") {\n const original = delivery;\n\n delivery = yield* prepare(original).pipe(\n Effect.timeout(limits.operationTimeoutMillis),\n Effect.catchTag(\"SubscriptionSourceError\", (error) =>\n (error.retryable\n ? retry(original, \"transport\")\n : refuse(original, \"preparation\", error.code)\n ).pipe(Effect.as(null)),\n ),\n Effect.catchTag(\"SubscriptionError\", (error) =>\n error.reason === \"unauthorized\"\n ? refuse(original, \"preparation\", error.code).pipe(Effect.as(null))\n : Effect.fail(error),\n ),\n Effect.catchTag(\"TimeoutError\", () => retry(original, \"timeout\").pipe(Effect.as(null))),\n );\n }\n if (delivery === null || delivery.state === \"refused\" || delivery.state === \"delivered\") return;\n if (\n delivery.state !== \"prepared\" ||\n delivery.envelope === null ||\n delivery.envelopeDigest === null\n )\n return yield* failure(\"corrupt\", \"prepared-state\");\n const { subscription } = yield* verifySelected(delivery);\n const envelope = delivery.envelope;\n\n if (\n (yield* digest(envelope.input)) !== envelope.inputDigest ||\n envelope.threadId !== delivery.threadId ||\n envelope.admissionKey !== delivery.admissionKey ||\n envelope.deliveryPrincipal !== subscription.configuration.deliveryPrincipal ||\n envelope.agentId !== subscription.configuration.agentId ||\n !definitionEquals(envelope.definitions, subscription.configuration.definitions) ||\n delivery.envelopeDigest !== (yield* envelopeDigest(delivery, envelope))\n )\n return yield* failure(\"corrupt\", \"prepared-envelope\");\n\n const outcome = yield* admitPreparedInput(\n admission.submit(envelope),\n limits.operationTimeoutMillis,\n ).pipe(Effect.mapError(() => failure(\"corrupt\", \"admission\")));\n\n if (outcome._tag === \"Receipt\") {\n yield* failpoint.hit(\"subscription:admission:after\");\n if (outcome.receipt.threadId !== envelope.threadId)\n return yield* failure(\"corrupt\", \"receipt-destination\");\n yield* store.changeDelivery(delivery.key, delivery.deliveryId, {\n _tag: \"Complete\",\n receipt: outcome.receipt,\n nowMillis: yield* now,\n });\n } else if (outcome._tag === \"Refused\") yield* refuse(delivery, \"admission\", outcome.error.code);\n else yield* retry(delivery, outcome.reason);\n });\n\n const processDelivery: SubscriptionDriver[\"Service\"][\"processDelivery\"] = (key) =>\n semaphore.withPermit(process(key));\n\n const reconcile = Effect.fnUntraced(function* (subscription: SubscriptionRecord) {\n const time = yield* now;\n\n if (\n subscription.state !== \"active\" ||\n (subscription.configuration.expiresAtMillis !== null &&\n subscription.configuration.expiresAtMillis <= time)\n )\n return yield* store.deferRecovery(subscription.key, subscription.configurationRevision, null);\n const behavior = yield* source(subscription.configuration.source);\n\n if (behavior.reconcile === undefined)\n return yield* failure(\"unsupported-source\", \"source-reconciliation\");\n yield* authorizer.reconcile(subscription);\n\n const observation = yield* behavior.reconcile(subscription).pipe(\n Effect.timeout(limits.operationTimeoutMillis),\n Effect.map((event) => ({ _tag: \"Observed\" as const, event })),\n Effect.catchTag(\"SubscriptionSourceError\", (error) =>\n Effect.succeed({ _tag: \"Failed\" as const, error }),\n ),\n );\n\n if (observation._tag === \"Failed\")\n return yield* store.deferRecovery(subscription.key, subscription.configurationRevision, {\n attempts: (subscription.recovery?.attempts ?? 0) + 1,\n nextAttemptAtMillis: observation.error.retryable ? nextAttempt(time) : null,\n lastFailure: observation.error.code,\n });\n const observed = observation.event;\n\n if (observed !== null) {\n const event = yield* acceptNormalized(behavior.source, observed, limits);\n\n if (event.tombstone === true)\n return yield* store.deferRecovery(subscription.key, subscription.configurationRevision, {\n attempts: (subscription.recovery?.attempts ?? 0) + 1,\n nextAttemptAtMillis: null,\n lastFailure: \"event-reclaimed\",\n });\n\n if (\n event.matchingKey !== subscription.configuration.matchingKey ||\n !(yield* behavior.matches(event, subscription))\n )\n return yield* failure(\"conflict\", \"reconciliation-match\");\n yield* store.catchUp(event, yield* selected(event, subscription), yield* now, limits);\n\n return;\n }\n yield* store.deferRecovery(subscription.key, subscription.configurationRevision, {\n attempts: (subscription.recovery?.attempts ?? 0) + 1,\n nextAttemptAtMillis: nextAttempt(time),\n lastFailure: null,\n });\n });\n\n const runDue = Effect.gen(function* () {\n const time = yield* now;\n let processed = 0;\n let failed = 0;\n\n const failureCode = <E>(cause: Cause.Cause<E>) =>\n Option.match(Cause.findErrorOption(cause), {\n onNone: () => \"defect\",\n onSome: (error) =>\n Schema.is(SubscriptionError)(error)\n ? error.reason\n : Schema.is(SubscriptionSourceError)(error)\n ? error.code\n : Schema.is(Schema.Struct({ _tag: Schema.Literal(\"TimeoutError\") }))(error)\n ? \"timeout\"\n : \"interrupted-work\",\n });\n\n const attempt = <E>(\n work: Effect.Effect<void, E>,\n recover: (code: string) => Effect.Effect<void, SubscriptionStoreFailure>,\n ) =>\n work.pipe(\n Effect.matchCauseEffect({\n onSuccess: () =>\n Effect.sync(() => {\n processed += 1;\n }),\n onFailure: (cause) =>\n Cause.hasInterruptsOnly(cause)\n ? Effect.interrupt\n : Effect.gen(function* () {\n failed += 1;\n const code = failureCode(cause);\n\n yield* recover(code).pipe(\n Effect.catchCause((c) =>\n Cause.hasInterruptsOnly(c) ? Effect.interrupt : Effect.void,\n ),\n );\n yield* Effect.logWarning(\"Subscription work remains pending\").pipe(\n Effect.annotateLogs({ failureCode: code }),\n );\n }),\n }),\n );\n\n // Persist progress even when one record cannot be decoded or deferred. An eviction cannot\n // send every sweep back to a corrupt first page. Each category receives one bounded page.\n const cursors = yield* store.readScanCursors;\n const records = yield* store.recovering(time, cursors.recovery, limits.batchSize);\n const events = yield* store.pendingEvents(time, cursors.events, limits.batchSize);\n const deliveries = yield* store.pendingDeliveries(time, cursors.deliveries, limits.batchSize);\n const lastDelivery = deliveries.at(-1);\n\n yield* store.advanceScanCursors({\n recovery: records.length < limits.batchSize ? 0 : (records.at(-1)?.ordinal ?? 0),\n events: events.length < limits.batchSize ? \"\" : (events.at(-1) ?? \"\"),\n deliveries:\n deliveries.length < limits.batchSize || lastDelivery === undefined\n ? \"\"\n : subscriptionDeliveryKeyString(lastDelivery),\n });\n yield* Effect.forEach(\n records,\n (cursor) =>\n Effect.gen(function* () {\n let record: SubscriptionRecord | null = null;\n\n yield* attempt(\n Effect.gen(function* () {\n record = yield* store.get(cursor.key);\n\n if (record !== null) yield* reconcile(record);\n }).pipe(Effect.timeout(limits.operationTimeoutMillis)),\n (code) =>\n // A failed read supplies no revision that can safely authorize a mutation.\n record === null\n ? Effect.void\n : store.deferRecovery(record.key, record.configurationRevision, {\n attempts: (record.recovery?.attempts ?? 0) + 1,\n nextAttemptAtMillis: code === \"unauthorized\" ? null : nextAttempt(time),\n lastFailure: code,\n }),\n );\n }),\n { concurrency: limits.concurrency },\n );\n yield* Effect.forEach(\n events,\n (eventId) =>\n attempt(\n store.event(eventId).pipe(\n Effect.flatMap((event) =>\n event === null ? failure(\"not-found\", \"event\") : route(event),\n ),\n Effect.timeout(limits.operationTimeoutMillis),\n ),\n (code) => store.deferEvent(eventId, nextAttempt(time), code),\n ),\n { concurrency: limits.concurrency },\n );\n yield* Effect.forEach(\n deliveries,\n (key) =>\n attempt(processDelivery(key), () =>\n store\n .delivery(key)\n .pipe(\n Effect.flatMap((delivery) =>\n delivery === null ? Effect.void : retry(delivery, \"ambiguous\"),\n ),\n ),\n ),\n { concurrency: limits.concurrency },\n );\n\n if (limits.retention !== undefined)\n yield* store.compact(yield* now, limits.retention, limits.batchSize);\n\n return { processed, failed };\n });\n\n return SubscriptionDriver.of({ runDue: sweepSemaphore.withPermit(runDue), processDelivery });\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Subscriptions.mjs","names":[],"sources":["../../src/durable/Subscriptions.ts"],"sourcesContent":["import { Cause, Context, Crypto, DateTime, Effect, Layer, Option, Schema, Semaphore } from \"effect\";\n\nimport { ThreadId } from \"../core/Identifiers.ts\";\nimport { utf8ByteLength } from \"../core/internal/utf8.ts\";\nimport { digestJson } from \"./Digest.ts\";\nimport { EventSources, type NormalizedEvent } from \"./EventSource.ts\";\nimport { admitPreparedInput, PreparedInputAdmission } from \"./PreparedInputAdmission.ts\";\nimport { DefinitionDigests, type PersistedJson } from \"./Records.ts\";\nimport { type ScheduleRetryReason } from \"./Schedule.ts\";\nimport { type AdmissionFence, IdempotencyKey, type Principal } from \"./SubmissionLedger.ts\";\nimport {\n AcceptedEvent,\n type EventAcknowledgement,\n type EventSourceVersion,\n PreparedInput,\n SubscriptionAuthorizer,\n SubscriptionConfiguration,\n SubscriptionDelivery,\n type SubscriptionDeliveryKey,\n type SubscriptionDeliverySnapshot,\n SubscriptionError,\n SubscriptionFailpoint,\n SubscriptionKey,\n SubscriptionLimits,\n type SubscriptionRecord,\n type SubscriptionChange,\n SubscriptionScope,\n type SubscriptionSnapshot,\n SubscriptionSourceError,\n SubscriptionStore,\n type SubscriptionStoreFailure,\n defaultSubscriptionLimits,\n subscriptionDeliveryKeyString,\n} from \"./Subscription.ts\";\nimport { resolveSubscriptionInput, SubscriptionInputBindings } from \"./SubscriptionInput.ts\";\n\nconst now = DateTime.now.pipe(Effect.map(DateTime.toEpochMillis));\n\nconst failure = (reason: SubscriptionError[\"reason\"], code: string) =>\n SubscriptionError.make({ reason, code });\n\nconst bytes = (value: PersistedJson) => utf8ByteLength(JSON.stringify(value));\n\nconst sameSource = (a: EventSourceVersion, b: EventSourceVersion) =>\n a.name === b.name && a.version === b.version;\n\nconst samePartition = Schema.toEquivalence(SubscriptionScope.fields.partition);\n\nconst validate = <S extends Schema.Top>(schema: S, value: unknown) =>\n Schema.decodeUnknownEffect(schema)(value).pipe(\n Effect.mapError(() => failure(\"validation\", \"schema\")),\n );\n\nconst snapshot = (record: SubscriptionRecord, time: number): SubscriptionSnapshot => ({\n key: record.key,\n configurationRevision: record.configurationRevision,\n configurationFingerprint: record.configurationFingerprint,\n ...(record.configuration.admissionGroup === undefined\n ? {}\n : { admissionGroup: record.configuration.admissionGroup }),\n ...(record.configuration.admissionFence === undefined\n ? {}\n : { admissionFence: record.configuration.admissionFence }),\n source: record.configuration.source,\n mode: record.configuration.mode,\n state:\n record.state === \"active\" &&\n record.configuration.expiresAtMillis !== null &&\n record.configuration.expiresAtMillis <= time\n ? \"expired\"\n : record.state,\n createdAtMillis: record.createdAtMillis,\n expiresAtMillis: record.configuration.expiresAtMillis,\n recovery: record.recovery,\n});\n\nconst deliverySnapshot = (\n record: SubscriptionDelivery,\n): typeof SubscriptionDeliverySnapshot.Type => ({\n key: record.key,\n state: record.state,\n configurationRevision: record.configurationRevision,\n ...(record.observeSettlement === undefined\n ? {}\n : { observeSettlement: record.observeSettlement }),\n ...(record.settledAtMillis === undefined ? {} : { settledAtMillis: record.settledAtMillis }),\n retry: record.retry,\n receipt: record.receipt,\n refusal: record.refusal,\n});\n\nexport interface SubscribeOptions {\n readonly subscriptionId: string;\n readonly source: EventSourceVersion;\n readonly parameters: PersistedJson;\n readonly context: PersistedJson;\n readonly mode: \"once\" | \"continuous\";\n readonly expiresAtMillis: number | null;\n readonly destination: SubscriptionConfiguration[\"destination\"];\n readonly deliveryPrincipal: Principal;\n readonly admissionGroup?: string;\n readonly admissionFence?: AdmissionFence;\n readonly agentId: SubscriptionConfiguration[\"agentId\"];\n readonly definitions: SubscriptionConfiguration[\"definitions\"];\n}\n\nexport type SubscriptionFailure = SubscriptionStoreFailure | SubscriptionSourceError;\n\n/** Only management and redacted status. Do not provide intake or drivers to Agent Tools. */\nexport class Subscriptions extends Context.Service<\n Subscriptions,\n {\n readonly recoverSubscription: (\n scope: SubscriptionScope,\n key: SubscriptionKey,\n expectedRevision: number,\n ) => Effect.Effect<SubscriptionSnapshot, SubscriptionStoreFailure>;\n readonly getSubscription: (\n scope: SubscriptionScope,\n key: SubscriptionKey,\n ) => Effect.Effect<SubscriptionSnapshot, SubscriptionError>;\n readonly subscribe: (\n scope: SubscriptionScope,\n options: SubscribeOptions,\n ) => Effect.Effect<SubscriptionSnapshot, SubscriptionFailure>;\n readonly updateSubscription: (\n scope: SubscriptionScope,\n key: SubscriptionKey,\n expectedRevision: number,\n options: Omit<SubscribeOptions, \"subscriptionId\">,\n ) => Effect.Effect<SubscriptionSnapshot, SubscriptionFailure>;\n readonly pauseSubscription: (\n scope: SubscriptionScope,\n key: SubscriptionKey,\n expectedRevision: number,\n ) => Effect.Effect<SubscriptionSnapshot, SubscriptionStoreFailure>;\n readonly resumeSubscription: (\n scope: SubscriptionScope,\n key: SubscriptionKey,\n expectedRevision: number,\n ) => Effect.Effect<SubscriptionSnapshot, SubscriptionStoreFailure>;\n readonly listSubscriptions: (\n scope: SubscriptionScope,\n after?: number,\n limit?: number,\n ) => Effect.Effect<\n { readonly items: ReadonlyArray<SubscriptionSnapshot>; readonly next: number | null },\n SubscriptionError\n >;\n readonly recoverDelivery: (\n scope: SubscriptionScope,\n key: SubscriptionDeliveryKey,\n expectedGeneration: number,\n ) => Effect.Effect<typeof SubscriptionDeliverySnapshot.Type, SubscriptionStoreFailure>;\n readonly cancelSubscription: (\n scope: SubscriptionScope,\n key: SubscriptionKey,\n expectedRevision?: number,\n ) => Effect.Effect<SubscriptionSnapshot, SubscriptionStoreFailure>;\n readonly listDeliveries: (\n scope: SubscriptionScope,\n key: SubscriptionKey,\n after?: string,\n limit?: number,\n ) => Effect.Effect<\n {\n readonly items: ReadonlyArray<typeof SubscriptionDeliverySnapshot.Type>;\n readonly next: string | null;\n },\n SubscriptionError\n >;\n }\n>()(\"@effect-agent/thread/Subscriptions\") {\n static layer(limits: SubscriptionLimits = defaultSubscriptionLimits) {\n return Layer.effect(Subscriptions, makeManagement(limits));\n }\n}\n\n/** Trusted intake acknowledges retained routing work, never a Thread Submission Receipt. */\nexport class SubscriptionIntake extends Context.Service<\n SubscriptionIntake,\n {\n readonly accept: (\n principal: Principal,\n source: EventSourceVersion,\n payload: unknown,\n ) => Effect.Effect<EventAcknowledgement, SubscriptionFailure>;\n readonly status: (\n principal: Principal,\n source: EventSourceVersion,\n eventId: string,\n ) => Effect.Effect<\n EventAcknowledgement & {\n readonly routingComplete: boolean;\n readonly routingFailure: string | null;\n readonly nextAttemptAtMillis: number;\n },\n SubscriptionError\n >;\n }\n>()(\"@effect-agent/thread/SubscriptionIntake\") {\n static layer(limits: SubscriptionLimits = defaultSubscriptionLimits) {\n return Layer.effect(SubscriptionIntake, makeIntake(limits));\n }\n}\n\n/** One bounded sweep. The platform owns polling/alarm recovery; no subscription retains a Run. */\nexport class SubscriptionDriver extends Context.Service<\n SubscriptionDriver,\n {\n readonly runDue: Effect.Effect<\n { readonly processed: number; readonly failed: number },\n SubscriptionStoreFailure\n >;\n readonly processDelivery: (\n key: SubscriptionDeliveryKey,\n ) => Effect.Effect<void, SubscriptionFailure>;\n }\n>()(\"@effect-agent/thread/SubscriptionDriver\") {\n static layer(limits: SubscriptionLimits = defaultSubscriptionLimits) {\n return Layer.effect(SubscriptionDriver, makeDriver(limits));\n }\n}\n\nconst dependencies = Effect.gen(function* () {\n const store = yield* SubscriptionStore;\n const authorizer = yield* SubscriptionAuthorizer;\n const sources = (yield* EventSources).sources;\n const crypto = yield* Crypto.Crypto;\n\n const digest = (value: PersistedJson) =>\n digestJson(value).pipe(\n Effect.provideService(Crypto.Crypto, crypto),\n Effect.mapError(() => failure(\"storage\", \"digest\")),\n );\n\n const source = (version: EventSourceVersion) => {\n const found = sources.filter((s) => sameSource(s.source, version));\n const item = found[0];\n\n return found.length === 1 && item !== undefined\n ? Effect.succeed(item)\n : Effect.fail(failure(\"unsupported-source\", \"source-version\"));\n };\n\n const scope = Effect.fnUntraced(function* (value: SubscriptionScope) {\n const decoded = yield* validate(SubscriptionScope, value);\n\n if (!samePartition(decoded.partition, store.partition))\n return yield* failure(\"unauthorized\", \"partition\");\n\n return decoded;\n });\n\n const acceptNormalized = Effect.fnUntraced(function* (\n version: EventSourceVersion,\n event: NormalizedEvent,\n limits: SubscriptionLimits,\n ) {\n const time = yield* now;\n\n const record = yield* validate(AcceptedEvent, {\n schemaVersion: 1,\n partition: store.partition,\n eventId: event.eventId,\n source: version,\n matchingKey: event.matchingKey,\n payload: event.payload,\n payloadDigest: yield* digest(event.payload),\n acceptedAtMillis: time,\n ...(event.occurredAtMillis === undefined ? {} : { occurredAtMillis: event.occurredAtMillis }),\n cutoff: 0,\n cursor: 0,\n routingComplete: false,\n routingFailure: null,\n nextAttemptAtMillis: time,\n });\n\n const retained = yield* store.accept(record, limits);\n\n if (retained.tombstone !== true && (yield* digest(retained.payload)) !== retained.payloadDigest)\n return yield* failure(\"corrupt\", \"event-digest\");\n\n return retained;\n });\n\n return { store, authorizer, source, digest, scope, acceptNormalized };\n});\n\nconst pageLimit = (value: number) =>\n validate(Schema.Int.check(Schema.isGreaterThan(0), Schema.isLessThanOrEqualTo(100)), value);\n\nconst makeManagement = Effect.fnUntraced(function* (requested: SubscriptionLimits) {\n const limits = yield* validate(SubscriptionLimits, requested);\n const { bindings } = yield* SubscriptionInputBindings;\n const { store, authorizer, source, digest, scope } = yield* dependencies;\n\n const subscribe: Subscriptions[\"Service\"][\"subscribe\"] = Effect.fnUntraced(\n function* (scopeValue, options) {\n const owner = yield* scope(scopeValue);\n\n yield* authorizer.manage(\"subscribe\", owner);\n const behavior = yield* source(options.source);\n const params = yield* behavior.parameters(options.parameters);\n const binding = yield* resolveSubscriptionInput(bindings, options);\n const context = yield* binding.context(options.context);\n\n const configuration = yield* validate(SubscriptionConfiguration, {\n ...options,\n parameters: params.parameters,\n context,\n matchingKey: params.matchingKey,\n });\n\n yield* authorizer.manage(\"subscribe\", owner, configuration);\n\n const key = yield* validate(SubscriptionKey, {\n partition: owner.partition,\n ownerId: owner.ownerId,\n subscriptionId: options.subscriptionId,\n });\n\n const encodedConfiguration = yield* Schema.encodeEffect(SubscriptionConfiguration)(\n configuration,\n ).pipe(Effect.mapError(() => failure(\"validation\", \"configuration\")));\n\n const creationFingerprint = yield* digest({\n key,\n createdBy: owner.principal,\n configuration: encodedConfiguration,\n });\n\n const existing = yield* store.get(key);\n\n if (existing !== null) {\n const retainedConfiguration = yield* Schema.encodeEffect(SubscriptionConfiguration)(\n existing.creationConfiguration,\n ).pipe(Effect.mapError(() => failure(\"corrupt\", \"creation-configuration\")));\n\n const retainedFingerprint = yield* digest({\n key: existing.key,\n createdBy: existing.createdBy,\n configuration: retainedConfiguration,\n });\n\n if (retainedFingerprint !== existing.creationFingerprint)\n return yield* failure(\"corrupt\", \"creation-fingerprint\");\n\n const currentConfiguration = yield* Schema.encodeEffect(SubscriptionConfiguration)(\n existing.configuration,\n ).pipe(Effect.mapError(() => failure(\"corrupt\", \"configuration\")));\n\n if (\n (yield* digest({\n key: existing.key,\n createdBy: existing.createdBy,\n configuration: currentConfiguration,\n })) !== existing.configurationFingerprint\n )\n return yield* failure(\"corrupt\", \"creation-fingerprint\");\n if (existing.creationFingerprint !== creationFingerprint)\n return yield* failure(\"conflict\", \"creation\");\n\n return snapshot(existing, yield* now);\n }\n if (\n bytes(params.parameters) > limits.maxPayloadBytes ||\n bytes(context) > limits.maxContextBytes\n )\n return yield* failure(\"validation\", \"registration-bounds\");\n const time = yield* now;\n\n if (\n configuration.expiresAtMillis !== null &&\n (configuration.expiresAtMillis <= time ||\n configuration.expiresAtMillis - time > limits.maxLifetimeMillis)\n )\n return yield* failure(\"validation\", \"lifetime\");\n if (behavior.reconcile !== undefined && configuration.mode !== \"once\")\n return yield* failure(\"validation\", \"reconciliation-requires-once\");\n\n const record = yield* store.register(\n {\n schemaVersion: 1,\n key,\n creationFingerprint,\n configurationRevision: 1,\n configurationFingerprint: creationFingerprint,\n creationConfiguration: configuration,\n createdBy: owner.principal,\n createdAtMillis: time,\n ordinal: 0,\n configuration,\n state: \"active\",\n recovery:\n behavior.reconcile === undefined\n ? null\n : { attempts: 0, nextAttemptAtMillis: time, lastFailure: null },\n },\n limits,\n );\n\n return snapshot(record, time);\n },\n );\n\n const listSubscriptions: Subscriptions[\"Service\"][\"listSubscriptions\"] = Effect.fnUntraced(\n function* (scopeValue, after = 0, requestedLimit = 50) {\n const owner = yield* scope(scopeValue);\n\n yield* authorizer.manage(\"list\", owner);\n const limit = yield* pageLimit(requestedLimit);\n\n yield* validate(Schema.Natural, after);\n const records = yield* store.list(owner.ownerId, after, limit);\n const time = yield* now;\n\n return {\n items: records.map((record) => snapshot(record, time)),\n next: records.length === limit ? (records.at(-1)?.ordinal ?? null) : null,\n };\n },\n );\n\n const ownedKey = Effect.fnUntraced(function* (owner: SubscriptionScope, key: SubscriptionKey) {\n yield* validate(SubscriptionKey, key);\n if (!samePartition(owner.partition, key.partition) || owner.ownerId !== key.ownerId)\n return yield* failure(\"unauthorized\", \"owner\");\n\n return key;\n });\n\n const updateSubscription: Subscriptions[\"Service\"][\"updateSubscription\"] = Effect.fnUntraced(\n function* (scopeValue, key, expectedRevision, options) {\n const owner = yield* scope(scopeValue);\n\n yield* authorizer.manage(\"update\", owner);\n yield* ownedKey(owner, key);\n const behavior = yield* source(options.source);\n const parameters = yield* behavior.parameters(options.parameters);\n const binding = yield* resolveSubscriptionInput(bindings, options);\n const context = yield* binding.context(options.context);\n\n const configuration = yield* validate(SubscriptionConfiguration, {\n ...options,\n ...parameters,\n context,\n });\n\n yield* authorizer.manage(\"update\", owner, configuration);\n const time = yield* now;\n\n if (\n bytes(parameters.parameters) > limits.maxPayloadBytes ||\n bytes(context) > limits.maxContextBytes\n )\n return yield* failure(\"validation\", \"registration-bounds\");\n if (\n configuration.expiresAtMillis !== null &&\n (configuration.expiresAtMillis <= time ||\n configuration.expiresAtMillis - time > limits.maxLifetimeMillis)\n )\n return yield* failure(\"validation\", \"lifetime\");\n if (behavior.reconcile !== undefined && configuration.mode !== \"once\")\n return yield* failure(\"validation\", \"reconciliation-requires-once\");\n const existing = yield* store.get(key);\n\n if (existing === null) return yield* failure(\"not-found\", \"subscription\");\n\n const encoded = yield* Schema.encodeEffect(SubscriptionConfiguration)(configuration).pipe(\n Effect.mapError(() => failure(\"validation\", \"configuration\")),\n );\n\n const configurationFingerprint = yield* digest({\n key,\n createdBy: existing.createdBy,\n configuration: encoded,\n });\n\n const updated = yield* store.change(\n key,\n expectedRevision,\n {\n _tag: \"Update\",\n configuration,\n configurationFingerprint,\n recovery:\n behavior.reconcile === undefined\n ? null\n : { attempts: 0, nextAttemptAtMillis: time, lastFailure: null },\n },\n limits,\n );\n\n return snapshot(updated, time);\n },\n );\n\n const changeState = Effect.fnUntraced(function* (\n scopeValue: SubscriptionScope,\n key: SubscriptionKey,\n expectedRevision: number,\n change: Extract<SubscriptionChange, { readonly _tag: \"Pause\" | \"Resume\" }>,\n ) {\n const owner = yield* scope(scopeValue);\n\n yield* authorizer.manage(change._tag === \"Pause\" ? \"pause\" : \"resume\", owner);\n\n const updated = yield* store.change(\n yield* ownedKey(owner, key),\n expectedRevision,\n change,\n limits,\n );\n\n return snapshot(updated, yield* now);\n });\n\n const cancelSubscription: Subscriptions[\"Service\"][\"cancelSubscription\"] = Effect.fnUntraced(\n function* (scopeValue, key, expectedRevision) {\n const owner = yield* scope(scopeValue);\n\n yield* authorizer.manage(\"cancel\", owner);\n const record = yield* store.cancel(yield* ownedKey(owner, key), expectedRevision);\n\n return snapshot(record, yield* now);\n },\n );\n\n const listDeliveries: Subscriptions[\"Service\"][\"listDeliveries\"] = Effect.fnUntraced(function* (\n scopeValue,\n key,\n after = \"\",\n requestedLimit = 50,\n ) {\n const owner = yield* scope(scopeValue);\n\n yield* authorizer.manage(\"deliveries\", owner);\n const limit = yield* pageLimit(requestedLimit);\n const records = yield* store.listDeliveries(yield* ownedKey(owner, key), after, limit);\n const last = records.at(-1);\n\n return {\n items: records.map(deliverySnapshot),\n next:\n records.length === limit && last !== undefined\n ? subscriptionDeliveryKeyString(last.key)\n : null,\n };\n });\n\n const recoverDelivery: Subscriptions[\"Service\"][\"recoverDelivery\"] = Effect.fn(\n \"Subscriptions.recoverDelivery\",\n )(function* (scopeValue, key, expectedGeneration) {\n const owner = yield* scope(scopeValue);\n\n yield* authorizer.manage(\"recover\", owner);\n yield* ownedKey(owner, key.subscription);\n const existing = yield* store.delivery(key);\n\n if (existing === null) return yield* failure(\"not-found\", \"delivery\");\n\n const recovered = yield* store.changeDelivery(key, existing.deliveryId, {\n _tag: \"Recover\",\n expectedGeneration,\n nowMillis: yield* now,\n });\n\n return deliverySnapshot(recovered);\n });\n\n const getSubscription: Subscriptions[\"Service\"][\"getSubscription\"] = Effect.fnUntraced(\n function* (scopeValue, key) {\n const owner = yield* scope(scopeValue);\n\n yield* authorizer.manage(\"get\", owner);\n const record = yield* store.get(yield* ownedKey(owner, key));\n\n if (record === null) return yield* failure(\"not-found\", \"subscription\");\n\n return snapshot(record, yield* now);\n },\n );\n\n return Subscriptions.of({\n getSubscription,\n recoverSubscription: Effect.fnUntraced(function* (scopeValue, key, expectedRevision) {\n const owner = yield* scope(scopeValue);\n\n yield* authorizer.manage(\"recover\", owner);\n\n return snapshot(\n yield* store.change(\n yield* ownedKey(owner, key),\n expectedRevision,\n {\n _tag: \"Recover\",\n nowMillis: yield* now,\n },\n limits,\n ),\n yield* now,\n );\n }),\n recoverDelivery,\n subscribe,\n updateSubscription,\n pauseSubscription: (scope, key, revision) =>\n changeState(scope, key, revision, { _tag: \"Pause\" }),\n resumeSubscription: (scope, key, revision) =>\n changeState(scope, key, revision, { _tag: \"Resume\" }),\n listSubscriptions,\n cancelSubscription,\n listDeliveries,\n });\n});\n\nconst makeIntake = Effect.fnUntraced(function* (requested: SubscriptionLimits) {\n const limits = yield* validate(SubscriptionLimits, requested);\n const { store, authorizer, source, acceptNormalized } = yield* dependencies;\n\n const accept: SubscriptionIntake[\"Service\"][\"accept\"] = Effect.fnUntraced(\n function* (principal, version, payload) {\n yield* authorizer.intake(store.partition, version, principal);\n const behavior = yield* source(version);\n const event = yield* behavior.normalize(payload);\n const accepted = yield* acceptNormalized(version, event, limits);\n\n return {\n partition: accepted.partition,\n eventId: accepted.eventId,\n acceptedAtMillis: accepted.acceptedAtMillis,\n };\n },\n );\n\n const status: SubscriptionIntake[\"Service\"][\"status\"] = Effect.fnUntraced(\n function* (principal, version, eventId) {\n yield* authorizer.intake(store.partition, version, principal);\n const event = yield* store.event(eventId);\n\n if (event === null) return yield* failure(\"not-found\", \"event\");\n if (!sameSource(event.source, version)) return yield* failure(\"conflict\", \"event-source\");\n\n return {\n partition: event.partition,\n eventId: event.eventId,\n acceptedAtMillis: event.acceptedAtMillis,\n routingComplete: event.routingComplete,\n routingFailure: event.routingFailure,\n nextAttemptAtMillis: event.nextAttemptAtMillis,\n };\n },\n );\n\n return SubscriptionIntake.of({ accept, status });\n});\n\nconst makeDriver = Effect.fnUntraced(function* (requested: SubscriptionLimits) {\n const limits = yield* validate(SubscriptionLimits, requested);\n const { bindings } = yield* SubscriptionInputBindings;\n const { store, authorizer, source, digest, acceptNormalized } = yield* dependencies;\n const admission = yield* PreparedInputAdmission;\n\n if (limits.retention !== undefined && admission.submissionStatus === undefined)\n return yield* failure(\"validation\", \"retention-requires-submission-status\");\n const failpoint = yield* SubscriptionFailpoint;\n const semaphore = yield* Semaphore.make(limits.concurrency);\n const sweepSemaphore = yield* Semaphore.make(1);\n const definitionEquals = Schema.toEquivalence(DefinitionDigests);\n const nextAttempt = (time: number) => Math.min(time + limits.retryMillis, 8_640_000_000_000_000);\n\n const selected = Effect.fnUntraced(function* (\n event: AcceptedEvent,\n subscription: SubscriptionRecord,\n ) {\n const deliveryId = yield* digest({\n schemaVersion: 1,\n subscription: subscription.key,\n eventId: event.eventId,\n });\n\n const time = yield* now;\n\n return yield* validate(SubscriptionDelivery, {\n schemaVersion: 1,\n key: { subscription: subscription.key, eventId: event.eventId },\n deliveryId,\n subscriptionFingerprint: subscription.configurationFingerprint,\n configurationRevision: subscription.configurationRevision,\n configuration: subscription.configuration,\n eventDigest: event.payloadDigest,\n source: event.source,\n threadId:\n subscription.configuration.destination._tag === \"ExistingThread\"\n ? subscription.configuration.destination.threadId\n : Schema.decodeSync(ThreadId)(`subscription:${deliveryId}`),\n admissionKey: Schema.decodeSync(IdempotencyKey)(`subscription:${deliveryId}`),\n selectedAtMillis: time,\n ...(limits.retention === undefined ? {} : { observeSettlement: true }),\n state: \"selected\",\n envelope: null,\n envelopeDigest: null,\n retry: {\n generation: 0,\n attempts: 0,\n automaticAttempts: 0,\n parked: false,\n nextAttemptAtMillis: time,\n lastAttemptAtMillis: null,\n lastFailure: null,\n },\n receipt: null,\n refusal: null,\n });\n });\n\n const route = Effect.fnUntraced(function* (event: AcceptedEvent) {\n const behavior = yield* source(event.source);\n const normalized = yield* behavior.normalize(event.payload);\n\n if (\n normalized.eventId !== event.eventId ||\n normalized.occurredAtMillis !== event.occurredAtMillis ||\n normalized.matchingKey !== event.matchingKey ||\n (yield* digest(normalized.payload)) !== event.payloadDigest ||\n (yield* digest(event.payload)) !== event.payloadDigest\n )\n return yield* failure(\"corrupt\", \"event-source-bindings\");\n const candidates = yield* store.candidates(event, limits.batchSize);\n const deliveries: Array<SubscriptionDelivery> = [];\n const time = yield* now;\n\n for (const candidate of candidates) {\n if (\n candidate.state !== \"active\" ||\n (candidate.configuration.expiresAtMillis !== null &&\n candidate.configuration.expiresAtMillis <= time)\n )\n continue;\n\n const config = yield* Schema.encodeEffect(SubscriptionConfiguration)(\n candidate.configuration,\n ).pipe(Effect.mapError(() => failure(\"corrupt\", \"configuration\")));\n\n const fingerprint = yield* digest({\n key: candidate.key,\n createdBy: candidate.createdBy,\n configuration: config,\n });\n\n const parameters = yield* behavior.parameters(candidate.configuration.parameters);\n\n if (\n fingerprint !== candidate.configurationFingerprint ||\n parameters.matchingKey !== candidate.configuration.matchingKey\n )\n return yield* failure(\"corrupt\", \"registration-source-bindings\");\n if (yield* behavior.matches(event, candidate))\n deliveries.push(yield* selected(event, candidate));\n }\n const cursor = candidates.at(-1)?.ordinal ?? event.cursor;\n\n yield* store.select(\n event,\n deliveries,\n cursor,\n candidates.length < limits.batchSize,\n yield* now,\n limits,\n );\n });\n\n const retry = (delivery: SubscriptionDelivery, reason: ScheduleRetryReason) =>\n now.pipe(\n Effect.flatMap((time) =>\n store.changeDelivery(delivery.key, delivery.deliveryId, {\n _tag: \"Retry\",\n nowMillis: time,\n retry: {\n generation: delivery.retry.generation,\n attempts: delivery.retry.attempts + 1,\n automaticAttempts: delivery.retry.automaticAttempts + 1,\n parked: delivery.retry.automaticAttempts + 1 >= (limits.maxAutomaticAttempts ?? 8),\n lastAttemptAtMillis: time,\n nextAttemptAtMillis: nextAttempt(time),\n lastFailure: reason,\n },\n }),\n ),\n Effect.asVoid,\n );\n\n const refuse = (\n delivery: SubscriptionDelivery,\n phase: \"preparation\" | \"admission\",\n code: string,\n ) =>\n now.pipe(\n Effect.flatMap((time) =>\n store.changeDelivery(delivery.key, delivery.deliveryId, {\n _tag: \"Refuse\",\n refusal: { phase, code },\n nowMillis: time,\n }),\n ),\n Effect.asVoid,\n );\n\n const verifySelected = Effect.fnUntraced(function* (delivery: SubscriptionDelivery) {\n const current = yield* store.get(delivery.key.subscription);\n\n const subscription =\n current === null\n ? null\n : {\n ...current,\n configuration: delivery.configuration,\n configurationRevision: delivery.configurationRevision,\n configurationFingerprint: delivery.subscriptionFingerprint,\n };\n\n const event = yield* store.event(delivery.key.eventId);\n\n if (\n subscription === null ||\n event === null ||\n !sameSource(delivery.source, event.source) ||\n !sameSource(delivery.source, subscription.configuration.source)\n )\n return yield* failure(\"corrupt\", \"selected-reference\");\n\n const expectedId = yield* digest({\n schemaVersion: 1,\n subscription: subscription.key,\n eventId: event.eventId,\n });\n\n const configuration = yield* Schema.encodeEffect(SubscriptionConfiguration)(\n subscription.configuration,\n ).pipe(Effect.mapError(() => failure(\"corrupt\", \"configuration\")));\n\n const fingerprint = yield* digest({\n key: subscription.key,\n createdBy: subscription.createdBy,\n configuration,\n });\n\n const destination = subscription.configuration.destination;\n\n if (\n delivery.subscriptionFingerprint !== fingerprint ||\n delivery.eventDigest !== event.payloadDigest ||\n (yield* digest(event.payload)) !== event.payloadDigest ||\n delivery.deliveryId !== expectedId ||\n delivery.admissionKey !== `subscription:${expectedId}` ||\n delivery.threadId !==\n (destination._tag === \"ExistingThread\"\n ? destination.threadId\n : `subscription:${expectedId}`)\n )\n return yield* failure(\"corrupt\", \"selected-bindings\");\n\n return { subscription, event };\n });\n\n const envelopeDigest = Effect.fnUntraced(function* (\n delivery: SubscriptionDelivery,\n envelope: PreparedInput,\n ) {\n const encoded = yield* Schema.encodeEffect(PreparedInput)(envelope).pipe(\n Effect.mapError(() => failure(\"corrupt\", \"prepared-envelope\")),\n );\n\n return yield* digest({\n deliveryId: delivery.deliveryId,\n subscriptionFingerprint: delivery.subscriptionFingerprint,\n eventDigest: delivery.eventDigest,\n envelope: encoded,\n });\n });\n\n const prepare = Effect.fnUntraced(function* (delivery: SubscriptionDelivery) {\n const { subscription, event } = yield* verifySelected(delivery);\n const time = yield* now;\n\n if (\n subscription.state === \"cancelled\" ||\n (subscription.configuration.expiresAtMillis !== null &&\n subscription.configuration.expiresAtMillis <= time)\n ) {\n yield* refuse(\n delivery,\n \"preparation\",\n subscription.state === \"cancelled\" ? \"cancelled\" : \"expired\",\n );\n\n return null;\n }\n const binding = yield* resolveSubscriptionInput(bindings, subscription.configuration);\n\n if ((yield* digest(event.payload)) !== event.payloadDigest)\n return yield* failure(\"corrupt\", \"event-digest\");\n const authorization = yield* authorizer.prepare(subscription, event);\n const input = yield* binding.prepare(event, subscription);\n\n if (bytes(input) > limits.maxPayloadBytes)\n return yield* SubscriptionSourceError.make({ code: \"input-bounds\", retryable: false });\n\n const envelope = yield* validate(PreparedInput, {\n schemaVersion: 1,\n threadId: delivery.threadId,\n admissionKey: delivery.admissionKey,\n deliveryPrincipal: subscription.configuration.deliveryPrincipal,\n ...(subscription.configuration.admissionGroup === undefined\n ? {}\n : { admissionGroup: subscription.configuration.admissionGroup }),\n ...(subscription.configuration.admissionFence === undefined\n ? {}\n : { admissionFence: subscription.configuration.admissionFence }),\n agentId: subscription.configuration.agentId,\n definitions: subscription.configuration.definitions,\n input,\n inputDigest: yield* digest(input),\n authorization,\n });\n\n return yield* store.changeDelivery(delivery.key, delivery.deliveryId, {\n _tag: \"Prepare\",\n envelope,\n envelopeDigest: yield* envelopeDigest(delivery, envelope),\n nowMillis: yield* now,\n });\n });\n\n const process = Effect.fnUntraced(function* (key: SubscriptionDeliveryKey) {\n let delivery = yield* store.delivery(key);\n\n if (delivery === null) return yield* failure(\"not-found\", \"delivery\");\n if (\n delivery.state === \"delivered\" &&\n delivery.observeSettlement === true &&\n delivery.receipt !== null\n ) {\n const settled =\n admission.submissionStatus === undefined\n ? false\n : yield* admission.submissionStatus(delivery.receipt).pipe(\n Effect.timeout(limits.operationTimeoutMillis),\n Effect.map((status) => status._tag === \"settled\"),\n Effect.catch((error) =>\n Effect.logWarning(\"Subscription settlement observation unavailable\", {\n tag: error._tag,\n }).pipe(Effect.as(false)),\n ),\n );\n\n const time = yield* now;\n\n yield* store.changeDelivery(\n delivery.key,\n delivery.deliveryId,\n {\n _tag: \"ObserveSettlement\",\n receipt: delivery.receipt,\n settled,\n nowMillis: time,\n nextAttemptAtMillis: nextAttempt(time),\n },\n limits,\n );\n\n return;\n }\n if (\n delivery.retry.parked === true ||\n delivery.retry.nextAttemptAtMillis > (yield* now) ||\n delivery.state === \"delivered\" ||\n delivery.state === \"refused\"\n )\n return;\n if (delivery.state === \"selected\") {\n const original = delivery;\n\n delivery = yield* prepare(original).pipe(\n Effect.timeout(limits.operationTimeoutMillis),\n Effect.catchTag(\"SubscriptionSourceError\", (error) =>\n (error.retryable\n ? retry(original, \"transport\")\n : refuse(original, \"preparation\", error.code)\n ).pipe(Effect.as(null)),\n ),\n Effect.catchTag(\"SubscriptionError\", (error) =>\n error.reason === \"unauthorized\"\n ? refuse(original, \"preparation\", error.code).pipe(Effect.as(null))\n : Effect.fail(error),\n ),\n Effect.catchTag(\"TimeoutError\", () => retry(original, \"timeout\").pipe(Effect.as(null))),\n );\n }\n if (delivery === null || delivery.state === \"refused\" || delivery.state === \"delivered\") return;\n if (\n delivery.state !== \"prepared\" ||\n delivery.envelope === null ||\n delivery.envelopeDigest === null\n )\n return yield* failure(\"corrupt\", \"prepared-state\");\n const { subscription } = yield* verifySelected(delivery);\n const envelope = delivery.envelope;\n\n if (\n (yield* digest(envelope.input)) !== envelope.inputDigest ||\n envelope.threadId !== delivery.threadId ||\n envelope.admissionKey !== delivery.admissionKey ||\n envelope.deliveryPrincipal !== subscription.configuration.deliveryPrincipal ||\n envelope.agentId !== subscription.configuration.agentId ||\n !definitionEquals(envelope.definitions, subscription.configuration.definitions) ||\n delivery.envelopeDigest !== (yield* envelopeDigest(delivery, envelope))\n )\n return yield* failure(\"corrupt\", \"prepared-envelope\");\n\n const outcome = yield* admitPreparedInput(\n admission.submit(envelope),\n limits.operationTimeoutMillis,\n ).pipe(Effect.mapError(() => failure(\"corrupt\", \"admission\")));\n\n if (outcome._tag === \"Receipt\") {\n yield* failpoint.hit(\"subscription:admission:after\");\n if (outcome.receipt.threadId !== envelope.threadId)\n return yield* failure(\"corrupt\", \"receipt-destination\");\n yield* store.changeDelivery(delivery.key, delivery.deliveryId, {\n _tag: \"Complete\",\n receipt: outcome.receipt,\n nowMillis: yield* now,\n });\n } else if (outcome._tag === \"Refused\") yield* refuse(delivery, \"admission\", outcome.error.code);\n else yield* retry(delivery, outcome.reason);\n });\n\n const processDelivery: SubscriptionDriver[\"Service\"][\"processDelivery\"] = (key) =>\n semaphore.withPermit(process(key));\n\n const reconcile = Effect.fnUntraced(function* (subscription: SubscriptionRecord) {\n const time = yield* now;\n\n if (\n subscription.state !== \"active\" ||\n (subscription.configuration.expiresAtMillis !== null &&\n subscription.configuration.expiresAtMillis <= time)\n )\n return yield* store.deferRecovery(subscription.key, subscription.configurationRevision, null);\n const behavior = yield* source(subscription.configuration.source);\n\n if (behavior.reconcile === undefined)\n return yield* failure(\"unsupported-source\", \"source-reconciliation\");\n yield* authorizer.reconcile(subscription);\n\n const observation = yield* behavior.reconcile(subscription).pipe(\n Effect.timeout(limits.operationTimeoutMillis),\n Effect.map((event) => ({ _tag: \"Observed\" as const, event })),\n Effect.catchTag(\"SubscriptionSourceError\", (error) =>\n Effect.succeed({ _tag: \"Failed\" as const, error }),\n ),\n );\n\n if (observation._tag === \"Failed\")\n return yield* store.deferRecovery(subscription.key, subscription.configurationRevision, {\n attempts: (subscription.recovery?.attempts ?? 0) + 1,\n nextAttemptAtMillis: observation.error.retryable ? nextAttempt(time) : null,\n lastFailure: observation.error.code,\n });\n const observed = observation.event;\n\n if (observed !== null) {\n const event = yield* acceptNormalized(behavior.source, observed, limits);\n\n if (event.tombstone === true)\n return yield* store.deferRecovery(subscription.key, subscription.configurationRevision, {\n attempts: (subscription.recovery?.attempts ?? 0) + 1,\n nextAttemptAtMillis: null,\n lastFailure: \"event-reclaimed\",\n });\n\n if (\n event.matchingKey !== subscription.configuration.matchingKey ||\n !(yield* behavior.matches(event, subscription))\n )\n return yield* failure(\"conflict\", \"reconciliation-match\");\n yield* store.catchUp(event, yield* selected(event, subscription), yield* now, limits);\n\n return;\n }\n yield* store.deferRecovery(subscription.key, subscription.configurationRevision, {\n attempts: (subscription.recovery?.attempts ?? 0) + 1,\n nextAttemptAtMillis: nextAttempt(time),\n lastFailure: null,\n });\n });\n\n const runDue = Effect.gen(function* () {\n const time = yield* now;\n let processed = 0;\n let failed = 0;\n\n const failureCode = <E>(cause: Cause.Cause<E>) =>\n Option.match(Cause.findErrorOption(cause), {\n onNone: () => \"defect\",\n onSome: (error) =>\n Schema.is(SubscriptionError)(error)\n ? error.reason\n : Schema.is(SubscriptionSourceError)(error)\n ? error.code\n : Schema.is(Schema.Struct({ _tag: Schema.Literal(\"TimeoutError\") }))(error)\n ? \"timeout\"\n : \"interrupted-work\",\n });\n\n const attempt = <E>(\n work: Effect.Effect<void, E>,\n recover: (code: string) => Effect.Effect<void, SubscriptionStoreFailure>,\n ) =>\n work.pipe(\n Effect.matchCauseEffect({\n onSuccess: () =>\n Effect.sync(() => {\n processed += 1;\n }),\n onFailure: (cause) =>\n Cause.hasInterruptsOnly(cause)\n ? Effect.interrupt\n : Effect.gen(function* () {\n failed += 1;\n const code = failureCode(cause);\n\n yield* recover(code).pipe(\n Effect.catchCause((c) =>\n Cause.hasInterruptsOnly(c) ? Effect.interrupt : Effect.void,\n ),\n );\n yield* Effect.logWarning(\"Subscription work remains pending\").pipe(\n Effect.annotateLogs({ failureCode: code }),\n );\n }),\n }),\n );\n\n // Persist progress even when one record cannot be decoded or deferred. An eviction cannot\n // send every sweep back to a corrupt first page. Each category receives one bounded page.\n const cursors = yield* store.readScanCursors;\n const records = yield* store.recovering(time, cursors.recovery, limits.batchSize);\n const events = yield* store.pendingEvents(time, cursors.events, limits.batchSize);\n const deliveries = yield* store.pendingDeliveries(time, cursors.deliveries, limits.batchSize);\n const lastDelivery = deliveries.at(-1);\n\n yield* store.advanceScanCursors({\n recovery: records.length < limits.batchSize ? 0 : (records.at(-1)?.ordinal ?? 0),\n events: events.length < limits.batchSize ? \"\" : (events.at(-1) ?? \"\"),\n deliveries:\n deliveries.length < limits.batchSize || lastDelivery === undefined\n ? \"\"\n : subscriptionDeliveryKeyString(lastDelivery),\n });\n yield* Effect.forEach(\n records,\n (cursor) =>\n Effect.gen(function* () {\n let record: SubscriptionRecord | null = null;\n\n yield* attempt(\n Effect.gen(function* () {\n record = yield* store.get(cursor.key);\n\n if (record !== null) yield* reconcile(record);\n }).pipe(Effect.timeout(limits.operationTimeoutMillis)),\n (code) =>\n // A failed read supplies no revision that can safely authorize a mutation.\n record === null\n ? Effect.void\n : store.deferRecovery(record.key, record.configurationRevision, {\n attempts: (record.recovery?.attempts ?? 0) + 1,\n nextAttemptAtMillis: code === \"unauthorized\" ? null : nextAttempt(time),\n lastFailure: code,\n }),\n );\n }),\n { concurrency: limits.concurrency },\n );\n yield* Effect.forEach(\n events,\n (eventId) =>\n attempt(\n store.event(eventId).pipe(\n Effect.flatMap((event) =>\n event === null ? failure(\"not-found\", \"event\") : route(event),\n ),\n Effect.timeout(limits.operationTimeoutMillis),\n ),\n (code) => store.deferEvent(eventId, nextAttempt(time), code),\n ),\n { concurrency: limits.concurrency },\n );\n yield* Effect.forEach(\n deliveries,\n (key) =>\n attempt(processDelivery(key), () =>\n store\n .delivery(key)\n .pipe(\n Effect.flatMap((delivery) =>\n delivery === null ? Effect.void : retry(delivery, \"ambiguous\"),\n ),\n ),\n ),\n { concurrency: limits.concurrency },\n );\n\n if (limits.retention !== undefined)\n yield* store.compact(yield* now, limits.retention, limits.batchSize);\n\n return { processed, failed };\n });\n\n return SubscriptionDriver.of({ runDue: sweepSemaphore.withPermit(runDue), processDelivery });\n});\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { $a as
|
|
1
|
+
import { $a as ThreadArchiveRangeRead, Ja as MAX_ARCHIVE_RANGE_RECORDS, Ka as MAX_ARCHIVE_RANGE_BYTES, Qa as ThreadArchiveRangePublish, Xa as ThreadArchiveRange, Ya as MAX_CANONICAL_BATCH_BYTES, Za as ThreadArchiveRangePage, eo as ThreadArchiveRangeRequest, qa as MAX_ARCHIVE_RANGE_PAGE, ro as ThreadArchiveStorage, to as ThreadArchiveRangeSeal } from "../Admin-Qa3I1oA5.mjs";
|
|
2
2
|
export { MAX_ARCHIVE_RANGE_BYTES, MAX_ARCHIVE_RANGE_PAGE, MAX_ARCHIVE_RANGE_RECORDS, MAX_CANONICAL_BATCH_BYTES, ThreadArchiveRange, ThreadArchiveRangePage, ThreadArchiveRangePublish, ThreadArchiveRangeRead, ThreadArchiveRangeRequest, ThreadArchiveRangeSeal, ThreadArchiveStorage };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as __exportAll } from "../rolldown-runtime-D7D4PA-g.mjs";
|
|
2
2
|
import { ThreadId } from "../core/Identifiers.mjs";
|
|
3
|
-
import { f as CanonicalSequence } from "../Records-
|
|
3
|
+
import { f as CanonicalSequence } from "../Records-DzL4Kbtw.mjs";
|
|
4
4
|
import { Schema } from "effect";
|
|
5
5
|
//#region src/durable/ThreadArchiveRange.ts
|
|
6
6
|
var ThreadArchiveRange_exports = /* @__PURE__ */ __exportAll({
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ContextHistory, ContextHistoryError } from "../engine/ContextHistory.mjs";
|
|
2
|
-
import { Ui as ThreadStore } from "../Admin-
|
|
2
|
+
import { Ui as ThreadStore } from "../Admin-Qa3I1oA5.mjs";
|
|
3
3
|
import { Layer, Schema } from "effect";
|
|
4
4
|
declare namespace ThreadContextHistory_d_exports {
|
|
5
5
|
export { ThreadContextHistoryOptions, layer };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t as __exportAll } from "../rolldown-runtime-D7D4PA-g.mjs";
|
|
2
2
|
import { ContextHistory, ContextHistoryError, ContextHistoryHit, ContextHistoryPage, ContextHistoryRead, ContextHistorySearch } from "../engine/ContextHistory.mjs";
|
|
3
|
-
import { Z as RecordId, f as CanonicalSequence, u as CanonicalRecordEnvelope } from "../Records-
|
|
4
|
-
import { $ as ThreadTailRequest, J as ThreadStore, Q as ThreadTail, V as ThreadRead, b as SelectedThreadRead } from "../ThreadStore-
|
|
3
|
+
import { Z as RecordId, f as CanonicalSequence, u as CanonicalRecordEnvelope } from "../Records-DzL4Kbtw.mjs";
|
|
4
|
+
import { $ as ThreadTailRequest, J as ThreadStore, Q as ThreadTail, V as ThreadRead, b as SelectedThreadRead } from "../ThreadStore-EuUilthA.mjs";
|
|
5
5
|
import { matchText, normalizeQuery, project, windowIdFor } from "./ThreadContextHistoryProjection.mjs";
|
|
6
6
|
import { Effect, Layer, Schema, Stream } from "effect";
|
|
7
7
|
//#region src/durable/ThreadContextHistory.ts
|
|
@@ -2,7 +2,7 @@ import { t as __exportAll } from "../rolldown-runtime-D7D4PA-g.mjs";
|
|
|
2
2
|
import { RunId } from "../core/Identifiers.mjs";
|
|
3
3
|
import { f as contextWindowId } from "../compaction-CgFMDiXL.mjs";
|
|
4
4
|
import { ContextHistoryError, ContextHistorySearch } from "../engine/ContextHistory.mjs";
|
|
5
|
-
import { U as PersistedJson, Z as RecordId, f as CanonicalSequence } from "../Records-
|
|
5
|
+
import { U as PersistedJson, Z as RecordId, f as CanonicalSequence } from "../Records-DzL4Kbtw.mjs";
|
|
6
6
|
import { Effect, Schema } from "effect";
|
|
7
7
|
import { Prompt } from "effect/ai";
|
|
8
8
|
//#region src/durable/ThreadContextHistoryProjection.ts
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { C as ThreadDeliveryImportReader, S as verifyImportedReferences, _ as reencodeThread, a as ThreadImport, b as validateImportedRunExecution, c as ThreadImportResult, d as finishThreadImport, f as invalidThreadArchive, g as rebuildImportedSubmission, h as rebuildClosedSubmission, i as ThreadArchive, m as prepareImportPage, n as PreparedImportPage, o as ThreadImportProgress, p as makeThreadImportProgress, r as RebuiltSubmission, s as ThreadImportRejected, t as PreparedImportBatch, u as captureImportSource, v as validateClosedRun, w as ThreadImportReader, x as verifyImportedInputOrder, y as validateImportedExecution } from "../ThreadImport-
|
|
1
|
+
import { C as ThreadDeliveryImportReader, S as verifyImportedReferences, _ as reencodeThread, a as ThreadImport, b as validateImportedRunExecution, c as ThreadImportResult, d as finishThreadImport, f as invalidThreadArchive, g as rebuildImportedSubmission, h as rebuildClosedSubmission, i as ThreadArchive, m as prepareImportPage, n as PreparedImportPage, o as ThreadImportProgress, p as makeThreadImportProgress, r as RebuiltSubmission, s as ThreadImportRejected, t as PreparedImportBatch, u as captureImportSource, v as validateClosedRun, w as ThreadImportReader, x as verifyImportedInputOrder, y as validateImportedExecution } from "../ThreadImport-DP-vOk2F.mjs";
|
|
2
2
|
export { PreparedImportBatch, PreparedImportPage, RebuiltSubmission, ThreadArchive, ThreadDeliveryImportReader, ThreadImport, ThreadImportProgress, ThreadImportReader, ThreadImportRejected, ThreadImportResult, captureImportSource, finishThreadImport, invalidThreadArchive, makeThreadImportProgress, prepareImportPage, rebuildClosedSubmission, rebuildImportedSubmission, reencodeThread, validateClosedRun, validateImportedExecution, validateImportedRunExecution, verifyImportedInputOrder, verifyImportedReferences };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { _ as validateImportedRunExecution, a as ThreadImportResult, b as ThreadDeliveryImportReader, c as finishThreadImport, d as prepareImportPage, f as rebuildClosedSubmission, g as validateImportedExecution, h as validateClosedRun, i as ThreadImportRejected, l as invalidThreadArchive, m as reencodeThread, n as ThreadArchive, p as rebuildImportedSubmission, r as ThreadImport, s as captureImportSource, t as RebuiltSubmission, u as makeThreadImportProgress, v as verifyImportedInputOrder, x as ThreadImportReader, y as verifyImportedReferences } from "../ThreadImport-
|
|
1
|
+
import { _ as validateImportedRunExecution, a as ThreadImportResult, b as ThreadDeliveryImportReader, c as finishThreadImport, d as prepareImportPage, f as rebuildClosedSubmission, g as validateImportedExecution, h as validateClosedRun, i as ThreadImportRejected, l as invalidThreadArchive, m as reencodeThread, n as ThreadArchive, p as rebuildImportedSubmission, r as ThreadImport, s as captureImportSource, t as RebuiltSubmission, u as makeThreadImportProgress, v as verifyImportedInputOrder, x as ThreadImportReader, y as verifyImportedReferences } from "../ThreadImport-CjlG57vH.mjs";
|
|
2
2
|
export { RebuiltSubmission, ThreadArchive, ThreadDeliveryImportReader, ThreadImport, ThreadImportReader, ThreadImportRejected, ThreadImportResult, captureImportSource, finishThreadImport, invalidThreadArchive, makeThreadImportProgress, prepareImportPage, rebuildClosedSubmission, rebuildImportedSubmission, reencodeThread, validateClosedRun, validateImportedExecution, validateImportedRunExecution, verifyImportedInputOrder, verifyImportedReferences };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { s as RunId, u as ThreadId } from "../Identifiers-CN2s30fF.mjs";
|
|
2
|
-
import { $r as ExecutionCheckpoint, Gi as ThreadStoreError, c as IntegrityReport, vi as ThreadCheckpoint, vn as SubmissionSnapshot, xi as ThreadExport } from "../Admin-
|
|
3
|
-
import { t as RunContextReader } from "../run-context-reader-
|
|
4
|
-
import { w as ThreadImportReader } from "../ThreadImport-
|
|
2
|
+
import { $r as ExecutionCheckpoint, Gi as ThreadStoreError, c as IntegrityReport, vi as ThreadCheckpoint, vn as SubmissionSnapshot, xi as ThreadExport } from "../Admin-Qa3I1oA5.mjs";
|
|
3
|
+
import { t as RunContextReader } from "../run-context-reader-DVhJZ1Qe.mjs";
|
|
4
|
+
import { w as ThreadImportReader } from "../ThreadImport-DP-vOk2F.mjs";
|
|
5
5
|
import { Effect, Stream } from "effect";
|
|
6
6
|
declare namespace ThreadInvariants_d_exports {
|
|
7
7
|
export { ThreadInvariantInput, verifyThreadInvariants };
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { t as __exportAll } from "../rolldown-runtime-D7D4PA-g.mjs";
|
|
2
|
-
import { f as CanonicalSequence } from "../Records-
|
|
2
|
+
import { f as CanonicalSequence } from "../Records-DzL4Kbtw.mjs";
|
|
3
3
|
import { submissionInputRecordId, submissionSettlementRecordId, workerTerminalFromRecord } from "./SubmissionLedger.mjs";
|
|
4
4
|
import { IntegrityCheck, IntegrityReport } from "./Admin.mjs";
|
|
5
|
-
import { E as ThreadExport, X as ThreadStoreError, ht as canonicalRunIds, mt as recordEncoding } from "../ThreadStore-
|
|
6
|
-
import { h as verifyRunContinuations } from "../RunContinuation-
|
|
7
|
-
import { _ as validateImportedRunExecution, c as finishThreadImport, d as prepareImportPage, g as validateImportedExecution, i as ThreadImportRejected, n as ThreadArchive, p as rebuildImportedSubmission, u as makeThreadImportProgress, v as verifyImportedInputOrder, x as ThreadImportReader, y as verifyImportedReferences } from "../ThreadImport-
|
|
5
|
+
import { E as ThreadExport, X as ThreadStoreError, ht as canonicalRunIds, mt as recordEncoding } from "../ThreadStore-EuUilthA.mjs";
|
|
6
|
+
import { h as verifyRunContinuations } from "../RunContinuation-BiyKJK32.mjs";
|
|
7
|
+
import { _ as validateImportedRunExecution, c as finishThreadImport, d as prepareImportPage, g as validateImportedExecution, i as ThreadImportRejected, n as ThreadArchive, p as rebuildImportedSubmission, u as makeThreadImportProgress, v as verifyImportedInputOrder, x as ThreadImportReader, y as verifyImportedReferences } from "../ThreadImport-CjlG57vH.mjs";
|
|
8
8
|
import { Effect, Schema, Stream } from "effect";
|
|
9
9
|
//#region src/durable/ThreadInvariants.ts
|
|
10
10
|
var ThreadInvariants_exports = /* @__PURE__ */ __exportAll({ verifyThreadInvariants: () => verifyThreadInvariants });
|
|
@@ -54,7 +54,7 @@ const verifyThreadInvariants = Effect.fnUntraced(function* (input) {
|
|
|
54
54
|
yield* Effect.gen(function* () {
|
|
55
55
|
for (const runId of canonicalRunIds(entry.record)) {
|
|
56
56
|
const selected = (yield* readVerifiedRun(runId)).get(entry.record.recordId);
|
|
57
|
-
if (selected === void 0 || selected.sequence !== entry.sequence || selected.batchId !== entry.batchId || recordEncoding(selected.record).json !== recordEncoding(entry.record).json) fail("continuation-evidence", `Canonical record ${entry.record.recordId} is missing or differs from retained Run evidence`);
|
|
57
|
+
if (selected === void 0 || selected.sequence !== entry.sequence || selected.batchId !== entry.batchId || (yield* Effect.fromResult(recordEncoding(selected.record))).json !== (yield* Effect.fromResult(recordEncoding(entry.record))).json) fail("continuation-evidence", `Canonical record ${entry.record.recordId} is missing or differs from retained Run evidence`);
|
|
58
58
|
}
|
|
59
59
|
}).pipe(Effect.match({
|
|
60
60
|
onSuccess: () => void 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThreadInvariants.mjs","names":[],"sources":["../../src/durable/ThreadInvariants.ts"],"sourcesContent":["import { Effect, Schema, Stream } from \"effect\";\n\nimport type { RunId, ThreadId } from \"../core/Identifiers.ts\";\nimport { IntegrityCheck, IntegrityReport, type IntegrityCheckName } from \"./Admin.ts\";\nimport { recordEncoding } from \"./internal/record-encoding.ts\";\nimport { CanonicalSequence, type CanonicalRecordEnvelope, type RecordId } from \"./Records.ts\";\nimport { canonicalRunIds, verifyRunContinuations } from \"./RunContinuation.ts\";\nimport {\n submissionInputRecordId,\n submissionSettlementRecordId,\n workerTerminalFromRecord,\n type SubmissionSnapshot,\n} from \"./SubmissionLedger.ts\";\nimport {\n ThreadArchive,\n makeThreadImportProgress,\n prepareImportPage,\n finishThreadImport,\n rebuildImportedSubmission,\n verifyImportedReferences,\n verifyImportedInputOrder,\n ThreadImportRejected,\n ThreadImportReader,\n validateImportedExecution,\n validateImportedRunExecution,\n} from \"./ThreadImport.ts\";\nimport {\n ThreadExport,\n ThreadStoreError,\n type ThreadCheckpoint,\n type ExecutionCheckpoint,\n} from \"./ThreadStore.ts\";\n\n/** All reads share the export snapshot. No lifetime identity sets or materialization. */\nexport interface ThreadInvariantInput<E = ThreadStoreError, R = never> {\n readonly threadId: ThreadId;\n readonly pages: Stream.Stream<ThreadExport, E, R>;\n /** Complete directory, including settled rows, ordered by queueSequence. */\n readonly submissions: Stream.Stream<SubmissionSnapshot, E, R>;\n readonly runs: Stream.Stream<RunId, E, R>;\n /** Includes orphan active rows; never obtained through idle-only public export. */\n readonly executions: Stream.Stream<ExecutionCheckpoint, E, R>;\n readonly checkpoint?: ThreadCheckpoint;\n readonly checkpointsSupported?: boolean;\n readonly requireAllSettled?: boolean;\n}\n\n/** Indexed streaming verification; bounded Run evidence is the only retained selection. */\nexport const verifyThreadInvariants = Effect.fnUntraced(function* <E, R>(\n input: ThreadInvariantInput<E, R>,\n) {\n const reader = yield* ThreadImportReader;\n const failures = new Map<IntegrityCheckName, string>();\n\n const fail = (name: IntegrityCheckName, detail: string) => {\n if (!failures.has(name)) failures.set(name, detail.slice(0, 4096));\n };\n\n const progress = makeThreadImportProgress();\n\n // Canonical pages, not the disposable Run directory, determine which retained facts to check.\n // Retain only one bounded selection; interleaved Runs may require another explicit read.\n let verifiedRun:\n | { readonly runId: RunId; readonly records: ReadonlyMap<RecordId, CanonicalRecordEnvelope> }\n | undefined;\n\n const readVerifiedRun = Effect.fnUntraced(function* (runId: RunId) {\n if (verifiedRun?.runId === runId) return verifiedRun.records;\n verifiedRun = undefined;\n const records = yield* reader.runRecords(runId);\n let after = 0;\n\n for (const entry of records) {\n if (\n entry.threadId !== input.threadId ||\n entry.sequence <= after ||\n entry.sequence > (progress.manifest?.tailSequence ?? 0) ||\n !canonicalRunIds(entry.record).includes(runId)\n )\n return yield* ThreadStoreError.make({\n operation: \"verify Run continuation\",\n message: \"Run evidence has foreign ownership or invalid canonical ordering\",\n });\n after = entry.sequence;\n }\n yield* verifyRunContinuations(records, { verifyContext: false });\n yield* validateImportedRunExecution(\n input.threadId,\n runId,\n progress.manifest?.tailSequence ?? CanonicalSequence.make(0),\n );\n const byId = new Map(records.map((entry) => [entry.record.recordId, entry]));\n\n verifiedRun = { runId, records: byId };\n\n return byId;\n });\n\n let lastInputQueue = -1;\n let checkpointBound = input.checkpoint?.throughSequence === 0;\n\n yield* Stream.runForEach(input.pages, (page) =>\n Effect.gen(function* () {\n if (page.threadId !== input.threadId)\n fail(\"record-identity\", \"Export belongs to another Thread\");\n\n const prepared = yield* Schema.encodeEffect(ThreadExport)(page).pipe(\n Effect.flatMap(Schema.decodeUnknownEffect(ThreadArchive)),\n Effect.flatMap((archive) => prepareImportPage(progress, archive, { verification: true })),\n Effect.match({\n onFailure: (e) => {\n for (const name of [\"schema-round-trip\", \"sequence-contiguity\"] as const)\n fail(name, e.message);\n\n return undefined;\n },\n onSuccess: (p) => p,\n }),\n );\n\n if (prepared === undefined) return;\n for (const batch of prepared.batches)\n if (batch.lastSequence === input.checkpoint?.throughSequence) checkpointBound = true;\n for (const entry of prepared.records) {\n yield* Effect.gen(function* () {\n for (const runId of canonicalRunIds(entry.record)) {\n const selected = (yield* readVerifiedRun(runId)).get(entry.record.recordId);\n\n if (\n selected === undefined ||\n selected.sequence !== entry.sequence ||\n selected.batchId !== entry.batchId ||\n recordEncoding(selected.record).json !== recordEncoding(entry.record).json\n )\n fail(\n \"continuation-evidence\",\n `Canonical record ${entry.record.recordId} is missing or differs from retained Run evidence`,\n );\n }\n }).pipe(\n Effect.match({\n onSuccess: () => undefined,\n onFailure: (e) => fail(\"continuation-evidence\", e.message),\n }),\n );\n yield* verifyImportedReferences(entry).pipe(\n Effect.match({\n onSuccess: () => undefined,\n onFailure: (e) => fail(\"continuation-evidence\", e.message),\n }),\n );\n const exact = yield* reader.record(entry.record.recordId);\n\n if (\n exact === undefined ||\n exact.sequence !== entry.sequence ||\n exact.threadId !== entry.threadId ||\n exact.batchId !== entry.batchId\n )\n fail(\n \"record-identity\",\n `Record ${entry.record.recordId} has conflicting indexed identity`,\n );\n const payload = entry.record.payload;\n\n if (payload._tag === \"UserInputRecorded\" && payload.submissionId !== undefined) {\n const admission = yield* reader.admission(payload.submissionId);\n\n if (\n admission === undefined ||\n entry.record.recordId !== submissionInputRecordId(payload.submissionId)\n )\n fail(\"ledger-canonical-agreement\", \"Canonical input has no exact immutable admission\");\n else if (admission.queueSequence <= lastInputQueue)\n fail(\"fifo-input-order\", \"Canonical inputs violate immutable admission order\");\n else lastInputQueue = admission.queueSequence;\n }\n if (payload._tag === \"SubmissionSettled\") {\n if (entry.record.recordId !== submissionSettlementRecordId(payload.submissionId))\n fail(\"terminal-uniqueness\", \"Settlement has a noncanonical identity\");\n if ((yield* reader.admission(payload.submissionId)) === undefined)\n fail(\"ledger-canonical-agreement\", \"Settlement has no immutable admission\");\n }\n }\n }),\n );\n yield* finishThreadImport(progress).pipe(\n Effect.match({\n onSuccess: () => undefined,\n onFailure: (e) => {\n fail(\"sequence-contiguity\", e.message);\n },\n }),\n );\n yield* Stream.runForEach(input.executions, (checkpoint) =>\n validateImportedExecution(\n input.threadId,\n checkpoint,\n progress.manifest?.tailSequence ?? CanonicalSequence.make(0),\n ).pipe(\n Effect.match({\n onSuccess: () => undefined,\n onFailure: (e) => fail(\"continuation-evidence\", e.message),\n }),\n ),\n );\n yield* Stream.runForEach(input.runs, (runId) =>\n readVerifiedRun(runId).pipe(\n Effect.match({\n onSuccess: () => undefined,\n onFailure: (e) => fail(\"continuation-evidence\", e.message),\n }),\n ),\n );\n verifiedRun = undefined;\n let submissionCount = 0;\n const workerSeal = progress.manifest?.workerSeal;\n let sealTerminalEvidence = workerSeal?.terminal === undefined;\n let lastQueue = -1;\n\n yield* Stream.runForEach(input.submissions, (row) =>\n Effect.gen(function* () {\n submissionCount++;\n if (row.threadId !== input.threadId || row.queueSequence <= lastQueue)\n fail(\"record-identity\", \"Admission directory is not unique and ordered\");\n lastQueue = row.queueSequence;\n const admission = yield* reader.admission(row.submissionId);\n\n if (admission === undefined) {\n fail(\"ledger-canonical-agreement\", \"Ledger row has no immutable admission\");\n\n return;\n }\n yield* rebuildImportedSubmission(admission).pipe(\n Effect.match({\n onFailure: (e) => {\n fail(\"ledger-canonical-agreement\", e.message);\n\n return undefined;\n },\n onSuccess: (s) => s,\n }),\n );\n const settlement = yield* reader.record(submissionSettlementRecordId(row.submissionId));\n\n if (\n row.state === \"settled\" &&\n settlement !== undefined &&\n workerTerminalFromRecord(row, settlement.record) === workerSeal?.terminal\n )\n sealTerminalEvidence = true;\n const payload = settlement?.record.payload;\n\n if (row.state === \"settled\" && payload?._tag !== \"SubmissionSettled\")\n fail(\"terminal-uniqueness\", \"Settled ledger row has no canonical settlement\");\n if (\n row.state === \"settled\" &&\n (payload?._tag !== \"SubmissionSettled\" || row.settledOutcome !== payload.outcome)\n )\n fail(\n \"ledger-canonical-agreement\",\n \"Ledger input or terminal projection differs from canonical evidence\",\n );\n if (input.requireAllSettled && row.state !== \"settled\")\n fail(\"all-settled\", `Submission ${row.submissionId} is ${row.state}`);\n yield* verifyImportedInputOrder(row).pipe(\n Effect.catchIf(Schema.is(ThreadImportRejected), (e) =>\n Effect.sync(() => fail(\"input-before-settlement\", e.message)),\n ),\n );\n }),\n );\n if (submissionCount !== progress.counts.admissions)\n fail(\"ledger-canonical-agreement\", \"Admission directory differs from the captured fact count\");\n if (!sealTerminalEvidence)\n fail(\"ledger-canonical-agreement\", \"Worker seal terminal has no exact settled worker evidence\");\n if (input.requireAllSettled && submissionCount === 0)\n fail(\"all-settled\", \"No submissions are known\");\n if (\n input.checkpoint !== undefined &&\n (input.checkpoint.threadId !== input.threadId || !checkpointBound)\n )\n fail(\"checkpoint-binding\", \"Checkpoint is not bound to a complete canonical batch tail\");\n\n const names: Array<IntegrityCheckName> = [\n \"schema-round-trip\",\n \"record-identity\",\n \"sequence-contiguity\",\n \"continuation-evidence\",\n \"fifo-input-order\",\n \"input-before-settlement\",\n \"terminal-uniqueness\",\n \"ledger-canonical-agreement\",\n \"checkpoint-binding\",\n ];\n\n if (input.requireAllSettled) names.push(\"all-settled\");\n\n const checks = names.map((name) =>\n IntegrityCheck.make({\n name,\n status: failures.has(name)\n ? \"failed\"\n : name === \"checkpoint-binding\" &&\n input.checkpoint === undefined &&\n !input.checkpointsSupported\n ? \"skipped\"\n : \"passed\",\n ...(failures.has(name) ? { detail: failures.get(name) } : {}),\n }),\n );\n\n return IntegrityReport.make({\n threadId: input.threadId,\n tailSequence: progress.manifest?.tailSequence ?? CanonicalSequence.make(0),\n recordCount: progress.sequence,\n submissionCount,\n checks,\n ok: failures.size === 0,\n });\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ThreadInvariants.mjs","names":[],"sources":["../../src/durable/ThreadInvariants.ts"],"sourcesContent":["import { Effect, Schema, Stream } from \"effect\";\n\nimport type { RunId, ThreadId } from \"../core/Identifiers.ts\";\nimport { IntegrityCheck, IntegrityReport, type IntegrityCheckName } from \"./Admin.ts\";\nimport { recordEncoding } from \"./internal/record-encoding.ts\";\nimport { CanonicalSequence, type CanonicalRecordEnvelope, type RecordId } from \"./Records.ts\";\nimport { canonicalRunIds, verifyRunContinuations } from \"./RunContinuation.ts\";\nimport {\n submissionInputRecordId,\n submissionSettlementRecordId,\n workerTerminalFromRecord,\n type SubmissionSnapshot,\n} from \"./SubmissionLedger.ts\";\nimport {\n ThreadArchive,\n makeThreadImportProgress,\n prepareImportPage,\n finishThreadImport,\n rebuildImportedSubmission,\n verifyImportedReferences,\n verifyImportedInputOrder,\n ThreadImportRejected,\n ThreadImportReader,\n validateImportedExecution,\n validateImportedRunExecution,\n} from \"./ThreadImport.ts\";\nimport {\n ThreadExport,\n ThreadStoreError,\n type ThreadCheckpoint,\n type ExecutionCheckpoint,\n} from \"./ThreadStore.ts\";\n\n/** All reads share the export snapshot. No lifetime identity sets or materialization. */\nexport interface ThreadInvariantInput<E = ThreadStoreError, R = never> {\n readonly threadId: ThreadId;\n readonly pages: Stream.Stream<ThreadExport, E, R>;\n /** Complete directory, including settled rows, ordered by queueSequence. */\n readonly submissions: Stream.Stream<SubmissionSnapshot, E, R>;\n readonly runs: Stream.Stream<RunId, E, R>;\n /** Includes orphan active rows; never obtained through idle-only public export. */\n readonly executions: Stream.Stream<ExecutionCheckpoint, E, R>;\n readonly checkpoint?: ThreadCheckpoint;\n readonly checkpointsSupported?: boolean;\n readonly requireAllSettled?: boolean;\n}\n\n/** Indexed streaming verification; bounded Run evidence is the only retained selection. */\nexport const verifyThreadInvariants = Effect.fnUntraced(function* <E, R>(\n input: ThreadInvariantInput<E, R>,\n) {\n const reader = yield* ThreadImportReader;\n const failures = new Map<IntegrityCheckName, string>();\n\n const fail = (name: IntegrityCheckName, detail: string) => {\n if (!failures.has(name)) failures.set(name, detail.slice(0, 4096));\n };\n\n const progress = makeThreadImportProgress();\n\n // Canonical pages, not the disposable Run directory, determine which retained facts to check.\n // Retain only one bounded selection; interleaved Runs may require another explicit read.\n let verifiedRun:\n | { readonly runId: RunId; readonly records: ReadonlyMap<RecordId, CanonicalRecordEnvelope> }\n | undefined;\n\n const readVerifiedRun = Effect.fnUntraced(function* (runId: RunId) {\n if (verifiedRun?.runId === runId) return verifiedRun.records;\n verifiedRun = undefined;\n const records = yield* reader.runRecords(runId);\n let after = 0;\n\n for (const entry of records) {\n if (\n entry.threadId !== input.threadId ||\n entry.sequence <= after ||\n entry.sequence > (progress.manifest?.tailSequence ?? 0) ||\n !canonicalRunIds(entry.record).includes(runId)\n )\n return yield* ThreadStoreError.make({\n operation: \"verify Run continuation\",\n message: \"Run evidence has foreign ownership or invalid canonical ordering\",\n });\n after = entry.sequence;\n }\n yield* verifyRunContinuations(records, { verifyContext: false });\n yield* validateImportedRunExecution(\n input.threadId,\n runId,\n progress.manifest?.tailSequence ?? CanonicalSequence.make(0),\n );\n const byId = new Map(records.map((entry) => [entry.record.recordId, entry]));\n\n verifiedRun = { runId, records: byId };\n\n return byId;\n });\n\n let lastInputQueue = -1;\n let checkpointBound = input.checkpoint?.throughSequence === 0;\n\n yield* Stream.runForEach(input.pages, (page) =>\n Effect.gen(function* () {\n if (page.threadId !== input.threadId)\n fail(\"record-identity\", \"Export belongs to another Thread\");\n\n const prepared = yield* Schema.encodeEffect(ThreadExport)(page).pipe(\n Effect.flatMap(Schema.decodeUnknownEffect(ThreadArchive)),\n Effect.flatMap((archive) => prepareImportPage(progress, archive, { verification: true })),\n Effect.match({\n onFailure: (e) => {\n for (const name of [\"schema-round-trip\", \"sequence-contiguity\"] as const)\n fail(name, e.message);\n\n return undefined;\n },\n onSuccess: (p) => p,\n }),\n );\n\n if (prepared === undefined) return;\n for (const batch of prepared.batches)\n if (batch.lastSequence === input.checkpoint?.throughSequence) checkpointBound = true;\n for (const entry of prepared.records) {\n yield* Effect.gen(function* () {\n for (const runId of canonicalRunIds(entry.record)) {\n const selected = (yield* readVerifiedRun(runId)).get(entry.record.recordId);\n\n if (\n selected === undefined ||\n selected.sequence !== entry.sequence ||\n selected.batchId !== entry.batchId ||\n (yield* Effect.fromResult(recordEncoding(selected.record))).json !==\n (yield* Effect.fromResult(recordEncoding(entry.record))).json\n )\n fail(\n \"continuation-evidence\",\n `Canonical record ${entry.record.recordId} is missing or differs from retained Run evidence`,\n );\n }\n }).pipe(\n Effect.match({\n onSuccess: () => undefined,\n onFailure: (e) => fail(\"continuation-evidence\", e.message),\n }),\n );\n yield* verifyImportedReferences(entry).pipe(\n Effect.match({\n onSuccess: () => undefined,\n onFailure: (e) => fail(\"continuation-evidence\", e.message),\n }),\n );\n const exact = yield* reader.record(entry.record.recordId);\n\n if (\n exact === undefined ||\n exact.sequence !== entry.sequence ||\n exact.threadId !== entry.threadId ||\n exact.batchId !== entry.batchId\n )\n fail(\n \"record-identity\",\n `Record ${entry.record.recordId} has conflicting indexed identity`,\n );\n const payload = entry.record.payload;\n\n if (payload._tag === \"UserInputRecorded\" && payload.submissionId !== undefined) {\n const admission = yield* reader.admission(payload.submissionId);\n\n if (\n admission === undefined ||\n entry.record.recordId !== submissionInputRecordId(payload.submissionId)\n )\n fail(\"ledger-canonical-agreement\", \"Canonical input has no exact immutable admission\");\n else if (admission.queueSequence <= lastInputQueue)\n fail(\"fifo-input-order\", \"Canonical inputs violate immutable admission order\");\n else lastInputQueue = admission.queueSequence;\n }\n if (payload._tag === \"SubmissionSettled\") {\n if (entry.record.recordId !== submissionSettlementRecordId(payload.submissionId))\n fail(\"terminal-uniqueness\", \"Settlement has a noncanonical identity\");\n if ((yield* reader.admission(payload.submissionId)) === undefined)\n fail(\"ledger-canonical-agreement\", \"Settlement has no immutable admission\");\n }\n }\n }),\n );\n yield* finishThreadImport(progress).pipe(\n Effect.match({\n onSuccess: () => undefined,\n onFailure: (e) => {\n fail(\"sequence-contiguity\", e.message);\n },\n }),\n );\n yield* Stream.runForEach(input.executions, (checkpoint) =>\n validateImportedExecution(\n input.threadId,\n checkpoint,\n progress.manifest?.tailSequence ?? CanonicalSequence.make(0),\n ).pipe(\n Effect.match({\n onSuccess: () => undefined,\n onFailure: (e) => fail(\"continuation-evidence\", e.message),\n }),\n ),\n );\n yield* Stream.runForEach(input.runs, (runId) =>\n readVerifiedRun(runId).pipe(\n Effect.match({\n onSuccess: () => undefined,\n onFailure: (e) => fail(\"continuation-evidence\", e.message),\n }),\n ),\n );\n verifiedRun = undefined;\n let submissionCount = 0;\n const workerSeal = progress.manifest?.workerSeal;\n let sealTerminalEvidence = workerSeal?.terminal === undefined;\n let lastQueue = -1;\n\n yield* Stream.runForEach(input.submissions, (row) =>\n Effect.gen(function* () {\n submissionCount++;\n if (row.threadId !== input.threadId || row.queueSequence <= lastQueue)\n fail(\"record-identity\", \"Admission directory is not unique and ordered\");\n lastQueue = row.queueSequence;\n const admission = yield* reader.admission(row.submissionId);\n\n if (admission === undefined) {\n fail(\"ledger-canonical-agreement\", \"Ledger row has no immutable admission\");\n\n return;\n }\n yield* rebuildImportedSubmission(admission).pipe(\n Effect.match({\n onFailure: (e) => {\n fail(\"ledger-canonical-agreement\", e.message);\n\n return undefined;\n },\n onSuccess: (s) => s,\n }),\n );\n const settlement = yield* reader.record(submissionSettlementRecordId(row.submissionId));\n\n if (\n row.state === \"settled\" &&\n settlement !== undefined &&\n workerTerminalFromRecord(row, settlement.record) === workerSeal?.terminal\n )\n sealTerminalEvidence = true;\n const payload = settlement?.record.payload;\n\n if (row.state === \"settled\" && payload?._tag !== \"SubmissionSettled\")\n fail(\"terminal-uniqueness\", \"Settled ledger row has no canonical settlement\");\n if (\n row.state === \"settled\" &&\n (payload?._tag !== \"SubmissionSettled\" || row.settledOutcome !== payload.outcome)\n )\n fail(\n \"ledger-canonical-agreement\",\n \"Ledger input or terminal projection differs from canonical evidence\",\n );\n if (input.requireAllSettled && row.state !== \"settled\")\n fail(\"all-settled\", `Submission ${row.submissionId} is ${row.state}`);\n yield* verifyImportedInputOrder(row).pipe(\n Effect.catchIf(Schema.is(ThreadImportRejected), (e) =>\n Effect.sync(() => fail(\"input-before-settlement\", e.message)),\n ),\n );\n }),\n );\n if (submissionCount !== progress.counts.admissions)\n fail(\"ledger-canonical-agreement\", \"Admission directory differs from the captured fact count\");\n if (!sealTerminalEvidence)\n fail(\"ledger-canonical-agreement\", \"Worker seal terminal has no exact settled worker evidence\");\n if (input.requireAllSettled && submissionCount === 0)\n fail(\"all-settled\", \"No submissions are known\");\n if (\n input.checkpoint !== undefined &&\n (input.checkpoint.threadId !== input.threadId || !checkpointBound)\n )\n fail(\"checkpoint-binding\", \"Checkpoint is not bound to a complete canonical batch tail\");\n\n const names: Array<IntegrityCheckName> = [\n \"schema-round-trip\",\n \"record-identity\",\n \"sequence-contiguity\",\n \"continuation-evidence\",\n \"fifo-input-order\",\n \"input-before-settlement\",\n \"terminal-uniqueness\",\n \"ledger-canonical-agreement\",\n \"checkpoint-binding\",\n ];\n\n if (input.requireAllSettled) names.push(\"all-settled\");\n\n const checks = names.map((name) =>\n IntegrityCheck.make({\n name,\n status: failures.has(name)\n ? \"failed\"\n : name === \"checkpoint-binding\" &&\n input.checkpoint === undefined &&\n !input.checkpointsSupported\n ? \"skipped\"\n : \"passed\",\n ...(failures.has(name) ? { detail: failures.get(name) } : {}),\n }),\n );\n\n return IntegrityReport.make({\n threadId: input.threadId,\n tailSequence: progress.manifest?.tailSequence ?? CanonicalSequence.make(0),\n recordCount: progress.sequence,\n submissionCount,\n checks,\n ok: failures.size === 0,\n });\n});\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as __exportAll } from "../rolldown-runtime-D7D4PA-g.mjs";
|
|
2
2
|
import { RunId, ThreadId, ToolCallId } from "../core/Identifiers.mjs";
|
|
3
|
-
import { Tt as ToolCallUnknown, U as PersistedJson, _t as SubmissionSettledRecord, bt as ToolApprovalDecided, f as CanonicalSequence, ft as SubagentJoined, g as DeclaredToolCall, ht as SubagentStarted, mt as SubagentRequested, pt as SubagentLineageRecorded, t as AbortRequested, xt as ToolApprovalRequested } from "../Records-
|
|
3
|
+
import { Tt as ToolCallUnknown, U as PersistedJson, _t as SubmissionSettledRecord, bt as ToolApprovalDecided, f as CanonicalSequence, ft as SubagentJoined, g as DeclaredToolCall, ht as SubagentStarted, mt as SubagentRequested, pt as SubagentLineageRecorded, t as AbortRequested, xt as ToolApprovalRequested } from "../Records-DzL4Kbtw.mjs";
|
|
4
4
|
import { Schema } from "effect";
|
|
5
5
|
//#region src/durable/ThreadProjection.ts
|
|
6
6
|
var ThreadProjection_exports = /* @__PURE__ */ __exportAll({
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Xr as AppendResult, Yr as AppendRequest } from "../Admin-
|
|
1
|
+
import { Xr as AppendResult, Yr as AppendRequest } from "../Admin-Qa3I1oA5.mjs";
|
|
2
2
|
import { Context, Effect, Layer, Option, Schema } from "effect";
|
|
3
3
|
declare namespace ThreadProjectionMaintenance_d_exports {
|
|
4
4
|
export { ThreadProjectionError, ThreadProjectionMaintenance, ThreadProjectionMaintenanceService, drainDue };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Ai as ThreadIdentityRequest, Ei as ThreadExportRequest, Fi as ThreadPromptRead, Gi as ThreadStoreError, Ii as ThreadRead, Ji as ThreadTail, Li as ThreadReadRequest, Mi as ThreadNotMaterialized, Ni as ThreadObservation, Ri as ThreadReader, Vi as ThreadRunInputRequest, Yi as ThreadTailRequest, ia as getRunInput, ki as ThreadIdentity, oa as readWorkerState, ra as getRecord, ta as ThreadWorkerStateRequest, xi as ThreadExport, zi as ThreadRecordRequest } from "../Admin-
|
|
1
|
+
import { Ai as ThreadIdentityRequest, Ei as ThreadExportRequest, Fi as ThreadPromptRead, Gi as ThreadStoreError, Ii as ThreadRead, Ji as ThreadTail, Li as ThreadReadRequest, Mi as ThreadNotMaterialized, Ni as ThreadObservation, Ri as ThreadReader, Vi as ThreadRunInputRequest, Yi as ThreadTailRequest, ia as getRunInput, ki as ThreadIdentity, oa as readWorkerState, ra as getRecord, ta as ThreadWorkerStateRequest, xi as ThreadExport, zi as ThreadRecordRequest } from "../Admin-Qa3I1oA5.mjs";
|
|
2
2
|
export { ThreadExport, ThreadExportRequest, ThreadIdentity, ThreadIdentityRequest, ThreadNotMaterialized, ThreadObservation, ThreadPromptRead, ThreadRead, ThreadReadRequest, ThreadReader, ThreadRecordRequest, ThreadRunInputRequest, ThreadStoreError, ThreadTail, ThreadTailRequest, ThreadWorkerStateRequest, getRecord, getRunInput, readWorkerState };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { $ as ThreadTailRequest, B as ThreadPromptRead, E as ThreadExport, F as ThreadIdentityRequest, H as ThreadReadRequest, K as ThreadRunInputRequest, L as ThreadNotMaterialized, P as ThreadIdentity, Q as ThreadTail, R as ThreadObservation, U as ThreadReader, V as ThreadRead, W as ThreadRecordRequest, X as ThreadStoreError, it as ThreadWorkerStateRequest, j as ThreadExportRequest, lt as readWorkerState, ot as getRecord, st as getRunInput } from "../ThreadStore-
|
|
1
|
+
import { $ as ThreadTailRequest, B as ThreadPromptRead, E as ThreadExport, F as ThreadIdentityRequest, H as ThreadReadRequest, K as ThreadRunInputRequest, L as ThreadNotMaterialized, P as ThreadIdentity, Q as ThreadTail, R as ThreadObservation, U as ThreadReader, V as ThreadRead, W as ThreadRecordRequest, X as ThreadStoreError, it as ThreadWorkerStateRequest, j as ThreadExportRequest, lt as readWorkerState, ot as getRecord, st as getRunInput } from "../ThreadStore-EuUilthA.mjs";
|
|
2
2
|
export { ThreadExport, ThreadExportRequest, ThreadIdentity, ThreadIdentityRequest, ThreadNotMaterialized, ThreadObservation, ThreadPromptRead, ThreadRead, ThreadReadRequest, ThreadReader, ThreadRecordRequest, ThreadRunInputRequest, ThreadStoreError, ThreadTail, ThreadTailRequest, ThreadWorkerStateRequest, getRecord, getRunInput, readWorkerState };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { W as PROMPT_EVIDENCE_TAGS } from "../Records-BTnGRdcf.mjs";
|
|
2
|
-
import { $i as ThreadWorkerCapacityRequest, $r as ExecutionCheckpoint, Ai as ThreadIdentityRequest, Bi as ThreadResolutionFact, Ci as ThreadExportCursor, Di as ThreadExportSnapshot, Ei as ThreadExportRequest, Fi as ThreadPromptRead, Gi as ThreadStoreError, Hi as ThreadSelection, Ii as ThreadRead, Ji as ThreadTail, Jr as AppendConflict, Ki as ThreadStoreFailure, Li as ThreadReadRequest, Mi as ThreadNotMaterialized, Ni as ThreadObservation, Oi as ThreadExportSource, Pi as ThreadPeerCountRequest, Qi as ThreadWorkerCapacity, Qr as CommitBatch, Ri as ThreadReader, Si as ThreadExportBatch, Ti as ThreadExportRejected, Ui as ThreadStore, Vi as ThreadRunInputRequest, Wi as ThreadStoreDiagnostic, Xi as ThreadVerificationRequest, Xr as AppendResult, Yi as ThreadTailRequest, Yr as AppendRequest, Zi as ThreadVerificationStorage, Zr as CheckpointRejected, _i as ThreadApprovalFact, aa as makeTransferFactCheck, ai as MAX_THREAD_EXPORT_CURSOR_CHARS, bi as ThreadCommands, ca as transferPageFits, ci as PreparedAppend, di as PromptCheckpointRead, ea as ThreadWorkerSeal, ei as ExecutionRead, fi as PromptCheckpoints, gi as ThreadAdmission, hi as ThreadAbortFact, ia as getRunInput, ii as MAX_PROMPT_CHECKPOINT_RUNS, ji as ThreadMaterialization, ki as ThreadIdentity, li as PromptCheckpoint, mi as SelectedThreadRead, na as canonicalBatchFitsTransfer, ni as LoadCheckpointRequest, oa as readWorkerState, oi as MAX_THREAD_EXPORT_PAGE_BYTES, pi as SaveCheckpointRequest, ra as getRecord, ri as MAX_PROMPT_CHECKPOINT_BYTES, sa as streamExport, si as MAX_THREAD_EXPORT_PAGE_RECORDS, ta as ThreadWorkerStateRequest, ti as ExecutionUpdate, ui as PromptCheckpointHead, vi as ThreadCheckpoint, wi as ThreadExportRecord, xi as ThreadExport, yi as ThreadCheckpoints, zi as ThreadRecordRequest } from "../Admin-
|
|
2
|
+
import { $i as ThreadWorkerCapacityRequest, $r as ExecutionCheckpoint, Ai as ThreadIdentityRequest, Bi as ThreadResolutionFact, Ci as ThreadExportCursor, Di as ThreadExportSnapshot, Ei as ThreadExportRequest, Fi as ThreadPromptRead, Gi as ThreadStoreError, Hi as ThreadSelection, Ii as ThreadRead, Ji as ThreadTail, Jr as AppendConflict, Ki as ThreadStoreFailure, Li as ThreadReadRequest, Mi as ThreadNotMaterialized, Ni as ThreadObservation, Oi as ThreadExportSource, Pi as ThreadPeerCountRequest, Qi as ThreadWorkerCapacity, Qr as CommitBatch, Ri as ThreadReader, Si as ThreadExportBatch, Ti as ThreadExportRejected, Ui as ThreadStore, Vi as ThreadRunInputRequest, Wi as ThreadStoreDiagnostic, Xi as ThreadVerificationRequest, Xr as AppendResult, Yi as ThreadTailRequest, Yr as AppendRequest, Zi as ThreadVerificationStorage, Zr as CheckpointRejected, _i as ThreadApprovalFact, aa as makeTransferFactCheck, ai as MAX_THREAD_EXPORT_CURSOR_CHARS, bi as ThreadCommands, ca as transferPageFits, ci as PreparedAppend, di as PromptCheckpointRead, ea as ThreadWorkerSeal, ei as ExecutionRead, fi as PromptCheckpoints, gi as ThreadAdmission, hi as ThreadAbortFact, ia as getRunInput, ii as MAX_PROMPT_CHECKPOINT_RUNS, ji as ThreadMaterialization, ki as ThreadIdentity, li as PromptCheckpoint, mi as SelectedThreadRead, na as canonicalBatchFitsTransfer, ni as LoadCheckpointRequest, oa as readWorkerState, oi as MAX_THREAD_EXPORT_PAGE_BYTES, pi as SaveCheckpointRequest, ra as getRecord, ri as MAX_PROMPT_CHECKPOINT_BYTES, sa as streamExport, si as MAX_THREAD_EXPORT_PAGE_RECORDS, ta as ThreadWorkerStateRequest, ti as ExecutionUpdate, ui as PromptCheckpointHead, vi as ThreadCheckpoint, wi as ThreadExportRecord, xi as ThreadExport, yi as ThreadCheckpoints, zi as ThreadRecordRequest } from "../Admin-Qa3I1oA5.mjs";
|
|
3
3
|
export { AppendConflict, AppendRequest, AppendResult, CheckpointRejected, CommitBatch, ExecutionCheckpoint, ExecutionRead, ExecutionUpdate, LoadCheckpointRequest, MAX_PROMPT_CHECKPOINT_BYTES, MAX_PROMPT_CHECKPOINT_RUNS, MAX_THREAD_EXPORT_CURSOR_CHARS, MAX_THREAD_EXPORT_PAGE_BYTES, MAX_THREAD_EXPORT_PAGE_RECORDS, PROMPT_EVIDENCE_TAGS, PreparedAppend, PromptCheckpoint, PromptCheckpointHead, PromptCheckpointRead, PromptCheckpoints, SaveCheckpointRequest, SelectedThreadRead, ThreadAbortFact, ThreadAdmission, ThreadApprovalFact, ThreadCheckpoint, ThreadCheckpoints, ThreadCommands, ThreadExport, ThreadExportBatch, ThreadExportCursor, ThreadExportRecord, ThreadExportRejected, ThreadExportRequest, ThreadExportSnapshot, ThreadExportSource, ThreadIdentity, ThreadIdentityRequest, ThreadMaterialization, ThreadNotMaterialized, ThreadObservation, ThreadPeerCountRequest, ThreadPromptRead, ThreadRead, ThreadReadRequest, ThreadReader, ThreadRecordRequest, ThreadResolutionFact, ThreadRunInputRequest, ThreadSelection, ThreadStore, ThreadStoreDiagnostic, ThreadStoreError, ThreadStoreFailure, ThreadTail, ThreadTailRequest, ThreadVerificationRequest, ThreadVerificationStorage, ThreadWorkerCapacity, ThreadWorkerCapacityRequest, ThreadWorkerSeal, ThreadWorkerStateRequest, canonicalBatchFitsTransfer, getRecord, getRunInput, makeTransferFactCheck, readWorkerState, streamExport, transferPageFits };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { V as PROMPT_EVIDENCE_TAGS } from "../Records-
|
|
2
|
-
import { $ as ThreadTailRequest, A as ThreadExportRejected, B as ThreadPromptRead, C as ThreadApprovalFact, D as ThreadExportBatch, E as ThreadExport, F as ThreadIdentityRequest, G as ThreadResolutionFact, H as ThreadReadRequest, I as ThreadMaterialization, J as ThreadStore, K as ThreadRunInputRequest, L as ThreadNotMaterialized, M as ThreadExportSnapshot, N as ThreadExportSource, O as ThreadExportCursor, P as ThreadIdentity, Q as ThreadTail, R as ThreadObservation, S as ThreadAdmission, T as ThreadCommands, U as ThreadReader, V as ThreadRead, W as ThreadRecordRequest, X as ThreadStoreError, Y as ThreadStoreDiagnostic, _ as PromptCheckpointHead, a as CommitBatch, at as canonicalBatchFitsTransfer, b as SelectedThreadRead, c as ExecutionUpdate, ct as makeTransferFactCheck, d as MAX_PROMPT_CHECKPOINT_RUNS, dt as transferPageFits, et as ThreadVerificationRequest, f as MAX_THREAD_EXPORT_CURSOR_CHARS, g as PromptCheckpoint, h as PreparedAppend, i as CheckpointRejected, it as ThreadWorkerStateRequest, j as ThreadExportRequest, k as ThreadExportRecord, l as LoadCheckpointRequest, lt as readWorkerState, m as MAX_THREAD_EXPORT_PAGE_RECORDS, n as AppendRequest, nt as ThreadWorkerCapacityRequest, o as ExecutionCheckpoint, ot as getRecord, p as MAX_THREAD_EXPORT_PAGE_BYTES, q as ThreadSelection, r as AppendResult, rt as ThreadWorkerSeal, s as ExecutionRead, st as getRunInput, t as AppendConflict, tt as ThreadWorkerCapacity, u as MAX_PROMPT_CHECKPOINT_BYTES, ut as streamExport, v as PromptCheckpointRead, w as ThreadCheckpoint, x as ThreadAbortFact, y as SaveCheckpointRequest, z as ThreadPeerCountRequest } from "../ThreadStore-
|
|
1
|
+
import { V as PROMPT_EVIDENCE_TAGS } from "../Records-DzL4Kbtw.mjs";
|
|
2
|
+
import { $ as ThreadTailRequest, A as ThreadExportRejected, B as ThreadPromptRead, C as ThreadApprovalFact, D as ThreadExportBatch, E as ThreadExport, F as ThreadIdentityRequest, G as ThreadResolutionFact, H as ThreadReadRequest, I as ThreadMaterialization, J as ThreadStore, K as ThreadRunInputRequest, L as ThreadNotMaterialized, M as ThreadExportSnapshot, N as ThreadExportSource, O as ThreadExportCursor, P as ThreadIdentity, Q as ThreadTail, R as ThreadObservation, S as ThreadAdmission, T as ThreadCommands, U as ThreadReader, V as ThreadRead, W as ThreadRecordRequest, X as ThreadStoreError, Y as ThreadStoreDiagnostic, _ as PromptCheckpointHead, a as CommitBatch, at as canonicalBatchFitsTransfer, b as SelectedThreadRead, c as ExecutionUpdate, ct as makeTransferFactCheck, d as MAX_PROMPT_CHECKPOINT_RUNS, dt as transferPageFits, et as ThreadVerificationRequest, f as MAX_THREAD_EXPORT_CURSOR_CHARS, g as PromptCheckpoint, h as PreparedAppend, i as CheckpointRejected, it as ThreadWorkerStateRequest, j as ThreadExportRequest, k as ThreadExportRecord, l as LoadCheckpointRequest, lt as readWorkerState, m as MAX_THREAD_EXPORT_PAGE_RECORDS, n as AppendRequest, nt as ThreadWorkerCapacityRequest, o as ExecutionCheckpoint, ot as getRecord, p as MAX_THREAD_EXPORT_PAGE_BYTES, q as ThreadSelection, r as AppendResult, rt as ThreadWorkerSeal, s as ExecutionRead, st as getRunInput, t as AppendConflict, tt as ThreadWorkerCapacity, u as MAX_PROMPT_CHECKPOINT_BYTES, ut as streamExport, v as PromptCheckpointRead, w as ThreadCheckpoint, x as ThreadAbortFact, y as SaveCheckpointRequest, z as ThreadPeerCountRequest } from "../ThreadStore-EuUilthA.mjs";
|
|
3
3
|
export { AppendConflict, AppendRequest, AppendResult, CheckpointRejected, CommitBatch, ExecutionCheckpoint, ExecutionRead, ExecutionUpdate, LoadCheckpointRequest, MAX_PROMPT_CHECKPOINT_BYTES, MAX_PROMPT_CHECKPOINT_RUNS, MAX_THREAD_EXPORT_CURSOR_CHARS, MAX_THREAD_EXPORT_PAGE_BYTES, MAX_THREAD_EXPORT_PAGE_RECORDS, PROMPT_EVIDENCE_TAGS, PreparedAppend, PromptCheckpoint, PromptCheckpointHead, PromptCheckpointRead, SaveCheckpointRequest, SelectedThreadRead, ThreadAbortFact, ThreadAdmission, ThreadApprovalFact, ThreadCheckpoint, ThreadCommands, ThreadExport, ThreadExportBatch, ThreadExportCursor, ThreadExportRecord, ThreadExportRejected, ThreadExportRequest, ThreadExportSnapshot, ThreadExportSource, ThreadIdentity, ThreadIdentityRequest, ThreadMaterialization, ThreadNotMaterialized, ThreadObservation, ThreadPeerCountRequest, ThreadPromptRead, ThreadRead, ThreadReadRequest, ThreadReader, ThreadRecordRequest, ThreadResolutionFact, ThreadRunInputRequest, ThreadSelection, ThreadStore, ThreadStoreDiagnostic, ThreadStoreError, ThreadTail, ThreadTailRequest, ThreadVerificationRequest, ThreadWorkerCapacity, ThreadWorkerCapacityRequest, ThreadWorkerSeal, ThreadWorkerStateRequest, canonicalBatchFitsTransfer, getRecord, getRunInput, makeTransferFactCheck, readWorkerState, streamExport, transferPageFits };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Y as PromptRecordEnvelope, d as CanonicalRecordEnvelope } from "../Records-BTnGRdcf.mjs";
|
|
2
|
-
import { $i as ThreadWorkerCapacityRequest, $r as ExecutionCheckpoint, Ai as ThreadIdentityRequest,
|
|
2
|
+
import { $i as ThreadWorkerCapacityRequest, $r as ExecutionCheckpoint, Ai as ThreadIdentityRequest, Ei as ThreadExportRequest, Fi as ThreadPromptRead, Gi as ThreadStoreError, Ji as ThreadTail, Jr as AppendConflict, Ki as ThreadStoreFailure, Li as ThreadReadRequest, Mi as ThreadNotMaterialized, Ni as ThreadObservation, Pi as ThreadPeerCountRequest, Qi as ThreadWorkerCapacity, Ti as ThreadExportRejected, Ui as ThreadStore, Xr as AppendResult, Xt as OwnershipLost, Yi as ThreadTailRequest, Yr as AppendRequest, Zi as ThreadVerificationStorage, Zr as CheckpointRejected, do as LifecyclePublicationStorage, ei as ExecutionRead, fi as PromptCheckpoints, ji as ThreadMaterialization, ki as ThreadIdentity, ro as ThreadArchiveStorage, wa as ThreadWorkStorage, xi as ThreadExport, yi as ThreadCheckpoints } from "../Admin-Qa3I1oA5.mjs";
|
|
3
3
|
import { Effect, Option, Schema, Stream } from "effect";
|
|
4
4
|
//#region src/durable/ThreadStoreConformance.d.ts
|
|
5
5
|
declare const ThreadStoreConformanceViolation_base: Schema.Class<ThreadStoreConformanceViolation, Schema.TaggedStruct<"ThreadStoreConformanceViolation", {
|