@yielded/agent 0.1.0-beta.177 → 0.1.0-beta.179

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.
Files changed (103) hide show
  1. package/dist/{Admin-Bpg24yCK.d.mts → Admin-NvXFPDIM.d.mts} +26 -6
  2. package/dist/{DurableAgentRuntime-CGW93k81.mjs → DurableAgentRuntime-CWhu1exp.mjs} +49 -69
  3. package/dist/DurableAgentRuntime-CWhu1exp.mjs.map +1 -0
  4. package/dist/{EventSource-A6TB7t-f.d.mts → EventSource-DNyaWmyQ.d.mts} +2 -2
  5. package/dist/{MessageDelivery-BkWrcQUd.d.mts → MessageDelivery-CLzWJImC.d.mts} +42 -42
  6. package/dist/{PreparedInputAdmission-DKIfqRZT.d.mts → PreparedInputAdmission-BQ9UCLFS.d.mts} +3 -3
  7. package/dist/{RunContinuation-D42RFqjS.mjs → RunContinuation-BF95Ncv2.mjs} +9 -11
  8. package/dist/RunContinuation-BF95Ncv2.mjs.map +1 -0
  9. package/dist/{RunContinuation-Ce2pR8VD.d.mts → RunContinuation-CL0wBsQE.d.mts} +3 -6
  10. package/dist/{RunStorage-BRGP3Tcu.mjs → RunStorage-DlfvMfHM.mjs} +20 -6
  11. package/dist/RunStorage-DlfvMfHM.mjs.map +1 -0
  12. package/dist/{Subscription-D5sOrmlI.d.mts → Subscription-D2yn6Eo3.d.mts} +2 -2
  13. package/dist/{SubscriptionInput-CxSXZUiC.d.mts → SubscriptionInput-Cog4x7Rd.d.mts} +2 -2
  14. package/dist/{ThreadImport-DUcPj5jC.mjs → ThreadImport-BoTfjjrz.mjs} +4 -4
  15. package/dist/{ThreadImport-DUcPj5jC.mjs.map → ThreadImport-BoTfjjrz.mjs.map} +1 -1
  16. package/dist/{ThreadImport-C6IiPJMW.d.mts → ThreadImport-em89zmM-.d.mts} +4 -4
  17. package/dist/{ThreadStore-Cn6FDWX9.mjs → ThreadStore-D2rqtt7k.mjs} +13 -8
  18. package/dist/ThreadStore-D2rqtt7k.mjs.map +1 -0
  19. package/dist/{ThreadTransfer-BWnAHIge.mjs → ThreadTransfer-BFolkpEp.mjs} +2 -2
  20. package/dist/{ThreadTransfer-BWnAHIge.mjs.map → ThreadTransfer-BFolkpEp.mjs.map} +1 -1
  21. package/dist/{WorkerAdmission-cfiK9aRi.mjs → WorkerAdmission-CtX1HRkm.mjs} +2 -2
  22. package/dist/{WorkerAdmission-cfiK9aRi.mjs.map → WorkerAdmission-CtX1HRkm.mjs.map} +1 -1
  23. package/dist/capabilities/BrowserUse.d.mts +36 -18
  24. package/dist/capabilities/BrowserUse.mjs +43 -11
  25. package/dist/capabilities/BrowserUse.mjs.map +1 -1
  26. package/dist/capabilities/CodeMode.mjs +1 -0
  27. package/dist/capabilities/CodeMode.mjs.map +1 -1
  28. package/dist/durable/Admin.d.mts +1 -1
  29. package/dist/durable/AgentRegistration.d.mts +1 -1
  30. package/dist/durable/Certification.d.mts +1 -1
  31. package/dist/durable/CommittedActivity.d.mts +1 -1
  32. package/dist/durable/CommittedActivity.mjs +1 -1
  33. package/dist/durable/DurableAgentRuntime.d.mts +1 -1
  34. package/dist/durable/DurableAgentRuntime.mjs +2 -2
  35. package/dist/durable/EventSource.d.mts +1 -1
  36. package/dist/durable/GitHubWorkflowSource.d.mts +3 -3
  37. package/dist/durable/LifecyclePublication.d.mts +1 -1
  38. package/dist/durable/LifecyclePublication.mjs +1 -1
  39. package/dist/durable/MessageDelivery.d.mts +1 -1
  40. package/dist/durable/MessageDeliveryStoreConformance.d.mts +2 -2
  41. package/dist/durable/PersistentHistory.d.mts +1 -1
  42. package/dist/durable/PersistentHistory.mjs +2 -2
  43. package/dist/durable/PreparedInputAdmission.d.mts +1 -1
  44. package/dist/durable/Recovery.d.mts +1 -1
  45. package/dist/durable/RunContinuation.d.mts +2 -2
  46. package/dist/durable/RunContinuation.mjs +2 -2
  47. package/dist/durable/RunJournal.d.mts +1 -1
  48. package/dist/durable/RunStorage.d.mts +1 -1
  49. package/dist/durable/RunStorage.mjs +1 -1
  50. package/dist/durable/Scheduling.d.mts +1 -1
  51. package/dist/durable/SettlementPublisher.d.mts +1 -1
  52. package/dist/durable/SettlementPublisher.mjs +1 -1
  53. package/dist/durable/SubmissionLedger.d.mts +1 -1
  54. package/dist/durable/SubmissionLedgerConformance.d.mts +1 -1
  55. package/dist/durable/SubmissionLedgerConformance.mjs +2 -2
  56. package/dist/durable/SubmissionStatus.d.mts +1 -1
  57. package/dist/durable/Subscription.d.mts +1 -1
  58. package/dist/durable/SubscriptionInput.d.mts +1 -1
  59. package/dist/durable/SubscriptionStoreConformance.d.mts +1 -1
  60. package/dist/durable/SubscriptionTools.d.mts +2 -2
  61. package/dist/durable/SubscriptionTransition.d.mts +1 -1
  62. package/dist/durable/Subscriptions.d.mts +5 -5
  63. package/dist/durable/ThreadArchiveRange.d.mts +1 -1
  64. package/dist/durable/ThreadContextHistory.d.mts +1 -1
  65. package/dist/durable/ThreadContextHistory.mjs +1 -1
  66. package/dist/durable/ThreadImport.d.mts +1 -1
  67. package/dist/durable/ThreadImport.mjs +1 -1
  68. package/dist/durable/ThreadInvariants.d.mts +3 -3
  69. package/dist/durable/ThreadInvariants.mjs +3 -3
  70. package/dist/durable/ThreadProjectionMaintenance.d.mts +1 -1
  71. package/dist/durable/ThreadReader.d.mts +1 -1
  72. package/dist/durable/ThreadReader.mjs +1 -1
  73. package/dist/durable/ThreadStore.d.mts +2 -2
  74. package/dist/durable/ThreadStore.mjs +2 -2
  75. package/dist/durable/ThreadStoreConformance.d.mts +2 -1
  76. package/dist/durable/ThreadStoreConformance.mjs +2 -2
  77. package/dist/durable/ThreadTransfer.d.mts +1 -1
  78. package/dist/durable/ThreadTransfer.mjs +1 -1
  79. package/dist/durable/ThreadWork.d.mts +1 -1
  80. package/dist/durable/ThreadWork.mjs +2 -2
  81. package/dist/durable/WorkerAdmission.d.mts +1 -1
  82. package/dist/durable/WorkerAdmission.mjs +1 -1
  83. package/dist/durable/WorkerHost.d.mts +1 -1
  84. package/dist/index.d.mts +8 -8
  85. package/dist/index.mjs +6 -6
  86. package/dist/{run-context-reader-BtBPX_nC.d.mts → run-context-reader-kpO9xhP2.d.mts} +2 -2
  87. package/dist/sandbox/CodeExecutor.d.mts +3 -1
  88. package/dist/sandbox/CodeExecutor.mjs +3 -1
  89. package/dist/sandbox/CodeExecutor.mjs.map +1 -1
  90. package/package.json +1 -1
  91. package/src/capabilities/BrowserUse.ts +53 -15
  92. package/src/capabilities/CodeMode.ts +1 -0
  93. package/src/durable/DurableAgentRuntime.ts +78 -143
  94. package/src/durable/RunContinuation.ts +44 -32
  95. package/src/durable/RunStorage.ts +56 -15
  96. package/src/durable/ThreadStore.ts +11 -0
  97. package/src/durable/internal/prompt-history-cache.ts +19 -3
  98. package/src/durable/internal/record-encoding.ts +8 -7
  99. package/src/sandbox/CodeExecutor.ts +3 -1
  100. package/dist/DurableAgentRuntime-CGW93k81.mjs.map +0 -1
  101. package/dist/RunContinuation-D42RFqjS.mjs.map +0 -1
  102. package/dist/RunStorage-BRGP3Tcu.mjs.map +0 -1
  103. package/dist/ThreadStore-Cn6FDWX9.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"RunContinuation-D42RFqjS.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 } 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<RunStorageSession, \"threadId\" | \"tail\" | \"append\" | \"appendInput\" | \"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":";;;;;;;;;;;;AAMA,MAAMA,aAAW,SAAiB,UAChC,iBAAiB,KAAK;CACpB,WAAW;CACX;CACA,GAAI,UAAU,KAAA,IAAY,CAAC,IAAI,EAAE,MAAM;AACzC,CAAC;;AAGH,MAAa,aAAa,WACxB,OAAO,QAAQ,kBAAkB,KAAK,EAAE,UAAU,OAAO,SAAS,CAAC,CAAC;;AAGtE,MAAa,kBAAkB,OAAO,WAAW,WAC/C,UACA,KACA;CACA,MAAM,QAAQ,OAAO,UAAU;EAAE;EAAU,UAAU,IAAI;CAAS,CAAC;CAEnE,IAAI,OAAO,OAAO,KAAK,GAAG,OAAO,OAAOA,UAAQ,4CAA4C;CAE5F,OAAO,MAAM;AACf,CAAC;;;;ACbD,IAAa,mBAAb,MAAa,yBAAyB,QAAQ,QAc5C,CAAC,CAAC,uCAAuC,CAAC,CAAC;CAC3C,OAAO,MAAM,UAAoB;EAC/B,OAAO,MAAM,OACX,kBACA,OAAO,IAAI,aAAa;GACtB,MAAM,SAAS,OAAO;GAEtB,OAAO,iBAAiB,GAAG;IACzB,MAAM,OAAO;IACb,SAAS,aACP,UAAU;KAAE;KAAU;IAAS,CAAC,CAAC,CAAC,KAChC,OAAO,eAAe,cAAc,MAAM,GAC1C,OAAO,IAAI,OAAO,cAAc,CAClC;GACJ,CAAC;EACH,CAAC,CACH;CACF;AACF;;;ACxBA,MAAM,WAAW,YAAoB,gBAAgB,KAAK,EAAE,QAAQ,CAAC;AACrE,MAAM,eAAe,OAAO,aAAa,OAAO,YAAY,OAAO,MAAM,CAAC;AAE1E,MAAM,qBAAqB,OAAO,oBAAoB,YAAY;AAClE,MAAM,aAAa,IAAI,IAAY,oBAAoB;AAEvD,MAAM,wBACJ,OACA,eACyC;CACzC,IAAI,EAAE,aAAa,QAAQ,OAAO,OAAO,QAAQ,KAAK;CACtD,MAAM,UAAU,MAAM,OAAO;CAE7B,IAAK,WAAW,WAAW,QAAQ,UAAU,cAAe,CAAC,WAAW,IAAI,QAAQ,IAAI,GACtF,OAAO,OAAO,QAAQ,KAAK;CAE7B,OAAO,mBAAmB;EAAE,UAAU,MAAM,OAAO;EAAU;CAAQ,CAAC,CAAC,CAAC,KACtE,OAAO,KAAK,YAAY;EAAE,UAAU,MAAM;EAAU,UAAU,MAAM;EAAU;CAAO,EAAE,GAEvF,OAAO,SAAS,qBAAqB,OAAO,QAAQ,KAAK,CAAC,CAC5D;AACF;AAEA,MAAa,oBAAoB,WAC/B,aAAa,MAAM,CAAC,CAAC,KACnB,OAAO,IAAI,aAAa,GACxB,OAAO,UAAU,UACf,gBAAgB,KAAK;CAAE,SAAS;CAAmD;AAAM,CAAC,CAC5F,CACF;AAEF,MAAa,oBAAoB,WAC/B,iBAAiB,MAAM,CAAC,CAAC,KACvB,OAAO,QAAQ,mBAAmB,GAClC,OAAO,UAAU,UACf,gBAAgB,KAAK;CAAE,SAAS;CAAmD;AAAM,CAAC,CAC5F,CACF;AAEF,MAAa,2BACX,SACA,aAEA,SAAS,OAAO,QAAQ,SAAS,uBACjC,SAAS,OAAO,QAAQ,SAAS,UACjC,SAAS,OAAO,QAAQ,UAAU,QAAQ,SAC1C,QAAQ,iBAAiB,MAAM,SAAS,YACxC,QAAQ,cAAc,KACtB,QAAQ,cAAc,SAAS,YAC/B,QAAQ,SAAS,MACd,KAAK,UACJ,IAAI,aAAa,QAAQ,SAAS,QAAQ,EAAE,EAAE,YAAY,MAC1D,IAAI,YAAY,QAAQ,WAC5B,IACI,OAAO,KAAK,QAAQ,0DAA0D,CAAC,IAC/E,OAAO;;AAQb,MAAM,uBAAuB,OAAO,WAAW,WAC7C,SACA,UAKA;CACA,OAAO,wBAAwB,SAAS,QAAQ;CAChD,MAAM,SAAS,OAAO;CACtB,MAAM,UAAwC,CAAC;CAE/C,KAAK,MAAM,OAAO,QAAQ,UAAU;EAClC,MAAM,QAAQ,OAAO,OAAO,OAAO,IAAI,QAAQ;EAE/C,IACE,UAAU,KAAA,KACV,MAAM,aAAa,SAAS,YAC5B,MAAM,OAAO,aAAa,IAAI,YAC9B,MAAM,aAAa,IAAI,UAEvB,OAAO,OAAO,QAAQ,wDAAwD;EAChF,QAAQ,KAAK,OAAO,qBAAqB,OAAO,QAAQ,KAAK,CAAC;CAChE;CAEA,IAAI,QAAQ,kBAAkB,KAAK,QAAQ,cAAc,CAAC;CAE1D,OAAO,QAAQ,QAAQ,gBAAgB;EACrC,MAAM,OAAO,OAAO,OACjB,KAAK;GACJ,UAAU,SAAS;GACnB,iBAAiB,QAAQ;GACzB,eAAe;GACf,OAAO;EACT,CAAC,CAAC,CACD,KAAK,OAAO,KAAK,CAAC,GAAG,OAAO,UAAU;EAEzC,IAAI,KAAK,SAAS,GAAG,OAAO,OAAO,QAAQ,6CAA6C;EACxF,KAAK,MAAM,SAAS,MAAM;GACxB,IACE,MAAM,aAAa,SAAS,YAC5B,MAAM,YAAY,SAClB,MAAM,WAAW,QAAQ,gBAEzB,OAAO,OAAO,QAAQ,oDAAoD;GAC5E,QAAQ,MAAM;GACd,QAAQ,KAAK,OAAO,qBAAqB,OAAO,QAAQ,KAAK,CAAC;EAChE;EACA,IAAI,KAAK,SAAS,GAAG;CACvB;CAEA,IAAI,UAAU;CACd,MAAM,WAAW,IAAI,IAAI,QAAQ,SAAS,KAAK,QAAQ,CAAC,IAAI,UAAU,IAAI,QAAQ,CAAC,CAAC;CAEpF,KAAK,MAAM,SAAS,SAAS;EAC3B,IACE,MAAM,aAAa,SAAS,YAC5B,MAAM,YAAY,WAClB,MAAM,WAAW,QAAQ,kBACxB,MAAM,WAAW,QAAQ,eACxB,SAAS,IAAI,MAAM,QAAQ,MAAM,MAAM,OAAO,UAEhD,OAAO,OAAO,QAAQ,oDAAoD;EAC5E,UAAU,MAAM;EAChB,SAAS,OAAO,MAAM,QAAQ;CAChC;CACA,IAAI,SAAS,SAAS,GAAG,OAAO,OAAO,QAAQ,4CAA4C;CAE3F,MAAM,aAAqC,CAAC;CAE5C,QAAQ,KAAK,QAAQ;CAErB,MAAM,UAAU,OAAO,wBACrB,OAAO,aAAa,OAAO,GAC3B,QAAQ,QACP,aAAa,WAAW,KAAK,QAAQ,CACxC;CAEA,OAAO;EACL,QAAQ,QAAQ;EAChB,aAAa,QAAQ;EACrB;EACA,GAAI,QAAQ,oBAAoB,KAAA,IAAY,CAAC,IAAI,EAAE,iBAAiB,QAAQ,gBAAgB;CAC9F;AACF,CAAC;;AAGD,MAAa,iBAAiB,OAAO,WAAW,WAC9C,SACA,UACA,UAKA;CACA,MAAM,UAAU,OAAO,qBAAqB,SAAS,QAAQ;CAG7D,KACE,OAH2B,iBAAiB,QAAQ,MAAM,OAGxC,QAAQ,iBAC1B,QAAQ,gBAAgB,QAAQ,eAChC,QAAQ,OAAO,QAAQ,WAAW,QAAQ,sBAC1C,QAAQ,oBAAoB,QAAQ,iBAEpC,OAAO,OAAO,QAAQ,uDAAuD;CAE/E,MAAM,SAAS,OAAO,OAAO,oBAAoB,OAAO,MAAM,CAAC,CAAC,QAAQ,cAAc,CAAC,CAAC,KACtF,OAAO,eAAe,QAAQ,gDAAgD,CAAC,CACjF;CAEA,OAAO;EACL,OAAO,QAAQ;EACf,QAAQ,OAAO,aAAa,CAAC,GAAG,QAAQ,OAAO,SAAS,GAAG,OAAO,OAAO,CAAC;EAC1E,oBAAoB,QAAQ;EAC5B,aAAa,QAAQ;EACrB,YAAY,QAAQ,WAAW,QAC5B,aAAa,SAAS,gBAAgB,QAAQ,kBACjD;EACA;EACA,GAAI,QAAQ,oBAAoB,KAAA,IAAY,CAAC,IAAI,EAAE,iBAAiB,QAAQ,gBAAgB;CAC9F;AACF,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrID,IAAa,mBAAb,cAAsC,QAAQ,QAG5C,CAAC,CAAC,uCAAuC,CAAC,CAAC,CAAC;;AAG9C,IAAa,uBAAb,cAA0C,QAAQ,QAGhD,CAAC,CAAC,2CAA2C,CAAC,CAAC,CAAC;;AAGlD,IAAa,uBAAb,cAA0C,QAAQ,QAUhD,CAAC,CAAC,2CAA2C,CAAC,CAAC,CAAC;AASlD,MAAM,WAAW,SAAiB,UAChC,iBAAiB,KAAK;CACpB,WAAW;CACX;CACA,GAAI,UAAU,KAAA,IAAY,CAAC,IAAI,EAAE,MAAM;AACzC,CAAC;AAEH,MAAM,mBAAmB,YACvB,QAAQ,SAAS,8BAA8B,KAAK,EAAE,QAAQ,CAAC,CAAC;AAElE,MAAM,6BACJ,WAEA,OAAO,QAAQ,SAAS;AAE1B,MAAM,uBAAuB,OAAO,oBAAoB,OAAO,MAAM;AAErE,MAAM,kCAAkB,IAAI,QAA8C;;AAG1E,MAAM,oBAAoB,UAAgC;CACxD,MAAM,UAA0B,CAAC,KAAK;CACtC,MAAM,uBAAO,IAAI,QAAgB;CAEjC,OAAO,QAAQ,SAAS,GAAG;EACzB,MAAM,QAAQ,QAAQ,IAAI;EAE1B,IAAI,UAAU,MAAM;EACpB,IAAI,OAAO,UAAU,UAAU;GAC7B,IAAI,OAAO,UAAU,YAAY,OAAO,UAAU,YAAY,OAAO,UAAU,WAC7E,OAAO;GACT;EACF;EACA,IAAI,KAAK,IAAI,KAAK,GAAG;EACrB,KAAK,IAAI,KAAK;EACd,MAAM,YAAY,OAAO,eAAe,KAAK;EAE7C,IACE,CAAC,OAAO,SAAS,KAAK,KACrB,cAAc,QAAQ,cAAc,OAAO,aAAa,cAAc,MAAM,WAE7E,OAAO;EACT,KAAK,MAAM,OAAO,QAAQ,QAAQ,KAAK,GAAG;GACxC,IAAI,OAAO,QAAQ,UAAU,OAAO;GACpC,MAAM,aAAa,OAAO,yBAAyB,OAAO,GAAG;GAE7D,IAAI,eAAe,KAAA,KAAa,EAAE,WAAW,aAAa,OAAO;GACjE,QAAQ,KAAK,WAAW,KAAK;EAC/B;CACF;CAEA,OAAO;AACT;AAEA,MAAM,qBAAqB,OAAO,kBAChC,OAAO,OAAO;CACZ,SAAS,eAAe,OAAO;CAC/B,YAAY,eAAe,OAAO;CAClC,SAAS,OAAO,cAAc,OAAO,OAAO,CAAC,CAAC,MAAM,OAAO,YAAY,GAAG,CAAC;AAC7E,CAAC,CACH;AAEA,MAAM,oBAAoB,OAAO,OAAO;CACtC,WAAW,gBAAgB,OAAO;CAClC,eAAe,gBAAgB,OAAO;AACxC,CAAC;AAED,MAAM,0BAA0B,OAAO,oBACrC,OAAO,OAAO;CACZ,kBAAkB,oBAAoB,OAAO;CAC7C,iBAAiB,oBAAoB,OAAO;AAC9C,CAAC,CACH;;AAGA,MAAM,gBAAgB,UACpB,OAAO,IAAI;CACT,WACE,OAAO,IAAI,aAAa;EACtB,MAAM,SAAS,MAAM;EAErB,MAAM,EAAE,SAAS,eAAe,mBAAmB;GACjD,SAAS,MAAM;GACf,YAAY,MAAM;GAClB,SAAS;EACX,CAAC;EAGD,MAAM,WAAU,OADS,OAAO,IAAI,OAAO,IAAI,aAAa,CAAC,EAAA,CACnC,KAAK,WAAW,OAAO,SAAS;EAE1D,OAAO,OAAO,OACZ,eAAe,KACb;GAAE;GAAS;GAAY,SAAS,CAAC,QAAQ,IAAK,GAAG,QAAQ,MAAM,CAAC,CAAC;EAAE,GACnE,EAAE,eAAe,KAAK,CACxB,CACF;CACF,CAAC;CACH,QAAQ,UAAU,QAAQ,2CAA2C,KAAK;AAC5E,CAAC,CAAC,CAAC,KACD,OAAO,QAAQ,OAAO,UAAU,GAChC,OAAO,UAAU,UACf,OAAO,GAAG,gBAAgB,CAAC,CAAC,KAAK,IAC7B,QACA,QAAQ,2CAA2C,KAAK,CAC9D,CACF;;AAGF,MAAa,wBAAwB,WAAmC;CACtE,MAAM,UAAU,eAAe,MAAM;CAErC,IAAI,OAAO,UAAU,OAAO,GAE1B,MAAM,QAAQ,QAAQ,SAAS,IAAI,WAAW,QAAQ,QAAQ,OAAO;CAGvE,OAAO,QAAQ,QAAQ;AACzB;;AAKA,MAAa,yBACX,YACwC;CACxC,MAAM,YAAY,OAAO,IAAI,QAAQ,IAAI,aAAa,CAAC;CAEvD,IAAI,OAAO,UAAU,SAAS,GAE5B,MAAM,UAAU,QAAQ,SAAS,IAAI,WAAW,UAAU,QAAQ,OAAO;CAG3E,OAAO,OAAO,OAAO,UAAU,QAAQ,KAAK,WAAW,OAAO,QAAQ,CAAC;AACzE;;AAGA,MAAa,uBAAuB,EAAE,cACpC,QAAQ,SAAS,gBACjB,QAAQ,SAAS,wBACjB,QAAQ,SAAS;AAEnB,MAAa,mBAAmB,OAAO,WAAW,WAChD,UACA,OACA,iBACA;CAGA,MAAM,SAAS,QAAO,OAFA,aAAA,CAGnB,cAAc;EAAE;EAAU;CAAM,CAAC,CAAC,CAClC,KACC,OAAO,SAAS,0BAA0B,UACxC,oBAAoB,IAChB,OAAO,QAAQ,OAAO,KAAK,CAAC,IAC5B,QAAQ,0CAA0C,KAAK,CAC7D,CACF;CAEF,IAAI,OAAO,OAAO,MAAM,GAAG,OAAO,OAAO,KAAK;CAC9C,MAAM,QAAQ,OAAO;CAErB,IACE,MAAM,SAAS,UAAU,SACzB,MAAM,kBAAkB,mBACxB,qBAAqB,MAAM,cAAc,IAAA,QACzC,MAAM,YAAY,MACf,WAAW,CAAC,oBAAoB,MAAM,KAAK,CAAC,gBAAgB,MAAM,CAAC,CAAC,SAAS,KAAK,CACrF,KACA,IAAI,IAAI,MAAM,YAAY,KAAK,WAAW,OAAO,QAAQ,CAAC,CAAC,CAAC,SAAS,MAAM,YAAY,QAEvF,OAAO,OAAO,QAAQ,+BAA+B;CAEvD,OAAO,OAAO,KAAK;EACjB,GAAG;EACH,YAAY;EACZ,IAAI,WAAW;GACb,OAAO,MAAM;EACf;EACA,QAAQ,MAAM;EACd,cAAc,MAAM;CACtB,CAAC;AACH,CAAC;;AAGD,MAAa,2BAA2B,OAAO,WAAW,WACxD,UACA,YACA,KACA;CAIA,OAHoB,WAAW,YAAY,MAAM,WAAW,OAAO,aAAa,IAAI,QAC3D,MAAM,OAAO,gBAAgB,UAAU,GAAG,EAAA,CAAG;AAGxE,CAAC;;AAGD,MAAa,eACX,UACA,cACA,iBACA,gBAAmC,kBAAkB,KAAK,CAAC,MAE3D,OAAO,OACL,OAAO,IAAI,eAAe,WACxB,OAAO,cAAc;CACnB,IAAI,QAAQ;CACZ,IAAI,QAAQ;CACZ,IAAI,QAAQ;CACZ,MAAM,QAAQ,mBAAmB,YAAY;CAE7C,MAAM,2BAAW,IAAI,IAAI;EACvB,wBAAwB,YAAY;EACpC,wBAAwB,YAAY;EACpC,6BAA6B,YAAY;CAC3C,CAAC;CAED,MAAM,aACJ,OAAO,OACL,OAAO,WACL,OAAO,KAAK;EACV;EACA,WAAW;GAAE,MAAM;GAAe;GAAO;GAAc;EAAgB;EACvE,MAAM;GAAE,OAAO;GAAG,GAAI,UAAU,IAAI,CAAC,IAAI,EAAE,eAAe,MAAM;EAAG;CACrE,CAAC,CACH,CAAC,CAAC,KACA,OAAO,UAAU,UACf,MAAM,SAAS,qBACX,QACA,QAAQ,4BAA4B,KAAK,CAC/C,GACA,OAAO,SAAS,SACd,OAAO,IAAI,aAAa;EACtB,IAAI,KAAK,SAAS,GAChB,OAAO,OAAO,QAAQ,4CAA4C;EACpE,KAAK,MAAM,SAAS,MAAM;GACxB,IACE,MAAM,aAAa,YACnB,MAAM,YAAY,SAClB,MAAM,WAAW,mBACjB,MAAM,OAAO,QAAQ,SAAS,qBAC7B,CAAC,gBAAgB,MAAM,MAAM,CAAC,CAAC,SAAS,KAAK,KAC5C,CAAC,SAAS,IAAI,MAAM,OAAO,QAAQ,GAErC,OAAO,OAAO,QAAQ,oDAAoD;GAC5E,QAAQ,MAAM;GACd,SAAS;GACT,SAAS,OAAO,OAAO,IAAI;IACzB,WAAW,qBAAqB,MAAM,MAAM;IAC5C,QAAQ,UAAU,QAAQ,sCAAsC,KAAK;GACvE,CAAC;GACD,IACE,QAAA,SACA,QAAA,UAEA,OAAO,OAAO,QAAQ,kDAAkD;EAC5E;EAEA,OAAO,KAAK,SAAS,IACjB,OAAO,aAAa,IAAI,IACxB,OAAO,OAAO,OAAO,aAAa,IAAI,GAAG,OAAO,QAAQ,IAAI,CAAC;CACnE,CAAC,CACH,CACF,CACF;CAEF,OAAO,KAAK;AACd,CAAC,CACH,CACF;;AAGF,MAAa,kBACX,SACA,YACG;CACH,MAAM,SAAS,QAAQ,QAAQ,WAAW,OAAO,WAAW,OAAO;CAEnE,OACE,OAAO,UAAA,MACP,OAAO,QAAQ,OAAO,WAAW,QAAQ,qBAAqB,OAAO,MAAM,GAAG,CAAC,KAAA;AAGnF;;;;;AAMA,MAAa,0BAA0B,OAAO,WAAW,WACvD,UACA,cACA,iBACA;CACA,MAAM,UAAU,OAAO,OAAO,WAAW,YAAY,UAAU,cAAc,eAAe,CAAC;CAC7F,MAAM,QAAQ,mBAAmB,YAAY;CAC7C,MAAM,MAAM,QAAQ,QAAQ,UAAU,gBAAgB,MAAM,MAAM,CAAC,CAAC,SAAS,KAAK,CAAC;CACnF,MAAM,WAAW,OAAO,iBAAiB,UAAU,OAAO,eAAe;CAEzE,IAAI,OAAO,OAAO,QAAQ,GAAG;EAC3B,MAAM,WAAW,IAAI,UAClB,EAAE,aAAa,OAAO,QAAQ,SAAS,uBAAuB,OAAO,QAAQ,UAAU,KAC1F;EAEA,IAAI,UAAU,OAAO,QAAQ,SAAS,qBAAqB;GACzD,IACE,SAAS,OAAO,QAAQ,uBAAuB,KAAA,KAC/C,IAAI,QAAQ,UAAU,MAAM,YAAY,SAAS,QAAQ,CAAC,CAAC,WACzD,SAAS,OAAO,QAAQ,oBAE1B,OAAO,OAAO,QAAQ,mCAAmC;GAE3D,OAAO;EACT;EACA,IAAI,IAAI,MAAM,EAAE,aAAa,CAAC,sBAAsB,MAAM,CAAC,GACzD,OAAO,OAAO,QAAQ,4CAA4C;EAEpE,OAAO;CACT;CACA,MAAM,aAAa,SAAS;CAC5B,MAAM,SAAS,WAAW;CAE1B,IAAI,OAAO,iBAAiB,cAC1B,OAAO,OAAO,QAAQ,8CAA8C;CACtE,IACE,IAAI,QAAQ,UAAU,MAAM,YAAY,WAAW,eAAe,CAAC,CAAC,WAClE,WAAW,oBACb,CAAC,eAAe,KAAK,WAAW,eAAe,GAE/C,OAAO,OAAO,QAAQ,sEAAsE;CAE9F,MAAM,WAAW,QACf,yBAAyB,UAAU,WAAW,YAAY,GAAG;CAE/D,MAAM,QAAQ,OAAO,QAAQ,OAAO,aAAa;CAEjD,IACE,MAAM,QAAQ,SAAS,uBACvB,MAAM,QAAQ,iBAAiB,gBAC/B,MAAM,QAAQ,SAAS,UACvB,MAAM,QAAQ,UAAU,OAExB,OAAO,OAAO,QAAQ,kDAAkD;CAC1E,OAAO,QAAQ,OAAO,QAAQ;CAC9B,IAAI,OAAO,iBAAiB,KAAA,GAAW;EACrC,MAAM,UAAU,OAAO,QAAQ,OAAO,YAAY;EAElD,IAAI,QAAQ,QAAQ,SAAS,wBAAwB,QAAQ,QAAQ,UAAU,OAC7E,OAAO,OAAO,QAAQ,6CAA6C;CACvE;CACA,IAAI,OAAO,mBAAmB,KAAA,GAAW;EACvC,MAAM,WAAW,OAAO,QAAQ,OAAO,cAAc;EAErD,IACE,SAAS,QAAQ,SAAS,2BAC1B,SAAS,QAAQ,UAAU,SAC3B,SAAS,QAAQ,SAAS,OAAO,WAAW,gBAE5C,OAAO,OAAO,QAAQ,kDAAkD;CAC5E;CACA,IAAI,OAAO,aAAa,KAAA,GAAW;EACjC,MAAM,WAAW,OAAO,QAAQ,OAAO,QAAQ;EAE/C,IACE,SAAS,QAAQ,SAAS,kBAC1B,SAAS,QAAQ,SAAS,eAC1B,SAAS,QAAQ,SAAS,qBAE1B,OAAO,OAAO,QAAQ,iDAAiD;CAC3E;CAEA,OAAO;AACT,CAAC;;AAGD,MAAa,yBAAyB,OAAO,WAAW,WACtD,SACA,UAA0C,CAAC,GACqB;CAChE,MAAM,SAAS,OAAO;CAEtB,IAAI,QAAQ,MAAM,WAAW,OAAO,iBAAiB,KAAA,CAAS,GAC5D,OAAO,OAAO,QAAQ,kEAAkE;CAE1F,MAAM,cAAc,IAAI,IACtB,QAAQ,SAAS,WAAW,OAAO,MAAM,KAAK,SAAS,CAAC,KAAK,UAAU,IAAI,CAAU,CAAC,CACxF;CAEA,MAAM,mBAAmB;EACvB,GAAG;EACH,GAAG,sBAAsB,CAAC,GAAG,YAAY,OAAO,CAAC,CAAC;EAClD,GAAG,sBAAsB,QAAQ,KAAK,WAAW,OAAO,WAAW,cAAc,CAAC;CACpF;CAEA,MAAM,uBAAO,IAAI,IAAW;CAC5B,IAAI,kBAAkB;CAEtB,KAAK,MAAM,UAAU,kBAAkB;EACrC,MAAM,OAAO,OAAO;EAEpB,IAAI,SAAS,KAAA,GAAW;GACtB,IAAI,iBACF,OAAO,OAAO,QAAQ,kDAAkD;GAC1E;EACF;EACA,kBAAkB;EAClB,IAAI,OAAO,cAAA,MACT,OAAO,OAAO,QAAQ,oDAAoD;EAC5E,IAAI,KAAK,IAAI,KAAK,KAAK,GACrB,OAAO,OAAO,QAAQ,0DAA0D;EAClF,KAAK,IAAI,KAAK,KAAK;EAEnB,MAAM,SAAS,QAAQ,MAAM,UAAU,MAAM,WAAW,SAAS,UAAU,KAAK,KAAK;EAErF,IACE,WAAW,KAAA,KACX,OAAO,mBAAmB,MAAM,KAAK,YACrC,OAAO,MAAM,MAAM,SAAS,CAAC,oBAAoB,IAAI,CAAC,KACrD,OAAO,WAAW,KAAK,aAAa,aAAa,KAAK,aAAa,KAAA,IAEpE,OAAO,OAAO,QAAQ,qCAAqC;EAE7D,MAAM,QAAQ,iBAAiB,QAC5B,SAAS,KAAK,iBAAiB,KAAA,KAAa,KAAK,OAAO,SAAS,KAAK,KAAK,CAC9E;EAEA,MAAM,WAAW,MAAM,MAAM,SAAS,KAAK,aAAa,KAAK,SAAS,QAAQ;EAC9E,MAAM,QAAQ,OAAO,OAAO,SAAS,KAAK,KAAK;EAE/C,MAAM,WACJ,UAAU,KAAA,KACL,OAAO,OAAO,QAAQ,IAAI,EAAA,CAAG,QAAQ,SAAS,gBAAgB,IAAI,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC,IACzF,CAAC;EAEP,MAAM,gBAAgB,SAAS,QAAQ,OAAO,SAAS,QAAQ,qBAAqB,IAAI,GAAG,CAAC;EAC5F,MAAM,YAAY,MAAM,QAAQ,OAAO,SAAS,QAAQ,KAAK,aAAa,CAAC;EAC3E,MAAM,WAAW,OAAO,SAAS,KAAK,OAAO,MAAM,YAAY;EAC/D,MAAM,UAAU,MAAM,QAAQ,SAAS,KAAK,QAAQ;EAEpD,IACE,aAAa,KAAA,KACb,SAAS,SAAA,MACT,gBAAA,WACA,SAAS,MACN,SAAS,CAAC,sBAAsB,IAAI,KAAK,CAAC,gBAAgB,IAAI,CAAC,CAAC,SAAS,KAAK,KAAK,CACtF,KACA,SAAS,aAAa,KAAK,SAAS,YACpC,KAAK,cAAc,OAAO,YAAY,KAAK,KAC3C,KAAK,eAAe,OAAO,eAAe,MAC1C,KAAK,QAAQ,OAAO,QAAQ,MAC3B,UAAU,KAAA,KAAa,KAAK,SAAS,MAAM,QAAQ,KAAK,aAAa,MAAM,aAC5E,KAAK,iBAAiB,OAAO,eAAe,iBAAiB,aAC7D,KAAK,wBACF,OAAO,sBAAsB,KAC5B,MAAM,QAAQ,OAAO,SAAS,QAAQ,KAAK,oBAAoB,CAAC,KACpE,KAAK,cAAc,WAAW,YAAY,OAAO,eACjD,KAAK,iBAAiB,OAAO,eAAe,SAAS,UAAU,MAAM,UACrE,KAAK,qBAAqB,OAAO,mBAAmB,KAAK,QAAQ,UACjE,KAAK,mBACF,OAAO,iBAAiB,KACvB,QAAQ,QAAQ,OAAO,SAAS,QAAQ,KAAK,aAAa,CAAC,KAC1D,QAAQ,SAAS,IAAI,OAAO,cAAc,MAC9C,UAAU,KAAA,MACR,MAAM,iBAAiB,KAAK,gBAC3B,CAAC,OAAO,cAAc,iBAAiB,CAAC,CAAC,MAAM,eAAe,KAAK,aAAa,KAC/E,MAAM,iBAAiB,KAAA,MACrB,KAAK,iBAAiB,KAAA,KACrB,CAAC,OAAO,cAAc,iBAAiB,CAAC,CAAC,MAAM,cAAc,KAAK,YAAY,OACrF,UAAU,KAAA,KAEP;GACE;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF,CAAC,CACD,MAAM,UAAU,KAAK,WAAW,SAAS,MAAM,WAAW,MAAM,KACnE,OAAO,WAAW,qBAAqB,QAAQ,CAAC,KAAK,WAAW,kBAEjE,OAAO,OAAO,QAAQ,oEAAoE;CAC9F;AACF,CAAC;;AAmCD,MAAM,kBAAkB,UAA6D;CACnF,MAAM,WAAW,MAAM;CAEvB,IACE,aAAa,KAAA,KACb,MAAM,aAAa,aAAa,cAChC,MAAM,aAAa,aAAa,aAChC,MAAM,aAAa,WAAW,qBAAqB,SAAS,MAE5D,OAAO;EAAE,OAAO;EAAG,SAAS;CAAE;CAChC,IAAI,QAAQ;CACZ,IAAI,UAAU;CAEd,KAAK,MAAM,aAAa,SAAS,gBAAgB;EAC/C,IAAI,MAAM,QAAQ,IAAI,UAAU,UAAU,GAAG;EAE7C,MAAM,WAAW,KAAK,UAAU;GAC9B,UAAU,wBAAwB,SAAS,OAAO,SAAS,MAAM,UAAU,UAAU;GACrF,SAAS;IACP,MAAM;IACN,OAAO,SAAS;IAChB,YAAY,UAAU;IACtB,UAAU,UAAU;IACpB,QAAQ;IACR,WAAW;GACb;EACF,CAAC;EAID,MAAM,cACJ,UAAU,kBAAkB,cAAc,UAAU,mBAAmB,aACnE,2BACA,KAAK,IACH,SAAS,oBACT,MAAM,aAAa,IAAI,UAAU,UAAU,CAAC,EAAE,eAAe,CAC/D;EAEN,MAAM,UAAU,MAAM,aAAa,IAAI,UAAU,UAAU;EAE3D,SACE,eAAe,QAAQ,IACvB,eACC,SAAS,kBAAkB,KAC5B,SAAS,wBACT,IAAI,6BACJ;EACF,WAAW,SAAS,oBAAoB;CAC1C;CAEA,OAAO;EAAE;EAAO;CAAQ;AAC1B;AAEA,MAAM,yBAAiD;CACrD,gBAAgB;CAChB,WAAW;CACX,uBAAuB;CACvB,yBAAyB;CACzB,kBAAkB;CAClB,eAAe;CACf,YAAY;CACZ,sBAAsB;CACtB,aAAa;CACb,cAAc;CACd,iBAAiB;CACjB,kBAAkB;CAClB,cAAc;CACd,mBAAmB;AACrB;;AAGA,MAAM,eAAe,OAAO,WAAW,WACrC,UACA,OACA,cACA,cACA;CACA,MAAM,aAAa,EAAE,GAAI,UAAU,aAAa,cAAc,gBAAgB,EAAG;CACjF,IAAI,eAAe,UAAU,aAAa;CAC1C,IAAI,iBAAiB,UAAU,aAAa;CAC5C,IAAI,WAAW,UAAU,aAAa;CACtC,IAAI,WAAW,UAAU,aAAa,YAAY;CAClD,IAAI,WAAW,UAAU;CACzB,IAAI;CACJ,IAAI,UAAU,IAAI,IAAI,UAAU,OAAO;CACvC,IAAI,eAAe,IAAI,IAAI,UAAU,YAAY;CACjD,IAAI,kBAAkB,UAAU;CAChC,IAAI,YAAY;CAChB,IAAI,OAAO,UAAU,aAAa,QAAQ;CAC1C,IAAI,cAAc;CAClB,IAAI,eAAe;CACnB,IAAI,eAAe;CAEnB,KAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,UAAU,KAAK;EACrB,MAAM,WAAW,eAAe,IAAI;EAEpC,IAAI,OAAO,UAAU,QAAQ,GAC3B,OAAO,OAAO,QAAQ,2CAA2C,SAAS,OAAO;EACnF,MAAM,UAAU,SAAS;EAEzB,aAAa,QAAQ;EACrB,IAAI,UAAU,SAAS,OAAO,KAAK,IAAI,MAAM,QAAQ,IAAI;EACzD,eAAe,QAAQ,SAAS;EAChC,IAAI,QAAQ,SAAS,UAAU;GAC7B,gBAAgB,QAAQ;GACxB;EACF;EAEA,QAAQ,QAAQ,MAAhB;GACE,KAAK;IACH,WAAW;IACX;GACF,KAAK;IACH,IAAI,iBAAiB,KAAA,GACnB,OAAO,OAAO,QAAQ,6CAA6C;IACrE,eAAe,kBAAkB,KAAK,EAAE,UAAU,KAAK,SAAS,CAAC;IACjE,WAAW;IACX;GACF,KAAK,yBAAyB;IAC5B,IAAI,iBAAiB,KAAA,GACnB,OAAO,OAAO,QAAQ,oDAAoD;IAC5E,IAAI,QAAQ,SAAS,WAAW,iBAAiB,GAC/C,OAAO,OAAO,QAAQ,2CAA2C;IAEnE,MAAM,cAAc,QAAQ;IAC5B,MAAM,iBAAiB,gBAAgB,IAAI,OAAO;IAElD,MAAM,WACJ,mBACC,OAAO,qBAAqB,WAAW,CAAC,CAAC,KACxC,OAAO,UAAU,UAAU,QAAQ,0BAA0B,KAAK,CAAC,CACrE;IAEF,IAAI,mBAAmB,KAAA,GAAW;KAChC,MAAM,WAAW,OAAO,yBAAyB,SAAS,UAAU;KAEpE,IACE,OAAO,SAAS,OAAO,KACvB,aAAa,KAAA,KACb,WAAW,YACX,SAAS,UAAU,eACnB,iBAAiB,WAAW,GAE5B,gBAAgB,IAAI,SAAS,QAAQ;IACzC;IACA,iBAAiB;IAEjB,MAAM,QAAQ,SAAS,QAAQ,SAAS,YACtC,QAAQ,SAAS,cACb,QAAQ,QAAQ,QAAQ,SAAS,KAAK,SAAS,WAAW,IAC1D,CAAC,CACP;IAEA,MAAM,UACJ,QAAQ,eAAe,KAAA,IACnB,KAAA,IACA,OAAO,kBAAkB,QAAQ,UAAU,CAAC,CAAC,KAC3C,OAAO,UAAU,UAAU,QAAQ,0BAA0B,KAAK,CAAC,CACrE;IAEN,WAAW,iBAAiB,QAAQ;IACpC,WAAW,aAAa,MAAM;IAC9B,WAAW,cAAc,SAAS,cAAc;IAChD,WAAW,eAAe,SAAS,eAAe,QAAQ,eAAe;IACzE,WAAW,gBAAgB,SAAS,gBAAgB,QAAQ,gBAAgB;IAC5E,WAAW,gBAAgB,SAAS,gBAAgB,QAAQ,gBAAgB;IAC5E,WAAW,kBAAkB,SAAS,eAAe,QAAQ,eAAe;IAC5E,WAAW,mBAAmB,SAAS,gBAAgB,QAAQ,gBAAgB;IAC/E,WAAW,wBAAwB,QAAQ,wBAAwB;IACnE,iBAAiB,kBAAkB,KAAK,EAAE,UAAU,KAAK,SAAS,CAAC;IACnE,WAAW;IACX,0BAAU,IAAI,IAAI;IAClB,+BAAe,IAAI,IAAI;IACvB,WAAW,QAAQ,eAAe,WAAW,IAAI,mBAAmB;IACpE;GACF;GACA,KAAK;IACH,QAAQ,IAAI,QAAQ,YAAY,OAAO;IACvC,aAAa,OAAO,QAAQ,UAAU;IACtC;GACF,KAAK;IACH,WAAW;IACX;GACF,KAAK;IACH,WAAW;IACX;GACF,KAAK;IACH,WAAW;IACX;GACF,KAAK;IACH,WAAW;IACX;GACF,KAAK;IACH,aAAa,IAAI,QAAQ,YAAY;KACnC,aAAa,KAAK,IAChB,0BACA,QAAQ,QAAQ,WAAW,eAAA,OAC7B;KACA,gBAAgB;KAChB,kBAAkB;IACpB,CAAC;IACD,WAAW;IACX;GACF,KAAK;IACH;KACE,MAAM,WAAW,aAAa,IAAI,QAAQ,UAAU;KAEpD,IAAI,aAAa,KAAA,GACf,aAAa,IAAI,QAAQ,YAAY;MACnC,GAAG;MACH,gBAAgB,KAAK,IACnB,GACA,SAAS,iBAAiB,qBAAqB,IAAI,IAAI,0BACzD;MACA,kBAAkB,SAAS,mBAAmB;KAChD,CAAC;IACL;IACA,WAAW;IACX;GACF,KAAK;IACH,IACE,QAAQ,wBAAwB,WAAW,yBAC1C,WAAW,oBAAoB,CAAC,QAAQ,kBAEzC,OAAO,OAAO,QAAQ,qCAAqC;IAC7D,WAAW,wBAAwB,QAAQ;IAC3C,WAAW,mBAAmB,QAAQ;IACtC;GACF,KAAK,oBAAoB;IACvB,IAAI,QAAQ,aAAa,WAAW,iBAAiB,KAAK,GACxD,OAAO,OAAO,QAAQ,0CAA0C;IAElE,MAAM,UAAU,OAAO,kBAAkB,QAAQ,UAAU,CAAC,CAAC,KAC3D,OAAO,UAAU,UAAU,QAAQ,iCAAiC,KAAK,CAAC,CAC5E;IAEA,WAAW,gBAAgB,QAAQ;IACnC,WAAW,cAAc,QAAQ;IACjC,WAAW,eAAe,QAAQ;IAClC,WAAW,gBAAgB,QAAQ;IACnC,WAAW,gBAAgB,QAAQ;IACnC,WAAW,wBAAwB,QAAQ;IAC3C;GACF;GACA,KAAK;GACL,KAAK;IACH,kBACE,QAAQ,SAAS,iBACb,eAAe,KAAK,UAAU,QAAQ,MAAM,CAAC,KAC5C,QAAQ,mBAAmB,KAAA,IACxB,IACA,eAAe,KAAK,UAAU,QAAQ,cAAc,CAAC,KACzD,KAAA;IACN,WAAW,kBAAkB,KAAK,EAAE,UAAU,KAAK,SAAS,CAAC;IAC7D,WAAW;IACX;GACF,KAAK;IACH,IAAI,QAAQ,iBAAiB,cAAc;IAC3C,WAAW,kBAAkB,KAAK,EAAE,UAAU,KAAK,SAAS,CAAC;IAC7D,WAAW;IACX,IAAI,QAAQ,iBAAiB,KAAA,GAAW;KACtC,WAAW,aAAa,QAAQ,aAAa;KAC7C,WAAW,cAAc,QAAQ,aAAa,YAAY;KAC1D,WAAW,eAAe,QAAQ,aAAa,aAAa;KAC5D,WAAW,eAAe,QAAQ,aAAa;KAC/C,WAAW,uBACT,QAAQ,aAAa,wBAAwB,WAAW;IAC5D;EAIJ;CACF;CACA,IACE,aAAa,KAAA,KACb,SAAS,OAAO,WAAW,qBAC3B,SAAS,eAAe,OAAO,cAAc,QAAQ,IAAI,UAAU,UAAU,CAAC,GAC9E;EAQA,MAAM,SANJ,kBACA,gBAAgB,IAAI,QAAQ,MAC3B,OAAO,qBAAqB,SAAS,QAAQ,CAAC,CAAC,KAC9C,OAAO,UAAU,UAAU,QAAQ,0BAA0B,KAAK,CAAC,CACrE,GAAA,CAEqB,QAAQ,SAAS,YACtC,QAAQ,SAAS,cAAc,QAAQ,UAAU,CAAC,CACpD;EAEA,KAAK,MAAM,QAAQ,OAAO;GACxB,IAAI,KAAK,SAAS,aAAa;GAE/B,MAAM,SAAS,KAAK,mBAChB,MAAM,MAAM,SAAS,KAAK,SAAS,iBAAiB,KAAK,OAAO,KAAK,EAAE,IACvE,QAAQ,IAAI,WAAW,KAAK,KAAK,EAAE,CAAC;GAExC,IACE,WAAW,KAAA,KACX,EAAE,eAAe,WAChB,oBAAoB,UAAU,OAAO,mBAAmB,MAEzD;GACF,WAAW,0BAA0B,OAAO,YACxC,WAAW,0BAA0B,IACrC;EACN;EACA,WAAW,oBAAoB,SAAS;EACxC,QAAQ,MAAM;EACd,IAAI,aAAa,cAAc,aAAa,WAAW,WAAW;CACpE;CACA,MAAM,OAAO,MAAM,GAAG,EAAE;CAExB,IAAI,SAAS,KAAA,GAAW,OAAO,OAAO,QAAQ,6BAA6B;CAC3E,IAAI,UAAU,aAAa,aAAa,WAAW,WAAW;MACzD,IAAI,UAAU,aAAa,aAAa,cAAc,aAAa,WACtE,WAAW;CAEb,MAAM,YACH,UAAU,aAAa,SAAS,OAAO,SAAS,aAAa,YAAY,gBAC1E;CAEF,MAAM,sBAAsB,UAAU,aAAa,sBAAsB,KAAK;CAE9E,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,gBAAgB,UAAU,aAAa,iBAAiB,KAAK;EAC7D,kBAAkB,UAAU,aAAa,mBAAmB,KAAK;EACjE,SAAS,eAAe;CAC1B;AACF,CAAC;;;;;AAMD,MAAa,yBAAyB,OAAO,WAAW,WACtD,SACA,SAIA;CACA,MAAM,SAAS,QAAQ,QACpB,EAAE,aACD,OAAO,QAAQ,SAAS,uBACxB,OAAO,QAAQ,SAAS,UACxB,OAAO,QAAQ,iBAAiB,KAAA,CACpC;CAEA,IAAI,QAAQ,MAAM,EAAE,aAAa,OAAO,QAAQ,SAAS,iBAAiB,GACxE,OAAO,OAAO,QAAQ,uDAAuD;CAC/E,KAAK,MAAM,SAAS,QAAQ;EAC1B,MAAM,UAAU,MAAM,OAAO;EAE7B,IAAI,QAAQ,SAAS,uBAAuB,QAAQ,iBAAiB,KAAA,GAAW;EAChF,MAAM,QAAQ,mBAAmB,QAAQ,YAAY;EACrD,MAAM,MAAM,QAAQ,QAAQ,UAAU,gBAAgB,MAAM,MAAM,CAAC,CAAC,SAAS,KAAK,CAAC;EAEnF,MAAM,WAAW,IAAI,UAClB,EAAE,aAAa,OAAO,QAAQ,SAAS,uBAAuB,OAAO,QAAQ,UAAU,KAC1F;EAEA,IAAI,UAAU,OAAO,QAAQ,SAAS,qBAAqB;GACzD,IACE,SAAS,OAAO,QAAQ,uBAAuB,KAAA,KAC/C,IAAI,QAAQ,UAAU,MAAM,YAAY,SAAS,QAAQ,CAAC,CAAC,WACzD,SAAS,OAAO,QAAQ,oBAE1B,OAAO,OAAO,QAAQ,uDAAuD;GAC/E;EACF;EACA,IAAI,SAAS,kBAAkB,OAAO;EACtC,MAAM,aAAa,SAAS,YAAY,MAAM,UAAU,MAAM,SAAS,UAAU,KAAK;EAEtF,IAAI,eAAe,KAAA,GAAW;GAC5B,IAAI,IAAI,MAAM,EAAE,aAAa,CAAC,sBAAsB,MAAM,CAAC,GACzD,OAAO,OAAO,QAAQ,0DAA0D;GAClF;EACF;EAEA,MAAM,QAAQ,WAAW,YAAY,MAClC,EAAE,cAAc,QAAQ,SAAS,oBACpC;EAEA,IAAI,OAAO,QAAQ,SAAS,sBAAsB;GAChD,OAAO,wBAAwB,MAAM,SAAS,KAAK,CAAC,CAAC,KACnD,OAAO,UAAU,UAAU,QAAQ,6CAA6C,KAAK,CAAC,CACxF;GACA,OAAO,eAAe,MAAM,SAAS,OAAO,MAAM,QAAQ,CAAC,CAAC,KAC1D,OAAO,UAAU,UAAU,QAAQ,6CAA6C,KAAK,CAAC,CACxF;EACF;CACF;AACF,CAAC;;;;;;AAOD,MAAa,qBAAqB,OAAO,WAAW,WAClD,UACA,cACA;CACA,MAAM,SAAS,OAAO;CACtB,MAAM,OAAO,OAAO,UAAU,KAAK,CAAC;CACpC,MAAM,yBAAS,IAAI,IAA0B;CAE7C,IAAI;CAQJ,MAAM,+BAAe,IAAI,IAQvB;CAEF,MAAM,8BAAc,IAAI,IAAmB;CAE3C,MAAM,WAAiB,WACrB,OAAO,eAAe,QAAQ,cAAc,MAAM;CAEpD,MAAM,oBAAoB,OAAO,WAAW,WAAW,OAAc,OAA0B;EAC7F,MAAM,SAAS,OAAO,QAAQ,iBAAiB,UAAU,OAAO,KAAK,CAAC;EAEtE,IAAI,OAAO,OAAO,MAAM,GAAG,OAAO,KAAA;EAClC,MAAM,eAAe,OAAO,MAAM;EAClC,IAAI;EACJ,IAAI;EACJ,MAAM,0BAAU,IAAI,IAAiC;EAErD,MAAM,+BAAe,IAAI,IAAqC;EAE9D,IAAI,aAAa,mBAAmB,KAAA,GAAW;GAC7C,MAAM,WAAW,OAAO,QAAQ,gBAAgB,UAAU,aAAa,cAAc,CAAC;GAEtF,IACE,SAAS,OAAO,QAAQ,SAAS,2BACjC,SAAS,OAAO,QAAQ,UAAU,OAElC,OAAO,OAAO,QAAQ,6CAA6C;GACrE,WAAW,SAAS,OAAO;GAC3B,IAAI,aAAa,WAAW,oBAAoB,SAAS,MACvD,KAAK,MAAM,aAAa,SAAS,gBAAgB;IAC/C,MAAM,QAAQ,OAAO,QACnB,UAAU;KACR;KACA,UAAU,wBAAwB,OAAO,SAAS,MAAM,UAAU,UAAU;IAC9E,CAAC,CACH;IAEA,IAAI,OAAO,OAAO,KAAK,GAAG;KACxB,MAAM,SAAS,MAAM,MAAM,OAAO;KAElC,IACE,OAAO,SAAS,qBAChB,OAAO,UAAU,SACjB,OAAO,eAAe,UAAU,cAChC,OAAO,aAAa,UAAU,UAE9B,OAAO,OAAO,QAAQ,yCAAyC;KACjE,QAAQ,IAAI,UAAU,YAAY,MAAM;IAC1C,OAAO,IAAI,UAAU,kBAAkB,cAAc;KACnD,MAAM,YAAY,OAAO,QACvB,UAAU;MACR;MACA,UAAU,0BAA0B,OAAO,UAAU,UAAU;KACjE,CAAC,CACH;KAEA,IACE,OAAO,OAAO,SAAS,KACvB,UAAU,MAAM,OAAO,QAAQ,SAAS,qBACxC;MACA,IACE,UAAU,MAAM,OAAO,QAAQ,UAAU,SACzC,UAAU,MAAM,OAAO,QAAQ,eAAe,UAAU,YAExD,OAAO,OAAO,QAAQ,gDAAgD;MAExE,MAAM,UAAU,OAAO,QACrB,UAAU;OACR;OACA,UAAU,wBAAwB,OAAO,UAAU,UAAU;MAC/D,CAAC,CACH;MAEA,IACE,OAAO,OAAO,OAAO,MACpB,QAAQ,MAAM,OAAO,QAAQ,SAAS,qBACrC,QAAQ,MAAM,OAAO,QAAQ,UAAU,SACvC,QAAQ,MAAM,OAAO,QAAQ,eAAe,UAAU,cACtD,QAAQ,MAAM,OAAO,QAAQ,kBAC3B,UAAU,MAAM,OAAO,QAAQ,gBAEnC,OAAO,OAAO,QAAQ,8CAA8C;MAEtE,MAAM,eAAe,OAAO,OAAO,OAAO,IACtC,qBAAqB,QAAQ,MAAM,MAAM,IAAI,6BAC7C;MAEJ,aAAa,IAAI,UAAU,YAAY;OACrC,aAAa,KAAK,IAChB,0BACA,UAAU,MAAM,OAAO,QAAQ,QAAQ,WAAW,eAAA,OAEpD;OACA,gBAAgB,KAAK,IAAI,GAAG,6BAA6B,YAAY;OACrE,kBAAkB,OAAO,OAAO,OAAO,IAAI,IAAI;MACjD,CAAC;KACH;IACF;GACF;EAEJ;EACA,IAAI,aAAa,aAAa,cAAc,aAAa,aAAa,KAAA,GAAW;GAK/E,MAAM,WAAU,OAJQ,QACtB,yBAAyB,UAAU,OAAO,MAAM,YAAY,aAAa,QAAQ,CACnF,EAAA,CAEyB;GAEzB,IAAI,QAAQ,SAAS,gBACnB,kBACE,eAAe,KAAK,UAAU,QAAQ,MAAM,CAAC,KAC5C,QAAQ,mBAAmB,KAAA,IACxB,IACA,eAAe,KAAK,UAAU,QAAQ,cAAc,CAAC;EAC/D;EAEA,OAAO;GACL;GACA,QAAQ,OAAO,MAAM;GACrB,YAAY,OAAO,MAAM;GACzB,GAAI,aAAa,KAAA,IAAY,CAAC,IAAI,EAAE,SAAS;GAC7C;GACA;GACA,GAAI,oBAAoB,KAAA,IAAY,CAAC,IAAI,EAAE,gBAAgB;EAC7D;CACF,CAAC;CAED,MAAM,qBACJ,OACA,gBAC0C;EAC1C,MAAM,WAAW,MAAM;EAEvB,IAAI,SAAS,aAAa,WAAW,OAAO,OAAO;EACnD,MAAM,OAAO,eAAe,qBAAqB,MAAM,MAAM;EAC7D,MAAM,aAAa,UAAkB,eAAe,KAAK,UAAU,KAAK,CAAC;EACzE,MAAM,YAAY,UAA6B,eAAe,KAAK,UAAU,KAAK,CAAC;EAEnF,MAAM,OAAO,aAAuB,kBAAkB,KAAK,EAAE,SAAS,CAAC;EAEvE,MAAM,QAAQ,SAAiB,UAA6B,aAE1D,OACE,UAAU,KAAK,UAAU;GAAC;GAAkB,SAAS;GAAO;EAAO,CAAC,CAAC,IACrE,UAAU,MAAM,OAAO,QAAQ,IAC/B,UAAU,YAAY,IACtB,UAAU,MAAM,OAAO,YAAY,IACnC,SAAS,QAAQ,IACjB,SAAS,SAAS,QAAQ,KACzB,aAAa,KAAA,IACV,IACA,SAAS,QAAQ,KAChB,SAAS,aAAa,KAAA,IAAY,IAAI,SAAS,SAAS,QAAQ,KACjE,MACJ,QACF;EAEF,IACE,CAAC,KACC,4BAA4B,SAAS,YAAY,GACjD,IAAI,6BAA6B,SAAS,YAAY,CAAC,GACvD,IAAI,qBAAqB,SAAS,KAAK,CAAC,CAC1C,GAEA,OAAO,OAAO,KAAK,gBAAgB,sDAAsD,CAAC;EAE5F,IACE,MAAM,aAAa,KAAA,KACnB,SAAS,WAAW,oBAAoB,MAAM,SAAS,MAEvD,KAAK,MAAM,aAAa,MAAM,SAAS,gBAAgB;GACrD,IAAI,MAAM,QAAQ,IAAI,UAAU,UAAU,GAAG;GAC7C,IACE,CAAC,KACC,sBAAsB,SAAS,OAAO,MAAM,SAAS,MAAM,UAAU,UAAU,GAC/E,IAAI,wBAAwB,SAAS,OAAO,MAAM,SAAS,MAAM,UAAU,UAAU,CAAC,CACxF,GAEA,OAAO,OAAO,KACZ,gBAAgB,gEAAgE,CAClF;EACJ;EAGF,OAAO,OAAO;CAChB;CAEA,MAAM,iBACJ,OACA,2BAAkC,IAAI,IAAI,GAC1C,OACA,sBAAsB,MACoB;EAC1C,MAAM,WAAW,MAAM;EACvB,MAAM,UAAU,eAAe,KAAK;EAEpC,MAAM,WACJ,SAAS,aAAa,YAClB,IACA,KAAK,IACH,GACA,6BACE,KAAK,MAAM,mBAAmB,KAC9B,KACG,SAAS,qBACR,KAAK,IAAI,IAAI,YAAY,IAAI,SAAS,KAAK,KAAK,KAAK,mBAAmB,KAC5E,SAAS,aACb;EAEN,IAAI,aACD,UAAU,KAAA,KAAa,MAAM,SAAS,SAAS,OAAO,IAAI,SAAS,aACpE,QAAQ,QACR,YACC,OAAO,SAAS;EAEnB,IAAI,cAAc,SAAS,cAAc,QAAQ,QAAQ,YAAY,OAAO,SAAS;EAErF,IAAI,cACF,SAAS,cACT,QAAQ,WACP,SAAS,aAAa,YACnB,IACA,KAAK,IAAI,GAAA,IAAkC,SAAS,eAAe,MACtE,OAAO,WAAW;EAErB,KAAK,MAAM,CAAC,UAAU,gBAAgB,cAAc;GAClD,IAAI,YAAY,UAAU,SAAS,SAAS,SAAS,IAAI,QAAQ,GAAG;GACpE,IAAI,YAAY,UAAU,OAAO,QAAQ,SAAS,OAAO,aAAa,YAAY;GAClF,eAAe,YAAY;GAC3B,eAAe,YAAY;EAC7B;EACA,IACE,YAAA,WACA,cAAA,YACA,cAAA,OAEA,OAAO,OAAO,KACZ,QACE,oDACA,8BAA8B,KAAK,EACjC,SAAS,wEACX,CAAC,CACH,CACF;EAEF,OAAO,OAAO;CAChB;CAEA,MAAM,UAAU,OAAO,WAAW,WAChC,OACA,OACA,OAA+B,UAC/B;EACA,IAAI,MAAM,QAAQ,MAAM,WAAW,OAAO,QAAQ,SAAS,iBAAiB,GAC1E,OAAO,OAAO,QAAQ,oEAAoE;EAI5F,MAAM,eAAe,CAAC,GAAG,MAAM,OAAO;EAEtC,MAAM,yBAAS,IAAI,IAAkC;EAErD,KAAK,MAAM,UAAU,cACnB,KAAK,MAAM,SAAS,gBAAgB,MAAM,GAAG;GAC3C,MAAM,QAAQ,OAAO,IAAI,KAAK,KAAK,CAAC;GAEpC,MAAM,KAAK,MAAM;GACjB,OAAO,IAAI,OAAO,KAAK;EACzB;EAEF,MAAM,aAAqC,CAAC;EAC5C,MAAM,2BAAW,IAAI,IAA0B;EAC/C,IAAI,iBAAiB;EAErB,KAAK,MAAM,CAAC,OAAO,UAAU,QAAQ;GACnC,MAAM,QACJ,eAAe,UAAU,SACzB,cAAc,YAAY,SAE1B,cAAc,WACZ,OAAO,eAAe,OAAO,OAAO,cAAc,gBAAgB,CAAC;GAEvE,MAAM,WAAW,QACb,KAAA,IACC,OAAO,IAAI,KAAK,MAAM,OAAO,kBAAkB,OAAO,KAAK;GAEhE,IAAI,WAAW,MAAM,MAClB,WACC,OAAO,QAAQ,SAAS,uBACxB,OAAO,QAAQ,SAAS,UACxB,OAAO,QAAQ,UAAU,SACzB,OAAO,QAAQ,iBAAiB,KAAA,CACpC;GAEA,IAAI,gBAAgB;GACpB,IAAI,eAAe;GACnB,IAAI,mBAAmB,UAAU,YAAY;GAE7C,IAAI,aAAa,KAAA,KAAa,aAAa,KAAA,GAAW;IACpD,MAAM,QAAQ,OAAO,QAAQ,YAAY;KAAE;KAAU;IAAM,CAAC,CAAC;IAE7D,IACE,OAAO,OAAO,KAAK,KACnB,MAAM,MAAM,OAAO,QAAQ,SAAS,uBACpC,MAAM,MAAM,OAAO,QAAQ,iBAAiB,KAAA,GAE5C;IAEF,WAAW,MAAM,MAAM;IACvB,mBAAmB,MAAM,MAAM;GACjC;GAEA,MAAM,eACJ,UAAU,aAAa,iBACtB,UAAU,QAAQ,SAAS,sBACxB,SAAS,QAAQ,eACjB,KAAA;GAEN,IAAI,iBAAiB,KAAA,GACnB,OAAO,OAAO,QAAQ,iDAAiD;GACzE,IAAI,UAAU,mBAAmB,YAAY,GAC3C,OAAO,OAAO,QAAQ,oDAAoD;GAC5E,IAAI,aAAa,KAAA,KAAa,aAAa,KAAA,GACzC,OAAO,OAAO,QAAQ,oCAAoC;GAE5D,IAAI,aAAa,KAAA,KAAa,CAAC,OAAO;IACpC,MAAM,UAAU,OAAO,QACrB,UAAU;KACR;KACA,UAAU,6BAA6B,YAAY;IACrD,CAAC,CACH;IAEA,IACE,OAAO,OAAO,OAAO,KACrB,QAAQ,MAAM,YAAY,SAC1B,QAAQ,MAAM,OAAO,QAAQ,SAAS,uBACtC,QAAQ,MAAM,OAAO,QAAQ,UAAU,SACvC,QAAQ,MAAM,OAAO,QAAQ,uBAAuB,KAAA,KACpD,MAAM,OACH,EAAE,cACD,QAAQ,SAAS,0BACjB,QAAQ,SAAS,uBACjB,QAAQ,SAAS,qBACjB,QAAQ,SAAS,sBACjB,QAAQ,SAAS,gBACrB,GAGA;IAUF,MAAM,YAAW,OARO,QACtB,OAAO,WACL,YAAY,UAAU,cAAc,KAAK,CAAC,CAAC,KACzC,OAAO,KAAA,EAAwC,CACjD,CACF,CACF,EAAA,CAE0B,QAAQ,EAAE,aAAa,gBAAgB,MAAM,CAAC,CAAC,SAAS,KAAK,CAAC;IAExF,IACE,CAAC,eAAe,UAAU,kBAAkB,KAAK,CAAC,CAAC,KACnD,SAAS,MAAM,EAAE,aAAa,CAAC,sBAAsB,MAAM,CAAC,GAE5D,OAAO,OAAO,QACZ,4EAA4E,MAAM,KAAK,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,EAChI;IACF,gBAAgB,SAAS;IACzB,eAAe,SAAS,QACrB,OAAO,UAAU,QAAQ,qBAAqB,MAAM,MAAM,GAC3D,CACF;GACF;GAEA,MAAM,oBACH,UAAU,YAAY,oBAAoB,iBAC3C,MAAM,QAAQ,SAAS,CAAC,oBAAoB,IAAI,CAAC,CAAC,CAAC;GAErD,KAAK,IAAI,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS;IACjD,MAAM,OAAO,MAAM;IACnB,MAAM,UAAU,KAAK;IAErB,IAAI,QAAQ,SAAS,uBAAuB,QAAQ,UAAU,OAAO;IAErE,MAAM,WAAW,OAAO,OAAO,WAC7B,cACE,eAAe,KAAK;KAClB,GAAG;KACH,SAAS;MAAE,GAAG;MAAS,oBAAoB;KAAiB;IAC9D,CAAC,CACH,CACF,CAAC,CAAC,KACA,OAAO,KAAK,WAAW,OAAO,SAAS,GACvC,OAAO,UAAU,UAAU,QAAQ,2CAA2C,KAAK,CAAC,CACtF;IAEA,MAAM,SAAS;IACf,aAAa,aAAa,QAAQ,IAAI,KAAK;GAC7C;GAEA,MAAM,gBACJ,aAAa,KAAA,IACT,SAAS,aAAa,gBACtB,aAAa,KAAA,IACX,OAAO,QAAQ,oCAAoC,IACnD,kBAAkB,KAAK,EAAE,UAAU,SAAS,SAAS,CAAC;GAE9D,MAAM,OAAO,OAAO,aAAa,UAAU,OAAO,cAAc,YAAY;GAE5E,MAAM,EACJ,YACA,cACA,gBACA,UACA,UACA,UACA,SACA,cACA,iBACA,MACA,WACA,MACA,UACA,aACA,uBACE;GAEJ,IAAI,eAAe,OAAO,gBAAgB,WAAW;IACnD,SAAS;IACT;IACA;IACA,WAAW,UAAU,aAAa,YAAY,KAAK;IACnD,cAAc,UAAU,aAAa,eAAe,iBAAiB,MAAM;IAC3E,cAAc,UAAU,aAAa,eAAe,gBAAgB;IACpE;IACA,WAAW;IACX;IACA,eAAe,KAAK;IACpB,iBAAiB,KAAK;IACtB;IACA,GAAI,iBAAiB,KAAA,IAAY,CAAC,IAAI,EAAE,aAAa;IACrD,GAAI,mBAAmB,KAAA,IAAY,CAAC,IAAI,EAAE,eAAe;IACzD,GAAI,aAAa,KAAA,IAAY,CAAC,IAAI,EAAE,SAAS;IAC7C,UAAU,kBAAkB,KAAK,EAAE,UAAU,KAAK,SAAS,CAAC;IAC5D;IACA;GACF,CAAC,CAAC,CAAC,KACD,OAAO,eACL,gBAAgB,oDAAoD,CACtE,CACF;GAEA,MAAM,SAAS;IACb,UAAU,SAAS,KAAK,KAAK,UAAU;KAAC;KAAkB;KAAO,MAAM;IAAO,CAAC,CAAC;IAChF,QAAQ;IACR,eAAe;IACf,WAAW,KAAK;IAChB,cAAc,KAAK;GACrB;GAKA,MAAM,cAAc;IAClB,GAAG;IACH,WAAW,SAAS,UAAU,OAAO,SAAS;IAC9C,SAAS;GACX;GAEA,MAAM,qBAAqB,eAAe,KAAK,UAAU,WAAW,CAAC;GAErE,MAAM,eACJ,OAAO,aAAa,SAAS,CAAC,CAAC,SAAS,OAAO,aAAa,aAAa,CAAC,CAAC;GAE7E,IAAI,YAAY,aAAa;GAC7B,IAAI,gBAAgB,aAAa;GAEjC,KAAK,IAAI,WAAW,IAAK,YAAY;IACnC,MAAM,cACJ,qBACA,OAAO,SAAS,CAAC,CAAC,SAClB,OAAO,aAAa,CAAC,CAAC,SACtB;IAEF,MAAM,gBAAgB,WAAW;IACjC,MAAM,oBAAoB,KAAK,iBAAiB,KAAK,UAAU,cAAc;IAE7E,IAAI,kBAAkB,aAAa,sBAAsB,eAAe;IACxE,IAAI,YAAY,GAAG,OAAO,OAAO,QAAQ,+CAA+C;IACxF,YAAY;IACZ,gBAAgB;GAClB;GAEA,MAAM,eAAe,OAAO,kBAAkB,WAAW;IACvD;IACA;GACF,CAAC,CAAC,CAAC,KACD,OAAO,eACL,gBAAgB,oDAAoD,CACtE,CACF;GAGA,eAAe,gBAAgB,KAC7B;IAAE,GAAG;IAAc,GAAG;GAAa,GACnC,EAAE,eAAe,KAAK,CACxB;GAEA,MAAM,iBAAiB,eAAe,KACpC;IAAE,GAAG;IAAQ,SAAS;GAAa,GACnC,EAAE,eAAe,KAAK,CACxB;GAEA,MAAM,cAAc,YAAY;GAEhC,IAAI,cAAA,MACF,OAAO,OAAO,gBACZ,gEACF;GACF;GACA,IACE,SAAS,eACT,UAAU,eAAe,KAAA,KACzB,MAAM,OAAO,EAAE,cAAc,QAAQ,SAAS,uBAAuB,GACrE;IAGA,OAAO,wBAAwB;KAC7B;KACA,iBAAiB,QAAQ,aAAa,QAAQ,SAAS,CAAC,oBAAoB,IAAI,CAAC,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC,KAAK,OAAO,UAAU,UAAU,QAAQ,uCAAuC,KAAK,CAAC,CAAC;IAEzF,MAAM,QAAuB;KAC3B;KACA,QAAQ;KACR,GAAI,aAAa,KAAA,IAAY,CAAC,IAAI,EAAE,SAAS;KAC7C;KACA;KACA,GAAI,oBAAoB,KAAA,IAAY,CAAC,IAAI,EAAE,gBAAgB;IAC7D;IAEA,OAAO,cACL,OACA,IAAI,IAAI,MAAM,QAAQ,KAAK,EAAE,eAAe,QAAQ,CAAC,GACrD,KAAA,GACA,WACF;IACA,OAAO,kBAAkB,OAAO,WAAW;IAC3C;GACF;GAEA,MAAM,SAAS,OAAO,OAAO,WAAW,cAAc,cAAc,CAAC,CAAC,CAAC,KACrE,OAAO,KAAK,WAAW,OAAO,SAAS,GACvC,OAAO,UAAU,UAAU,QAAQ,2CAA2C,KAAK,CAAC,CACtF;GAEA,IAAI,CAAC,0BAA0B,MAAM,GACnC,OAAO,OAAO,QAAQ,4CAA4C;GACpE,IAAI,qBAAqB,MAAM,MAAM,aACnC,OAAO,OAAO,QAAQ,+DAA+D;GAEvF,MAAM,cAAc,IAAI,KACrB,UAAU,YAAY,eAAe,CAAC,EAAA,CAAG,KAAK,SAAS,CAAC,KAAK,UAAU,IAAI,CAAC,CAC/E;GAEA,MAAM,UAAU,MAAM,OAAO,mBAAmB;GAEhD,KAAK,MAAM,QAAQ,SAAS;IAC1B,MAAM,QAAQ,YAAY,IAAI,KAAK,QAAQ;IAE3C,IACE,UAAU,KAAA,MACT,OAAO,OAAO,WAAW,eAAe,KAAK,CAAC,CAAC,CAAC,KAC/C,OAAO,UAAU,UAAU,QAAQ,iCAAiC,KAAK,CAAC,CAC5E,EAAA,CAAG,UACA,OAAO,OAAO,WAAW,eAAe,IAAI,CAAC,CAAC,CAAC,KAC9C,OAAO,UAAU,UAAU,QAAQ,iCAAiC,KAAK,CAAC,CAC5E,EAAA,CAAG,MAEL,OAAO,OAAO,QAAQ,yDAAyD;IACjF,YAAY,IAAI,KAAK,UAAU,IAAI;GACrC;GAEA,MAAM,aAAa,OAAO,oBAAoB,WAAW;IACvD,SAAS;IACT,gBAAgB;IAChB,aAAa,CAAC,GAAG,YAAY,OAAO,CAAC;IACrC;IACA,kBACE,oBACA,kBAAkB,KAChB,QACE,aACG,QAAQ,SAAS,CAAC,oBAAoB,IAAI,CAAC,CAAC,CAC5C,WAAW,SAAS,KAAK,aAAa,cAAc,QAAQ,IAC/D,CACJ;IACF,iBAAiB,kBAAkB,KACjC,QAAQ,aAAa,QAAQ,SAAS,CAAC,oBAAoB,IAAI,CAAC,CAAC,CAAC,MACpE;IACA,SAAS,MAAM;GACjB,CAAC,CAAC,CAAC,KAAK,OAAO,UAAU,UAAU,QAAQ,uCAAuC,KAAK,CAAC,CAAC;GAEzF,MAAM,QAAQ;IACZ;IACA;IACA;IACA,GAAI,aAAa,KAAA,IAAY,CAAC,IAAI,EAAE,SAAS;IAC7C;IACA;IACA,GAAI,oBAAoB,KAAA,IAAY,CAAC,IAAI,EAAE,gBAAgB;GAC7D;GAEA,IACE,CAAC,MAAM,OAAO,SAAS,qBAAqB,IAAI,KAAK,KAAK,QAAQ,SAAS,cAAc,GAEzF,OAAO,cACL,OACA,IAAI,IAAI,MAAM,QAAQ,KAAK,EAAE,eAAe,QAAQ,CAAC,GACrD,KAAA,GACA,WACF;GACF,OAAO,kBAAkB,KAAK;GAC9B,WAAW,KACT,gBAAgB,KAAK;IACnB,kBAAkB,UAAU,aAAa,YAAY;IACrD;IACA,OAAO;IAEP,QAAQ,aAAa;GACvB,CAAC,CACH;GACA,SAAS,IAAI,OAAO,KAAK;EAC3B;EAEA,IAAI,aAAa,SAAS,iBAAiB,KACzC,OAAO,OAAO,QAAQ,kDAAkD;EAU1E,OAAO;GACL,OATe,YAAY,KAC3B;IACE,GAAG;IACH,SAAS,aAAa,QAAQ,SAAS,CAAC,oBAAoB,IAAI,CAAC;GACnE,GACA,EAAE,eAAe,KAAK,CAIR;GACd;GACA,cAAc;IACZ,KAAK,MAAM,UAAU,MAAM,SAAS,aAAa,OAAO,OAAO,QAAQ;IACvE,KAAK,MAAM,CAAC,OAAO,UAAU,UAC3B,IAAI,WAAW,MAAM,WAAW,OAAO,WAAW,SAAS,UAAU,KAAK,CAAC,EAAE,QAC3E,OAAO,OAAO,KAAK;SAChB,OAAO,IAAI,OAAO,KAAK;IAG9B,OAAO,OAAO,OAAO,GAAG;KACtB,MAAM,QAAQ,OAAO,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;KAEnC,IAAI,UAAU,KAAA,GAAW,OAAO,OAAO,KAAK;IAC9C;GACF;EACF;CACF,CAAC;CAED,MAAM,OAAO,OAAO,QAAQ,mBAAmB,WAC7C,OAAO,aAAa,WAChB,OAAO,KAAK,QAAQ,2CAA2C,CAAC,IAChE,OAAO,IAAI,OAAO,OAAO,aAAa,SAAS,QAAQ,CAC7D;CAEA,MAAM,iBAAiB,OAAO,WAC5B,WAAW,OAAuB;EAChC,MAAM,SAAS,OAAO;EAEtB,KAAK,IAAI,UAAU,IAAK,WAAW;GACjC,MAAM,WAAW,OAAO,QAAQ,OAAO,OAAO,IAAI,CAAC,CAAC,KAClD,OAAO,SAAS,0BAA0B,UACxC,QAAQ,wDAAwD,KAAK,CACvE,CACF;GAEA,MAAM,SAAS,OAAO,OAAO,OAAO,SAAS,OAAO,SAAS,UAAU,CAAC,CAAC,KACvE,OAAO,SAAS,mBAAmB,aAAa;IAC9C,IAAI,SAAS,WAAW,UAAU,WAAW,GAAG,OAAO,OAAO,KAAK,QAAQ;IAC3E,OAAO,MAAM;IAEb,OAAO,OAAO,QAAQ,KAAA,CAAS;GACjC,CAAC,CACH;GAEA,IAAI,WAAW,KAAA,GAAW;GAE1B,IAAI,OAAO,UAAU,OAAO,MAAM;QAC7B,SAAS,OAAO;GAErB,OAAO;EACT;CACF,IACC,WACC,OAAO,QAAQ,mBAAmB,WAChC,OAAO,aAAa,KAAK,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CACjD,CACJ;CAEA,MAAM,kBAAkB,OAAO,WAC7B,WAAW,OAAuB;EAChC,MAAM,YAAY,OAAO;EAEzB,IAAI,UAAU,aAAa,UACzB,OAAO,OAAO,QAAQ,gDAAgD;EAExE,KAAK,IAAI,UAAU,IAAK,WAAW;GACjC,MAAM,WAAW,OAAO,QAAQ,QAAQ,OAAO,UAAU,KAAA,CAAM,QAAQ,CAAC,CAAC,KACvE,OAAO,SAAS,0BAA0B,UACxC,QAAQ,wDAAwD,KAAK,CACvE,CACF;GAEA,MAAM,QAAQ,SAAS,MAAM,QAAQ;GAErC,IAAI,UAAU,KAAA,GACZ,OAAO,OAAO,QAAQ,kDAAkD;GAE1E,MAAM,gBAAgB,OAAO,eAAe,WAAW;IACrD,GAAG,SAAS;IACZ,SAAS,CAAC,OAAO,GAAG,SAAS,MAAM,QAAQ,MAAM,CAAC,CAAC;GACrD,CAAC,CAAC,CAAC,KACD,OAAO,UAAU,UACf,QAAQ,oDAAoD,KAAK,CACnE,CACF;GAEA,MAAM,SAAS,OAAO,UAAU,kBAAkB,eAAe,SAAS,UAAU,CAAC,CAAC,KACpF,OAAO,SAAS,mBAAmB,aAAa;IAC9C,IAAI,SAAS,WAAW,UAAU,WAAW,GAAG,OAAO,OAAO,KAAK,QAAQ;IAC3E,OAAO,MAAM;IAEb,OAAO,OAAO,QAAQ,KAAA,CAAS;GACjC,CAAC,CACH;GAEA,IAAI,WAAW,KAAA,GAAW;GAE1B,IAAI,OAAO,UAAU,OAAO,MAAM;QAC7B,SAAS,OAAO;GAErB,OAAO;EACT;CACF,IACC,WACC,OAAO,QAAQ,uBAAuB,WACpC,OAAO,aAAa,KAAK,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CACjD,CACJ;CAEA,MAAM,UAAU,UAAuB,aAAa,KAAK,CAAC,CAAC,KAAK,OAAO,QAAQ,cAAc,CAAC;CAE9F,MAAM,WAAW,UACf,aAAa,KAAK,CAAC,CAAC,KAAK,OAAO,QAAQ,eAAe,CAAC;CAE1D,MAAM,WAAW,OAAc,OAAuB,UACpD,KAAK,YAAY,CAAC,CAAC,CACjB,OAAO,IAAI,aAAa;EACtB,MAAM,QAAQ,OAAO;EAErB,OAAO,QAAQ,OAAO,aAAa,KAAK,GAAG,KAAK;EAChD,MAAM,WAAW,MAAM,QAAQ,EAAE,CAAC;EAClC,MAAM,QAAQ,OAAO,IAAI,KAAK,MAAM,OAAO,kBAAkB,OAAO,KAAK;EAEzE,IAAI,UAAU,KAAA,GAAW,OAAO,OAAO,QAAQ,wCAAwC;EACvF,IAAI,aAAa,IAAI,QAAQ,GAC3B,OAAO,OAAO,QAAQ,uCAAuC;EAC/D,OAAO,cAAc,uBAAO,IAAI,IAAI,GAAG;GACrC,MAAM,MAAM,aAAa;GACzB;GACA,SAAS;EACX,CAAC;EACD,aAAa,IAAI,UAAU;GAAE;GAAO,MAAM,MAAM,aAAa;GAAM;GAAO,SAAS;EAAE,CAAC;EAEtF,OAAO,KAAK,YAAY,CAAC,CAAC,CACxB,OAAO,WAAW;GAChB,aAAa,OAAO,QAAQ;EAC9B,CAAC,CACH;CACF,CAAC,CACH;CAEF,MAAM,SAAS,UACb,KAAK,YAAY,CAAC,CAAC,CACjB,OAAO,IAAI,aAAa;EACtB,MAAM,QAAQ,OAAO;EAErB,MAAM,QAAQ,OAAO,aAAa,KAAK;EAEvC,OAAO,QAAQ,OAAO,OAAO,WAAW;EAExC,MAAM,WAAW,MAAM,QAAQ,MAC5B,WAAW,OAAO,QAAQ,SAAS,uBACtC;EAEA,IAAI,aAAa,KAAA,KAAa,SAAS,QAAQ,SAAS,yBACtD,OAAO,OAAO,QAAQ,mCAAmC;EAE3D,MAAM,WACJ,OAAO,IAAI,SAAS,QAAQ,KAAK,MAChC,OAAO,kBAAkB,SAAS,QAAQ,OAAO,KAAK;EAEzD,IAAI,aAAa,KAAA,GAAW,OAAO,OAAO,QAAQ,uCAAuC;EAEzF,MAAM,UAAU,eAAe;GAC7B,GAAG;GACH,cAAc;IACZ,GAAG,SAAS;IACZ,YAAY;KAAE,GAAG,SAAS,aAAa;KAAY,mBAAmB;IAAE;GAC1E;GACA,UAAU,SAAS;GACnB,yBAAS,IAAI,IAAI;GACjB,8BAAc,IAAI,IAAI;EACxB,CAAC;EAED,MAAM,QACJ,MAAM,QAAQ,QAAQ,OAAO,WAAW,QAAQ,qBAAqB,MAAM,GAAG,CAAC,IAC/E,6BACA,QAAQ;EAEV,MAAM,UAAU,MAAM,QAAQ,SAAS,QAAQ;EAE/C,OAAO,cAAc,0BAAU,IAAI,IAAI,GAAG;GAAE,MAAM,SAAS,QAAQ;GAAM;GAAO;EAAQ,CAAC;EACzF,aAAa,IAAI,SAAS,UAAU;GAClC,OAAO,SAAS,QAAQ;GACxB,MAAM,SAAS,QAAQ;GACvB;GACA;EACF,CAAC;EAED,OAAO;CACT,CAAC,CACH;CAEF,MAAM,cAAc,OAAkC,cAAuB;EAC3E,IAAI,UAAU,KAAA,GAAW,OAAO,OAAO,KAAK,QAAQ,yCAAyC,CAAC;EAE9F,MAAM,iBACJ,MAAM,aAAa,aAAa,cAAc,MAAM,aAAa,aAAa,YAC1E,OAAO,OACP,cAAc,KAAK;EAGzB,OAAO,YAAY,OAAO,QAAQ,kBAAkB,KAAK,GAAG,QAAQ,IAAI,SAAS;CACnF;CAEA,MAAM,SAAS,UACb,KAAK,YAAY,CAAC,CAAC,CACjB,OAAO,QAAQ,mBAAmB,WAAW;EAC3C,IAAI,OAAO,aAAa,UACtB,OAAO,OAAO,KAAK,QAAQ,2CAA2C,CAAC;EAEzE,MAAM,WAAW,OAAO,IAAI,KAAK;EAEjC,IAAI,aAAa,KAAA,GAAW,OAAO,WAAW,UAAU,KAAK;EAE7D,OAAO,OAAO,QAAQ,OAAO,OAAO,aAClC,OAAO,QAAQ,kBAAkB,OAAO,SAAS,QAAQ,IAAI,UAC3D,WAAW,OAAO,IAAI,CACxB,CACF;CACF,CAAC,CACH;CAEF,OAAO;EACL;EACA;EACA;EACA;EACA;;;EAGA,qBAAqB,UAAiB,OAAO,IAAI,KAAK,CAAC,EAAE;;;EAGzD,uBACE,OACA,SACA,SAEA,OAAO,QAAQ,mBAAmB,WAAW;GAC3C,MAAM,OAAO;IAAE;IAAO;IAAS;GAAO;GAEtC,gBAAgB;GAEhB,OAAO,KAAK,KACV,OAAO,SACL,OAAO,WAAW;IAChB,IAAI,kBAAkB,MAAM,gBAAgB,KAAA;GAC9C,CAAC,CACH,CACF;EACF,CAAC;EACH,aAAa,OAAc,UAAkB;GAC3C,IAAI,UAAU,GAAG,YAAY,OAAO,KAAK;QACpC,YAAY,IAAI,OAAO,KAAK;EACnC;CACF;AACF,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"RunStorage-BRGP3Tcu.mjs","names":[],"sources":["../src/durable/internal/StorageOwner.ts","../src/durable/RunStorage.ts"],"sourcesContent":["import { Context, Effect, Option, Semaphore, type Scope } from \"effect\";\n\nimport type { ThreadId } from \"../../core/Identifiers.ts\";\nimport { type Claim, LedgerError, OwnershipLost } from \"../SubmissionLedger.ts\";\n\nexport type MutationGate = <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;\n\n/** Local capability only. It is never encoded, persisted, or reconstructed from an Attempt ID. */\nexport interface OwnerGeneration {\n readonly claim: Claim;\n readonly identity: object;\n readonly checkActive: Effect.Effect<void, OwnershipLost>;\n readonly release: Effect.Effect<void>;\n readonly use: <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E | OwnershipLost, R>;\n}\n\nexport interface StorageOwnerService {\n readonly identity: object;\n readonly withMutation: MutationGate;\n readonly withProgress: <A, E, R>(\n threadId: ThreadId,\n effect: Effect.Effect<A, E, R>,\n ) => Effect.Effect<A, E, R>;\n readonly isClosed: () => boolean;\n readonly hasOwner: (threadId: string, submissionId?: string) => boolean;\n /** Trusted administrative retirement, while holding the same mutation gate. */\n readonly closeSubmission: (threadId: string, submissionId: string) => void;\n readonly acquire: <E, R>(\n threadId: ThreadId,\n select: Effect.Effect<Option.Option<Claim>, E, R>,\n ) => Effect.Effect<Option.Option<OwnerGeneration>, E | LedgerError, R | Scope.Scope>;\n}\n\nexport class StorageOwner extends Context.Service<StorageOwner, StorageOwnerService>()(\n \"@effect-agent/durable/StorageOwner\",\n) {}\n\nconst ActiveOwner = Context.Reference<object | undefined>(\n \"@effect-agent/durable/internal/ActiveStorageOwner\",\n { defaultValue: () => undefined },\n);\n\nconst ActiveProgress = Context.Reference<\n { readonly owner: object; readonly threadId: ThreadId } | undefined\n>(\"@effect-agent/durable/internal/ActiveProgress\", { defaultValue: () => undefined });\n\n/** Reuse the physical owner's gate; reentrant calls remain in the same mutation. */\nexport const makeStorageOwner = Effect.fnUntraced(function* (gate: MutationGate) {\n const identity = {};\n let closed = false;\n const progress = new Map<ThreadId, { readonly gate: Semaphore.Semaphore; users: number }>();\n const active = new Map<string, { readonly claim: Claim; closed: boolean }>();\n\n const withMutation: MutationGate = (effect) =>\n Effect.withFiber((fiber) => {\n const current = fiber.getRef(ActiveOwner);\n\n return current === identity\n ? effect\n : gate(Effect.provideService(effect, ActiveOwner, identity));\n });\n\n yield* Effect.addFinalizer(() =>\n withMutation(\n Effect.sync(() => {\n closed = true;\n for (const entry of active.values()) entry.closed = true;\n active.clear();\n }),\n ),\n );\n\n return StorageOwner.of({\n identity,\n withMutation,\n withProgress: (threadId, effect) =>\n Effect.withFiber((fiber) => {\n const current = fiber.getRef(ActiveProgress);\n\n if (current?.owner === identity && current.threadId === threadId) return effect;\n\n return Effect.suspend(() => {\n let entry = progress.get(threadId);\n\n if (entry === undefined) {\n entry = { gate: Semaphore.makeUnsafe(1), users: 0 };\n progress.set(threadId, entry);\n }\n const retained = entry;\n\n retained.users++;\n\n return retained.gate\n .withPermits(1)(\n Effect.provideService(effect, ActiveProgress, { owner: identity, threadId }),\n )\n .pipe(\n Effect.ensuring(\n Effect.sync(() => {\n retained.users--;\n if (retained.users === 0 && progress.get(threadId) === retained)\n progress.delete(threadId);\n }),\n ),\n );\n });\n }),\n isClosed: () => closed,\n hasOwner: (threadId, submissionId) => {\n const entry = active.get(threadId);\n\n return (\n !closed &&\n entry !== undefined &&\n !entry.closed &&\n (submissionId === undefined || entry.claim.submissionId === submissionId)\n );\n },\n closeSubmission: (threadId, submissionId) => {\n const entry = active.get(threadId);\n\n if (entry?.claim.submissionId !== submissionId) return;\n entry.closed = true;\n active.delete(threadId);\n },\n acquire: (threadId, select) =>\n Effect.uninterruptibleMask((restore) =>\n Effect.gen(function* () {\n const selected = yield* withMutation(\n Effect.gen(function* () {\n if (closed)\n return yield* LedgerError.make({\n operation: \"claim\",\n message: \"Storage owner is closed\",\n });\n if (active.has(threadId)) return Option.none<OwnerGeneration>();\n const selected = yield* select;\n\n if (Option.isNone(selected)) return Option.none<OwnerGeneration>();\n const entry = { claim: selected.value, closed: false };\n\n active.set(threadId, entry);\n\n const checkActive = Effect.suspend(() =>\n closed || entry.closed || active.get(threadId) !== entry\n ? Effect.fail(OwnershipLost.make({ submissionId: entry.claim.submissionId }))\n : Effect.void,\n );\n\n const release = withMutation(\n Effect.sync(() => {\n entry.closed = true;\n if (active.get(threadId) === entry) active.delete(threadId);\n }),\n );\n\n return Option.some<OwnerGeneration>({\n claim: entry.claim,\n identity: entry,\n checkActive,\n release,\n use: (effect) => withMutation(Effect.andThen(checkActive, effect)),\n });\n }),\n );\n\n if (Option.isNone(selected)) return selected;\n // A closed Scope runs this immediately. Never register while holding a nonlocal gate.\n yield* Effect.addFinalizer(() => selected.value.release);\n\n return yield* restore(Effect.succeed(selected));\n }),\n ),\n });\n});\n","import type { Scope } from \"effect\";\nimport { Cause, Context, Effect, Layer, Option, Schema } from \"effect\";\n\nimport type { SubmissionId, ThreadId } from \"../core/Identifiers.ts\";\nimport { StorageOwner } from \"./internal/StorageOwner.ts\";\nimport type { CanonicalBatch, CanonicalSequence } from \"./Records.ts\";\nimport {\n SettlementPublication,\n type SettlementPublicationFailure,\n type SettlementPublicationResult,\n SettlementPublisher,\n} from \"./SettlementPublisher.ts\";\nimport {\n AttachChildToReservationRequest,\n ChildBudgetReservationRequest,\n ClaimJoiningRequest,\n type Claim,\n type ClaimRequest,\n type InputAppliedMarker,\n LedgerError,\n MarkInputAppliedRequest,\n MarkJoinedRequest,\n OwnershipLost,\n RevertJoiningRequest,\n SettlementConflict,\n SubmissionLedger,\n SuspendRequest,\n type SuspensionReason,\n} from \"./SubmissionLedger.ts\";\nimport {\n type AppendResult,\n AppendConflict,\n AppendRequest,\n type CommitBatch,\n type ExecutionUpdate,\n PreparedAppend,\n ThreadMaterialization,\n ThreadNotMaterialized,\n ThreadStore,\n ThreadStoreError,\n type ThreadStoreFailure,\n ThreadTailRequest,\n} from \"./ThreadStore.ts\";\n\nexport {\n StorageOwner,\n makeStorageOwner,\n type MutationGate,\n type OwnerGeneration,\n type StorageOwnerService,\n} from \"./internal/StorageOwner.ts\";\n\nexport const RunChildBudgetReservation = Schema.Struct({\n reservationId: ChildBudgetReservationRequest.fields.reservationId,\n parentToolCallId: ChildBudgetReservationRequest.fields.parentToolCallId,\n allocation: ChildBudgetReservationRequest.fields.allocation,\n allocationDigest: ChildBudgetReservationRequest.fields.allocationDigest,\n});\n\nexport type RunChildBudgetReservation = typeof RunChildBudgetReservation.Type;\n\nexport const RunChildAttachment = Schema.Struct({\n reservationId: AttachChildToReservationRequest.fields.reservationId,\n childSubmissionId: AttachChildToReservationRequest.fields.childSubmissionId,\n});\n\nexport type RunChildAttachment = typeof RunChildAttachment.Type;\n\n/** Commands bound to one local scoped owner. No authority is transported in their values. */\nexport interface RunOwnership {\n readonly release: Effect.Effect<void>;\n readonly markInputApplied: (\n marker: InputAppliedMarker,\n ) => ReturnType<SubmissionLedger[\"Service\"][\"markInputApplied\"]>;\n readonly claimJoining: (\n maxCount: number,\n ) => ReturnType<SubmissionLedger[\"Service\"][\"claimJoining\"]>;\n readonly markJoined: (\n submissionId: SubmissionId,\n marker: InputAppliedMarker,\n ) => ReturnType<SubmissionLedger[\"Service\"][\"markJoined\"]>;\n readonly revertJoining: (\n submissionId: SubmissionId,\n ) => Effect.Effect<void, LedgerError | OwnershipLost>;\n readonly suspend: (\n reason: SuspensionReason,\n ) => ReturnType<SubmissionLedger[\"Service\"][\"suspend\"]>;\n readonly reserveChildBudget: (\n request: RunChildBudgetReservation,\n ) => ReturnType<SubmissionLedger[\"Service\"][\"reserveChildBudget\"]>;\n readonly attachChildToReservation: (\n request: RunChildAttachment,\n ) => ReturnType<SubmissionLedger[\"Service\"][\"attachChildToReservation\"]>;\n}\n\nexport interface RunWriter {\n readonly threadId: ThreadId;\n /** Opaque cache identity for this local writer lifetime; never portable authority. */\n readonly generation: object;\n readonly refresh: Effect.Effect<void, ThreadStoreFailure>;\n readonly withProgress: <A, E, R>(\n effect: Effect.Effect<A, E, R>,\n ) => Effect.Effect<A, E | ThreadStoreFailure, R>;\n readonly tail: Effect.Effect<{ readonly sequence: CanonicalSequence }>;\n /** Uncertain commit failures close this session before another command may enter. */\n readonly append: (\n batch: CommitBatch,\n executions?: ReadonlyArray<ExecutionUpdate>,\n ) => Effect.Effect<AppendResult, ThreadStoreFailure>;\n /** Recheck the captured local capability after preflight, immediately before effect dispatch. */\n readonly checkActive: Effect.Effect<void, ThreadStoreFailure>;\n}\n\nexport interface RunStorageSession extends RunWriter, RunOwnership {\n readonly claim: Claim;\n /** Atomic original input/context plus the ledger marker, when the adapter supports it. */\n readonly appendInput?: RunWriter[\"append\"];\n /** Library-only initialization, before application/model IO. Hold progress before mutation\n * so the captured controls and this owner's acknowledged input remain one read view. */\n readonly withInitialization?: <A, E, R>(\n effect: Effect.Effect<A, E, R>,\n ) => Effect.Effect<A, E | OwnershipLost, R>;\n readonly refresh: Effect.Effect<void, ThreadStoreFailure>;\n readonly publishSettlement: (\n batch: CanonicalBatch,\n executions?: ReadonlyArray<ExecutionUpdate>,\n ) => Effect.Effect<SettlementPublicationResult, SettlementPublicationFailure>;\n}\n\nexport class RunStorage extends Context.Service<\n RunStorage,\n {\n readonly publishSettlement: SettlementPublisher[\"Service\"][\"publish\"];\n readonly claim: (\n request: ClaimRequest,\n ) => Effect.Effect<\n Option.Option<RunStorageSession>,\n LedgerError | ThreadStoreFailure,\n Scope.Scope\n >;\n }\n>()(\"@effect-agent/thread/RunStorage\") {}\n\n/** One writer's scoped capability, selected at claim or administrative construction. */\nclass WriterOwnership extends Context.Service<\n WriterOwnership,\n {\n readonly identity: object;\n readonly checkActive: Effect.Effect<void, ThreadStoreFailure>;\n readonly release: Effect.Effect<void>;\n }\n>()(\"@effect-agent/durable/internal/WriterOwnership\") {}\n\nconst isDefiniteWriteRefusal = Schema.is(\n Schema.Union([AppendConflict, OwnershipLost, SettlementConflict, ThreadNotMaterialized]),\n);\n\nconst isDefiniteWriteFailure = (cause: Cause.Cause<unknown>) =>\n cause.reasons.length > 0 &&\n cause.reasons.every(\n (reason) => Cause.isFailReason(reason) && isDefiniteWriteRefusal(reason.error),\n );\n\nconst makeWriter = Effect.fnUntraced(function* (threadId: ThreadId) {\n const store = yield* ThreadStore;\n const owner = yield* StorageOwner;\n const ownership = yield* WriterOwnership;\n const checkActive = ownership.checkActive;\n const initial = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n let tail = { sequence: initial.tailSequence };\n\n const refresh = owner.withMutation(\n Effect.gen(function* () {\n yield* checkActive;\n const current = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n\n tail = { sequence: current.tailSequence };\n }),\n );\n\n const makeAppend = Effect.gen(function* () {\n const publisher = yield* ThreadStore;\n\n const append: RunWriter[\"append\"] = Effect.fnUntraced(function* (batch, executions) {\n const captured = yield* PreparedAppend.capture(\n AppendRequest.make({\n threadId,\n expectedTailSequence: tail.sequence,\n batch,\n ...(executions === undefined ? {} : { executions }),\n }),\n ).pipe(\n Effect.mapError((cause) =>\n ThreadStoreError.make({\n operation: \"capture append\",\n message: cause.message,\n cause,\n }),\n ),\n );\n\n return yield* owner.withProgress(\n threadId,\n owner.withMutation(\n Effect.gen(function* () {\n yield* checkActive;\n for (let retries = 0; ; retries++) {\n const result = yield* publisher\n .append(\n captured.expectedTailSequence === tail.sequence\n ? captured\n : AppendRequest.make({\n ...captured,\n expectedTailSequence: tail.sequence,\n }),\n )\n .pipe(\n Effect.catchTag(\"AppendConflict\", (conflict) => {\n if (\n conflict.reason !== \"tail\" ||\n conflict.actualTailSequence === undefined ||\n retries >= 8\n )\n return Effect.fail(conflict);\n tail = { sequence: conflict.actualTailSequence };\n if (captured.executions !== undefined) return Effect.fail(conflict);\n\n return Effect.succeed(undefined);\n }),\n );\n\n if (result === undefined) continue;\n // A historical replay returns its original coordinates, not today's canonical tail.\n if (result.replayed) yield* refresh;\n else tail = { sequence: result.lastSequence };\n\n return result;\n }\n }).pipe(\n // Revoke uncertain writes before releasing the writer's mutation gate.\n Effect.onError((cause) =>\n isDefiniteWriteFailure(cause) ? Effect.void : ownership.release,\n ),\n ),\n ),\n );\n });\n\n return append;\n });\n\n const writer = {\n threadId,\n generation: ownership.identity,\n withProgress: <A, E, R>(effect: Effect.Effect<A, E, R>) =>\n owner.withProgress(threadId, Effect.andThen(checkActive, effect)),\n tail: Effect.sync(() => tail),\n append: yield* makeAppend,\n checkActive: owner.withMutation(checkActive),\n refresh,\n };\n\n return {\n writer,\n makeAppend,\n adoptTail: (sequence: CanonicalSequence) => {\n tail = { sequence };\n },\n };\n});\n\n/** Trusted administrative writer sharing the physical owner's gate and lifetime. */\nexport const makeRunWriter = Effect.fnUntraced(function* (threadId: ThreadId) {\n const owner = yield* StorageOwner;\n\n return (yield* makeWriter(threadId).pipe(\n Effect.provideService(WriterOwnership, {\n identity: owner.identity,\n checkActive: Effect.suspend(() =>\n owner.isClosed()\n ? Effect.fail(\n ThreadStoreError.make({\n operation: \"write Thread\",\n message: \"Storage owner is closed\",\n }),\n )\n : Effect.void,\n ),\n release: Effect.void,\n }),\n )).writer;\n});\n\n/** The same scoped single-owner protocol is used by every adapter. */\nexport const make = Effect.gen(function* () {\n const ledger = yield* SubmissionLedger;\n const store = yield* ThreadStore;\n const publisher = yield* SettlementPublisher;\n const owner = yield* StorageOwner;\n\n const claim: RunStorage[\"Service\"][\"claim\"] = (request) =>\n Effect.uninterruptibleMask((restore) =>\n Effect.gen(function* () {\n const granted = yield* owner.acquire(request.threadId, ledger.selectHead(request));\n\n if (Option.isNone(granted)) return Option.none();\n const generation = granted.value;\n const claimed = generation.claim;\n\n return yield* restore(\n Effect.gen(function* () {\n if (\n request.handoff !== undefined &&\n request.handoff.submissionId !== claimed.submissionId\n )\n return yield* LedgerError.make({\n operation: \"claim handoff\",\n message: \"The submission adapter did not honor the requested handoff\",\n });\n yield* store.materialize(ThreadMaterialization.make({ threadId: request.threadId }));\n\n const { writer, makeAppend, adoptTail } = yield* makeWriter(request.threadId).pipe(\n Effect.provideService(WriterOwnership, generation),\n Effect.provideService(ThreadStore, store),\n Effect.provideService(StorageOwner, owner),\n );\n\n const owned = <A, E>(effect: Effect.Effect<A, E>) => generation.use(effect);\n\n const inputPublisher = ledger.appendInput;\n\n const appendInput =\n inputPublisher === undefined\n ? undefined\n : yield* makeAppend.pipe(\n Effect.provideService(ThreadStore, {\n ...store,\n append: (request) => inputPublisher(claimed.submissionId, request),\n }),\n );\n\n const session: RunStorageSession = {\n ...writer,\n claim: claimed,\n ...(appendInput === undefined ? {} : { appendInput }),\n withInitialization: (effect) =>\n owner.withProgress(request.threadId, generation.use(effect)),\n release: generation.release,\n refresh: writer.refresh,\n markInputApplied: (marker) =>\n owned(\n ledger.markInputApplied(\n MarkInputAppliedRequest.make({\n ...marker,\n submissionId: claimed.submissionId,\n }),\n ),\n ),\n claimJoining: (maxCount) =>\n owned(\n ledger.claimJoining(\n ClaimJoiningRequest.make({\n threadId: request.threadId,\n hostSubmissionId: claimed.submissionId,\n maxCount,\n }),\n ),\n ),\n markJoined: (submissionId, marker) =>\n owned(\n ledger.markJoined(\n MarkJoinedRequest.make({\n ...marker,\n submissionId,\n }),\n ),\n ),\n revertJoining: (submissionId) =>\n owned(\n ledger.revertJoining(\n RevertJoiningRequest.make({\n submissionId,\n guard: { hostSubmissionId: claimed.submissionId },\n }),\n ),\n ),\n suspend: (reason) =>\n owned(\n ledger\n .suspend(\n SuspendRequest.make({\n submissionId: claimed.submissionId,\n reason,\n }),\n )\n .pipe(\n Effect.tap((outcome) =>\n outcome === \"suspended\" ? generation.release : Effect.void,\n ),\n ),\n ),\n publishSettlement: Effect.fnUntraced(function* (batch, executions) {\n const captured = yield* PreparedAppend.capture(\n AppendRequest.make({\n threadId: request.threadId,\n expectedTailSequence: (yield* writer.tail).sequence,\n batch,\n ...(executions === undefined ? {} : { executions }),\n }),\n ).pipe(\n Effect.mapError((cause) =>\n LedgerError.make({\n operation: \"capture settlement\",\n message: cause.message,\n cause,\n }),\n ),\n );\n\n return yield* owner.withProgress(\n request.threadId,\n owned(\n Effect.gen(function* () {\n for (let retries = 0; ; retries++) {\n const result = yield* publisher\n .publish(\n SettlementPublication.make({\n submissionId: claimed.submissionId,\n authority: { _tag: \"Owned\" },\n append: AppendRequest.make({\n ...captured,\n expectedTailSequence: (yield* writer.tail).sequence,\n }),\n }),\n )\n .pipe(\n Effect.catchTag(\"AppendConflict\", (conflict) => {\n if (\n conflict.reason !== \"tail\" ||\n conflict.actualTailSequence === undefined ||\n retries >= 8\n )\n return Effect.fail(conflict);\n\n return writer.refresh.pipe(\n Effect.andThen(\n captured.executions === undefined\n ? Effect.succeed(undefined)\n : Effect.fail(conflict),\n ),\n );\n }),\n );\n\n if (result === undefined) continue;\n adoptTail(result.tailSequence);\n\n return result;\n }\n }).pipe(\n Effect.onError((cause) =>\n isDefiniteWriteFailure(cause) ? Effect.void : generation.release,\n ),\n ),\n ),\n );\n }),\n reserveChildBudget: (value) =>\n owned(\n ledger.reserveChildBudget(\n ChildBudgetReservationRequest.make({\n ...value,\n parentSubmissionId: claimed.submissionId,\n }),\n ),\n ),\n attachChildToReservation: (value) =>\n owned(ledger.attachChildToReservation(AttachChildToReservationRequest.make(value))),\n };\n\n return Option.some(session);\n }).pipe(Effect.onError(() => generation.release)),\n );\n }),\n );\n\n return RunStorage.of({ claim, publishSettlement: publisher.publish });\n});\n\nexport const layer = () => Layer.effect(RunStorage, make);\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ThreadStore-Cn6FDWX9.mjs","names":[],"sources":["../src/durable/internal/record-ownership.ts","../src/durable/internal/record-encoding.ts","../src/durable/internal/transfer-dependencies.ts","../src/durable/ThreadStore.ts"],"sourcesContent":["import type { RunId } from \"../../core/Identifiers.ts\";\nimport { utf8ByteLength } from \"../../core/internal/utf8.ts\";\nimport type { ModelCallUsage } from \"../../core/Usage.ts\";\nimport type { RecordEnvelope } from \"../Records.ts\";\nimport { runIdForSubmission } from \"../RunJournal.ts\";\n\n/** Index membership comes from canonical owner fields, never parsing opaque identities. */\nexport const canonicalRunIds = ({ payload }: RecordEnvelope): ReadonlyArray<RunId> => {\n const ids = new Set<RunId>();\n\n if (\"runId\" in payload && payload.runId !== undefined) ids.add(payload.runId);\n if (payload._tag === \"AbortRequested\" || payload._tag === \"SubmissionSettled\")\n ids.add(runIdForSubmission(payload.submissionId));\n if (payload._tag === \"AgentUpdateEmitted\") ids.add(payload.update.runId);\n if (payload._tag === \"WorkerInputRequested\" && payload.admission.executionRunId !== null)\n ids.add(payload.admission.executionRunId);\n if (payload._tag === \"SubtreeBudgetReserved\" && payload.executionRunId !== null)\n ids.add(payload.executionRunId);\n if (payload._tag === \"PeerMessagePrepared\" && payload.source._tag === \"tool\")\n ids.add(payload.source.runId);\n\n return [...ids];\n};\n\n/** A joined Receipt's closure is discoverable from its host, but owns no host execution charge. */\nexport const executionRunIds = (record: RecordEnvelope): ReadonlyArray<RunId> =>\n record.payload._tag === \"SubmissionSettled\"\n ? [runIdForSubmission(record.payload.submissionId)]\n : canonicalRunIds(record);\n\n/**\n * These immutable preparations are durable handoff intents before a destination row exists.\n * Their canonical tag/identity index is published with the preparation and survives Run\n * settlement. WorkerInputCompleted closes capacity only with factual effectsResolved evidence;\n * ToolCallSettled/Resolved close operations, and destination delivery state owns transport closure.\n */\nexport const isWorkHandoff = ({ payload }: RecordEnvelope): boolean =>\n payload._tag === \"WorkerInputRequested\" ||\n payload._tag === \"WorkerReportPrepared\" ||\n payload._tag === \"PeerMessagePrepared\" ||\n payload._tag === \"WorkerStopRequested\" ||\n payload._tag === \"SubtreeBudgetReserved\" ||\n payload._tag === \"SubagentRequested\" ||\n (payload._tag === \"AgentUpdateEmitted\" && payload.delivery !== undefined);\n\n/** A host can prepare independent work before the source admission ever starts a Run. */\nexport const isPreContinuationFact = (record: RecordEnvelope): boolean =>\n (isWorkHandoff(record) &&\n record.payload._tag !== \"SubagentRequested\" &&\n record.payload._tag !== \"AgentUpdateEmitted\") ||\n (record.payload._tag === \"UserInputRecorded\" && record.payload.kind === \"user\") ||\n record.payload._tag === \"AbortRequested\" ||\n record.payload._tag === \"SubmissionSettled\";\n\n/** Grouped usage is no larger than its original identities/components plus bounded counters. */\nexport const terminalUsageCharge = (calls: ReadonlyArray<ModelCallUsage>): number =>\n calls.reduce((bytes, call) => bytes + utf8ByteLength(JSON.stringify(call)) + 512, 0);\n\n/** These facts end accepted work or durably request its termination. */\nexport const isTerminalBudgetFact = ({ payload }: RecordEnvelope): boolean =>\n payload._tag === \"AbortRequested\" ||\n payload._tag === \"RunFailed\" ||\n payload._tag === \"RunCompleted\" ||\n payload._tag === \"SubmissionSettled\";\n","import { DateTime, Predicate, Result, Schema } from \"effect\";\n\nimport type { RunId } from \"../../core/Identifiers.ts\";\nimport { utf8ByteLength } from \"../../core/internal/utf8.ts\";\nimport { ExportedRecord } from \"../RecordFormat.ts\";\nimport {\n type CanonicalRecordPayload,\n MAX_CANONICAL_RECORD_BYTES,\n MAX_PERSISTED_JSON_COLLECTION_LENGTH,\n MAX_PERSISTED_JSON_DEPTH,\n MAX_PERSISTED_JSON_NODES,\n RecordEnvelope,\n type RecordJson,\n type RunContinuation,\n} from \"../Records.ts\";\nimport { boundedCanonicalJson, canonicalJson } from \"./canonical-json.ts\";\nimport {\n executionRunIds,\n isPreContinuationFact,\n isTerminalBudgetFact,\n terminalUsageCharge,\n} from \"./record-ownership.ts\";\n\nconst encodeRecord = Schema.encodeSync(RecordEnvelope);\n\nconst recordLimits = {\n depth: MAX_PERSISTED_JSON_DEPTH + 4,\n nodes: MAX_PERSISTED_JSON_NODES * 4,\n collectionLength: MAX_PERSISTED_JSON_COLLECTION_LENGTH,\n // UTF-16 units give a lower bound while serializing; capture checks the exact UTF-8 width.\n textUnits: MAX_CANONICAL_RECORD_BYTES,\n};\n\nexport class RecordEncodingError extends Schema.TaggedError<RecordEncodingError>()(\n \"RecordEncodingError\",\n { message: Schema.String, cause: Schema.optionalKey(Schema.Defect()) },\n) {}\n\nexport interface RecordEncoding {\n readonly canonical: RecordEnvelope;\n readonly wire: RecordJson;\n readonly json: string;\n readonly bytes: number;\n readonly progress: ProgressAppendRecord;\n}\n\ninterface CapturedRecordEncoding extends RecordEncoding {\n readonly wire: typeof RecordEnvelope.Encoded;\n}\n\n/** Private capture metadata, never caller-supplied wire data or execution authority. */\nexport interface ProgressAppendRecord {\n readonly recordId: RecordEnvelope[\"recordId\"];\n readonly runIds: ReadonlyArray<RunId>;\n readonly recordBytes: number;\n readonly terminalUsageBytes: number;\n readonly preContinuation: boolean;\n readonly terminal: boolean;\n readonly continuation?: RunContinuation;\n}\n\nconst progressRecord = (record: RecordEnvelope, bytes: number): ProgressAppendRecord => {\n const payload = record.payload;\n\n return Object.freeze({\n recordId: record.recordId,\n runIds: Object.freeze(executionRunIds(record)),\n recordBytes: bytes,\n preContinuation: isPreContinuationFact(record),\n terminal: isTerminalBudgetFact(record),\n terminalUsageBytes:\n payload._tag === \"ModelResponseRecorded\" || payload._tag === \"ModelCallAborted\"\n ? terminalUsageCharge(payload.modelUsage ?? [])\n : 0,\n ...(payload._tag === \"RunContinuation\" ? { continuation: payload } : {}),\n });\n};\n\nconst captured = new WeakMap<RecordEnvelope, CapturedRecordEncoding>();\n\n// Define own data properties so valid JSON keys never invoke inherited setters.\nconst setOwn = (target: object, key: PropertyKey, value: unknown): void => {\n Object.defineProperty(target, key, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n};\n\n/** JSON arrays use indexed values, even when inherited or non-enumerable. */\nconst copyOwn = (value: object): object => {\n if (!Array.isArray(value)) {\n const copy = { ...value };\n\n Object.setPrototypeOf(copy, Object.getPrototypeOf(value));\n\n return copy;\n }\n const copy: Array<unknown> = [];\n\n for (let index = 0; index < value.length; index++) setOwn(copy, index, value[index]);\n for (const key of Reflect.ownKeys(value)) {\n if (\n !Object.hasOwn(copy, key) &&\n Object.getOwnPropertyDescriptor(value, key)?.enumerable === true\n )\n setOwn(copy, key, Reflect.get(value, key));\n }\n\n return copy;\n};\n\n/** Own every fact before suspension; encoded JSON fields can share these private frozen values. */\nconst capturePayload = (payload: CanonicalRecordPayload) => {\n const copy = { ...payload };\n\n Object.setPrototypeOf(copy, Object.getPrototypeOf(payload));\n const copies = new WeakMap<object, object>([[payload, copy]]);\n\n const pending: Array<object> = [copy];\n\n const owned: Array<object> = [copy];\n\n while (pending.length > 0) {\n const next = pending.pop()!;\n\n for (const [key, value] of Object.entries(next)) {\n if (!Predicate.isObjectOrArray(value)) continue;\n let child = copies.get(value);\n\n if (child === undefined) {\n const created = copyOwn(value);\n\n copies.set(value, created);\n owned.push(created);\n pending.push(created);\n child = created;\n }\n setOwn(next, key, child);\n }\n }\n for (const value of owned) Object.freeze(value);\n\n return { payload: Object.freeze(copy), copies };\n};\n\n/** Schema-created structures are private; detach JSON pass-throughs using the same owned copy. */\nconst ownWire = <Wire extends RecordJson>(wire: Wire, copies: WeakMap<object, object>): Wire => {\n const pending: Array<object> = Predicate.isObjectOrArray(wire) ? [wire] : [];\n\n while (pending.length > 0) {\n const next = pending.pop()!;\n\n for (const [key, value] of Object.entries(next)) {\n if (!Predicate.isObjectOrArray(value)) continue;\n const copy = copies.get(value);\n\n if (copy !== undefined) setOwn(next, key, copy);\n else pending.push(value);\n }\n Object.freeze(next);\n }\n\n return wire;\n};\n\n/** Capture at the Schema boundary; only the privately owned result can reuse its encoding. */\nexport const captureRecord = (\n input: RecordEnvelope,\n): Result.Result<CapturedRecordEncoding, RecordEncodingError> => {\n try {\n const existing = captured.get(input);\n\n if (existing !== undefined) return Result.succeed(existing);\n const encoded = encodeRecord(input);\n const owned = capturePayload(input.payload);\n const wire = ownWire(encoded, owned.copies);\n const serialized = boundedCanonicalJson(wire, recordLimits);\n\n if (Result.isFailure(serialized))\n return Result.fail(RecordEncodingError.make({ message: serialized.failure.message }));\n const json = serialized.success;\n const bytes = utf8ByteLength(json);\n\n if (bytes > MAX_CANONICAL_RECORD_BYTES)\n return Result.fail(\n RecordEncodingError.make({ message: \"Canonical JSON exceeds its byte bound\" }),\n );\n const createdAt = DateTime.makeUnsafe(DateTime.toEpochMillis(input.createdAt));\n\n // DateTime fills this cache lazily; populate it before freezing our private copy.\n Object.freeze(DateTime.toPartsUtc(createdAt));\n Object.freeze(createdAt);\n\n const canonical = Object.freeze(\n RecordEnvelope.make(\n {\n ...input,\n createdAt,\n payload: owned.payload,\n },\n { disableChecks: true },\n ),\n );\n\n const encoding = Object.freeze({\n canonical,\n wire,\n json,\n bytes,\n progress: progressRecord(canonical, bytes),\n });\n\n captured.set(canonical, encoding);\n\n return Result.succeed(encoding);\n } catch (cause) {\n return Result.fail(\n RecordEncodingError.make({ message: \"Canonical record capture failed\", cause }),\n );\n }\n};\n\n/** Read evidence retains its original wire; fresh writes use the captured Schema encoding. */\nexport const recordEncoding = (\n record: RecordEnvelope,\n): Result.Result<RecordEncoding, RecordEncodingError> => {\n const existing = captured.get(record);\n\n if (existing !== undefined) return Result.succeed(existing);\n\n try {\n if (!(record instanceof ExportedRecord)) return captureRecord(record);\n const json = canonicalJson(record.wire);\n const bytes = utf8ByteLength(json);\n\n return Result.succeed({\n canonical: record,\n wire: record.wire,\n json,\n bytes,\n progress: progressRecord(record, bytes),\n });\n } catch (cause) {\n return Result.fail(\n RecordEncodingError.make({ message: \"Canonical record encoding failed\", cause }),\n );\n }\n};\n","import type { RecordEnvelope, RecordId } from \"../Records.ts\";\n\n/** Exact references outside one complete canonical batch. */\nexport const transferRecordDependencies = (\n records: ReadonlyArray<RecordEnvelope>,\n): ReadonlyArray<RecordId> => {\n const local = new Set(records.map((record) => record.recordId));\n const dependencies = new Set<RecordId>();\n\n for (const { payload } of records) {\n if (payload._tag === \"WorkerInputRefused\")\n for (const ref of [payload.reservation, payload.stop])\n if (!local.has(ref.recordId)) dependencies.add(ref.recordId);\n if (payload._tag === \"WorkHandoffCompleted\" && !local.has(payload.preparationId))\n dependencies.add(payload.preparationId);\n if (payload._tag === \"RunContextRecorded\")\n for (const ref of payload.retained)\n if (!local.has(ref.recordId)) dependencies.add(ref.recordId);\n if (payload._tag === \"RunContinuation\")\n for (const ref of [\n payload.originalInput,\n payload.savedContext,\n payload.latestResponse,\n payload.terminal,\n payload.lastFact,\n ])\n if (ref !== undefined && !local.has(ref.recordId)) dependencies.add(ref.recordId);\n }\n\n return [...dependencies].sort();\n};\n","import { Context, Effect, Layer, Option, Result, Schema, Stream, Struct } from \"effect\";\n\nimport { ReceiptId, RunId, SubmissionId, ThreadId, ToolCallId } from \"../core/Identifiers.ts\";\nimport { utf8ByteLength } from \"../core/internal/utf8.ts\";\nimport { QueueSequence } from \"../core/Receipt.ts\";\nimport { AssignmentTerminal } from \"../core/Worker.ts\";\nimport type { IntegrityReport } from \"./Admin.ts\";\nimport {\n captureRecord,\n recordEncoding,\n type ProgressAppendRecord,\n} from \"./internal/record-encoding.ts\";\nimport { transferRecordDependencies } from \"./internal/transfer-dependencies.ts\";\nimport type { LifecyclePublicationStorage } from \"./LifecyclePublication.ts\";\nimport { MessageDeliveryRecord } from \"./MessageDelivery.ts\";\nimport { ExportRecord } from \"./RecordFormat.ts\";\nimport {\n type CanonicalBatch,\n type RecordJson,\n BatchId,\n CanonicalRecordEnvelope,\n CanonicalSequence,\n CURRENT_RECORD_FORMAT,\n Digest,\n MAX_RUN_TOOL_CALL_IDENTITIES,\n ObservationOffset,\n PersistedJson,\n type PromptRecordEnvelope,\n ProducerId,\n RecordId,\n RecordEnvelope,\n type RunContinuation,\n} from \"./Records.ts\";\nimport { subagentLineageRecordId, workerOriginRecordId } from \"./RunJournal.ts\";\nimport { ScheduleInstant } from \"./Schedule.ts\";\nimport type { OwnershipLost } from \"./SubmissionLedger.ts\";\nimport {\n AbortIntent,\n AdmissionRequest,\n ApprovalDecisionIntent,\n UnknownResolutionIntent,\n} from \"./SubmissionLedger.ts\";\nimport { MAX_CANONICAL_BATCH_BYTES, type ThreadArchiveStorage } from \"./ThreadArchiveRange.ts\";\nimport type { ThreadWorkStorage } from \"./ThreadWork.ts\";\n\nexport const MAX_THREAD_EXPORT_PAGE_RECORDS = 256;\nexport const MAX_THREAD_EXPORT_PAGE_BYTES = 32 * 1024 * 1024;\nexport const MAX_THREAD_EXPORT_CURSOR_CHARS = 16_384;\n/** Includes a maximally JSON-escaped cursor, snapshot, seal, digests and page structure. */\nconst THREAD_EXPORT_METADATA_BYTES = 128 * 1024;\n\n/** Reserve the manifest identity even when no canonical record or admission exists yet. */\nexport const transferPageFits = (threadId: ThreadId, factBytes = 0): boolean =>\n utf8ByteLength(JSON.stringify(threadId)) + factBytes + THREAD_EXPORT_METADATA_BYTES <=\n MAX_THREAD_EXPORT_PAGE_BYTES;\n\n/** Check a complete retained fact before fresh acceptance; existing replays keep their identity. */\nexport const makeTransferFactCheck = <A, I>(schema: Schema.Codec<A, I>) => {\n const encode = Schema.encodeResult(Schema.fromJsonString(schema));\n\n return (threadId: ThreadId, fact: A): boolean => {\n const encoded = encode(fact);\n\n return Result.isSuccess(encoded) && transferPageFits(threadId, utf8ByteLength(encoded.success));\n };\n};\n\nexport { PROMPT_EVIDENCE_TAGS } from \"./Records.ts\";\n\n/** Counts of closed owner facts, computed only when an idle export begins. */\nexport const ThreadExportSnapshot = Schema.Struct({\n admissions: Schema.Natural,\n aborts: Schema.Natural,\n approvals: Schema.Natural,\n resolutions: Schema.Natural,\n deliveries: Schema.Natural,\n});\n\nexport type ThreadExportSnapshot = typeof ThreadExportSnapshot.Type;\n\n/** Irreversible Thread-local admission restriction, independent of claims and worker completion. */\nexport const ThreadWorkerSeal = Schema.Struct({ terminal: Schema.optionalKey(AssignmentTerminal) });\nexport type ThreadWorkerSeal = typeof ThreadWorkerSeal.Type;\n\n/** Opaque, snapshot-bound transfer position. Only the exporting adapter constructs it. */\nexport const ThreadExportCursor = Schema.NonEmptyString.check(\n Schema.isMaxLength(MAX_THREAD_EXPORT_CURSOR_CHARS),\n);\n\nexport type ThreadExportCursor = typeof ThreadExportCursor.Type;\n\n/** Exact canonical identity; absence is not proof that an admission was never accepted. */\nexport const ThreadRecordRequest = Schema.Struct({ threadId: ThreadId, recordId: RecordId });\nexport type ThreadRecordRequest = typeof ThreadRecordRequest.Type;\n\n/** The original user input for a Run, excluding later joined inputs. */\nexport const ThreadRunInputRequest = Schema.Struct({ threadId: ThreadId, runId: RunId });\nexport type ThreadRunInputRequest = typeof ThreadRunInputRequest.Type;\n\n/** Native accounting for one funding Run; settled Thread history is never included. */\nexport const ThreadWorkerStateRequest = Schema.Struct({\n threadId: ThreadId,\n sourceSubmissionId: Schema.optionalKey(SubmissionId),\n limit: Schema.Int.check(Schema.isGreaterThan(0), Schema.isLessThanOrEqualTo(16_384)),\n});\n\nexport type ThreadWorkerStateRequest = typeof ThreadWorkerStateRequest.Type;\n\n/** Saturating count of outstanding peer intents and terminal deliveries inside their retention window. */\nexport const ThreadPeerCountRequest = Schema.Struct({\n threadId: ThreadId,\n nowMillis: ScheduleInstant,\n limit: Schema.Int.check(Schema.isGreaterThan(0), Schema.isLessThanOrEqualTo(1000)),\n});\n\nexport type ThreadPeerCountRequest = typeof ThreadPeerCountRequest.Type;\n\n/** Capacity is derived from unresolved canonical obligations at this exact tail. */\nexport const ThreadWorkerCapacityRequest = Schema.Struct({\n threadId: ThreadId,\n workerThreadId: ThreadId,\n expectedTailSequence: CanonicalSequence,\n update: Schema.Boolean,\n activeLimit: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0), Schema.isLessThanOrEqualTo(100)),\n pendingLimit: Schema.Int.check(Schema.isGreaterThan(0), Schema.isLessThanOrEqualTo(100)),\n});\n\nexport type ThreadWorkerCapacityRequest = typeof ThreadWorkerCapacityRequest.Type;\n\nexport const ThreadWorkerCapacity = Schema.Struct({\n threadId: ThreadId,\n tailSequence: CanonicalSequence,\n /** min(actual distinct workers, activeLimit + 1); equality remains distinguishable. */\n activeWorkers: Schema.Natural.check(Schema.isLessThanOrEqualTo(101)),\n workerActive: Schema.Boolean,\n /** min(actual inputs in the requested partition, pendingLimit + 1). */\n pendingInputs: Schema.Natural.check(Schema.isLessThanOrEqualTo(101)),\n});\n\nexport type ThreadWorkerCapacity = typeof ThreadWorkerCapacity.Type;\n\n/** Explicit maintenance may traverse all pages while retaining only one bounded page or Run. */\nexport const ThreadVerificationRequest = Schema.Struct({\n threadId: ThreadId,\n requireAllSettled: Schema.optionalKey(Schema.Boolean),\n});\n\nexport type ThreadVerificationRequest = typeof ThreadVerificationRequest.Type;\n\nexport interface ThreadVerificationStorage {\n readonly verify: (\n request: ThreadVerificationRequest,\n ) => Effect.Effect<IntegrityReport, ThreadStoreError | ThreadNotMaterialized>;\n}\n\nconst incomplete = (operation: string) =>\n ThreadStoreError.make({\n operation,\n message: \"Native canonical read is incomplete or corrupt\",\n });\n\n/** Collect a complete bounded selection, using canonical sequence as a sparse cursor. */\nconst selectedRecords = Effect.fnUntraced(function* (\n threadId: ThreadId,\n selection: ThreadSelection,\n limit: number,\n) {\n const store = yield* ThreadReader;\n const records: Array<CanonicalRecordEnvelope> = [];\n let bytes = 0;\n let afterSequence: CanonicalSequence | undefined;\n\n while (true) {\n const pageLimit = Math.min(8, limit + 1 - records.length);\n\n const page = yield* Stream.runCollect(\n store.read({\n threadId,\n selection,\n page: { limit: pageLimit, ...(afterSequence === undefined ? {} : { afterSequence }) },\n }),\n );\n\n for (const entry of page) {\n if (\n entry.threadId !== threadId ||\n entry.sequence <= (afterSequence ?? 0) ||\n (\"expectedTailSequence\" in selection && entry.sequence > selection.expectedTailSequence)\n )\n return yield* incomplete(\"read selection identity\");\n afterSequence = entry.sequence;\n bytes += yield* Effect.fromResult(recordEncoding(entry.record)).pipe(\n Effect.map((record) => record.bytes),\n Effect.mapError(() => incomplete(\"read selection bytes\")),\n );\n if (bytes > MAX_THREAD_EXPORT_PAGE_BYTES)\n return yield* incomplete(\"read selection byte limit\");\n records.push(entry);\n }\n if (page.length > pageLimit || records.length > limit)\n return yield* incomplete(\"read selection limit\");\n if (page.length < pageLimit) return records;\n }\n});\n\n/** Host-owned read: authenticate the Thread and exact locator before calling. */\nexport const getRecord = Effect.fnUntraced(function* (request: ThreadRecordRequest) {\n yield* Schema.decodeEffect(ThreadRecordRequest)(request).pipe(\n Effect.mapError(() => incomplete(\"getRecord request\")),\n );\n\n const records = yield* selectedRecords(\n request.threadId,\n { _tag: \"RecordId\", recordId: request.recordId },\n 1,\n );\n\n if (records.some((entry) => entry.record.recordId !== request.recordId))\n return yield* incomplete(\"getRecord identity\");\n\n return Option.fromUndefinedOr(records[0]);\n});\n\nexport const getRunInput = Effect.fnUntraced(function* (request: ThreadRunInputRequest) {\n yield* Schema.decodeEffect(ThreadRunInputRequest)(request).pipe(\n Effect.mapError(() => incomplete(\"getRunInput request\")),\n );\n\n const records = yield* selectedRecords(\n request.threadId,\n { _tag: \"RunInput\", runId: request.runId },\n 1,\n );\n\n if (\n records.some(\n ({ record: { payload } }) =>\n payload._tag !== \"UserInputRecorded\" ||\n payload.kind !== \"user\" ||\n payload.runId !== request.runId,\n )\n )\n return yield* incomplete(\"getRunInput identity\");\n\n return Option.fromUndefinedOr(records[0]);\n});\n\n/** A bounded snapshot of source identity and the selected funding Run's accounting. */\nexport const readWorkerState = Effect.fnUntraced(function* (request: ThreadWorkerStateRequest) {\n yield* Schema.decodeEffect(ThreadWorkerStateRequest)(request).pipe(\n Effect.mapError(() => incomplete(\"readWorkerState request\")),\n );\n const store = yield* ThreadReader;\n const tail = yield* store.inspectTail(ThreadTailRequest.make({ threadId: request.threadId }));\n\n const records = yield* selectedRecords(\n request.threadId,\n {\n _tag: \"WorkerState\",\n expectedTailSequence: tail.tailSequence,\n ...(request.sourceSubmissionId === undefined\n ? {}\n : { sourceSubmissionId: request.sourceSubmissionId }),\n },\n request.limit,\n );\n\n return {\n threadId: request.threadId,\n tailSequence: tail.tailSequence,\n records,\n };\n});\n\nexport class ThreadMaterialization extends Schema.Class<ThreadMaterialization>(\n \"@effect-agent/thread/ThreadMaterialization\",\n)({\n threadId: ThreadId,\n}) {}\n\nconst isExecutionProgressRecord = (\n record: RecordEnvelope,\n): record is RecordEnvelope & { readonly payload: RunContinuation } =>\n record.payload._tag === \"RunContinuation\";\n\nconst ExecutionProgressRecord = RecordEnvelope.pipe(\n Schema.refine(isExecutionProgressRecord, { message: \"Expected a Run continuation record\" }),\n);\n\n/** Current interpreter state. Wire version 2 retains one copy of its continuation. */\nexport class ExecutionCheckpoint extends Schema.Class<ExecutionCheckpoint>(\n \"@effect-agent/thread/ExecutionCheckpoint\",\n)({\n version: Schema.Literal(2),\n /** Logical progress encoding is charged while active; previous revisions are discarded. */\n progressRecord: ExecutionProgressRecord,\n /** Original start, evaluated context and validated completion intent while the Run is active. */\n operational: Schema.Array(RecordEnvelope).check(Schema.isMaxLength(8)),\n canonicalRecords: Schema.Natural,\n /** Stable admitted-input position also supplies a bounded transfer cursor. */\n originalSequence: CanonicalSequence.check(Schema.isGreaterThan(0)),\n throughSequence: CanonicalSequence,\n batchId: BatchId,\n}) {\n /** View of the retained payload, not a second encoded field. */\n get progress(): RunContinuation {\n return this.progressRecord.payload;\n }\n}\n\n/** A revision-checked transition committed by the same owner as the retained history facts. */\nexport class ExecutionUpdate extends Schema.Class<ExecutionUpdate>(\n \"@effect-agent/thread/ExecutionUpdate\",\n)({\n previousRevision: Schema.Natural,\n checkpoint: ExecutionCheckpoint,\n /** Newly durable operational facts; capture and validate these before entering the writer. */\n facts: Schema.Array(RecordEnvelope).check(Schema.isMaxLength(8)),\n /** Delete current Run state in the same transaction as its authorized terminal publication. */\n retire: Schema.Boolean,\n}) {}\n\n/** A progress-only commit has no canonical records and does not advance the history tail. */\nexport class CommitBatch extends Schema.Class<CommitBatch>(\"@effect-agent/thread/CommitBatch\")({\n batchId: BatchId,\n producerId: ProducerId,\n records: Schema.Array(RecordEnvelope).check(Schema.isMaxLength(256)),\n}) {}\n\nexport class ExecutionRead extends Schema.Class<ExecutionRead>(\n \"@effect-agent/thread/ExecutionRead\",\n)({\n threadId: ThreadId,\n runId: RunId,\n}) {}\n\nexport class AppendRequest extends Schema.Class<AppendRequest>(\n \"@effect-agent/thread/AppendRequest\",\n)({\n threadId: ThreadId,\n batch: CommitBatch,\n executions: Schema.optionalKey(Schema.Array(ExecutionUpdate).check(Schema.isMaxLength(256))),\n expectedTailSequence: CanonicalSequence,\n}) {}\n\nconst RecordCount = Schema.Array(Schema.Unknown).check(Schema.isMaxLength(256));\nconst ExecutionRecordCount = Schema.Array(Schema.Unknown).check(Schema.isMaxLength(8));\n\nconst AppendHeader = Schema.Struct({\n threadId: ThreadId,\n expectedTailSequence: CanonicalSequence,\n batchId: BatchId,\n producerId: ProducerId,\n records: RecordCount,\n executions: RecordCount,\n});\n\nconst validateHeader = Schema.decodeUnknownSync(AppendHeader);\n\nconst validateExecutionHeader = Schema.decodeUnknownSync(\n Schema.Struct({\n previousRevision: ExecutionUpdate.fields.previousRevision,\n retire: ExecutionUpdate.fields.retire,\n checkpoint: Schema.Struct({\n version: ExecutionCheckpoint.fields.version,\n canonicalRecords: ExecutionCheckpoint.fields.canonicalRecords,\n originalSequence: ExecutionCheckpoint.fields.originalSequence,\n throughSequence: ExecutionCheckpoint.fields.throughSequence,\n batchId: ExecutionCheckpoint.fields.batchId,\n operational: ExecutionRecordCount,\n }),\n facts: ExecutionRecordCount,\n }),\n);\n\n/** Capture records once; wrapper fields retain their owning Schema's constraints. */\nconst captureExecution = (input: ExecutionUpdate) => {\n const checkpointInput = input.checkpoint;\n const operationalInput = checkpointInput.operational;\n const factsInput = input.facts;\n\n const header = validateExecutionHeader({\n previousRevision: input.previousRevision,\n retire: input.retire,\n checkpoint: {\n version: checkpointInput.version,\n canonicalRecords: checkpointInput.canonicalRecords,\n originalSequence: checkpointInput.originalSequence,\n throughSequence: checkpointInput.throughSequence,\n batchId: checkpointInput.batchId,\n operational: operationalInput,\n },\n facts: factsInput,\n });\n\n const operationalLength = header.checkpoint.operational.length;\n const factsLength = header.facts.length;\n\n const progress = captureRecord(checkpointInput.progressRecord);\n\n if (Result.isFailure(progress)) return Result.fail(progress.failure);\n const progressRecord = progress.success.canonical;\n\n if (!isExecutionProgressRecord(progressRecord))\n return Result.fail(\n ThreadStoreError.make({\n operation: \"prepare durable commit\",\n message: \"Expected a Run continuation record\",\n }),\n );\n\n // Use the Schema-validated indexed lengths, never a caller's iterator. Sparse slots\n // still visit the record boundary, where undefined is refused.\n const operational = [];\n\n for (let index = 0; index < operationalLength; index++) {\n const record = captureRecord(operationalInput[index]!);\n\n if (Result.isFailure(record)) return Result.fail(record.failure);\n operational.push(record.success);\n }\n const facts = [];\n\n for (let index = 0; index < factsLength; index++) {\n const record = captureRecord(factsInput[index]!);\n\n if (Result.isFailure(record)) return Result.fail(record.failure);\n facts.push(record.success);\n }\n\n const checkpoint = Object.freeze(\n ExecutionCheckpoint.make(\n {\n ...header.checkpoint,\n progressRecord,\n operational: Object.freeze(operational.map(({ canonical }) => canonical)),\n },\n { disableChecks: true },\n ),\n );\n\n const update = Object.freeze(\n ExecutionUpdate.make(\n {\n previousRevision: header.previousRevision,\n retire: header.retire,\n checkpoint,\n facts: Object.freeze(facts.map(({ canonical }) => canonical)),\n },\n { disableChecks: true },\n ),\n );\n\n const checkpointJson = `{\"version\":${checkpoint.version},\"progressRecord\":${progress.success.json},\"operational\":[${operational.map(({ json }) => json).join(\",\")}],\"canonicalRecords\":${checkpoint.canonicalRecords},\"originalSequence\":${checkpoint.originalSequence},\"throughSequence\":${checkpoint.throughSequence},\"batchId\":${JSON.stringify(checkpoint.batchId)}}`;\n const json = `{\"previousRevision\":${update.previousRevision},\"checkpoint\":${checkpointJson},\"facts\":[${facts.map(({ json }) => json).join(\",\")}],\"retire\":${update.retire}}`;\n\n return Result.succeed(\n Object.freeze({\n update,\n json,\n checkpointJson,\n factsJson: JSON.stringify(facts.map(({ wire }) => wire)),\n bytes: utf8ByteLength(json),\n }),\n );\n};\n\nconst capturedAppends = new WeakMap<AppendRequest, CapturedAppend>();\n\n/**\n * Admission reserves one complete batch's envelope, references, snapshot and continuation cursor.\n * Adapters supply their native offset byte bound. Dependency literals already occur in record\n * wire, so ordinary batches need only arithmetic; near the page limit, charge the exact references.\n */\nexport const canonicalBatchFitsTransfer = (\n threadId: ThreadId,\n batch: Pick<CommitBatch, \"batchId\" | \"records\">,\n batchBytes: number,\n maxOffsetBytes: number,\n): boolean => {\n const threadJson = JSON.stringify(threadId);\n const threadBytes = utf8ByteLength(threadJson);\n const batchIdBytes = utf8ByteLength(JSON.stringify(batch.batchId));\n\n // 128 bytes per envelope covers keys, sequence and punctuation. 128 KiB reserves the\n // maximum JSON-escaped cursor plus bounded snapshot, seal, digest and page metadata.\n const overhead =\n batch.records.length * (batchIdBytes + threadBytes + maxOffsetBytes + 128) +\n threadBytes +\n THREAD_EXPORT_METADATA_BYTES;\n\n if (2 * batchBytes + overhead + 2 <= MAX_THREAD_EXPORT_PAGE_BYTES) return true;\n\n const dependencyBytes = utf8ByteLength(JSON.stringify(transferRecordDependencies(batch.records)));\n\n return batchBytes + overhead + dependencyBytes <= MAX_THREAD_EXPORT_PAGE_BYTES;\n};\n\n/**\n * Adapter-owned append captured before writer acquisition can suspend. Record JSON\n * is shared by the batch and record rows. Privately owned facts and wire metadata\n * keep payloads, identities and validation stable across suspension; adapters persist the\n * captured strings rather than reconstructing bytes from caller-owned values.\n * Transport decoding intentionally returns an ordinary AppendRequest for fresh capture.\n */\nexport interface PreparedAppend extends AppendRequest {\n readonly batchJson: string;\n readonly batchBytes: number;\n readonly progress: ReadonlyArray<ProgressAppendRecord>;\n readonly executionWrites: ReadonlyArray<{\n readonly update: ExecutionUpdate;\n readonly json: string;\n /** Checkpoint wire from the same detached, validated execution capture. */\n readonly checkpointJson: string;\n /** Schema-encoded fact array from this same capture, for the stable retry digest. */\n readonly factsJson: string;\n readonly bytes: number;\n }>;\n readonly records: ReadonlyArray<{\n readonly recordId: RecordId;\n readonly recordJson: string;\n readonly recordBytes: number;\n readonly wire: RecordJson;\n readonly canonical: CanonicalBatch[\"records\"][number];\n }>;\n}\n\ninterface CapturedAppend extends PreparedAppend {\n readonly records: ReadonlyArray<\n Omit<PreparedAppend[\"records\"][number], \"wire\"> & {\n readonly wire: typeof RecordEnvelope.Encoded;\n }\n >;\n}\n\nexport const PreparedAppend = {\n capture: (input: AppendRequest): Effect.Effect<CapturedAppend, ThreadStoreError> =>\n Effect.suspend(() => {\n const existing = capturedAppends.get(input);\n\n if (existing !== undefined) return Effect.succeed(existing);\n\n return Effect.try({\n try: () =>\n Result.gen(function* () {\n const executions = input.executions ?? [];\n const recordInputs = input.batch.records;\n\n const header = validateHeader({\n ...input,\n batchId: input.batch.batchId,\n producerId: input.batch.producerId,\n records: recordInputs,\n executions,\n });\n\n const recordLength = header.records.length;\n const executionLength = header.executions.length;\n\n const executionWrites: Array<PreparedAppend[\"executionWrites\"][number]> = [];\n\n for (let index = 0; index < executionLength; index++)\n executionWrites.push(yield* captureExecution(executions[index]!));\n Object.freeze(executionWrites);\n\n if (recordLength === 0 && executionWrites.length === 0)\n return yield* Result.fail(\n ThreadStoreError.make({\n operation: \"prepare durable commit\",\n message: \"A commit must contain history facts or an active execution transition\",\n }),\n );\n if (executionWrites.some(({ bytes }) => !transferPageFits(header.threadId, bytes)))\n return yield* Result.fail(\n ThreadStoreError.make({\n operation: \"prepare durable commit\",\n message: \"Active state exceeds its bounded transfer representation\",\n }),\n );\n // Visit Schema-validated indexed slots, including sparse ones, never a caller's iterator.\n const encodings = [];\n\n for (let index = 0; index < recordLength; index++)\n encodings.push(yield* captureRecord(recordInputs[index]!));\n const prefix = `{\"batchId\":${JSON.stringify(header.batchId)},\"producerId\":${JSON.stringify(header.producerId)},\"records\":[`;\n const batchJson = `${prefix}${encodings.map(({ json }) => json).join(\",\")}]}`;\n\n const batchBytes = encodings.reduce(\n (total, record) => total + record.bytes,\n utf8ByteLength(prefix) + (encodings.length === 0 ? 2 : encodings.length + 1),\n );\n\n if (batchBytes > MAX_CANONICAL_BATCH_BYTES)\n return yield* Result.fail(\n ThreadStoreError.make({\n operation: \"prepare canonical append\",\n message: `Canonical batch exceeds ${MAX_CANONICAL_BATCH_BYTES} bytes`,\n }),\n );\n\n const batch = Object.freeze(\n CommitBatch.make(\n {\n batchId: header.batchId,\n producerId: header.producerId,\n records: Object.freeze(encodings.map(({ canonical }) => canonical)),\n },\n { disableChecks: true },\n ),\n );\n\n const request = AppendRequest.make(\n {\n threadId: header.threadId,\n expectedTailSequence: header.expectedTailSequence,\n batch,\n ...(executionWrites.length === 0\n ? {}\n : { executions: Object.freeze(executionWrites.map(({ update }) => update)) }),\n },\n { disableChecks: true },\n );\n\n const records = Object.freeze(\n encodings.map(({ canonical, json, wire, bytes }) =>\n Object.freeze({\n recordId: canonical.recordId,\n recordJson: json,\n recordBytes: bytes,\n wire,\n canonical,\n }),\n ),\n );\n\n const progress = Object.freeze(encodings.map(({ progress }) => progress));\n\n const captured = Object.freeze(\n Object.assign(request, {\n batchJson,\n batchBytes,\n records,\n progress,\n executionWrites,\n }),\n );\n\n capturedAppends.set(captured, captured);\n\n return captured;\n }),\n catch: (cause) =>\n Schema.is(ThreadStoreError)(cause)\n ? cause\n : ThreadStoreError.make({\n operation: \"prepare canonical append\",\n message: Schema.isSchemaError(cause)\n ? cause.message\n : \"Canonical append capture failed\",\n cause,\n }),\n }).pipe(\n Effect.flatMap(Effect.fromResult),\n Effect.mapError((cause) =>\n Schema.is(ThreadStoreError)(cause)\n ? cause\n : ThreadStoreError.make({\n operation: \"prepare canonical append\",\n message: cause.message,\n cause,\n }),\n ),\n );\n }),\n};\n\nexport class AppendResult extends Schema.Class<AppendResult>(\"@effect-agent/thread/AppendResult\")({\n firstSequence: CanonicalSequence,\n lastSequence: CanonicalSequence,\n replayed: Schema.Boolean,\n}) {}\n\nexport class ThreadRead extends Schema.Class<ThreadRead>(\"@effect-agent/thread/ThreadRead\")({\n threadId: ThreadId,\n afterSequence: Schema.optionalKey(CanonicalSequence),\n limit: Schema.Natural.check(Schema.isGreaterThan(0), Schema.isLessThanOrEqualTo(1_024)),\n}) {}\n\n/** Sparse ordered history page at a fixed tail; no record-count limit on the whole range. */\nexport const ThreadPromptRead = Schema.Struct({\n ...ThreadRead.fields,\n throughSequence: CanonicalSequence,\n});\n\nexport type ThreadPromptRead = typeof ThreadPromptRead.Type;\n\n/** Closed native selections; mutable metadata is read at this exact canonical tail. */\nexport const ThreadSelection = Schema.Union([\n Schema.Struct({ _tag: Schema.Literal(\"RecordId\"), recordId: RecordId }),\n Schema.Struct({ _tag: Schema.Literal(\"RunInput\"), runId: RunId }),\n /** Exact original declaration indexed by its deterministic settlement identity. */\n Schema.Struct({\n _tag: Schema.Literal(\"ToolDeclaration\"),\n settlementRecordId: RecordId,\n throughSequence: CanonicalSequence,\n }),\n /** Only the selected Run's facts; unrelated Thread traffic cannot enlarge its suffix. */\n Schema.Struct({\n _tag: Schema.Literal(\"RunEvidence\"),\n runId: RunId,\n submissionId: SubmissionId,\n throughSequence: CanonicalSequence,\n }),\n /** Exact declaration, this call's facts, and shared approval proof from its original batch. */\n Schema.Struct({\n _tag: Schema.Literal(\"OperationEvidence\"),\n runId: RunId,\n toolCallId: ToolCallId,\n originRecordId: RecordId,\n approvalToolCallIds: Schema.Array(ToolCallId).check(\n Schema.isMinLength(1),\n Schema.isMaxLength(MAX_RUN_TOOL_CALL_IDENTITIES),\n Schema.makeFilter((ids) => new Set(ids).size === ids.length),\n ),\n throughSequence: CanonicalSequence,\n }).check(\n Schema.makeFilter((selection) => selection.approvalToolCallIds.includes(selection.toolCallId)),\n ),\n Schema.Struct({\n _tag: Schema.Literal(\"LastAgentUpdate\"),\n throughSequence: CanonicalSequence,\n }),\n /** Sparse canonical pages; callers bound total evidence before building model metadata. */\n Schema.Struct({\n _tag: Schema.Literal(\"PromptEvidence\"),\n throughSequence: CanonicalSequence,\n }),\n Schema.Struct({\n _tag: Schema.Literal(\"LatestModelCompleted\"),\n throughSequence: CanonicalSequence,\n }),\n /** Latest application input; framework worker completion/update messages are excluded. */\n Schema.Struct({\n _tag: Schema.Literal(\"LatestApplicationInput\"),\n throughSequence: CanonicalSequence,\n }),\n /** Presence of durable ownership forbids an immediate-history writer on this Thread. */\n Schema.Struct({\n _tag: Schema.Literal(\"DurableHistoryOwner\"),\n throughSequence: CanonicalSequence,\n }),\n /** Latest rollover covering positions strictly before the addressed evidence. */\n Schema.Struct({\n _tag: Schema.Literal(\"ContextWindowBoundary\"),\n atSequence: CanonicalSequence,\n throughSequence: CanonicalSequence,\n }),\n Schema.Struct({\n _tag: Schema.Literal(\"DeliveryPredecessor\"),\n throughSequence: CanonicalSequence,\n }),\n /** Canonical creation/handoff intents retained independently of Run settlement. */\n Schema.Struct({\n _tag: Schema.Literal(\"WorkHandoffs\"),\n throughSequence: CanonicalSequence,\n }),\n /** Unresolved inputs only, selected through disposable work membership. */\n Schema.Struct({\n _tag: Schema.Literal(\"LiveWorkerInputs\"),\n throughSequence: CanonicalSequence,\n workerThreadId: Schema.optionalKey(ThreadId),\n }),\n /** A retained stop for the exact worker, independent of historical inputs. */\n Schema.Struct({\n _tag: Schema.Literal(\"WorkerStop\"),\n workerThreadId: ThreadId,\n throughSequence: CanonicalSequence,\n }),\n Schema.Struct({\n _tag: Schema.Literal(\"WorkerExecution\"),\n expectedTailSequence: CanonicalSequence,\n }),\n Schema.Struct({\n _tag: Schema.Literal(\"WorkerState\"),\n expectedTailSequence: CanonicalSequence,\n sourceSubmissionId: Schema.optionalKey(SubmissionId),\n }),\n]);\n\nexport type ThreadSelection = typeof ThreadSelection.Type;\n\n/** Nested page makes an old ThreadRead decoder reject, never strip a selection into history. */\nexport const SelectedThreadRead = Schema.Struct({\n threadId: ThreadId,\n selection: ThreadSelection,\n page: Schema.Struct({\n afterSequence: Schema.optionalKey(CanonicalSequence),\n limit: ThreadRead.fields.limit,\n }),\n});\n\nexport type SelectedThreadRead = typeof SelectedThreadRead.Type;\nexport const ThreadReadRequest = Schema.Union([SelectedThreadRead, ThreadRead]);\nexport type ThreadReadRequest = typeof ThreadReadRequest.Type;\n\nexport class ThreadObservation extends Schema.Class<ThreadObservation>(\n \"@effect-agent/thread/ThreadObservation\",\n)({\n threadId: ThreadId,\n afterOffset: Schema.optionalKey(ObservationOffset),\n}) {}\n\nexport class ThreadExportRequest extends Schema.Class<ThreadExportRequest>(\n \"@effect-agent/thread/ThreadExportRequest\",\n)({\n threadId: ThreadId,\n cursor: Schema.optionalKey(ThreadExportCursor),\n}) {}\n\nexport class ThreadTailRequest extends Schema.Class<ThreadTailRequest>(\n \"@effect-agent/thread/ThreadTailRequest\",\n)({\n threadId: ThreadId,\n}) {}\n\n/**\n * The committed tail of one Thread Log. A resuming producer composes its next\n * AppendRequest from this value instead of exporting the whole log.\n */\nexport class ThreadTail extends Schema.Class<ThreadTail>(\"@effect-agent/thread/ThreadTail\")({\n threadId: ThreadId,\n tailSequence: CanonicalSequence,\n}) {}\n\nexport class ThreadIdentityRequest extends Schema.Class<ThreadIdentityRequest>(\n \"@effect-agent/thread/ThreadIdentityRequest\",\n)({ threadId: ThreadId }) {}\n\n/**\n * One consistent snapshot: Thread ID, canonical tail, admission presence, first record,\n * exact worker origin, then exact subagent lineage. A row selected twice appears only\n * once. Missing identity records remain absent; the snapshot grants no execution authority.\n */\nexport class ThreadIdentity extends Schema.Class<ThreadIdentity>(\n \"@effect-agent/thread/ThreadIdentity\",\n)(\n Schema.Struct({\n ...ThreadTail.fields,\n /** Whether any admission is retained, including settled inputs and inputs not yet canonical. */\n hasAdmissions: Schema.Boolean,\n records: Schema.Array(CanonicalRecordEnvelope).check(Schema.isMaxLength(3)),\n }).check(\n Schema.makeFilter((snapshot) => {\n if (snapshot.tailSequence === 0) return snapshot.records.length === 0;\n if (snapshot.records[0]?.sequence !== 1) return false;\n const origin = workerOriginRecordId(snapshot.threadId);\n const lineage = subagentLineageRecordId(snapshot.threadId);\n const ids = new Set<RecordId>();\n const sequences = new Set<CanonicalSequence>();\n let previous = -1;\n\n for (const entry of snapshot.records) {\n const rank =\n entry.sequence === 1\n ? 0\n : entry.record.recordId === origin\n ? 1\n : entry.record.recordId === lineage\n ? 2\n : -1;\n\n if (\n entry.threadId !== snapshot.threadId ||\n entry.sequence < 1 ||\n entry.sequence > snapshot.tailSequence ||\n rank <= previous ||\n ids.has(entry.record.recordId) ||\n sequences.has(entry.sequence)\n )\n return false;\n ids.add(entry.record.recordId);\n sequences.add(entry.sequence);\n previous = rank;\n }\n\n return true;\n }),\n ),\n) {}\n\n/** Immutable accepted input, distinct from all regenerable ledger execution state. */\nexport class ThreadAdmission extends Schema.Class<ThreadAdmission>(\n \"@effect-agent/thread/ThreadAdmission\",\n)({\n ...AdmissionRequest.fields,\n submissionId: SubmissionId,\n receiptId: ReceiptId,\n queueSequence: QueueSequence,\n createdAt: Schema.DateTimeUtcFromString,\n /** Stable closed Receipt timestamp; required for idle transfer, absent on active verification facts. */\n settledAt: Schema.optionalKey(Schema.DateTimeUtcFromString),\n}) {}\n\n/** Accepted operator commands are facts; their application markers are deliberately omitted. */\nexport const ThreadAbortFact = AbortIntent.mapFields(Struct.omit([\"canonicalRecordId\"]));\n\nexport const ThreadApprovalFact = ApprovalDecisionIntent.mapFields(\n Struct.omit([\"canonicalRecordId\"]),\n);\n\nexport const ThreadResolutionFact = UnknownResolutionIntent.mapFields(\n Struct.omit([\"canonicalRecordId\"]),\n);\n\nexport const ThreadCommands = Schema.Struct({\n aborts: Schema.Array(ThreadAbortFact).check(Schema.isMaxLength(MAX_THREAD_EXPORT_PAGE_RECORDS)),\n approvals: Schema.Array(ThreadApprovalFact).check(\n Schema.isMaxLength(MAX_THREAD_EXPORT_PAGE_RECORDS),\n ),\n resolutions: Schema.Array(ThreadResolutionFact).check(\n Schema.isMaxLength(MAX_THREAD_EXPORT_PAGE_RECORDS),\n ),\n});\n\nexport const ThreadExportBatch = Schema.Struct({ batchId: BatchId, producerId: ProducerId });\n\n/** The wire is part of the export type: ordinary read envelopes are not lossless archives. */\nexport class ThreadExportRecord extends CanonicalRecordEnvelope.extend<ThreadExportRecord>(\n \"@effect-agent/thread/ThreadExportRecord\",\n)({\n record: ExportRecord,\n}) {}\n\n/** One bounded, batch-aligned page. An absent cursor alone marks a complete transfer. */\nexport class ThreadExport extends Schema.Class<ThreadExport>(\"@effect-agent/thread/ThreadExport\")({\n transferFormat: Schema.Literal(\"effect-agent/thread-transfer@4\"),\n format: Schema.NonEmptyString,\n threadId: ThreadId,\n tailSequence: CanonicalSequence,\n snapshot: ThreadExportSnapshot,\n /** Presence seals the restored inbox; a terminal reason also requires exact settled worker evidence. */\n workerSeal: Schema.optionalKey(ThreadWorkerSeal),\n /** Inclusive first canonical position, even on a page containing only other owner facts. */\n fromSequence: CanonicalSequence.check(Schema.isGreaterThan(0)),\n records: Schema.Array(ThreadExportRecord).check(\n Schema.isMaxLength(MAX_THREAD_EXPORT_PAGE_RECORDS),\n ),\n batches: Schema.Array(ThreadExportBatch).check(\n Schema.isMaxLength(MAX_THREAD_EXPORT_PAGE_RECORDS),\n ),\n admissions: Schema.Array(ThreadAdmission).check(\n Schema.isMaxLength(MAX_THREAD_EXPORT_PAGE_RECORDS),\n ),\n commands: ThreadCommands,\n /** Frozen delivery facts and outcomes; claims and leases are never transfer authority. */\n deliveries: Schema.Array(MessageDeliveryRecord).check(\n Schema.isMaxLength(MAX_THREAD_EXPORT_PAGE_RECORDS),\n ),\n cursor: Schema.optionalKey(ThreadExportCursor),\n /** Exact reference-bearing records identify cross-range recovery dependencies. */\n dependencies: Schema.Array(RecordId).check(Schema.isMaxLength(256 * 4_096)),\n}) {}\n\n/** Idle export authority. Applications quiesce external producers for the complete export. */\nexport class ThreadExportSource extends Context.Service<\n ThreadExportSource,\n Pick<ThreadStore[\"Service\"], \"export\">\n>()(\"@effect-agent/thread/ThreadExportSource\") {\n static layer() {\n return Layer.effect(\n ThreadExportSource,\n Effect.map(ThreadStore, (store) => ThreadExportSource.of({ export: store.export })),\n );\n }\n}\n\n/** Pull bounded idle pages. The caller keeps this Thread quiescent until the stream ends. */\nexport const streamExport = (request: ThreadExportRequest) =>\n Stream.unwrap(\n Effect.gen(function* () {\n const source = yield* ThreadExportSource;\n let previous: ThreadExport | undefined;\n\n return Stream.paginate(request, (current) =>\n source.export(current).pipe(\n Effect.flatMap((page) => {\n if (\n page.threadId !== request.threadId ||\n (previous !== undefined &&\n (!Schema.toEquivalence(ThreadExportSnapshot)(page.snapshot, previous.snapshot) ||\n !Schema.toEquivalence(Schema.UndefinedOr(ThreadWorkerSeal))(\n page.workerSeal,\n previous.workerSeal,\n ) ||\n page.tailSequence !== previous.tailSequence ||\n page.fromSequence !==\n (previous.records.at(-1)?.sequence ?? previous.fromSequence - 1) + 1 ||\n (page.cursor !== undefined && page.cursor === current.cursor)))\n )\n return Effect.fail(\n ThreadStoreError.make({\n operation: \"stream Thread export\",\n message: \"Transfer snapshot or cursor is inconsistent\",\n }),\n );\n previous = page;\n\n return Effect.succeed([\n [page],\n page.cursor === undefined\n ? Option.none()\n : Option.some(\n ThreadExportRequest.make({ threadId: request.threadId, cursor: page.cursor }),\n ),\n ] as const);\n }),\n ),\n );\n }),\n );\n\n/**\n * A disposable projection snapshot. Adapters bind its sequence to a complete batch in the canonical\n * log; consumers decode `state` and decide projection compatibility before suffix replay.\n * Run recovery uses authoritative active checkpoints independently of these application snapshots.\n */\nexport class ThreadCheckpoint extends Schema.Class<ThreadCheckpoint>(\n \"@effect-agent/thread/ThreadCheckpoint\",\n)({\n schemaVersion: Schema.Literal(1),\n threadId: ThreadId,\n throughSequence: CanonicalSequence,\n state: PersistedJson,\n createdAt: Schema.DateTimeUtcFromString,\n}) {}\n\nexport class SaveCheckpointRequest extends Schema.Class<SaveCheckpointRequest>(\n \"@effect-agent/thread/SaveCheckpointRequest\",\n)({\n checkpoint: ThreadCheckpoint,\n}) {}\n\nexport class LoadCheckpointRequest extends Schema.Class<LoadCheckpointRequest>(\n \"@effect-agent/thread/LoadCheckpointRequest\",\n)({\n threadId: ThreadId,\n atOrBeforeSequence: Schema.optionalKey(CanonicalSequence),\n}) {}\n\n/** A bounded, disposable prior Prompt, checked against its captured historyDigest. */\nexport const MAX_PROMPT_CHECKPOINT_BYTES = 16 * 1024 * 1024;\n\n/** Maximum ordinary Runs between full prompt replacements and in a cold catch-up suffix. */\nexport const MAX_PROMPT_CHECKPOINT_RUNS = 16;\n\nexport const PromptCheckpointHead = Schema.Struct({\n version: Schema.Literal(2),\n recordFormat: Schema.Literal(CURRENT_RECORD_FORMAT),\n threadId: ThreadId,\n runId: RunId,\n throughSequence: CanonicalSequence,\n historyThrough: CanonicalSequence,\n priorHistoryLength: Schema.Int.check(Schema.isBetween({ minimum: 0, maximum: 16_384 })),\n historyDigest: Digest,\n});\n\nexport const PromptCheckpoint = Schema.Struct({\n ...PromptCheckpointHead.fields,\n /** Canonical JSON from Effect's Prompt codec; integrity is checked before decoding it. */\n promptJson: Schema.String.check(Schema.isMaxLength(MAX_PROMPT_CHECKPOINT_BYTES)),\n});\n\nexport type PromptCheckpoint = typeof PromptCheckpoint.Type;\n\nexport const PromptCheckpointRead = Schema.Struct({\n threadId: ThreadId,\n throughSequence: CanonicalSequence,\n});\n\nexport type PromptCheckpointRead = typeof PromptCheckpointRead.Type;\n\n/**\n * Optional cold-context acceleration, separate from application checkpoints. Save only after\n * canonical settlement. Replace the prior value atomically at the exact supplied sequence.\n * One process owns the Thread; import only targets empty Threads and atomically deletes these\n * derivatives. The runtime validates the content digest and a bounded suffix of completed Runs.\n * Any incompatible head, content digest or suffix is a cache miss.\n * Never export these bytes or use them as execution/compaction evidence.\n */\nexport interface PromptCheckpoints {\n readonly save: (checkpoint: PromptCheckpoint) => Effect.Effect<void, ThreadStoreError>;\n readonly load: (\n request: PromptCheckpointRead,\n ) => Effect.Effect<Option.Option<PromptCheckpoint>, ThreadStoreError>;\n}\n\n/**\n * Content-free storage provenance constructed by adapters from source-authored labels.\n * Raw foreign lookalikes are not trusted diagnostics. Never include rejected values, SQL,\n * or schema messages.\n */\nexport class ThreadStoreDiagnostic extends Schema.Class<ThreadStoreDiagnostic>(\n \"@effect-agent/thread/ThreadStoreDiagnostic\",\n)({\n causeTag: Schema.String.check(Schema.isMaxLength(128)),\n operation: Schema.String.check(Schema.isMaxLength(256)),\n decoder: Schema.optionalKey(Schema.String.check(Schema.isMaxLength(128))),\n issueTag: Schema.optionalKey(Schema.String.check(Schema.isMaxLength(128))),\n sequence: Schema.optionalKey(CanonicalSequence),\n}) {}\n\nexport class ThreadStoreError extends Schema.TaggedError<ThreadStoreError>()(\"ThreadStoreError\", {\n operation: Schema.String,\n message: Schema.String,\n cause: Schema.optionalKey(Schema.Defect()),\n diagnostic: Schema.optionalKey(ThreadStoreDiagnostic),\n}) {}\n\nexport class ThreadNotMaterialized extends Schema.TaggedError<ThreadNotMaterialized>()(\n \"ThreadNotMaterialized\",\n { threadId: ThreadId },\n) {}\n\n/** Export is Thread-local: external schedules, subscriptions and ingress are application-owned. */\nexport class ThreadExportRejected extends Schema.TaggedError<ThreadExportRejected>()(\n \"ThreadExportRejected\",\n {\n threadId: ThreadId,\n reason: Schema.Literals([\"non-idle\", \"source-changed\", \"live-import-source\"]),\n },\n) {\n override get message(): string {\n switch (this.reason) {\n case \"non-idle\":\n return `Thread ${this.threadId} is not idle; close its active owner and finish pending work before export.`;\n case \"source-changed\":\n return `Thread ${this.threadId} changed during export; keep the source quiescent and restart from the first page.`;\n case \"live-import-source\":\n return `Import requires a detached archive; finish exporting Thread ${this.threadId} before opening the destination transaction.`;\n }\n }\n}\n\n/**\n * A canonical append that cannot commit: `batch-content` replays a batch ID with different\n * content, `record-identity` reuses a canonical record ID, and `tail` declares a stale expected\n * tail. `stale-command` rejects a superseded operational request and must not be reprepared.\n * Tail conflicts carry the actual committed tail as a diagnostic resume hint.\n */\nexport class AppendConflict extends Schema.TaggedError<AppendConflict>()(\"AppendConflict\", {\n threadId: ThreadId,\n batchId: BatchId,\n reason: Schema.Literals([\"batch-content\", \"record-identity\", \"tail\", \"stale-command\"]),\n actualTailSequence: Schema.optionalKey(CanonicalSequence),\n}) {}\n\nexport class CheckpointRejected extends Schema.TaggedError<CheckpointRejected>()(\n \"CheckpointRejected\",\n {\n threadId: ThreadId,\n reason: Schema.Literals([\n \"ahead-of-tail\",\n \"not-batch-boundary\",\n \"unsupported-version\",\n \"corrupt\",\n ]),\n },\n) {}\n\nexport type ThreadStoreFailure =\n | ThreadStoreError\n | ThreadNotMaterialized\n | AppendConflict\n | OwnershipLost;\n\n/**\n * Optional, disposable projection storage. Neither history execution nor durable recovery\n * requires it. Adapters that offer it must bind every checkpoint to a canonical batch tail.\n * Application consumers own projection compatibility; this port does not interpret metadata.\n */\nexport interface ThreadCheckpoints {\n readonly save: (\n request: SaveCheckpointRequest,\n ) => Effect.Effect<void, ThreadStoreError | ThreadNotMaterialized | CheckpointRejected>;\n readonly load: (\n request: LoadCheckpointRequest,\n ) => Effect.Effect<\n Option.Option<ThreadCheckpoint>,\n ThreadStoreError | ThreadNotMaterialized | CheckpointRejected\n >;\n}\n\nexport class ThreadStore extends Context.Service<\n ThreadStore,\n {\n readonly lifecyclePublications?: LifecyclePublicationStorage;\n /** Native owner inventory and explicit canonical-index reconstruction. Absence fails closed. */\n readonly work?: ThreadWorkStorage;\n /** Bounded physical log ranges, independent of compaction and execution ownership. */\n readonly archives?: ThreadArchiveStorage;\n readonly verification?: ThreadVerificationStorage;\n readonly materialize: (request: ThreadMaterialization) => Effect.Effect<void, ThreadStoreError>;\n /**\n * Commit history and current execution atomically under the storage owner's mutation gate.\n * Only the latest active operational intent replays. Historical batches compare exact\n * canonical content; their prior operational intent is no longer retained.\n */\n readonly append: (\n request: AppendRequest,\n ) => Effect.Effect<\n AppendResult,\n ThreadStoreError | ThreadNotMaterialized | AppendConflict | OwnershipLost\n >;\n /** Authoritative current state only. Absence after settlement is normal; loss while active is corruption. */\n readonly readExecution: (\n request: ExecutionRead,\n ) => Effect.Effect<\n Option.Option<ExecutionCheckpoint>,\n ThreadStoreError | ThreadNotMaterialized\n >;\n /** Return immutable values decoded from privately owned canonical JSON. Unknown/Json\n * subgraphs must not retain caller/provider objects, accessors or oversized backing views.\n * Schema validation without canonical capture does not establish this ownership. */\n readonly read: (\n request: ThreadReadRequest,\n ) => Stream.Stream<CanonicalRecordEnvelope, ThreadStoreError | ThreadNotMaterialized>;\n /** Decode only PromptRecord fields of PROMPT_EVIDENCE_TAGS, including archived ranges.\n * Bound raw hydration without shortening a page before its limit or captured range end.\n * Preserve read's canonical ownership contract, including nested Unknown/Json values.\n * The immutable source was validated on write; use read for integrity or execution evidence. */\n readonly readPrompt: (\n request: ThreadPromptRead,\n ) => Stream.Stream<PromptRecordEnvelope, ThreadStoreError | ThreadNotMaterialized>;\n readonly observe: (\n request: ThreadObservation,\n ) => Stream.Stream<CanonicalRecordEnvelope, ThreadStoreError | ThreadNotMaterialized>;\n readonly export: (\n request: ThreadExportRequest,\n ) => Effect.Effect<\n ThreadExport,\n ThreadStoreError | ThreadNotMaterialized | ThreadExportRejected\n >;\n readonly inspectTail: (\n request: ThreadTailRequest,\n ) => Effect.Effect<ThreadTail, ThreadStoreError | ThreadNotMaterialized>;\n readonly readIdentity: (\n request: ThreadIdentityRequest,\n ) => Effect.Effect<ThreadIdentity, ThreadStoreError | ThreadNotMaterialized>;\n readonly readWorkerCapacity?: (\n request: ThreadWorkerCapacityRequest,\n ) => Effect.Effect<ThreadWorkerCapacity, ThreadStoreError | ThreadNotMaterialized>;\n /** Absent when this adapter does not support disposable checkpoints. */\n readonly checkpoints?: ThreadCheckpoints | undefined;\n readonly promptCheckpoints?: PromptCheckpoints | undefined;\n /** Indexed scalar count; unsupported adapters fail closed at the caller. */\n readonly countPeerMessages?:\n | ((\n request: ThreadPeerCountRequest,\n ) => Effect.Effect<number, ThreadStoreError | ThreadNotMaterialized>)\n | undefined;\n }\n>()(\"@effect-agent/thread/ThreadStore\") {}\n\n/** Canonical observation without append, materialization, or checkpoint mutation authority. */\nexport class ThreadReader extends Context.Service<\n ThreadReader,\n Pick<\n ThreadStore[\"Service\"],\n | \"read\"\n | \"readExecution\"\n | \"readPrompt\"\n | \"observe\"\n | \"export\"\n | \"inspectTail\"\n | \"readIdentity\"\n | \"countPeerMessages\"\n | \"readWorkerCapacity\"\n >\n>()(\"@effect-agent/thread/ThreadReader\") {\n static fromStore(store: ThreadStore[\"Service\"]): ThreadReader[\"Service\"] {\n return {\n read: store.read,\n readExecution: store.readExecution,\n readPrompt: store.readPrompt,\n observe: store.observe,\n export: store.export,\n inspectTail: store.inspectTail,\n readIdentity: store.readIdentity,\n ...(store.readWorkerCapacity === undefined\n ? {}\n : { readWorkerCapacity: store.readWorkerCapacity }),\n ...(store.countPeerMessages === undefined\n ? {}\n : { countPeerMessages: store.countPeerMessages }),\n };\n }\n\n /** Capture this assembly's store, independently of other local or routed stores. */\n static layer() {\n return Layer.effect(ThreadReader, Effect.map(ThreadStore, ThreadReader.fromStore));\n }\n}\n"],"mappings":"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"}