@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RunContinuation-BiyKJK32.mjs","names":["failure"],"sources":["../src/durable/internal/evidence.ts","../src/durable/internal/run-context-reader.ts","../src/durable/internal/run-context.ts","../src/durable/RunContinuation.ts"],"sourcesContent":["import { Effect, Option } from \"effect\";\n\nimport type { ThreadId } from \"../../core/Identifiers.ts\";\nimport { EvidenceReference, type RecordEnvelope } from \"../Records.ts\";\nimport { getRecord, ThreadStoreError } from \"../ThreadStore.ts\";\n\nconst failure = (message: string, cause?: unknown) =>\n ThreadStoreError.make({\n operation: \"RunContinuation\",\n message,\n ...(cause === undefined ? {} : { cause }),\n });\n\n/** References identify immutable facts; schema and owning readers validate their meaning. */\nexport const reference = (record: RecordEnvelope) =>\n Effect.succeed(EvidenceReference.make({ recordId: record.recordId }));\n\n/** Resolve an immutable fact by Thread and record identity. A failed reference leaves the original work owed. */\nexport const resolveEvidence = Effect.fnUntraced(function* (\n threadId: ThreadId,\n ref: EvidenceReference,\n) {\n const found = yield* getRecord({ threadId, recordId: ref.recordId });\n\n if (Option.isNone(found)) return yield* failure(\"Required canonical evidence is unavailable\");\n\n return found.value;\n});\n","import { Context, Effect, Layer, Option, type Stream } from \"effect\";\n\nimport type { ThreadId } from \"../../core/Identifiers.ts\";\nimport type { CanonicalRecordEnvelope, RecordId } from \"../Records.ts\";\nimport {\n getRecord,\n ThreadReader,\n type ThreadNotMaterialized,\n type ThreadStoreError,\n type ThreadPromptRead,\n} from \"../ThreadStore.ts\";\nimport type { JournalRecordEnvelope } from \"./journal-metadata.ts\";\n\n/** Canonical history access bound by the recovery or verification-snapshot owner. */\nexport class RunContextReader extends Context.Service<\n RunContextReader,\n {\n /** Recovery decodes the prompt view; verification supplies full canonical envelopes. */\n readonly read: (\n request: ThreadPromptRead,\n ) => Stream.Stream<JournalRecordEnvelope, ThreadStoreError | ThreadNotMaterialized>;\n readonly record: (\n recordId: RecordId,\n ) => Effect.Effect<\n CanonicalRecordEnvelope | undefined,\n ThreadStoreError | ThreadNotMaterialized\n >;\n }\n>()(\"@effect-agent/thread/RunContextReader\") {\n static layer(threadId: ThreadId) {\n return Layer.effect(\n RunContextReader,\n Effect.gen(function* () {\n const reader = yield* ThreadReader;\n\n return RunContextReader.of({\n read: reader.readPrompt,\n record: (recordId) =>\n getRecord({ threadId, recordId }).pipe(\n Effect.provideService(ThreadReader, reader),\n Effect.map(Option.getOrUndefined),\n ),\n });\n }),\n );\n }\n}\n","import { type Crypto, Effect, Schema, Stream } from \"effect\";\nimport { Prompt } from \"effect/ai\";\n\nimport { canonicalJson, digestCanonicalJson } from \"../Digest.ts\";\nimport {\n CanonicalSequence,\n PromptRecord,\n type RecordId,\n PROMPT_EVIDENCE_TAGS,\n type CanonicalRecordEnvelope,\n type RunContextRecorded,\n} from \"../Records.ts\";\nimport {\n projectRunJournalStream,\n RunJournalError,\n type RunJournalContext,\n type JournalBoundary,\n} from \"../RunJournal.ts\";\nimport type { ThreadNotMaterialized, ThreadStoreError } from \"../ThreadStore.ts\";\nimport type { JournalRecordEnvelope } from \"./journal-metadata.ts\";\nimport { RunContextReader } from \"./run-context-reader.ts\";\n\nconst invalid = (message: string) => RunJournalError.make({ message });\nconst encodePrompt = Schema.encodeEffect(Schema.toCodecJson(Prompt.Prompt));\n\nconst decodePromptRecord = Schema.decodeUnknownEffect(PromptRecord);\nconst promptTags = new Set<string>(PROMPT_EVIDENCE_TAGS);\n\nconst projectHistoryRecord = (\n entry: JournalRecordEnvelope,\n ownerRunId: RunContextRecorded[\"runId\"],\n): Effect.Effect<JournalRecordEnvelope> => {\n if (!(\"batchId\" in entry)) return Effect.succeed(entry);\n const payload = entry.record.payload;\n\n if ((\"runId\" in payload && payload.runId === ownerRunId) || !promptTags.has(payload._tag))\n return Effect.succeed(entry);\n\n return decodePromptRecord({ recordId: entry.record.recordId, payload }).pipe(\n Effect.map((record) => ({ threadId: entry.threadId, sequence: entry.sequence, record })),\n // Coverage and later canonical validation must retain their original error precedence.\n Effect.catchTag(\"SchemaError\", () => Effect.succeed(entry)),\n );\n};\n\nexport const encodeRunHistory = (prompt: Prompt.Prompt) =>\n encodePrompt(prompt).pipe(\n Effect.map(canonicalJson),\n Effect.mapError((cause) =>\n RunJournalError.make({ message: \"Original model history integrity is unavailable\", cause }),\n ),\n );\n\nexport const digestRunHistory = (prompt: Prompt.Prompt) =>\n encodeRunHistory(prompt).pipe(\n Effect.flatMap(digestCanonicalJson),\n Effect.mapError((cause) =>\n RunJournalError.make({ message: \"Original model history integrity is unavailable\", cause }),\n ),\n );\n\nexport const validateContextBoundary = (\n context: RunContextRecorded,\n original: CanonicalRecordEnvelope,\n): Effect.Effect<void, RunJournalError> =>\n original.record.payload._tag !== \"UserInputRecorded\" ||\n original.record.payload.kind !== \"user\" ||\n original.record.payload.runId !== context.runId ||\n context.historyThrough + 1 !== original.sequence ||\n context.historyFrom < 1 ||\n context.historyFrom > original.sequence ||\n context.retained.some(\n (ref, index) =>\n ref.sequence <= (context.retained[index - 1]?.sequence ?? 0) ||\n ref.sequence >= context.historyFrom,\n )\n ? Effect.fail(invalid(\"Saved context has an invalid original admission boundary\"))\n : Effect.void;\n\ntype ProjectedRunHistory = Pick<\n RunJournalContext,\n \"prompt\" | \"historyFrom\" | \"contextWindowId\" | \"boundaries\"\n>;\n\n/** Reconstruct the exact saved range using the owner's history validation boundary. */\nconst readProjectedHistory = Effect.fnUntraced(function* (\n context: RunContextRecorded,\n original: CanonicalRecordEnvelope,\n): Effect.fn.Return<\n ProjectedRunHistory,\n RunJournalError | ThreadStoreError | ThreadNotMaterialized,\n RunContextReader | Crypto.Crypto\n> {\n yield* validateContextBoundary(context, original);\n const reader = yield* RunContextReader;\n const records: Array<JournalRecordEnvelope> = [];\n\n for (const ref of context.retained) {\n const entry = yield* reader.record(ref.recordId);\n\n if (\n entry === undefined ||\n entry.threadId !== original.threadId ||\n entry.record.recordId !== ref.recordId ||\n entry.sequence !== ref.sequence\n )\n return yield* invalid(\"Saved context has missing or corrupt retained evidence\");\n records.push(yield* projectHistoryRecord(entry, context.runId));\n }\n\n let after = CanonicalSequence.make(context.historyFrom - 1);\n\n while (after < context.historyThrough) {\n const page = yield* reader\n .read({\n threadId: original.threadId,\n throughSequence: context.historyThrough,\n afterSequence: after,\n limit: 8,\n })\n .pipe(Stream.take(9), Stream.runCollect);\n\n if (page.length > 8) return yield* invalid(\"Saved context page exceeds its record bound\");\n for (const entry of page) {\n if (\n entry.threadId !== original.threadId ||\n entry.sequence <= after ||\n entry.sequence > context.historyThrough\n )\n return yield* invalid(\"Saved context range has invalid canonical ordering\");\n after = entry.sequence;\n records.push(yield* projectHistoryRecord(entry, context.runId));\n }\n if (page.length < 8) break;\n }\n\n let through = 0;\n const retained = new Map(context.retained.map((ref) => [ref.sequence, ref.recordId]));\n\n for (const entry of records) {\n if (\n entry.threadId !== original.threadId ||\n entry.sequence <= through ||\n entry.sequence > context.historyThrough ||\n (entry.sequence < context.historyFrom &&\n retained.get(entry.sequence) !== entry.record.recordId)\n )\n return yield* invalid(\"Saved context has invalid canonical range evidence\");\n through = entry.sequence;\n retained.delete(entry.sequence);\n }\n if (retained.size !== 0) return yield* invalid(\"Saved context is missing retained evidence\");\n\n const boundaries: Array<JournalBoundary> = [];\n\n records.push(original);\n\n const history = yield* projectRunJournalStream(\n Stream.fromIterable(records),\n context.runId,\n (boundary) => boundaries.push(boundary),\n );\n\n return {\n prompt: history.prompt,\n historyFrom: history.historyFrom,\n boundaries,\n ...(history.contextWindowId === undefined ? {} : { contextWindowId: history.contextWindowId }),\n };\n});\n\n/** Both readers preserve the exact saved context and historyDigest. */\nexport const readRunContext = Effect.fnUntraced(function* (\n context: RunContextRecorded,\n original: CanonicalRecordEnvelope,\n recordId: RecordId,\n): Effect.fn.Return<\n RunJournalContext,\n RunJournalError | ThreadStoreError | ThreadNotMaterialized,\n RunContextReader | Crypto.Crypto\n> {\n const history = yield* readProjectedHistory(context, original);\n const historyDigest = yield* digestRunHistory(history.prompt);\n\n if (\n historyDigest !== context.historyDigest ||\n history.historyFrom !== context.historyFrom ||\n history.prompt.content.length !== context.priorHistoryLength ||\n history.contextWindowId !== context.contextWindowId\n )\n return yield* invalid(\"Saved context differs from its original model history\");\n\n const prefix = yield* Schema.decodeUnknownEffect(Prompt.Prompt)(context.runScopedInput).pipe(\n Effect.mapError(() => invalid(\"Saved Run instructions and input are malformed\")),\n );\n\n return {\n runId: context.runId,\n prompt: Prompt.fromMessages([...history.prompt.content, ...prefix.content]),\n priorHistoryLength: context.priorHistoryLength,\n historyFrom: context.historyFrom,\n boundaries: history.boundaries.filter(\n (boundary) => boundary.promptLength <= context.priorHistoryLength,\n ),\n recordId,\n ...(context.contextWindowId === undefined ? {} : { contextWindowId: context.contextWindowId }),\n };\n});\n","import { Context, DateTime, Effect, Option, Result, Schema, Semaphore, Stream } from \"effect\";\nimport { Prompt } from \"effect/ai\";\n\nimport { AgentPersistenceCapacityError } from \"../core/AgentError.ts\";\nimport type { RunId, SubmissionId, ThreadId } from \"../core/Identifiers.ts\";\nimport { ToolCallId } from \"../core/Identifiers.ts\";\nimport { utf8ByteLength } from \"../core/internal/utf8.ts\";\nimport { resolveEvidence } from \"./internal/evidence.ts\";\nimport { continuationUsage } from \"./internal/usage-totals.ts\";\nexport { reference, resolveEvidence } from \"./internal/evidence.ts\";\nimport {\n captureRecord,\n recordEncoding,\n type ProgressAppendRecord,\n} from \"./internal/record-encoding.ts\";\nimport {\n canonicalRunIds,\n executionRunIds,\n isPreContinuationFact,\n isTerminalBudgetFact,\n} from \"./internal/record-ownership.ts\";\nexport { terminalUsageCharge } from \"./internal/record-ownership.ts\";\nimport { readRunContext, validateContextBoundary } from \"./internal/run-context.ts\";\nimport {\n type CanonicalRecordEnvelope,\n type ContinuationAccounting,\n type DeploymentId,\n CanonicalBatch,\n CanonicalSequence,\n EvidenceReference,\n MAX_RUN_CONTINUATION_BYTES,\n MAX_RUN_EVIDENCE_BYTES,\n MAX_RUN_TERMINAL_BYTES,\n MAX_RUN_EVIDENCE_RECORDS,\n MAX_RUN_RECOVERY_SUFFIX_BYTES,\n MAX_RUN_RECOVERY_SUFFIX_RECORDS,\n MAX_TURN_CANONICAL_BYTES,\n MAX_PERSISTED_JSON_BYTES,\n RUN_TERMINAL_RESERVE_BYTES,\n RUN_TERMINAL_RESERVE_RECORDS,\n RecordEnvelope,\n RecordId,\n RunContinuation,\n type ModelResponseRecorded,\n type ToolCallSettled,\n} from \"./Records.ts\";\nimport {\n runIdForSubmission,\n runCompletedRecordId,\n toolCallSettledRecordId,\n toolCallResultBatchId,\n subagentRequestedRecordId,\n subagentStartedRecordId,\n} from \"./RunJournal.ts\";\nimport type { RunStorageSession, RunWriter } from \"./RunStorage.ts\";\nimport {\n submissionAbortRecordId,\n submissionInputRecordId,\n submissionSettlementRecordId,\n submissionSettlementBatchId,\n} from \"./SubmissionLedger.ts\";\nimport {\n CommitBatch,\n ExecutionCheckpoint,\n ExecutionUpdate,\n getRecord,\n getRunInput,\n ThreadReader,\n ThreadStoreError,\n} from \"./ThreadStore.ts\";\n\nexport { RunContinuation, RunContextRecorded, EvidenceReference } from \"./Records.ts\";\n\n/** Writer and progress sequencer selected at the local owner's resource boundary. */\nexport class CurrentRunWriter extends Context.Service<\n CurrentRunWriter,\n Pick<RunWriter, \"threadId\" | \"tail\" | \"append\" | \"withProgress\">\n>()(\"@effect-agent/thread/CurrentRunWriter\") {}\n\n/** Settlement publication keeps its original atomic authority and claim-scoped implementation. */\nexport class CurrentRunSettlement extends Context.Service<\n CurrentRunSettlement,\n Pick<RunStorageSession, \"threadId\" | \"tail\" | \"publishSettlement\" | \"withProgress\">\n>()(\"@effect-agent/thread/CurrentRunSettlement\") {}\n\n/** Canonical reads pinned to the append owner's current transaction or mutation gate. */\nexport class ProgressAppendReader extends Context.Service<\n ProgressAppendReader,\n {\n readonly previous: (\n runId: RunId,\n ) => Effect.Effect<RunContinuation | undefined, ThreadStoreError>;\n readonly initial: (\n next: RunContinuation,\n ) => Effect.Effect<ReadonlyArray<RecordEnvelope>, ThreadStoreError>;\n }\n>()(\"@effect-agent/thread/ProgressAppendReader\") {}\n\nexport {\n canonicalRunIds,\n executionRunIds,\n isWorkHandoff,\n isPreContinuationFact,\n} from \"./internal/record-ownership.ts\";\n\nconst failure = (message: string, cause?: unknown) =>\n ThreadStoreError.make({\n operation: \"RunContinuation\",\n message,\n ...(cause === undefined ? {} : { cause }),\n });\n\nconst capacityFailure = (message: string) =>\n failure(message, AgentPersistenceCapacityError.make({ message }));\n\nconst isExecutionProgressRecord = (\n record: RecordEnvelope,\n): record is RecordEnvelope & { readonly payload: RunContinuation } =>\n record.payload._tag === \"RunContinuation\";\n\nconst decodeResponsePrompt = Schema.decodeUnknownEffect(Prompt.Prompt);\n// The decoded Prompt stays private. Progress and capacity are recomputed on every invocation.\nconst responsePrompts = new WeakMap<ModelResponseRecorded, Prompt.Prompt>();\n\n/** Cache eligibility only: freezing does not make accessors or custom iterators immutable. */\nconst isFrozenJsonData = (input: Schema.Json): boolean => {\n const pending: Array<unknown> = [input];\n const seen = new WeakSet<object>();\n\n while (pending.length > 0) {\n const value = pending.pop();\n\n if (value === null) continue;\n if (typeof value !== \"object\") {\n if (typeof value !== \"string\" && typeof value !== \"number\" && typeof value !== \"boolean\")\n return false;\n continue;\n }\n if (seen.has(value)) continue;\n seen.add(value);\n const prototype = Object.getPrototypeOf(value);\n\n if (\n !Object.isFrozen(value) ||\n (prototype !== null && prototype !== Object.prototype && prototype !== Array.prototype)\n )\n return false;\n for (const key of Reflect.ownKeys(value)) {\n if (typeof key !== \"string\") return false;\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n\n if (descriptor === undefined || !(\"value\" in descriptor)) return false;\n pending.push(descriptor.value);\n }\n }\n\n return true;\n};\n\nconst validateBatchShape = Schema.decodeUnknownSync(\n Schema.Struct({\n batchId: CanonicalBatch.fields.batchId,\n producerId: CanonicalBatch.fields.producerId,\n records: Schema.NonEmptyArray(Schema.Unknown).check(Schema.isMaxLength(256)),\n }),\n);\n\nconst ContinuationBytes = Schema.Struct({\n turnBytes: RunContinuation.fields.turnBytes,\n terminalBytes: RunContinuation.fields.terminalBytes,\n});\n\nconst decodeExecutionFrontier = Schema.decodeUnknownEffect(\n Schema.Struct({\n canonicalRecords: ExecutionCheckpoint.fields.canonicalRecords,\n throughSequence: ExecutionCheckpoint.fields.throughSequence,\n }),\n);\n\n/** One private snapshot for every retry; callers cannot change facts while awaiting the gate. */\nconst captureFacts = (batch: CommitBatch) =>\n Effect.try({\n try: () =>\n Result.gen(function* () {\n const inputs = batch.records;\n\n const { batchId, producerId } = validateBatchShape({\n batchId: batch.batchId,\n producerId: batch.producerId,\n records: inputs,\n });\n\n const encodings = yield* Result.all(inputs.map(captureRecord));\n const records = encodings.map((record) => record.canonical);\n\n return Object.freeze(\n CanonicalBatch.make(\n { batchId, producerId, records: [records[0]!, ...records.slice(1)] },\n { disableChecks: true },\n ),\n );\n }),\n catch: (cause) => failure(\"Cannot capture canonical progress facts\", cause),\n }).pipe(\n Effect.flatMap(Effect.fromResult),\n Effect.mapError((cause) =>\n Schema.is(ThreadStoreError)(cause)\n ? cause\n : failure(\"Cannot capture canonical progress facts\", cause),\n ),\n );\n\n/** Exact UTF-8 wire accounting reuses the append's privately captured Schema encoding. */\nexport const canonicalRecordBytes = (record: RecordEnvelope): number => {\n const encoded = recordEncoding(record);\n\n if (Result.isFailure(encoded)) {\n // oxlint-disable-next-line effect/no-untyped-throw, effect/no-native-error -- Public synchronous byte-accounting validation must reject malformed records before returning a number.\n throw encoded.failure.cause ?? new RangeError(encoded.failure.message);\n }\n\n return encoded.success.bytes;\n};\n\nexport type { ProgressAppendRecord } from \"./internal/record-encoding.ts\";\n\n/** Capture before acquiring the mutation owner; summaries never cross a wire boundary. */\nexport const prepareProgressAppend = (\n records: ReadonlyArray<RecordEnvelope>,\n): ReadonlyArray<ProgressAppendRecord> => {\n const encodings = Result.all(records.map(captureRecord));\n\n if (Result.isFailure(encodings)) {\n // oxlint-disable-next-line effect/no-untyped-throw, effect/no-native-error -- Public synchronous progress construction must reject malformed records before acquiring a mutation owner.\n throw encodings.failure.cause ?? new RangeError(encodings.failure.message);\n }\n\n return Object.freeze(encodings.success.map((record) => record.progress));\n};\n\n/** These values belong to the active Run, not its permanent conversation history. */\nexport const isOperationalRecord = ({ payload }: RecordEnvelope): boolean =>\n payload._tag === \"RunStarted\" ||\n payload._tag === \"RunContextRecorded\" ||\n payload._tag === \"RunCompleted\";\n\nexport const readContinuation = Effect.fnUntraced(function* (\n threadId: ThreadId,\n runId: RunId,\n throughSequence: CanonicalSequence,\n) {\n const reader = yield* ThreadReader;\n\n const loaded = yield* reader\n .readExecution({ threadId, runId })\n .pipe(\n Effect.catchTag(\"ThreadNotMaterialized\", (cause) =>\n throughSequence === 0\n ? Effect.succeed(Option.none())\n : failure(\"Active Run history is not materialized\", cause),\n ),\n );\n\n if (Option.isNone(loaded)) return Option.none();\n const value = loaded.value;\n\n if (\n value.progress.runId !== runId ||\n value.throughSequence > throughSequence ||\n canonicalRecordBytes(value.progressRecord) > MAX_RUN_CONTINUATION_BYTES ||\n value.operational.some(\n (record) => !isOperationalRecord(record) || !executionRunIds(record).includes(runId),\n ) ||\n new Set(value.operational.map((record) => record.recordId)).size !== value.operational.length\n )\n return yield* failure(\"Invalid active Run checkpoint\");\n\n return Option.some({\n ...value,\n checkpoint: value,\n get progress() {\n return value.progress;\n },\n record: value.progressRecord,\n continuation: value.progress,\n });\n});\n\n/** Resolve an active-only fact without presenting it as a canonical envelope or sequence. */\nexport const resolveExecutionEvidence = Effect.fnUntraced(function* (\n threadId: ThreadId,\n checkpoint: ExecutionCheckpoint,\n ref: EvidenceReference,\n) {\n const operational = checkpoint.operational.find((record) => record.recordId === ref.recordId);\n const record = operational ?? (yield* resolveEvidence(threadId, ref)).record;\n\n return record;\n});\n\n/** Each selected page is at most eight records; total resident encoded evidence is bounded. */\nexport const runEvidence = (\n threadId: ThreadId,\n submissionId: SubmissionId,\n throughSequence: CanonicalSequence,\n afterSequence: CanonicalSequence = CanonicalSequence.make(0),\n): Stream.Stream<CanonicalRecordEnvelope, ThreadStoreError, ThreadReader> =>\n Stream.unwrap(\n Effect.map(ThreadReader, (reader) =>\n Stream.suspend(() => {\n let after = afterSequence;\n let count = 0;\n let bytes = 0;\n const runId = runIdForSubmission(submissionId);\n\n const controls = new Set([\n submissionInputRecordId(submissionId),\n submissionAbortRecordId(submissionId),\n submissionSettlementRecordId(submissionId),\n ]);\n\n const next = (): Stream.Stream<CanonicalRecordEnvelope, ThreadStoreError> =>\n Stream.unwrap(\n Stream.runCollect(\n reader.read({\n threadId,\n selection: { _tag: \"RunEvidence\", runId, submissionId, throughSequence },\n page: { limit: 8, ...(after === 0 ? {} : { afterSequence: after }) },\n }),\n ).pipe(\n Effect.mapError((cause) =>\n cause._tag === \"ThreadStoreError\"\n ? cause\n : failure(\"Selected Run disappeared\", cause),\n ),\n Effect.flatMap((page) =>\n Effect.gen(function* () {\n if (page.length > 8)\n return yield* failure(\"Run evidence page exceeds its record bound\");\n for (const entry of page) {\n if (\n entry.threadId !== threadId ||\n entry.sequence <= after ||\n entry.sequence > throughSequence ||\n entry.record.payload._tag === \"RunContinuation\" ||\n (!canonicalRunIds(entry.record).includes(runId) &&\n !controls.has(entry.record.recordId))\n )\n return yield* failure(\"Run evidence page has invalid identity or ordering\");\n after = entry.sequence;\n count += 1;\n bytes += yield* Effect.try({\n try: () => canonicalRecordBytes(entry.record),\n catch: (cause) => failure(\"Selected Run evidence is malformed\", cause),\n });\n if (\n count > MAX_RUN_EVIDENCE_RECORDS + RUN_TERMINAL_RESERVE_RECORDS ||\n bytes > MAX_RUN_EVIDENCE_BYTES + MAX_RUN_TERMINAL_BYTES\n )\n return yield* failure(\"Selected Run evidence exceeds its recovery bound\");\n }\n\n return page.length < 8\n ? Stream.fromIterable(page)\n : Stream.concat(Stream.fromIterable(page), Stream.suspend(next));\n }),\n ),\n ),\n );\n\n return next();\n }),\n ),\n );\n\n/** A bounded selected-Run suffix, never a Thread-wide tail or an implicit replay fallback. */\nexport const validateSuffix = (\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n through: CanonicalSequence,\n) => {\n const suffix = records.filter((record) => record.sequence > through);\n\n return (\n suffix.length <= MAX_RUN_RECOVERY_SUFFIX_RECORDS &&\n suffix.reduce((bytes, record) => bytes + canonicalRecordBytes(record.record), 0) <=\n MAX_RUN_RECOVERY_SUFFIX_BYTES\n );\n};\n\n/**\n * Selected semantic evidence without expanding model context. Worker acknowledgements and\n * delivery repair must validate locator completeness before treating missing effects as closed.\n */\nexport const readRunEvidenceSnapshot = Effect.fnUntraced(function* (\n threadId: ThreadId,\n submissionId: SubmissionId,\n throughSequence: CanonicalSequence,\n) {\n const records = yield* Stream.runCollect(runEvidence(threadId, submissionId, throughSequence));\n const runId = runIdForSubmission(submissionId);\n const own = records.filter((entry) => executionRunIds(entry.record).includes(runId));\n const progress = yield* readContinuation(threadId, runId, throughSequence);\n\n if (Option.isNone(progress)) {\n const terminal = own.findLast(\n ({ record }) => record.payload._tag === \"SubmissionSettled\" && record.payload.runId === runId,\n );\n\n if (terminal?.record.payload._tag === \"SubmissionSettled\") {\n if (\n terminal.record.payload.historyRecordCount === undefined ||\n own.filter((entry) => entry.sequence <= terminal.sequence).length !==\n terminal.record.payload.historyRecordCount\n )\n return yield* failure(\"Settled Run history is incomplete\");\n\n return records;\n }\n if (own.some(({ record }) => !isPreContinuationFact(record)))\n return yield* failure(\"Active execution has no durable checkpoint\");\n\n return records;\n }\n const checkpoint = progress.value;\n const cursor = checkpoint.continuation;\n\n if (cursor.submissionId !== submissionId)\n return yield* failure(\"Active checkpoint has another admitted owner\");\n if (\n own.filter((entry) => entry.sequence <= checkpoint.throughSequence).length !==\n checkpoint.canonicalRecords ||\n !validateSuffix(own, checkpoint.throughSequence)\n )\n return yield* failure(\"Selected execution history is incomplete or exceeds its suffix bound\");\n\n const resolve = (ref: EvidenceReference) =>\n resolveExecutionEvidence(threadId, checkpoint.checkpoint, ref);\n\n const input = yield* resolve(cursor.originalInput);\n\n if (\n input.payload._tag !== \"UserInputRecorded\" ||\n input.payload.submissionId !== submissionId ||\n input.payload.kind !== \"user\" ||\n input.payload.runId !== runId\n )\n return yield* failure(\"Active checkpoint has no original accepted input\");\n yield* resolve(cursor.lastFact);\n if (cursor.savedContext !== undefined) {\n const context = yield* resolve(cursor.savedContext);\n\n if (context.payload._tag !== \"RunContextRecorded\" || context.payload.runId !== runId)\n return yield* failure(\"Active checkpoint has invalid saved context\");\n }\n if (cursor.latestResponse !== undefined) {\n const response = yield* resolve(cursor.latestResponse);\n\n if (\n response.payload._tag !== \"ModelResponseRecorded\" ||\n response.payload.runId !== runId ||\n response.payload.turn !== cursor.accounting.committedTurns\n )\n return yield* failure(\"Active checkpoint has invalid operation evidence\");\n }\n if (cursor.terminal !== undefined) {\n const terminal = yield* resolve(cursor.terminal);\n\n if (\n terminal.payload._tag !== \"RunCompleted\" &&\n terminal.payload._tag !== \"RunFailed\" &&\n terminal.payload._tag !== \"SubmissionSettled\"\n )\n return yield* failure(\"Active checkpoint has invalid terminal evidence\");\n }\n\n return records;\n});\n\n/** Called inside the adapter's existing mutation, before publishing any fact or index. */\nexport const validateProgressAppend = Effect.fnUntraced(function* (\n records: ReadonlyArray<ProgressAppendRecord>,\n updates: ReadonlyArray<ExecutionUpdate> = [],\n): Effect.fn.Return<void, ThreadStoreError, ProgressAppendReader> {\n const reader = yield* ProgressAppendReader;\n\n if (records.some((record) => record.continuation !== undefined))\n return yield* failure(\"Interpreter progress must be committed as active execution state\");\n\n const operational = new Map(\n updates.flatMap((update) => update.facts.map((fact) => [fact.recordId, fact] as const)),\n );\n\n const factsAndProgress = [\n ...records,\n ...prepareProgressAppend([...operational.values()]),\n ...prepareProgressAppend(updates.map((update) => update.checkpoint.progressRecord)),\n ];\n\n const seen = new Set<RunId>();\n let progressStarted = false;\n\n for (const record of factsAndProgress) {\n const next = record.continuation;\n\n if (next === undefined) {\n if (progressStarted)\n return yield* failure(\"Execution facts cannot follow their continuation\");\n continue;\n }\n progressStarted = true;\n if (record.recordBytes > MAX_RUN_CONTINUATION_BYTES)\n return yield* failure(\"Encoded continuation exceeds its record byte bound\");\n if (seen.has(next.runId))\n return yield* failure(\"One atomic batch cannot publish conflicting Run progress\");\n seen.add(next.runId);\n\n const update = updates.find((value) => value.checkpoint.progress.runId === next.runId);\n\n if (\n update === undefined ||\n update.previousRevision + 1 !== next.revision ||\n update.facts.some((fact) => !isOperationalRecord(fact)) ||\n (update.retire && (next.position !== \"settled\" || next.terminal === undefined))\n )\n return yield* failure(\"Invalid active execution transition\");\n\n const facts = factsAndProgress.filter(\n (fact) => fact.continuation === undefined && fact.runIds.includes(next.runId),\n );\n\n const frontier = facts.find((fact) => fact.recordId === next.lastFact.recordId);\n const prior = yield* reader.previous(next.runId);\n\n const retained =\n prior === undefined\n ? (yield* reader.initial(next)).filter((fact) => executionRunIds(fact).includes(next.runId))\n : [];\n\n const retainedBytes = retained.reduce((bytes, fact) => bytes + canonicalRecordBytes(fact), 0);\n const factBytes = facts.reduce((bytes, fact) => bytes + fact.recordBytes, 0);\n const turnBase = prior?.turn === next.turn ? prior.turnBytes : retainedBytes;\n const closing = facts.filter((fact) => fact.terminal);\n\n if (\n frontier === undefined ||\n retained.length > MAX_RUN_RECOVERY_SUFFIX_RECORDS ||\n retainedBytes > MAX_RUN_RECOVERY_SUFFIX_BYTES ||\n retained.some(\n (fact) => !isPreContinuationFact(fact) || !executionRunIds(fact).includes(next.runId),\n ) ||\n frontier.recordId !== next.lastFact.recordId ||\n next.revision !== (prior?.revision ?? 0) + 1 ||\n next.recordBytes < (prior?.recordBytes ?? 0) ||\n next.turn < (prior?.turn ?? 0) ||\n (prior !== undefined && next.turn === prior.turn && next.turnBytes <= prior.turnBytes) ||\n next.recordBytes !== (prior?.recordBytes ?? retainedBytes) + factBytes ||\n next.terminalUsageBytes !==\n (prior?.terminalUsageBytes ?? 0) +\n facts.reduce((bytes, fact) => bytes + fact.terminalUsageBytes, 0) ||\n next.turnBytes !== turnBase + factBytes + record.recordBytes ||\n next.recordCount !== (prior?.recordCount ?? retained.length) + facts.length ||\n next.terminalRecords !== (prior?.terminalRecords ?? 0) + closing.length ||\n next.terminalBytes !==\n (prior?.terminalBytes ?? 0) +\n closing.reduce((bytes, fact) => bytes + fact.recordBytes, 0) +\n (closing.length > 0 ? record.recordBytes : 0) ||\n (prior !== undefined &&\n (prior.submissionId !== next.submissionId ||\n !Schema.toEquivalence(EvidenceReference)(prior.originalInput, next.originalInput) ||\n (prior.savedContext !== undefined &&\n (next.savedContext === undefined ||\n !Schema.toEquivalence(EvidenceReference)(prior.savedContext, next.savedContext))))) ||\n (prior !== undefined &&\n (\n [\n \"committedTurns\",\n \"toolCalls\",\n \"programmaticToolCalls\",\n \"modelRestarts\",\n \"modelCalls\",\n \"inputTokens\",\n \"outputTokens\",\n \"costMicrousd\",\n \"unobservedModelCalls\",\n \"accountedToolTurn\",\n ] satisfies ReadonlyArray<keyof ContinuationAccounting>\n ).some((field) => next.accounting[field] < prior.accounting[field])) ||\n (prior?.accounting.finalizationUsed === true && !next.accounting.finalizationUsed)\n )\n return yield* failure(\"Run continuation conflicts with its canonical frontier or revision\");\n }\n});\n\ninterface ChildResultCapacity {\n readonly resultBytes: number;\n readonly remainingBytes: number;\n readonly remainingRecords: number;\n}\n\ninterface ProgressState {\n readonly continuation: RunContinuation;\n readonly record: RecordEnvelope;\n readonly response?: ModelResponseRecorded;\n readonly results: ReadonlyMap<ToolCallId, ToolCallSettled>;\n readonly completionBytes?: number;\n readonly childResults: ReadonlyMap<ToolCallId, ChildResultCapacity>;\n readonly checkpoint?: ExecutionCheckpoint;\n}\n\ntype CapacityState = Omit<ProgressState, \"continuation\" | \"record\"> & {\n readonly continuation: Pick<\n RunContinuation,\n | \"runId\"\n | \"position\"\n | \"turn\"\n | \"turnBytes\"\n | \"recordBytes\"\n | \"recordCount\"\n | \"accounting\"\n | \"terminalUsageBytes\"\n | \"terminalBytes\"\n | \"terminalRecords\"\n >;\n};\n\n/** Headers/identities must themselves fit a continuation. Leave room for a result's cursor too. */\nconst resultCapacity = (state: CapacityState): { bytes: number; records: number } => {\n const response = state.response;\n\n if (\n response === undefined ||\n state.continuation.position === \"settling\" ||\n state.continuation.position === \"settled\" ||\n state.continuation.accounting.accountedToolTurn >= response.turn\n )\n return { bytes: 0, records: 0 };\n let bytes = 0;\n let records = 0;\n\n for (const operation of response.toolOperations) {\n if (state.results.has(operation.toolCallId)) continue;\n\n const identity = JSON.stringify({\n recordId: toolCallSettledRecordId(response.runId, response.turn, operation.toolCallId),\n payload: {\n _tag: \"ToolCallSettled\",\n runId: response.runId,\n toolCallId: operation.toolCallId,\n toolName: operation.toolName,\n result: null,\n isFailure: false,\n },\n });\n\n // An uncertain ordinary call may later close with exact supplier/operator truth, rather\n // than the interpreter's truncated result. Attached joins retain their frozen allocation.\n const resultBytes =\n operation.executionKind === \"ordinary\" && operation.executionClass !== \"readonly\"\n ? MAX_PERSISTED_JSON_BYTES\n : Math.max(\n response.toolResultMaxBytes,\n state.childResults.get(operation.toolCallId)?.resultBytes ?? 0,\n );\n\n const joining = state.childResults.get(operation.toolCallId);\n\n bytes +=\n utf8ByteLength(identity) +\n resultBytes +\n (joining?.remainingBytes ?? 0) +\n response.toolSelectionMaxBytes +\n 2 * MAX_RUN_CONTINUATION_BYTES +\n 256;\n records += joining?.remainingRecords ?? 1;\n }\n\n return { bytes, records };\n};\n\nconst emptyAccounting = (): ContinuationAccounting => ({\n committedTurns: 0,\n toolCalls: 0,\n programmaticToolCalls: 0,\n consecutiveToolFailures: 0,\n finalizationUsed: false,\n modelRestarts: 0,\n modelCalls: 0,\n unobservedModelCalls: 0,\n inputTokens: 0,\n outputTokens: 0,\n lastInputTokens: 0,\n lastOutputTokens: 0,\n costMicrousd: 0,\n accountedToolTurn: 0,\n});\n\n/** Recompute semantic progress solely from immutable owning facts. No port grants authority. */\nconst advanceFacts = Effect.fnUntraced(function* (\n previous: ProgressState | undefined,\n facts: ReadonlyArray<RecordEnvelope>,\n submissionId: SubmissionId,\n initialBytes: number,\n) {\n const accounting = { ...(previous?.continuation.accounting ?? emptyAccounting()) };\n let savedContext = previous?.continuation.savedContext;\n let latestResponse = previous?.continuation.latestResponse;\n let terminal = previous?.continuation.terminal;\n let position = previous?.continuation.position ?? \"starting\";\n let response = previous?.response;\n let responsePrompt: Prompt.Prompt | undefined;\n let results = new Map(previous?.results);\n let childResults = new Map(previous?.childResults);\n let completionBytes = previous?.completionBytes;\n let factBytes = 0;\n let turn = previous?.continuation.turn ?? 1;\n let usageCharge = 0;\n let closingBytes = 0;\n let closingCount = 0;\n\n for (const fact of facts) {\n const payload = fact.payload;\n const captured = recordEncoding(fact);\n\n if (Result.isFailure(captured))\n return yield* failure(\"Cannot account canonical progress facts\", captured.failure);\n const encoded = captured.success;\n\n factBytes += encoded.bytes;\n if (\"turn\" in payload) turn = Math.max(turn, payload.turn);\n usageCharge += encoded.progress.terminalUsageBytes;\n if (encoded.progress.terminal) {\n closingBytes += encoded.bytes;\n closingCount++;\n }\n\n switch (payload._tag) {\n case \"RunStarted\":\n position = \"awaiting-model\";\n break;\n case \"RunContextRecorded\":\n if (savedContext !== undefined)\n return yield* failure(\"A Run's original context cannot be replaced\");\n savedContext = EvidenceReference.make({ recordId: fact.recordId });\n position = \"awaiting-model\";\n break;\n case \"ModelResponseRecorded\": {\n if (savedContext === undefined)\n return yield* failure(\"A model response has no saved original Run context\");\n if (payload.turn !== accounting.committedTurns + 1)\n return yield* failure(\"Canonical Turn progress must advance once\");\n\n const promptInput = payload.messages;\n const retainedPrompt = responsePrompts.get(payload);\n\n const messages =\n retainedPrompt ??\n (yield* decodeResponsePrompt(promptInput).pipe(\n Effect.mapError((cause) => failure(\"Invalid model evidence\", cause)),\n ));\n\n if (retainedPrompt === undefined) {\n const property = Object.getOwnPropertyDescriptor(payload, \"messages\");\n\n if (\n Object.isFrozen(payload) &&\n property !== undefined &&\n \"value\" in property &&\n property.value === promptInput &&\n isFrozenJsonData(promptInput)\n )\n responsePrompts.set(payload, messages);\n }\n responsePrompt = messages;\n\n const calls = messages.content.flatMap((message) =>\n message.role === \"assistant\"\n ? message.content.filter((part) => part.type === \"tool-call\")\n : [],\n );\n\n const summary =\n payload.modelUsage === undefined\n ? undefined\n : yield* continuationUsage(payload.modelUsage).pipe(\n Effect.mapError((cause) => failure(\"Invalid usage evidence\", cause)),\n );\n\n accounting.committedTurns = payload.turn;\n accounting.toolCalls += calls.length;\n accounting.modelCalls += summary?.modelCalls ?? 1;\n accounting.inputTokens += summary?.inputTokens ?? payload.inputTokens ?? 0;\n accounting.outputTokens += summary?.outputTokens ?? payload.outputTokens ?? 0;\n accounting.costMicrousd += summary?.costMicrousd ?? payload.costMicrousd ?? 0;\n accounting.lastInputTokens = summary?.inputTokens ?? payload.inputTokens ?? 0;\n accounting.lastOutputTokens = summary?.outputTokens ?? payload.outputTokens ?? 0;\n accounting.unobservedModelCalls += payload.unobservedModelCalls ?? 0;\n latestResponse = EvidenceReference.make({ recordId: fact.recordId });\n response = payload;\n results = new Map();\n childResults = new Map();\n position = payload.toolOperations.length === 0 ? \"awaiting-model\" : \"processing-operations\";\n break;\n }\n case \"ToolCallSettled\":\n results.set(payload.toolCallId, payload);\n childResults.delete(payload.toolCallId);\n break;\n case \"ToolCallUnknown\":\n position = \"unknown\";\n break;\n case \"ToolCallResolved\":\n position = \"processing-operations\";\n break;\n case \"ToolApprovalRequested\":\n position = \"waiting-approval\";\n break;\n case \"ToolApprovalDecided\":\n position = \"processing-operations\";\n break;\n case \"SubagentRequested\":\n childResults.set(payload.toolCallId, {\n resultBytes: Math.min(\n MAX_PERSISTED_JSON_BYTES,\n payload.budget?.allocation.resultBytes ?? MAX_PERSISTED_JSON_BYTES,\n ),\n remainingBytes: RUN_TERMINAL_RESERVE_BYTES,\n remainingRecords: 4,\n });\n position = \"waiting-dependency\";\n break;\n case \"SubagentStarted\":\n {\n const reserved = childResults.get(payload.toolCallId);\n\n if (reserved !== undefined)\n childResults.set(payload.toolCallId, {\n ...reserved,\n remainingBytes: Math.max(\n 0,\n reserved.remainingBytes - canonicalRecordBytes(fact) - MAX_RUN_CONTINUATION_BYTES,\n ),\n remainingRecords: reserved.remainingRecords - 1,\n });\n }\n position = \"waiting-dependency\";\n break;\n case \"RunPolicyUsageReserved\":\n if (\n payload.programmaticToolCalls < accounting.programmaticToolCalls ||\n (accounting.finalizationUsed && !payload.finalizationUsed)\n )\n return yield* failure(\"Run reservations cannot be refunded\");\n accounting.programmaticToolCalls = payload.programmaticToolCalls;\n accounting.finalizationUsed = payload.finalizationUsed;\n break;\n case \"ModelCallAborted\": {\n if (payload.restart !== (accounting.modelRestarts ?? 0) + 1)\n return yield* failure(\"Model restart progress must advance once\");\n\n const summary = yield* continuationUsage(payload.modelUsage).pipe(\n Effect.mapError((cause) => failure(\"Invalid cancelled model usage\", cause)),\n );\n\n accounting.modelRestarts = payload.restart;\n accounting.modelCalls += summary.modelCalls;\n accounting.inputTokens += summary.inputTokens;\n accounting.outputTokens += summary.outputTokens;\n accounting.costMicrousd += summary.costMicrousd;\n accounting.unobservedModelCalls += payload.unobservedModelCalls;\n break;\n }\n case \"RunCompleted\":\n case \"RunFailed\":\n completionBytes =\n payload._tag === \"RunCompleted\"\n ? utf8ByteLength(JSON.stringify(payload.output)) +\n (payload.runDisposition === undefined\n ? 0\n : utf8ByteLength(JSON.stringify(payload.runDisposition)))\n : undefined;\n terminal = EvidenceReference.make({ recordId: fact.recordId });\n position = \"settling\";\n break;\n case \"SubmissionSettled\":\n if (payload.submissionId !== submissionId) break;\n terminal = EvidenceReference.make({ recordId: fact.recordId });\n position = \"settled\";\n if (payload.usageSummary !== undefined) {\n accounting.modelCalls = payload.usageSummary.modelCalls;\n accounting.inputTokens = payload.usageSummary.inputTokens.total;\n accounting.outputTokens = payload.usageSummary.outputTokens.total;\n accounting.costMicrousd = payload.usageSummary.costMicrousd;\n accounting.unobservedModelCalls =\n payload.usageSummary.unobservedModelCalls ?? accounting.unobservedModelCalls;\n }\n break;\n default:\n break;\n }\n }\n if (\n response !== undefined &&\n response.turn > accounting.accountedToolTurn &&\n response.toolOperations.every((operation) => results.has(operation.toolCallId))\n ) {\n const messages =\n responsePrompt ??\n responsePrompts.get(response) ??\n (yield* decodeResponsePrompt(response.messages).pipe(\n Effect.mapError((cause) => failure(\"Invalid batch evidence\", cause)),\n ));\n\n const parts = messages.content.flatMap((message) =>\n message.role === \"assistant\" ? message.content : [],\n );\n\n for (const call of parts) {\n if (call.type !== \"tool-call\") continue;\n\n const result = call.providerExecuted\n ? parts.find((part) => part.type === \"tool-result\" && part.id === call.id)\n : results.get(ToolCallId.make(call.id));\n\n if (\n result === undefined ||\n !(\"isFailure\" in result) ||\n (\"budgetRejected\" in result && result.budgetRejected === true)\n )\n continue;\n accounting.consecutiveToolFailures = result.isFailure\n ? accounting.consecutiveToolFailures + 1\n : 0;\n }\n accounting.accountedToolTurn = response.turn;\n results.clear();\n if (position !== \"settling\" && position !== \"settled\") position = \"awaiting-model\";\n }\n const last = facts.at(-1);\n\n if (last === undefined) return yield* failure(\"Progress has no owning fact\");\n if (previous?.continuation.position === \"settled\") position = \"settled\";\n else if (previous?.continuation.position === \"settling\" && position !== \"settled\")\n position = \"settling\";\n\n const turnBase =\n (previous?.continuation.turn === turn ? previous.continuation.turnBytes : initialBytes) +\n factBytes;\n\n const terminalUsageBytes = (previous?.continuation.terminalUsageBytes ?? 0) + usageCharge;\n\n return {\n accounting,\n savedContext,\n latestResponse,\n terminal,\n position,\n response,\n results,\n childResults,\n completionBytes,\n last,\n factBytes,\n turn,\n turnBase,\n usageCharge,\n terminalUsageBytes,\n terminalBytes: (previous?.continuation.terminalBytes ?? 0) + closingBytes,\n terminalRecords: (previous?.continuation.terminalRecords ?? 0) + closingCount,\n closing: closingCount > 0,\n };\n});\n\n/**\n * Verify retained history. Mutable checkpoint revisions are deliberately not historical proof.\n * Active original context is still checked against its exact retained historyDigest.\n */\nexport const verifyRunContinuations = Effect.fnUntraced(function* (\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n options?: {\n readonly verifyContext?: boolean;\n readonly executions?: ReadonlyArray<ExecutionCheckpoint>;\n },\n) {\n const inputs = records.filter(\n ({ record }) =>\n record.payload._tag === \"UserInputRecorded\" &&\n record.payload.kind === \"user\" &&\n record.payload.submissionId !== undefined,\n );\n\n if (records.some(({ record }) => record.payload._tag === \"RunContinuation\"))\n return yield* failure(\"Mutable interpreter progress is not canonical history\");\n for (const input of inputs) {\n const payload = input.record.payload;\n\n if (payload._tag !== \"UserInputRecorded\" || payload.submissionId === undefined) continue;\n const runId = runIdForSubmission(payload.submissionId);\n const own = records.filter((entry) => executionRunIds(entry.record).includes(runId));\n\n const terminal = own.findLast(\n ({ record }) => record.payload._tag === \"SubmissionSettled\" && record.payload.runId === runId,\n );\n\n if (terminal?.record.payload._tag === \"SubmissionSettled\") {\n if (\n terminal.record.payload.historyRecordCount === undefined ||\n own.filter((entry) => entry.sequence <= terminal.sequence).length !==\n terminal.record.payload.historyRecordCount\n )\n return yield* failure(\"Terminal history differs from its retained fact count\");\n continue;\n }\n if (options?.verifyContext === false) continue;\n const checkpoint = options?.executions?.find((value) => value.progress.runId === runId);\n\n if (checkpoint === undefined) {\n if (own.some(({ record }) => !isPreContinuationFact(record)))\n return yield* failure(\"Active execution is missing its authoritative checkpoint\");\n continue;\n }\n\n const saved = checkpoint.operational.find(\n ({ payload }) => payload._tag === \"RunContextRecorded\",\n );\n\n if (saved?.payload._tag === \"RunContextRecorded\") {\n yield* validateContextBoundary(saved.payload, input).pipe(\n Effect.mapError((cause) => failure(\"Context has an invalid admission boundary\", cause)),\n );\n yield* readRunContext(saved.payload, input, saved.recordId).pipe(\n Effect.mapError((cause) => failure(\"Context differs from its original history\", cause)),\n );\n }\n }\n});\n\n/**\n * Prepare progress for the existing atomic append/publication. Accept the returned state only\n * after that append commits; a failed or stale producer cannot publish speculative progress.\n * One writer retains bounded metadata for its active Run, not its historical results or IDs.\n */\nexport const makeProgressWriter = Effect.fnUntraced(function* (\n threadId: ThreadId,\n deploymentId: DeploymentId,\n) {\n const reader = yield* ThreadReader;\n const gate = yield* Semaphore.make(1);\n const cached = new Map<RunId, ProgressState>();\n\n let verifiedEmpty:\n | {\n readonly runId: RunId;\n readonly through: CanonicalSequence;\n readonly writer: CurrentRunWriter[\"Service\"];\n }\n | undefined;\n\n const reservations = new Map<\n RecordId,\n {\n readonly runId: RunId;\n readonly turn: number;\n readonly bytes: number;\n readonly records: number;\n }\n >();\n\n const stagedUsage = new Map<RunId, number>();\n\n const provide = <A, E>(effect: Effect.Effect<A, E, ThreadReader>) =>\n Effect.provideService(effect, ThreadReader, reader);\n\n const loadUncachedState = Effect.fnUntraced(function* (runId: RunId, after: CanonicalSequence) {\n const loaded = yield* provide(readContinuation(threadId, runId, after));\n\n if (Option.isNone(loaded)) return undefined;\n const continuation = loaded.value.continuation;\n let response: ModelResponseRecorded | undefined;\n let completionBytes: number | undefined;\n const results = new Map<ToolCallId, ToolCallSettled>();\n\n const childResults = new Map<ToolCallId, ChildResultCapacity>();\n\n if (continuation.latestResponse !== undefined) {\n const evidence = yield* provide(resolveEvidence(threadId, continuation.latestResponse));\n\n if (\n evidence.record.payload._tag !== \"ModelResponseRecorded\" ||\n evidence.record.payload.runId !== runId\n )\n return yield* failure(\"Continuation operation reference is invalid\");\n response = evidence.record.payload;\n if (continuation.accounting.accountedToolTurn < response.turn) {\n for (const operation of response.toolOperations) {\n const found = yield* provide(\n getRecord({\n threadId,\n recordId: toolCallSettledRecordId(runId, response.turn, operation.toolCallId),\n }),\n );\n\n if (Option.isSome(found)) {\n const result = found.value.record.payload;\n\n if (\n result._tag !== \"ToolCallSettled\" ||\n result.runId !== runId ||\n result.toolCallId !== operation.toolCallId ||\n result.toolName !== operation.toolName\n )\n return yield* failure(\"Continuation result identity is invalid\");\n results.set(operation.toolCallId, result);\n } else if (operation.executionKind === \"delegation\") {\n const requested = yield* provide(\n getRecord({\n threadId,\n recordId: subagentRequestedRecordId(runId, operation.toolCallId),\n }),\n );\n\n if (\n Option.isSome(requested) &&\n requested.value.record.payload._tag === \"SubagentRequested\"\n ) {\n if (\n requested.value.record.payload.runId !== runId ||\n requested.value.record.payload.toolCallId !== operation.toolCallId\n )\n return yield* failure(\"Continuation child request identity is invalid\");\n\n const started = yield* provide(\n getRecord({\n threadId,\n recordId: subagentStartedRecordId(runId, operation.toolCallId),\n }),\n );\n\n if (\n Option.isSome(started) &&\n (started.value.record.payload._tag !== \"SubagentStarted\" ||\n started.value.record.payload.runId !== runId ||\n started.value.record.payload.toolCallId !== operation.toolCallId ||\n started.value.record.payload.childThreadId !==\n requested.value.record.payload.childThreadId)\n )\n return yield* failure(\"Continuation child start identity is invalid\");\n\n const startedBytes = Option.isSome(started)\n ? canonicalRecordBytes(started.value.record) + MAX_RUN_CONTINUATION_BYTES\n : 0;\n\n childResults.set(operation.toolCallId, {\n resultBytes: Math.min(\n MAX_PERSISTED_JSON_BYTES,\n requested.value.record.payload.budget?.allocation.resultBytes ??\n MAX_PERSISTED_JSON_BYTES,\n ),\n remainingBytes: Math.max(0, RUN_TERMINAL_RESERVE_BYTES - startedBytes),\n remainingRecords: Option.isSome(started) ? 3 : 4,\n });\n }\n }\n }\n }\n }\n if (continuation.position === \"settling\" && continuation.terminal !== undefined) {\n const terminal = yield* provide(\n resolveExecutionEvidence(threadId, loaded.value.checkpoint, continuation.terminal),\n );\n\n const payload = terminal.payload;\n\n if (payload._tag === \"RunCompleted\")\n completionBytes =\n utf8ByteLength(JSON.stringify(payload.output)) +\n (payload.runDisposition === undefined\n ? 0\n : utf8ByteLength(JSON.stringify(payload.runDisposition)));\n }\n\n return {\n continuation,\n record: loaded.value.record,\n checkpoint: loaded.value.checkpoint,\n ...(response === undefined ? {} : { response }),\n results,\n childResults,\n ...(completionBytes === undefined ? {} : { completionBytes }),\n };\n });\n\n const checkFutureShapes = (\n state: ProgressState,\n cursorBytes?: number,\n ): Effect.Effect<void, ThreadStoreError> => {\n const progress = state.continuation;\n\n if (progress.position === \"settled\") return Effect.void;\n const size = cursorBytes ?? canonicalRecordBytes(state.record);\n const textBytes = (value: string) => utf8ByteLength(JSON.stringify(value));\n const refBytes = (value: EvidenceReference) => utf8ByteLength(JSON.stringify(value));\n\n const ref = (recordId: RecordId) => EvidenceReference.make({ recordId });\n\n const fits = (batchId: string, lastFact: EvidenceReference, terminal?: EvidenceReference) =>\n // Only these identities change. The fixed allowance covers scalar and timestamp growth.\n size +\n textBytes(JSON.stringify([\"continuation@1\", progress.runId, batchId])) -\n textBytes(state.record.recordId) +\n textBytes(deploymentId) -\n textBytes(state.record.deploymentId) +\n refBytes(lastFact) -\n refBytes(progress.lastFact) +\n (terminal === undefined\n ? 0\n : refBytes(terminal) -\n (progress.terminal === undefined ? 0 : refBytes(progress.terminal)) +\n 12) +\n 1024 <=\n MAX_RUN_CONTINUATION_BYTES;\n\n if (\n !fits(\n submissionSettlementBatchId(progress.submissionId),\n ref(submissionSettlementRecordId(progress.submissionId)),\n ref(runCompletedRecordId(progress.runId)),\n )\n )\n return Effect.fail(capacityFailure(\"Run has no room for a terminal continuation envelope\"));\n\n if (\n state.response !== undefined &&\n progress.accounting.accountedToolTurn < state.response.turn\n ) {\n for (const operation of state.response.toolOperations) {\n if (state.results.has(operation.toolCallId)) continue;\n if (\n !fits(\n toolCallResultBatchId(progress.runId, state.response.turn, operation.toolCallId),\n ref(toolCallSettledRecordId(progress.runId, state.response.turn, operation.toolCallId)),\n )\n )\n return Effect.fail(\n capacityFailure(\"Tool dispatch has no room for its result continuation envelope\"),\n );\n }\n }\n\n return Effect.void;\n };\n\n const checkCapacity = (\n state: CapacityState,\n consumed: ReadonlySet<RecordId> = new Set(),\n extra?: { readonly turn: number; readonly bytes: number; readonly records: number },\n committedUsageBytes = 0,\n ): Effect.Effect<void, ThreadStoreError> => {\n const progress = state.continuation;\n const pending = resultCapacity(state);\n\n const terminal =\n progress.position === \"settled\"\n ? 0\n : Math.max(\n 0,\n RUN_TERMINAL_RESERVE_BYTES +\n 2 * (state.completionBytes ?? 0) +\n 2 *\n (progress.terminalUsageBytes +\n Math.max(0, (stagedUsage.get(progress.runId) ?? 0) - committedUsageBytes)) -\n progress.terminalBytes,\n );\n\n let turnBytes =\n (extra !== undefined && extra.turn !== progress.turn ? 0 : progress.turnBytes) +\n pending.bytes +\n terminal +\n (extra?.bytes ?? 0);\n\n let recordBytes = progress.recordBytes + pending.bytes + terminal + (extra?.bytes ?? 0);\n\n let recordCount =\n progress.recordCount +\n pending.records +\n (progress.position === \"settled\"\n ? 0\n : Math.max(0, RUN_TERMINAL_RESERVE_RECORDS - progress.terminalRecords)) +\n (extra?.records ?? 0);\n\n for (const [recordId, reservation] of reservations) {\n if (reservation.runId !== progress.runId || consumed.has(recordId)) continue;\n if (reservation.turn === (extra?.turn ?? progress.turn)) turnBytes += reservation.bytes;\n recordBytes += reservation.bytes;\n recordCount += reservation.records;\n }\n if (\n turnBytes > MAX_TURN_CANONICAL_BYTES ||\n recordBytes > MAX_RUN_EVIDENCE_BYTES ||\n recordCount > MAX_RUN_EVIDENCE_RECORDS\n )\n return Effect.fail(\n failure(\n \"Run has no remaining canonical dispatch capacity\",\n AgentPersistenceCapacityError.make({\n message: \"Run has no room for the next result and a bounded terminal settlement\",\n }),\n ),\n );\n\n return Effect.void;\n };\n\n const prepare = Effect.fnUntraced(function* (\n batch: CanonicalBatch,\n after: CanonicalSequence,\n mode: \"commit\" | \"preflight\" = \"commit\",\n ) {\n if (batch.records.some((record) => record.payload._tag === \"RunContinuation\"))\n return yield* failure(\"A caller cannot supply interpreter progress to the progress writer\");\n\n // Every private caller passes captureFacts' owned snapshot. Keep a mutable\n // list for settlement accounting without capturing that snapshot a second time.\n const ownedRecords = [...batch.records];\n\n const groups = new Map<RunId, Array<RecordEnvelope>>();\n\n for (const record of ownedRecords) {\n for (const runId of executionRunIds(record)) {\n const facts = groups.get(runId) ?? [];\n\n facts.push(record);\n groups.set(runId, facts);\n }\n }\n const executions: Array<ExecutionUpdate> = [];\n const accepted = new Map<RunId, ProgressState>();\n let executionCount = 0;\n\n for (const [runId, facts] of groups) {\n const empty =\n verifiedEmpty?.runId === runId &&\n verifiedEmpty.through === after &&\n // Settlement preparation need not have a Run writer; absence disables reuse.\n verifiedEmpty.writer ===\n Option.getOrUndefined(yield* Effect.serviceOption(CurrentRunWriter));\n\n const previous = empty\n ? undefined\n : (cached.get(runId) ?? (yield* loadUncachedState(runId, after)));\n\n let original = facts.find(\n (record) =>\n record.payload._tag === \"UserInputRecorded\" &&\n record.payload.kind === \"user\" &&\n record.payload.runId === runId &&\n record.payload.submissionId !== undefined,\n );\n\n let originalCount = 0;\n let initialBytes = 0;\n let originalSequence = previous?.checkpoint?.originalSequence;\n\n if (previous === undefined && original === undefined) {\n const input = yield* provide(getRunInput({ threadId, runId }));\n\n if (\n Option.isNone(input) ||\n input.value.record.payload._tag !== \"UserInputRecorded\" ||\n input.value.record.payload.submissionId === undefined\n )\n continue;\n\n original = input.value.record;\n originalSequence = input.value.sequence;\n }\n\n const submissionId =\n previous?.continuation.submissionId ??\n (original?.payload._tag === \"UserInputRecorded\"\n ? original.payload.submissionId\n : undefined);\n\n if (submissionId === undefined)\n return yield* failure(\"Run progress has no original admission identity\");\n if (runId !== runIdForSubmission(submissionId))\n return yield* failure(\"Run progress conflicts with its original admission\");\n if (previous === undefined && original === undefined)\n return yield* failure(\"Run has no accepted original input\");\n\n if (previous === undefined && !empty) {\n const settled = yield* provide(\n getRecord({\n threadId,\n recordId: submissionSettlementRecordId(submissionId),\n }),\n );\n\n if (\n Option.isSome(settled) &&\n settled.value.sequence <= after &&\n settled.value.record.payload._tag === \"SubmissionSettled\" &&\n settled.value.record.payload.runId === runId &&\n settled.value.record.payload.historyRecordCount !== undefined &&\n facts.every(\n ({ payload }) =>\n payload._tag === \"WorkerReportPrepared\" ||\n payload._tag === \"SubmissionSettled\" ||\n payload._tag === \"ToolCallSettled\" ||\n payload._tag === \"ToolCallResolved\" ||\n payload._tag === \"SubagentJoined\",\n )\n )\n // Independent obligations can record factual closure after interpreter retirement.\n continue;\n\n const selected = yield* provide(\n Stream.runCollect(\n runEvidence(threadId, submissionId, after).pipe(\n Stream.take(MAX_RUN_RECOVERY_SUFFIX_RECORDS + 1),\n ),\n ),\n );\n\n const existing = selected.filter(({ record }) => executionRunIds(record).includes(runId));\n\n if (\n !validateSuffix(existing, CanonicalSequence.make(0)) ||\n existing.some(({ record }) => !isPreContinuationFact(record))\n )\n return yield* failure(\n `Run execution has no active checkpoint or exceeds its preparation bound (${facts.map((fact) => fact.payload._tag).join(\", \")})`,\n );\n originalCount = existing.length;\n initialBytes = existing.reduce(\n (bytes, entry) => bytes + canonicalRecordBytes(entry.record),\n 0,\n );\n }\n\n const canonicalRecords =\n (previous?.checkpoint?.canonicalRecords ?? originalCount) +\n facts.filter((fact) => !isOperationalRecord(fact)).length;\n\n for (let index = 0; index < facts.length; index++) {\n const fact = facts[index]!;\n const payload = fact.payload;\n\n if (payload._tag !== \"SubmissionSettled\" || payload.runId !== runId) continue;\n\n const retained = yield* Effect.fromResult(\n captureRecord(\n RecordEnvelope.make({\n ...fact,\n payload: { ...payload, historyRecordCount: canonicalRecords },\n }),\n ),\n ).pipe(\n Effect.map((record) => record.canonical),\n Effect.mapError((cause) => failure(\"Cannot capture canonical progress facts\", cause)),\n );\n\n facts[index] = retained;\n ownedRecords[ownedRecords.indexOf(fact)] = retained;\n }\n\n const originalInput =\n previous !== undefined\n ? previous.continuation.originalInput\n : original === undefined\n ? yield* failure(\"Run progress has no original input\")\n : EvidenceReference.make({ recordId: original.recordId });\n\n const next = yield* advanceFacts(previous, facts, submissionId, initialBytes);\n\n const {\n accounting,\n savedContext,\n latestResponse,\n terminal,\n position,\n response,\n results,\n childResults,\n completionBytes,\n last,\n factBytes,\n turn,\n turnBase,\n usageCharge,\n terminalUsageBytes,\n } = next;\n\n let continuation = yield* RunContinuation.makeEffect({\n version: 1,\n runId,\n submissionId,\n revision: (previous?.continuation.revision ?? 0) + 1,\n recordCount: (previous?.continuation.recordCount ?? originalCount) + facts.length,\n recordBytes: (previous?.continuation.recordBytes ?? initialBytes) + factBytes,\n turn,\n turnBytes: turnBase,\n terminalUsageBytes,\n terminalBytes: next.terminalBytes,\n terminalRecords: next.terminalRecords,\n originalInput,\n ...(savedContext === undefined ? {} : { savedContext }),\n ...(latestResponse === undefined ? {} : { latestResponse }),\n ...(terminal === undefined ? {} : { terminal }),\n lastFact: EvidenceReference.make({ recordId: last.recordId }),\n position,\n accounting,\n }).pipe(\n Effect.mapError(() =>\n capacityFailure(\"Canonical continuation exceeds its protocol bounds\"),\n ),\n );\n\n const header = {\n recordId: RecordId.make(JSON.stringify([\"continuation@1\", runId, batch.batchId])),\n family: \"thread\" as const,\n schemaVersion: 1 as const,\n createdAt: last.createdAt,\n deploymentId: last.deploymentId,\n };\n\n // The validated continuation fields are JSON; only the envelope DateTime needs encoding.\n // Key order does not change byte width. Measure without capturing a provisional record,\n // then compare against the final Schema encoding before accepting its accounting.\n const provisional = {\n ...header,\n createdAt: DateTime.formatIso(header.createdAt),\n payload: continuation,\n } satisfies typeof RecordEnvelope.Encoded;\n\n const initialCursorBytes = utf8ByteLength(JSON.stringify(provisional));\n\n const initialWidth =\n String(continuation.turnBytes).length + String(continuation.terminalBytes).length;\n\n let turnBytes = continuation.turnBytes;\n let terminalBytes = continuation.terminalBytes;\n\n for (let attempts = 0; ; attempts++) {\n const cursorBytes =\n initialCursorBytes +\n String(turnBytes).length +\n String(terminalBytes).length -\n initialWidth;\n\n const nextTurnBytes = turnBase + cursorBytes;\n const nextTerminalBytes = next.terminalBytes + (next.closing ? cursorBytes : 0);\n\n if (nextTurnBytes === turnBytes && nextTerminalBytes === terminalBytes) break;\n if (attempts >= 4) return yield* failure(\"Continuation byte accounting did not converge\");\n turnBytes = nextTurnBytes;\n terminalBytes = nextTerminalBytes;\n }\n\n const checkedBytes = yield* ContinuationBytes.makeEffect({\n turnBytes,\n terminalBytes,\n }).pipe(\n Effect.mapError(() =>\n capacityFailure(\"Turn exceeds its incremental canonical byte budget\"),\n ),\n );\n\n // Every other field was checked above; byte accounting changes only these counters.\n continuation = RunContinuation.make(\n { ...continuation, ...checkedBytes },\n { disableChecks: true },\n );\n\n const proposedRecord = RecordEnvelope.make(\n { ...header, payload: continuation },\n { disableChecks: true },\n );\n\n const cursorBytes = turnBytes - turnBase;\n\n if (cursorBytes > MAX_RUN_CONTINUATION_BYTES)\n return yield* capacityFailure(\n \"Encoded continuation exceeds 8192 bytes including its envelope\",\n );\n executionCount++;\n if (\n mode === \"preflight\" &&\n previous?.checkpoint !== undefined &&\n facts.every(({ payload }) => payload._tag === \"ModelResponseRecorded\")\n ) {\n // The payload and header are validated, and operational facts are unchanged.\n // Dispatch needs their capacity proof; only a commit needs checkpoint wire.\n yield* decodeExecutionFrontier({\n canonicalRecords,\n throughSequence: after + ownedRecords.filter((fact) => !isOperationalRecord(fact)).length,\n }).pipe(Effect.mapError((cause) => failure(\"Active execution exceeds its bounds\", cause)));\n\n const state: ProgressState = {\n continuation,\n record: proposedRecord,\n ...(response === undefined ? {} : { response }),\n results,\n childResults,\n ...(completionBytes === undefined ? {} : { completionBytes }),\n };\n\n yield* checkCapacity(\n state,\n new Set(batch.records.map(({ recordId }) => recordId)),\n undefined,\n usageCharge,\n );\n yield* checkFutureShapes(state, cursorBytes);\n continue;\n }\n\n const record = yield* Effect.fromResult(captureRecord(proposedRecord)).pipe(\n Effect.map((record) => record.canonical),\n Effect.mapError((cause) => failure(\"Cannot capture canonical progress facts\", cause)),\n );\n\n if (!isExecutionProgressRecord(record))\n return yield* failure(\"Captured execution has no Run continuation\");\n if (canonicalRecordBytes(record) !== cursorBytes)\n return yield* failure(\"Continuation byte accounting differs from its Schema encoding\");\n\n const operational = new Map(\n (previous?.checkpoint?.operational ?? []).map((fact) => [fact.recordId, fact]),\n );\n\n const changed = facts.filter(isOperationalRecord);\n\n for (const fact of changed) {\n const prior = operational.get(fact.recordId);\n\n if (\n prior !== undefined &&\n (yield* Effect.fromResult(recordEncoding(prior)).pipe(\n Effect.mapError((cause) => failure(\"Cannot encode active Run fact\", cause)),\n )).json !==\n (yield* Effect.fromResult(recordEncoding(fact)).pipe(\n Effect.mapError((cause) => failure(\"Cannot encode active Run fact\", cause)),\n )).json\n )\n return yield* failure(\"An active Run fact cannot change after becoming durable\");\n operational.set(fact.recordId, fact);\n }\n\n const checkpoint = yield* ExecutionCheckpoint.makeEffect({\n version: 2,\n progressRecord: record,\n operational: [...operational.values()],\n canonicalRecords,\n originalSequence:\n originalSequence ??\n CanonicalSequence.make(\n after +\n ownedRecords\n .filter((fact) => !isOperationalRecord(fact))\n .findIndex((fact) => fact.recordId === originalInput.recordId) +\n 1,\n ),\n throughSequence: CanonicalSequence.make(\n after + ownedRecords.filter((fact) => !isOperationalRecord(fact)).length,\n ),\n batchId: batch.batchId,\n }).pipe(Effect.mapError((cause) => failure(\"Active execution exceeds its bounds\", cause)));\n\n const state = {\n continuation,\n record,\n checkpoint,\n ...(response === undefined ? {} : { response }),\n results,\n childResults,\n ...(completionBytes === undefined ? {} : { completionBytes }),\n };\n\n if (\n !facts.every((fact) => isTerminalBudgetFact(fact) && fact.payload._tag !== \"RunCompleted\")\n )\n yield* checkCapacity(\n state,\n new Set(batch.records.map(({ recordId }) => recordId)),\n undefined,\n usageCharge,\n );\n yield* checkFutureShapes(state);\n executions.push(\n ExecutionUpdate.make({\n previousRevision: previous?.continuation.revision ?? 0,\n checkpoint,\n facts: changed,\n // Pending operations and handoffs retain their own recovery rows and original facts.\n retire: position === \"settled\",\n }),\n );\n accepted.set(runId, state);\n }\n\n if (ownedRecords.length + executionCount > 256)\n return yield* failure(\"Progress and facts exceed the atomic batch bound\");\n\n const prepared = CommitBatch.make(\n {\n ...batch,\n records: ownedRecords.filter((fact) => !isOperationalRecord(fact)),\n },\n { disableChecks: true },\n );\n\n return {\n batch: prepared,\n executions,\n accept: () => {\n for (const record of batch.records) reservations.delete(record.recordId);\n for (const [runId, state] of accepted) {\n if (executions.find((update) => update.checkpoint.progress.runId === runId)?.retire)\n cached.delete(runId);\n else cached.set(runId, state);\n }\n // Administrative writers can address many old Runs; retention is still bounded.\n while (cached.size > 8) {\n const first = cached.keys().next().value;\n\n if (first !== undefined) cached.delete(first);\n }\n },\n };\n });\n\n const tail = Effect.flatMap(CurrentRunWriter, (writer) =>\n writer.threadId !== threadId\n ? Effect.fail(failure(\"Progress writer belongs to another Thread\"))\n : Effect.map(writer.tail, (position) => position.sequence),\n );\n\n const commitCaptured = Effect.fnUntraced(\n function* (batch: CanonicalBatch) {\n const writer = yield* CurrentRunWriter;\n\n for (let retries = 0; ; retries++) {\n const prepared = yield* prepare(batch, yield* tail).pipe(\n Effect.catchTag(\"ThreadNotMaterialized\", (cause) =>\n failure(\"Selected Run disappeared during progress publication\", cause),\n ),\n );\n\n const result = yield* writer.append(prepared.batch, prepared.executions).pipe(\n Effect.catchTag(\"AppendConflict\", (conflict) => {\n if (conflict.reason !== \"tail\" || retries >= 8) return Effect.fail(conflict);\n cached.clear();\n\n return Effect.succeed(undefined);\n }),\n );\n\n if (result === undefined) continue;\n\n if (result.replayed) cached.clear();\n else prepared.accept();\n\n return result;\n }\n },\n (effect) =>\n Effect.flatMap(CurrentRunWriter, (writer) =>\n writer.withProgress(gate.withPermits(1)(effect)),\n ),\n );\n\n const publishCaptured = Effect.fnUntraced(\n function* (batch: CanonicalBatch) {\n const publisher = yield* CurrentRunSettlement;\n\n if (publisher.threadId !== threadId)\n return yield* failure(\"Settlement publisher belongs to another Thread\");\n\n for (let retries = 0; ; retries++) {\n const prepared = yield* prepare(batch, (yield* publisher.tail).sequence).pipe(\n Effect.catchTag(\"ThreadNotMaterialized\", (cause) =>\n failure(\"Selected Run disappeared during progress publication\", cause),\n ),\n );\n\n const first = prepared.batch.records[0];\n\n if (first === undefined)\n return yield* failure(\"Settlement must publish a retained terminal fact\");\n\n const terminalBatch = yield* CanonicalBatch.makeEffect({\n ...prepared.batch,\n records: [first, ...prepared.batch.records.slice(1)],\n }).pipe(\n Effect.mapError((cause) =>\n failure(\"Settlement must publish a retained terminal fact\", cause),\n ),\n );\n\n const result = yield* publisher.publishSettlement(terminalBatch, prepared.executions).pipe(\n Effect.catchTag(\"AppendConflict\", (conflict) => {\n if (conflict.reason !== \"tail\" || retries >= 8) return Effect.fail(conflict);\n cached.clear();\n\n return Effect.succeed(undefined);\n }),\n );\n\n if (result === undefined) continue;\n\n if (result.replayed) cached.clear();\n else prepared.accept();\n\n return result;\n }\n },\n (effect) =>\n Effect.flatMap(CurrentRunSettlement, (writer) =>\n writer.withProgress(gate.withPermits(1)(effect)),\n ),\n );\n\n const commit = (batch: CommitBatch) => captureFacts(batch).pipe(Effect.flatMap(commitCaptured));\n\n const publish = (batch: CanonicalBatch) =>\n captureFacts(batch).pipe(Effect.flatMap(publishCaptured));\n\n const reserve = (runId: RunId, probe: CanonicalBatch, bytes: number) =>\n gate.withPermits(1)(\n Effect.gen(function* () {\n const after = yield* tail;\n\n yield* prepare(yield* captureFacts(probe), after);\n const recordId = probe.records[0].recordId;\n const state = cached.get(runId) ?? (yield* loadUncachedState(runId, after));\n\n if (state === undefined) return yield* failure(\"Dispatch has no canonical Run progress\");\n if (reservations.has(recordId))\n return yield* failure(\"Dispatch capacity is already reserved\");\n yield* checkCapacity(state, new Set(), {\n turn: state.continuation.turn,\n bytes,\n records: 1,\n });\n reservations.set(recordId, { runId, turn: state.continuation.turn, bytes, records: 1 });\n\n return gate.withPermits(1)(\n Effect.sync(() => {\n reservations.delete(recordId);\n }),\n );\n }),\n );\n\n const defer = (batch: CanonicalBatch) =>\n gate.withPermits(1)(\n Effect.gen(function* () {\n const after = yield* tail;\n\n const owned = yield* captureFacts(batch);\n\n yield* prepare(owned, after, \"preflight\");\n\n const response = owned.records.find(\n (record) => record.payload._tag === \"ModelResponseRecorded\",\n );\n\n if (response === undefined || response.payload._tag !== \"ModelResponseRecorded\")\n return yield* failure(\"Deferred dispatch has no response\");\n\n const progress =\n cached.get(response.payload.runId) ??\n (yield* loadUncachedState(response.payload.runId, after));\n\n if (progress === undefined) return yield* failure(\"Deferred dispatch has no Run progress\");\n\n const pending = resultCapacity({\n ...progress,\n continuation: {\n ...progress.continuation,\n accounting: { ...progress.continuation.accounting, accountedToolTurn: 0 },\n },\n response: response.payload,\n results: new Map(),\n childResults: new Map(),\n });\n\n const bytes =\n owned.records.reduce((total, record) => total + canonicalRecordBytes(record), 0) +\n MAX_RUN_CONTINUATION_BYTES +\n pending.bytes;\n\n const records = owned.records.length + pending.records;\n\n yield* checkCapacity(progress, new Set(), { turn: response.payload.turn, bytes, records });\n reservations.set(response.recordId, {\n runId: response.payload.runId,\n turn: response.payload.turn,\n bytes,\n records,\n });\n\n return owned;\n }),\n );\n\n const checkState = (state: ProgressState | undefined, recovered: boolean) => {\n if (state === undefined) return Effect.fail(failure(\"Execution has no canonical Run progress\"));\n\n const capacity = () =>\n state.continuation.position === \"settling\" || state.continuation.position === \"settled\"\n ? Effect.void\n : checkCapacity(state);\n\n // Accepted states were shape-checked, but usage and reservations remain live inputs.\n return recovered ? Effect.andThen(checkFutureShapes(state), capacity) : capacity();\n };\n\n const check = (runId: RunId) =>\n gate.withPermits(1)(\n Effect.flatMap(CurrentRunWriter, (writer) => {\n if (writer.threadId !== threadId)\n return Effect.fail(failure(\"Progress writer belongs to another Thread\"));\n\n const retained = cached.get(runId);\n\n if (retained !== undefined) return checkState(retained, false);\n\n return Effect.flatMap(writer.tail, (position) =>\n Effect.flatMap(loadUncachedState(runId, position.sequence), (state) =>\n checkState(state, true),\n ),\n );\n }),\n );\n\n return {\n commit,\n publish,\n reserve,\n defer,\n check,\n /** Internal read view immediately after this writer's acknowledged commit, while\n * holding its initialization gates. Never authority across ownership or writes. */\n acceptedCheckpoint: (runId: RunId) => cached.get(runId)?.checkpoint,\n /** Scope a verified empty execution/evidence view to one owned initialization body.\n * The caller holds progress+mutation gates; a changed writer or tail never reuses it. */\n withVerifiedEmptyRun: <A, E, R>(\n runId: RunId,\n through: CanonicalSequence,\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<A, E, R | CurrentRunWriter> =>\n Effect.flatMap(CurrentRunWriter, (writer) => {\n const view = { runId, through, writer };\n\n verifiedEmpty = view;\n\n return body.pipe(\n Effect.ensuring(\n Effect.sync(() => {\n if (verifiedEmpty === view) verifiedEmpty = undefined;\n }),\n ),\n );\n }),\n stageUsage: (runId: RunId, bytes: number) => {\n if (bytes === 0) stagedUsage.delete(runId);\n else stagedUsage.set(runId, bytes);\n },\n };\n});\n"],"mappings":"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"}
|
|
@@ -2,11 +2,11 @@ import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
|
|
|
2
2
|
import { ThreadId, ToolCallId } from "./core/Identifiers.mjs";
|
|
3
3
|
import { IdempotencyKey } from "./core/Receipt.mjs";
|
|
4
4
|
import { t as copyJson } from "./json-BlJVQZxN.mjs";
|
|
5
|
-
import {
|
|
5
|
+
import { summarizeModelUsage } from "./core/Usage.mjs";
|
|
6
6
|
import { f as contextWindowId, n as COMPACTION_SUMMARY_PREFIX, p as contextWindowMessage, t as CLEARED_TOOL_RESULT } from "./compaction-CgFMDiXL.mjs";
|
|
7
7
|
import { RunPolicyUsage } from "./core/RunPolicyUsage.mjs";
|
|
8
|
-
import { U as PersistedJson, X as RecordEnvelope, c as CanonicalBatch, f as CanonicalSequence, nt as RunCompleted, wt as ToolCallSettled, z as ModelResponseRecorded } from "./Records-
|
|
9
|
-
import { s as digestJson } from "./Digest-
|
|
8
|
+
import { U as PersistedJson, X as RecordEnvelope, c as CanonicalBatch, f as CanonicalSequence, nt as RunCompleted, wt as ToolCallSettled, z as ModelResponseRecorded } from "./Records-DzL4Kbtw.mjs";
|
|
9
|
+
import { s as digestJson } from "./Digest-C3EODOee.mjs";
|
|
10
10
|
import { Brand, Effect, Predicate, Schema, Stream } from "effect";
|
|
11
11
|
import { Prompt } from "effect/ai";
|
|
12
12
|
//#region src/durable/internal/journal-metadata.ts
|
|
@@ -91,6 +91,33 @@ const makeJournalMetadata = (ownerRunId) => {
|
|
|
91
91
|
};
|
|
92
92
|
};
|
|
93
93
|
//#endregion
|
|
94
|
+
//#region src/durable/internal/usage-totals.ts
|
|
95
|
+
/** Captured calls are additive and nonnegative; progress does not need attribution groups. */
|
|
96
|
+
const continuationUsage = (calls) => Effect.suspend(() => {
|
|
97
|
+
let inputTokens = 0;
|
|
98
|
+
let outputTokens = 0;
|
|
99
|
+
let costMicrousd = 0;
|
|
100
|
+
let knownWebSearchCalls = 0;
|
|
101
|
+
for (const call of calls) {
|
|
102
|
+
inputTokens += call.inputTokens.total;
|
|
103
|
+
outputTokens += call.outputTokens.total;
|
|
104
|
+
costMicrousd += call.costMicrousd;
|
|
105
|
+
knownWebSearchCalls += call.webSearchCalls ?? 0;
|
|
106
|
+
}
|
|
107
|
+
if (Number.isSafeInteger(inputTokens) && Number.isSafeInteger(outputTokens) && Number.isSafeInteger(costMicrousd) && Number.isSafeInteger(knownWebSearchCalls)) return Effect.succeed({
|
|
108
|
+
modelCalls: calls.length,
|
|
109
|
+
inputTokens,
|
|
110
|
+
outputTokens,
|
|
111
|
+
costMicrousd
|
|
112
|
+
});
|
|
113
|
+
return Effect.map(summarizeModelUsage(calls), (summary) => ({
|
|
114
|
+
modelCalls: summary.modelCalls,
|
|
115
|
+
inputTokens: summary.inputTokens.total,
|
|
116
|
+
outputTokens: summary.outputTokens.total,
|
|
117
|
+
costMicrousd: summary.costMicrousd
|
|
118
|
+
}));
|
|
119
|
+
});
|
|
120
|
+
//#endregion
|
|
94
121
|
//#region src/durable/RunJournal.ts
|
|
95
122
|
var RunJournal_exports = /* @__PURE__ */ __exportAll({
|
|
96
123
|
RunJournalError: () => RunJournalError,
|
|
@@ -101,6 +128,7 @@ var RunJournal_exports = /* @__PURE__ */ __exportAll({
|
|
|
101
128
|
compactionBatchId: () => compactionBatchId,
|
|
102
129
|
compactionRecordId: () => compactionRecordId,
|
|
103
130
|
firstWorkerInputRecordId: () => firstWorkerInputRecordId,
|
|
131
|
+
initialRunJournal: () => initialRunJournal,
|
|
104
132
|
markUnknownBatchId: () => markUnknownBatchId,
|
|
105
133
|
modelResponseInterruptedBatchId: () => modelResponseInterruptedBatchId,
|
|
106
134
|
modelResponseInterruptedRecordId: () => modelResponseInterruptedRecordId,
|
|
@@ -323,6 +351,33 @@ const toolMessageFromSettled = (settled) => Effect.try({
|
|
|
323
351
|
})) }),
|
|
324
352
|
catch: (cause) => journalError("Unable to rebuild Tool message from ToolCallSettled", cause)
|
|
325
353
|
});
|
|
354
|
+
const initialPolicyUsage = () => ({
|
|
355
|
+
committedTurns: 0,
|
|
356
|
+
toolCalls: 0,
|
|
357
|
+
programmaticToolCalls: 0,
|
|
358
|
+
consecutiveToolFailures: 0,
|
|
359
|
+
finalizationUsed: false,
|
|
360
|
+
modelRestarts: 0
|
|
361
|
+
});
|
|
362
|
+
const initialUsage = (modelUsage) => ({
|
|
363
|
+
modelCalls: 0,
|
|
364
|
+
inputTokens: 0,
|
|
365
|
+
outputTokens: 0,
|
|
366
|
+
lastInputTokens: 0,
|
|
367
|
+
lastOutputTokens: 0,
|
|
368
|
+
costMicrousd: 0,
|
|
369
|
+
modelUsage
|
|
370
|
+
});
|
|
371
|
+
/** Internal first-Run projection after exact input/checkpoint-absence verification. The
|
|
372
|
+
* new UserInputRecorded contributes no model message; the engine evaluates it later. */
|
|
373
|
+
const initialRunJournal = (history) => ({
|
|
374
|
+
policyUsage: RunPolicyUsage.make(initialPolicyUsage()),
|
|
375
|
+
usage: initialUsage([]),
|
|
376
|
+
prompt: history,
|
|
377
|
+
historyBefore: history,
|
|
378
|
+
historyFrom: CanonicalSequence.make(1),
|
|
379
|
+
committedTurns: 0
|
|
380
|
+
});
|
|
326
381
|
const projectedResponseUsage = (response) => Effect.gen(function* () {
|
|
327
382
|
const calls = response.modelUsage;
|
|
328
383
|
if (calls === void 0) return {
|
|
@@ -589,15 +644,7 @@ const projectRunJournalStream = Effect.fnUntraced(function* (records, ownerRunId
|
|
|
589
644
|
}
|
|
590
645
|
const modelUsage = [];
|
|
591
646
|
let unobservedModelCalls = 0;
|
|
592
|
-
const usage =
|
|
593
|
-
modelCalls: 0,
|
|
594
|
-
inputTokens: 0,
|
|
595
|
-
outputTokens: 0,
|
|
596
|
-
lastInputTokens: 0,
|
|
597
|
-
lastOutputTokens: 0,
|
|
598
|
-
costMicrousd: 0,
|
|
599
|
-
modelUsage
|
|
600
|
-
};
|
|
647
|
+
const usage = initialUsage(modelUsage);
|
|
601
648
|
let toolSelection;
|
|
602
649
|
let usageTurn = 0;
|
|
603
650
|
const incompleteToolTurns = /* @__PURE__ */ new Set();
|
|
@@ -606,14 +653,7 @@ const projectRunJournalStream = Effect.fnUntraced(function* (records, ownerRunId
|
|
|
606
653
|
for (const response of incompleteResponseSequences) if (contextViews.some((view) => view.payload.kind !== "summarize" && response.sequence <= view.payload.coversThrough && response.lastSettlementSequence >= view.sequence)) incompleteContextRuns.add(response.runId);
|
|
607
654
|
let pendingContextToolCallId;
|
|
608
655
|
let ownerTerminated = false;
|
|
609
|
-
const policyUsage =
|
|
610
|
-
committedTurns: 0,
|
|
611
|
-
toolCalls: 0,
|
|
612
|
-
programmaticToolCalls: 0,
|
|
613
|
-
consecutiveToolFailures: 0,
|
|
614
|
-
finalizationUsed: false,
|
|
615
|
-
modelRestarts: 0
|
|
616
|
-
};
|
|
656
|
+
const policyUsage = initialPolicyUsage();
|
|
617
657
|
const accountResponse = Effect.fnUntraced(function* (envelope, payload, messages) {
|
|
618
658
|
const record = envelope.record;
|
|
619
659
|
const declared = declaredApplicationToolCallIds(messages);
|
|
@@ -906,16 +946,10 @@ const projectRunJournal = (records, runId) => projectRunJournalStream(Stream.fro
|
|
|
906
946
|
* Prompt (plan §Coordinator flow step 3).
|
|
907
947
|
*/
|
|
908
948
|
const promptFromCanonicalRecords = (records) => projectRunJournalStream(Stream.fromIterable(records), void 0).pipe(Effect.map((projection) => projection.prompt));
|
|
909
|
-
/** Everything one committed Turn contributes to its canonical batch. */
|
|
910
|
-
/**
|
|
911
|
-
* Staged usage is validated, never repaired: clamping negatives or truncating
|
|
912
|
-
* fractions would under-record canonical usage, and NaN/Infinity must fail
|
|
913
|
-
* typed instead of escaping as a record-construction defect (RUN-023).
|
|
914
|
-
*/
|
|
915
|
-
const validStagedUsage = (label, value) => Number.isSafeInteger(value) && value >= 0 ? Effect.succeed(value) : Effect.fail(journalError(`Staged ${label} must be a non-negative safe integer, got ${String(value)}`));
|
|
916
949
|
const decodePersistedJson = Schema.decodeUnknownEffect(PersistedJson);
|
|
950
|
+
const decodeModelResponse = Schema.decodeUnknownEffect(ModelResponseRecorded);
|
|
951
|
+
const decodeToolSettled = Schema.decodeUnknownEffect(ToolCallSettled);
|
|
917
952
|
const encodePrompt = Schema.encodeEffect(Prompt.Prompt);
|
|
918
|
-
const decodeModelUsage = Schema.decodeUnknownEffect(Schema.Array(ModelCallUsage));
|
|
919
953
|
const requireCanonicalTurn = (turn) => !Number.isInteger(turn) || turn <= 0 ? Effect.fail(journalError(`Canonical turn number must be a positive integer: ${turn}`)) : Effect.void;
|
|
920
954
|
const modelResponseRecord = Effect.fnUntraced(function* (input) {
|
|
921
955
|
const promptMessages = input.responseMessages;
|
|
@@ -925,11 +959,31 @@ const modelResponseRecord = Effect.fnUntraced(function* (input) {
|
|
|
925
959
|
if (runScopedPrefixLength !== void 0 && (input.turn !== 1 || !Number.isSafeInteger(runScopedPrefixLength) || runScopedPrefixLength <= 0 || runScopedPrefixLength >= promptMessages.length || promptMessages.slice(0, runScopedPrefixLength).some((message) => message.role !== "system" && message.role !== "user"))) return yield* journalError("Run-scoped Prompt provenance must identify a non-empty system/user prefix of Turn 1 before its assistant response");
|
|
926
960
|
const encodedMessages = yield* encodePrompt(Prompt.fromMessages([...promptMessages])).pipe(Effect.mapError((cause) => journalError("Turn Prompt messages failed to encode", cause)));
|
|
927
961
|
const messages = yield* decodePersistedJson(encodedMessages).pipe(Effect.map(copyJson), Effect.mapError((cause) => journalError("Turn Prompt messages exceed canonical persistence bounds", cause)));
|
|
928
|
-
const modelUsage = input.usage?.modelUsage
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
962
|
+
const modelUsage = input.usage?.modelUsage;
|
|
963
|
+
const payload = yield* decodeModelResponse({
|
|
964
|
+
_tag: "ModelResponseRecorded",
|
|
965
|
+
toolResultMaxBytes: input.toolResultMaxBytes ?? 1048576,
|
|
966
|
+
toolSelectionMaxBytes: input.toolSelectionMaxBytes ?? 0,
|
|
967
|
+
toolOperations: input.toolOperations ?? [],
|
|
968
|
+
...input.toolParameterRejections === void 0 || input.toolParameterRejections.length === 0 ? {} : { toolParameterRejections: input.toolParameterRejections },
|
|
969
|
+
...input.toolExposure === void 0 ? {} : { toolExposure: input.toolExposure },
|
|
970
|
+
runId: input.runId,
|
|
971
|
+
turnId: input.turnId,
|
|
972
|
+
turn: input.turn,
|
|
973
|
+
messages,
|
|
974
|
+
...runScopedPrefixLength === void 0 ? {} : { runScopedPrefixLength },
|
|
975
|
+
...modelUsage === void 0 ? {} : { modelUsage },
|
|
976
|
+
...input.unobservedModelCalls === void 0 || input.unobservedModelCalls === 0 ? {} : { unobservedModelCalls: input.unobservedModelCalls },
|
|
977
|
+
...input.usage === void 0 ? {} : {
|
|
978
|
+
inputTokens: input.usage.inputTokens,
|
|
979
|
+
outputTokens: input.usage.outputTokens,
|
|
980
|
+
...input.usage.costMicrousd === void 0 || input.usage.costMicrousd === 0 ? {} : { costMicrousd: input.usage.costMicrousd }
|
|
981
|
+
}
|
|
982
|
+
}).pipe(Effect.mapError((cause) => journalError("Invalid model response operation evidence", cause)));
|
|
983
|
+
if (payload.modelUsage !== void 0) {
|
|
984
|
+
if (payload.modelUsage.length === 0) return yield* journalError("Turn model usage must contain at least one completed call");
|
|
985
|
+
const summary = yield* continuationUsage(payload.modelUsage).pipe(Effect.mapError((cause) => journalError("Turn model usage exceeds accounting bounds", cause)));
|
|
986
|
+
if (payload.inputTokens !== summary.inputTokens || payload.outputTokens !== summary.outputTokens || (payload.costMicrousd ?? 0) !== summary.costMicrousd) return yield* journalError("Turn detailed and aggregate model usage disagree");
|
|
933
987
|
}
|
|
934
988
|
return RecordEnvelope.make({
|
|
935
989
|
recordId: modelResponseRecordId(input.runId, input.turn),
|
|
@@ -937,55 +991,34 @@ const modelResponseRecord = Effect.fnUntraced(function* (input) {
|
|
|
937
991
|
schemaVersion: 1,
|
|
938
992
|
createdAt: input.createdAt,
|
|
939
993
|
deploymentId: input.deploymentId,
|
|
940
|
-
payload
|
|
941
|
-
toolResultMaxBytes: input.toolResultMaxBytes ?? 1048576,
|
|
942
|
-
toolSelectionMaxBytes: input.toolSelectionMaxBytes ?? 0,
|
|
943
|
-
toolOperations: input.toolOperations ?? [],
|
|
944
|
-
...input.toolParameterRejections === void 0 || input.toolParameterRejections.length === 0 ? {} : { toolParameterRejections: input.toolParameterRejections },
|
|
945
|
-
...input.toolExposure === void 0 ? {} : { toolExposure: input.toolExposure },
|
|
946
|
-
runId: input.runId,
|
|
947
|
-
turnId: input.turnId,
|
|
948
|
-
turn: input.turn,
|
|
949
|
-
messages,
|
|
950
|
-
...runScopedPrefixLength === void 0 ? {} : { runScopedPrefixLength },
|
|
951
|
-
...modelUsage === void 0 ? {} : { modelUsage },
|
|
952
|
-
...input.unobservedModelCalls === void 0 || input.unobservedModelCalls === 0 ? {} : { unobservedModelCalls: yield* validStagedUsage("unobservedModelCalls", input.unobservedModelCalls) },
|
|
953
|
-
...input.usage === void 0 ? {} : {
|
|
954
|
-
inputTokens: yield* validStagedUsage("inputTokens", input.usage.inputTokens),
|
|
955
|
-
outputTokens: yield* validStagedUsage("outputTokens", input.usage.outputTokens),
|
|
956
|
-
...input.usage.costMicrousd === void 0 || input.usage.costMicrousd === 0 ? {} : { costMicrousd: yield* validStagedUsage("costMicrousd", input.usage.costMicrousd) }
|
|
957
|
-
}
|
|
958
|
-
}).pipe(Effect.mapError((cause) => journalError("Invalid model response operation evidence", cause)))
|
|
994
|
+
payload
|
|
959
995
|
});
|
|
960
996
|
});
|
|
961
997
|
const toolSettledRecords = Effect.fnUntraced(function* (input) {
|
|
962
998
|
const toolRecords = [];
|
|
963
999
|
for (const part of input.toolResults) {
|
|
964
|
-
const
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
1000
|
+
const payload = yield* decodeToolSettled({
|
|
1001
|
+
_tag: "ToolCallSettled",
|
|
1002
|
+
...part.toolSelection === void 0 ? {} : { toolSelection: part.toolSelection },
|
|
1003
|
+
runId: input.runId,
|
|
1004
|
+
toolCallId: part.toolCallId,
|
|
1005
|
+
toolName: part.toolName,
|
|
1006
|
+
result: part.result,
|
|
1007
|
+
isFailure: part.isFailure,
|
|
1008
|
+
...part.budgetRejected === true ? { budgetRejected: true } : {}
|
|
1009
|
+
}).pipe(Effect.mapError((cause) => journalError(`Invalid Tool result ${part.toolCallId}`, cause)));
|
|
969
1010
|
toolRecords.push(RecordEnvelope.make({
|
|
970
|
-
recordId: toolCallSettledRecordId(input.runId, input.turn, toolCallId),
|
|
1011
|
+
recordId: toolCallSettledRecordId(input.runId, input.turn, payload.toolCallId),
|
|
971
1012
|
family: "thread",
|
|
972
1013
|
schemaVersion: 1,
|
|
973
1014
|
createdAt: input.createdAt,
|
|
974
1015
|
deploymentId: input.deploymentId,
|
|
975
|
-
payload
|
|
976
|
-
...part.toolSelection === void 0 ? {} : { toolSelection: part.toolSelection },
|
|
977
|
-
runId: input.runId,
|
|
978
|
-
toolCallId,
|
|
979
|
-
toolName: part.toolName,
|
|
980
|
-
result,
|
|
981
|
-
isFailure: part.isFailure,
|
|
982
|
-
...part.budgetRejected === true ? { budgetRejected: true } : {}
|
|
983
|
-
})
|
|
1016
|
+
payload
|
|
984
1017
|
}));
|
|
985
1018
|
}
|
|
986
1019
|
return toolRecords;
|
|
987
1020
|
});
|
|
988
|
-
const runCompletionRecord =
|
|
1021
|
+
const runCompletionRecord = (input) => {
|
|
989
1022
|
if (input.runCompletion === void 0) return void 0;
|
|
990
1023
|
const completion = {
|
|
991
1024
|
runId: input.runId,
|
|
@@ -999,7 +1032,7 @@ const runCompletionRecord = Effect.fnUntraced(function* (input) {
|
|
|
999
1032
|
deploymentId: input.deploymentId,
|
|
1000
1033
|
payload: RunCompleted.make({ ...completion })
|
|
1001
1034
|
});
|
|
1002
|
-
}
|
|
1035
|
+
};
|
|
1003
1036
|
/**
|
|
1004
1037
|
* Build a canonical batch from interpreter-validated Turn facts: one
|
|
1005
1038
|
* `ModelResponseRecorded` record plus one `ToolCallSettled` record per terminal Tool result, all
|
|
@@ -1014,7 +1047,7 @@ const turnCanonicalBatch = Effect.fnUntraced(function* (input) {
|
|
|
1014
1047
|
yield* requireCanonicalTurn(input.turn);
|
|
1015
1048
|
const modelResponse = yield* modelResponseRecord(input);
|
|
1016
1049
|
const toolRecords = yield* toolSettledRecords(input);
|
|
1017
|
-
const completionRecord =
|
|
1050
|
+
const completionRecord = runCompletionRecord(input);
|
|
1018
1051
|
return CanonicalBatch.make({
|
|
1019
1052
|
batchId: turnBatchId(input.runId, input.turn),
|
|
1020
1053
|
producerId: input.producerId,
|
|
@@ -1051,7 +1084,7 @@ const turnResultsBatch = Effect.fnUntraced(function* (input) {
|
|
|
1051
1084
|
yield* requireCanonicalTurn(input.turn);
|
|
1052
1085
|
const toolRecords = yield* toolSettledRecords(input);
|
|
1053
1086
|
const first = toolRecords[0];
|
|
1054
|
-
const completionRecord =
|
|
1087
|
+
const completionRecord = runCompletionRecord(input);
|
|
1055
1088
|
if (first === void 0) {
|
|
1056
1089
|
if (completionRecord === void 0) return yield* journalError(`Turn ${input.turn} has no terminal Tool results to commit`);
|
|
1057
1090
|
return CanonicalBatch.make({
|
|
@@ -1072,6 +1105,6 @@ const turnResultsBatch = Effect.fnUntraced(function* (input) {
|
|
|
1072
1105
|
});
|
|
1073
1106
|
});
|
|
1074
1107
|
//#endregion
|
|
1075
|
-
export {
|
|
1108
|
+
export { makeJournalMetadata as $, subagentRequestedRecordId as A, toolStepSettledRecordId as B, runStartedBatchId as C, subagentLineageBatchId as D, subagentJoinedRecordId as E, toolCallResolutionBatchId as F, turnResponseBatch as G, turnBatchId as H, toolCallResolvedRecordId as I, turnResultsBatchId as J, turnResponseBatchId as K, toolCallResultBatchId as L, subagentStartedRecordId as M, toolApprovalDecisionRecordId as N, subagentLineageRecordId as O, toolApprovalRequestRecordId as P, continuationUsage as Q, toolCallUnknownRecordId as R, runIdForSubmission as S, subagentJoinBatchId as T, turnCanonicalBatch as U, turnApprovalsBatchId as V, turnIdForRun as W, workerOriginRecordId as X, workerInputRecordId as Y, workerReportRecordId as Z, projectRunJournalStream as _, childIdempotencyKeyFor as a, runDurationBatchId as b, compactionRecordId as c, markUnknownBatchId as d, toolCallSettledRecordId as et, modelResponseInterruptedBatchId as f, projectRunJournal as g, peerMessageRecordId as h, approvalDecisionBatchId as i, subagentStartedBatchId as j, subagentRequestedBatchId as k, firstWorkerInputRecordId as l, modelResponseRecordId as m, RunJournal_exports as n, childThreadIdFor as o, modelResponseInterruptedRecordId as p, turnResultsBatch as q, agentUpdateRecordId as r, compactionBatchId as s, RunJournalError as t, initialRunJournal as u, promptFromCanonicalRecords as v, runStartedRecordId as w, runDurationRecordId as x, runCompletedRecordId as y, toolStepSettledBatchId as z };
|
|
1076
1109
|
|
|
1077
|
-
//# sourceMappingURL=RunJournal-
|
|
1110
|
+
//# sourceMappingURL=RunJournal-CPMKcfd0.mjs.map
|