@yielded/agent 0.1.0-beta.174 → 0.1.0-beta.175

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/dist/{Admin-BHmp2V9p.d.mts → Admin-Qa3I1oA5.d.mts} +38 -7
  2. package/dist/{AgentRuntime-BD3ZHAMq.d.mts → AgentRuntime-CHDyRbSf.d.mts} +3 -3
  3. package/dist/{AgentRuntime-B6qZlD3f.mjs → AgentRuntime-DaDKMasp.mjs} +123 -114
  4. package/dist/AgentRuntime-DaDKMasp.mjs.map +1 -0
  5. package/dist/{Digest-EpeqWEdv.mjs → Digest-C3EODOee.mjs} +2 -2
  6. package/dist/{Digest-EpeqWEdv.mjs.map → Digest-C3EODOee.mjs.map} +1 -1
  7. package/dist/{DurableAgentRuntime-CBBjRNJN.mjs → DurableAgentRuntime-CPlw5_7e.mjs} +161 -85
  8. package/dist/DurableAgentRuntime-CPlw5_7e.mjs.map +1 -0
  9. package/dist/{EventSource-C9aaJaXT.d.mts → EventSource-BTu68yDW.d.mts} +2 -2
  10. package/dist/InMemory.d.mts +2 -2
  11. package/dist/{MessageDelivery-BGDm-c46.d.mts → MessageDelivery-DjAZJ4Fd.d.mts} +4 -4
  12. package/dist/{MessagingHost-CRUK4JBi.mjs → MessagingHost-CZCyrnvJ.mjs} +27 -26
  13. package/dist/MessagingHost-CZCyrnvJ.mjs.map +1 -0
  14. package/dist/{PreparedInputAdmission-BvDqlgiP.d.mts → PreparedInputAdmission-wgY4JMZY.d.mts} +3 -3
  15. package/dist/{Records-BiuJDWNe.mjs → Records-DzL4Kbtw.mjs} +2 -2
  16. package/dist/{Records-BiuJDWNe.mjs.map → Records-DzL4Kbtw.mjs.map} +1 -1
  17. package/dist/{RunContinuation-CTJ1jGrO.d.mts → RunContinuation-3jB5pULC.d.mts} +10 -4
  18. package/dist/{RunContinuation-4ZATcVLB.mjs → RunContinuation-BiyKJK32.mjs} +74 -40
  19. package/dist/RunContinuation-BiyKJK32.mjs.map +1 -0
  20. package/dist/{RunJournal-CNZqA3Ge.mjs → RunJournal-CPMKcfd0.mjs} +84 -79
  21. package/dist/RunJournal-CPMKcfd0.mjs.map +1 -0
  22. package/dist/{RunStorage-BHjuuERI.mjs → RunStorage-CzutHJBE.mjs} +3 -2
  23. package/dist/RunStorage-CzutHJBE.mjs.map +1 -0
  24. package/dist/{Scheduling-NG8slKdI.mjs → Scheduling-07_dsGED.mjs} +3 -3
  25. package/dist/{Scheduling-NG8slKdI.mjs.map → Scheduling-07_dsGED.mjs.map} +1 -1
  26. package/dist/{Subagent-CTIpnzlB.mjs → Subagent-CexndZSp.mjs} +2 -2
  27. package/dist/{Subagent-CTIpnzlB.mjs.map → Subagent-CexndZSp.mjs.map} +1 -1
  28. package/dist/{Subagent-DKhZA72u.d.mts → Subagent-xhN_aD1r.d.mts} +3 -3
  29. package/dist/{Subscription-BNg9VCRl.d.mts → Subscription-DmIHlOJK.d.mts} +2 -2
  30. package/dist/{SubscriptionInput-BUoXv-_K.d.mts → SubscriptionInput-DgcQhvbe.d.mts} +2 -2
  31. package/dist/{Thread-dk-QiNml.d.mts → Thread-DzdJAY4J.d.mts} +4 -3
  32. package/dist/{ThreadHistory-ByxS8HU1.d.mts → ThreadHistory-KPPBJLJb.d.mts} +12 -2
  33. package/dist/{ThreadImport-CodYoJoa.mjs → ThreadImport-CjlG57vH.mjs} +8 -8
  34. package/dist/{ThreadImport-CodYoJoa.mjs.map → ThreadImport-CjlG57vH.mjs.map} +1 -1
  35. package/dist/{ThreadImport-CMgzttvr.d.mts → ThreadImport-DP-vOk2F.d.mts} +4 -4
  36. package/dist/{ThreadStore-59uDGXul.mjs → ThreadStore-EuUilthA.mjs} +5 -7
  37. package/dist/ThreadStore-EuUilthA.mjs.map +1 -0
  38. package/dist/{ThreadTransfer-3jigUl3g.mjs → ThreadTransfer-DB_zsrtJ.mjs} +4 -4
  39. package/dist/{ThreadTransfer-3jigUl3g.mjs.map → ThreadTransfer-DB_zsrtJ.mjs.map} +1 -1
  40. package/dist/{WorkerAdmission-DDYJdOsU.mjs → WorkerAdmission-eBeXt_mu.mjs} +5 -5
  41. package/dist/{WorkerAdmission-DDYJdOsU.mjs.map → WorkerAdmission-eBeXt_mu.mjs.map} +1 -1
  42. package/dist/{agent-registration-DRbyhAu-.mjs → agent-registration-a6QYaG3h.mjs} +4 -4
  43. package/dist/{agent-registration-DRbyhAu-.mjs.map → agent-registration-a6QYaG3h.mjs.map} +1 -1
  44. package/dist/capabilities/Messaging.mjs +1 -1
  45. package/dist/capabilities/ModelContext.d.mts +1 -1
  46. package/dist/capabilities/RunHooks.d.mts +1 -1
  47. package/dist/capabilities/Subagent.d.mts +1 -1
  48. package/dist/capabilities/Subagent.mjs +1 -1
  49. package/dist/core/Thread.d.mts +2 -2
  50. package/dist/core/Thread.mjs +5 -3
  51. package/dist/core/Thread.mjs.map +1 -1
  52. package/dist/durable/ActivityStore.mjs +1 -1
  53. package/dist/durable/Admin.d.mts +1 -1
  54. package/dist/durable/Admin.mjs +1 -1
  55. package/dist/durable/AgentRegistration.d.mts +1 -1
  56. package/dist/durable/AgentRegistration.mjs +1 -1
  57. package/dist/durable/Certification.d.mts +1 -1
  58. package/dist/durable/CommittedActivity.d.mts +1 -1
  59. package/dist/durable/CommittedActivity.mjs +3 -3
  60. package/dist/durable/Digest.mjs +1 -1
  61. package/dist/durable/DurableAgentRuntime.d.mts +1 -1
  62. package/dist/durable/DurableAgentRuntime.mjs +2 -2
  63. package/dist/durable/EventSource.d.mts +1 -1
  64. package/dist/durable/EventSource.mjs +1 -1
  65. package/dist/durable/GitHubWorkflowSource.d.mts +3 -3
  66. package/dist/durable/LifecyclePublication.d.mts +1 -1
  67. package/dist/durable/LifecyclePublication.mjs +2 -2
  68. package/dist/durable/MessageDelivery.d.mts +1 -1
  69. package/dist/durable/MessageDelivery.mjs +2 -2
  70. package/dist/durable/MessageDeliveryStoreConformance.d.mts +40 -40
  71. package/dist/durable/MessageDeliveryStoreConformance.mjs +2 -2
  72. package/dist/durable/PersistentHistory.d.mts +2 -2
  73. package/dist/durable/PersistentHistory.mjs +4 -4
  74. package/dist/durable/PreparedInputAdmission.d.mts +1 -1
  75. package/dist/durable/RecordFormat.mjs +1 -1
  76. package/dist/durable/Records.mjs +1 -1
  77. package/dist/durable/Recovery.d.mts +1 -1
  78. package/dist/durable/Recovery.mjs +1 -1
  79. package/dist/durable/RunContinuation.d.mts +2 -2
  80. package/dist/durable/RunContinuation.mjs +3 -3
  81. package/dist/durable/RunJournal.d.mts +2 -2
  82. package/dist/durable/RunJournal.mjs +2 -2
  83. package/dist/durable/RunStorage.d.mts +1 -1
  84. package/dist/durable/RunStorage.mjs +1 -1
  85. package/dist/durable/Schedule.mjs +1 -1
  86. package/dist/durable/ScheduleStoreConformance.mjs +1 -1
  87. package/dist/durable/ScheduleTransition.mjs +1 -1
  88. package/dist/durable/Scheduling.d.mts +1 -1
  89. package/dist/durable/Scheduling.mjs +1 -1
  90. package/dist/durable/SettlementPublisher.d.mts +1 -1
  91. package/dist/durable/SettlementPublisher.mjs +3 -3
  92. package/dist/durable/SqlMemoryStore.mjs +5 -3
  93. package/dist/durable/SqlMemoryStore.mjs.map +1 -1
  94. package/dist/durable/SubmissionLedger.d.mts +1 -1
  95. package/dist/durable/SubmissionLedger.mjs +7 -3
  96. package/dist/durable/SubmissionLedger.mjs.map +1 -1
  97. package/dist/durable/SubmissionLedgerConformance.d.mts +1 -1
  98. package/dist/durable/SubmissionLedgerConformance.mjs +6 -6
  99. package/dist/durable/SubmissionStatus.d.mts +1 -1
  100. package/dist/durable/Subscription.d.mts +1 -1
  101. package/dist/durable/Subscription.mjs +2 -2
  102. package/dist/durable/SubscriptionInput.d.mts +1 -1
  103. package/dist/durable/SubscriptionInput.mjs +2 -2
  104. package/dist/durable/SubscriptionStoreConformance.d.mts +1 -1
  105. package/dist/durable/SubscriptionStoreConformance.mjs +1 -1
  106. package/dist/durable/SubscriptionTools.d.mts +2 -2
  107. package/dist/durable/SubscriptionTransition.d.mts +1 -1
  108. package/dist/durable/SubscriptionTransition.mjs +1 -1
  109. package/dist/durable/Subscriptions.d.mts +5 -5
  110. package/dist/durable/Subscriptions.mjs +2 -2
  111. package/dist/durable/ThreadArchiveRange.d.mts +1 -1
  112. package/dist/durable/ThreadArchiveRange.mjs +1 -1
  113. package/dist/durable/ThreadContextHistory.d.mts +1 -1
  114. package/dist/durable/ThreadContextHistory.mjs +2 -2
  115. package/dist/durable/ThreadContextHistoryProjection.mjs +1 -1
  116. package/dist/durable/ThreadImport.d.mts +1 -1
  117. package/dist/durable/ThreadImport.mjs +1 -1
  118. package/dist/durable/ThreadInvariants.d.mts +3 -3
  119. package/dist/durable/ThreadInvariants.mjs +4 -4
  120. package/dist/durable/ThreadProjection.mjs +1 -1
  121. package/dist/durable/ThreadProjectionMaintenance.d.mts +1 -1
  122. package/dist/durable/ThreadReader.d.mts +1 -1
  123. package/dist/durable/ThreadReader.mjs +1 -1
  124. package/dist/durable/ThreadStore.d.mts +1 -1
  125. package/dist/durable/ThreadStore.mjs +2 -2
  126. package/dist/durable/ThreadStoreConformance.d.mts +1 -1
  127. package/dist/durable/ThreadStoreConformance.mjs +4 -4
  128. package/dist/durable/ThreadTransfer.d.mts +1 -1
  129. package/dist/durable/ThreadTransfer.mjs +1 -1
  130. package/dist/durable/ThreadWork.d.mts +2 -2
  131. package/dist/durable/ThreadWork.mjs +12 -6
  132. package/dist/durable/ThreadWork.mjs.map +1 -1
  133. package/dist/durable/ToolReconciler.mjs +1 -1
  134. package/dist/durable/WakeScheduler.mjs +23 -39
  135. package/dist/durable/WakeScheduler.mjs.map +1 -1
  136. package/dist/durable/WorkerAdmission.d.mts +1 -1
  137. package/dist/durable/WorkerAdmission.mjs +1 -1
  138. package/dist/durable/WorkerHost.d.mts +1 -1
  139. package/dist/engine/AgentRuntime.d.mts +1 -1
  140. package/dist/engine/AgentRuntime.mjs +1 -1
  141. package/dist/engine/MessagingHost.mjs +1 -1
  142. package/dist/engine/Output.mjs +1 -1
  143. package/dist/engine/ThreadHistory.d.mts +1 -1
  144. package/dist/engine/ThreadHistory.mjs +3 -2
  145. package/dist/engine/ThreadHistory.mjs.map +1 -1
  146. package/dist/index.d.mts +12 -12
  147. package/dist/index.mjs +13 -13
  148. package/dist/{output-contract-CMIhu4Cw.mjs → output-contract-DCnLYCdp.mjs} +12 -15
  149. package/dist/{output-contract-CMIhu4Cw.mjs.map → output-contract-DCnLYCdp.mjs.map} +1 -1
  150. package/dist/{run-context-reader-CC7ZD95F.d.mts → run-context-reader-DVhJZ1Qe.d.mts} +2 -2
  151. package/package.json +1 -1
  152. package/src/core/Thread.ts +143 -146
  153. package/src/durable/DurableAgentRuntime.ts +381 -206
  154. package/src/durable/RunContinuation.ts +113 -62
  155. package/src/durable/RunJournal.ts +99 -108
  156. package/src/durable/RunStorage.ts +7 -0
  157. package/src/durable/SqlMemoryStore.ts +8 -6
  158. package/src/durable/SubmissionLedger.ts +7 -0
  159. package/src/durable/ThreadStore.ts +9 -7
  160. package/src/durable/ThreadWork.ts +10 -0
  161. package/src/durable/WakeScheduler.ts +34 -66
  162. package/src/durable/internal/usage-totals.ts +28 -31
  163. package/src/engine/MessagingHost.ts +4 -2
  164. package/src/engine/ThreadHistory.ts +47 -48
  165. package/src/engine/internal/agent-runtime.ts +234 -202
  166. package/src/engine/internal/output-contract.ts +15 -15
  167. package/src/engine/internal/primitive-delta.ts +2 -3
  168. package/src/engine/internal/tool-telemetry.ts +3 -5
  169. package/dist/AgentRuntime-B6qZlD3f.mjs.map +0 -1
  170. package/dist/DurableAgentRuntime-CBBjRNJN.mjs.map +0 -1
  171. package/dist/MessagingHost-CRUK4JBi.mjs.map +0 -1
  172. package/dist/RunContinuation-4ZATcVLB.mjs.map +0 -1
  173. package/dist/RunJournal-CNZqA3Ge.mjs.map +0 -1
  174. package/dist/RunStorage-BHjuuERI.mjs.map +0 -1
  175. package/dist/ThreadStore-59uDGXul.mjs.map +0 -1
@@ -2,11 +2,11 @@ import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
2
2
  import { ToolCallId } from "./core/Identifiers.mjs";
3
3
  import { n as utf8ByteLength } from "./utf8-B5pAmhTo.mjs";
4
4
  import { AgentPersistenceCapacityError } from "./core/AgentError.mjs";
5
- import { G as PromptRecord, J as RUN_TERMINAL_RESERVE_BYTES, O as MAX_RUN_CONTINUATION_BYTES, V as PROMPT_EVIDENCE_TAGS, X as RecordEnvelope, Z as RecordId, c as CanonicalBatch, f as CanonicalSequence, it as RunContinuation, rt as RunContextRecorded, w as MAX_PERSISTED_JSON_BYTES, x as EvidenceReference } from "./Records-BiuJDWNe.mjs";
6
- import { i as digestCanonicalJson, r as canonicalJson } from "./Digest-EpeqWEdv.mjs";
5
+ import { G as PromptRecord, J as RUN_TERMINAL_RESERVE_BYTES, O as MAX_RUN_CONTINUATION_BYTES, V as PROMPT_EVIDENCE_TAGS, X as RecordEnvelope, Z as RecordId, c as CanonicalBatch, f as CanonicalSequence, it as RunContinuation, rt as RunContextRecorded, w as MAX_PERSISTED_JSON_BYTES, x as EvidenceReference } from "./Records-DzL4Kbtw.mjs";
6
+ import { i as digestCanonicalJson, r as canonicalJson } from "./Digest-C3EODOee.mjs";
7
7
  import { submissionAbortRecordId, submissionInputRecordId, submissionSettlementBatchId, submissionSettlementRecordId } from "./durable/SubmissionLedger.mjs";
8
- import { $ as toolCallSettledRecordId, I as toolCallResultBatchId, Z as continuationUsage, g as projectRunJournalStream, j as subagentStartedRecordId, k as subagentRequestedRecordId, t as RunJournalError, v as runCompletedRecordId, x as runIdForSubmission } from "./RunJournal-CNZqA3Ge.mjs";
9
- import { U as ThreadReader, X as ThreadStoreError, _t as isPreContinuationFact, a as CommitBatch, bt as terminalUsageCharge, c as ExecutionUpdate, gt as executionRunIds, ht as canonicalRunIds, mt as recordEncoding, o as ExecutionCheckpoint, ot as getRecord, pt as captureRecord, st as getRunInput, vt as isTerminalBudgetFact, yt as isWorkHandoff } from "./ThreadStore-59uDGXul.mjs";
8
+ import { A as subagentRequestedRecordId, L as toolCallResultBatchId, M as subagentStartedRecordId, Q as continuationUsage, S as runIdForSubmission, _ as projectRunJournalStream, et as toolCallSettledRecordId, t as RunJournalError, y as runCompletedRecordId } from "./RunJournal-CPMKcfd0.mjs";
9
+ import { U as ThreadReader, X as ThreadStoreError, _t as isPreContinuationFact, a as CommitBatch, bt as terminalUsageCharge, c as ExecutionUpdate, gt as executionRunIds, ht as canonicalRunIds, mt as recordEncoding, o as ExecutionCheckpoint, ot as getRecord, pt as captureRecord, st as getRunInput, vt as isTerminalBudgetFact, yt as isWorkHandoff } from "./ThreadStore-EuUilthA.mjs";
10
10
  import { Context, DateTime, Effect, Layer, Option, Result, Schema, Semaphore, Stream } from "effect";
11
11
  import { Prompt } from "effect/ai";
12
12
  //#region src/durable/internal/evidence.ts
@@ -197,11 +197,11 @@ const isFrozenJsonData = (input) => {
197
197
  }
198
198
  return true;
199
199
  };
200
- const validateBatchHeader = Schema.decodeSync(Schema.Struct({
200
+ const validateBatchShape = Schema.decodeUnknownSync(Schema.Struct({
201
201
  batchId: CanonicalBatch.fields.batchId,
202
- producerId: CanonicalBatch.fields.producerId
202
+ producerId: CanonicalBatch.fields.producerId,
203
+ records: Schema.NonEmptyArray(Schema.Unknown).check(Schema.isMaxLength(256))
203
204
  }));
204
- const validateBatchCount = Schema.decodeUnknownSync(Schema.NonEmptyArray(Schema.Unknown).check(Schema.isMaxLength(256)));
205
205
  const ContinuationBytes = Schema.Struct({
206
206
  turnBytes: RunContinuation.fields.turnBytes,
207
207
  terminalBytes: RunContinuation.fields.terminalBytes
@@ -213,11 +213,16 @@ const decodeExecutionFrontier = Schema.decodeUnknownEffect(Schema.Struct({
213
213
  /** One private snapshot for every retry; callers cannot change facts while awaiting the gate. */
214
214
  const captureFacts = (batch) => Effect.try({
215
215
  try: () => Result.gen(function* () {
216
- const header = validateBatchHeader(batch);
217
- validateBatchCount(batch.records);
218
- const records = (yield* Result.all(batch.records.map(captureRecord))).map((record) => record.canonical);
216
+ const inputs = batch.records;
217
+ const { batchId, producerId } = validateBatchShape({
218
+ batchId: batch.batchId,
219
+ producerId: batch.producerId,
220
+ records: inputs
221
+ });
222
+ const records = (yield* Result.all(inputs.map(captureRecord))).map((record) => record.canonical);
219
223
  return Object.freeze(CanonicalBatch.make({
220
- ...header,
224
+ batchId,
225
+ producerId,
221
226
  records: [records[0], ...records.slice(1)]
222
227
  }, { disableChecks: true }));
223
228
  }),
@@ -235,7 +240,6 @@ const prepareProgressAppend = (records) => {
235
240
  if (Result.isFailure(encodings)) throw encodings.failure.cause ?? new RangeError(encodings.failure.message);
236
241
  return Object.freeze(encodings.success.map((record) => record.progress));
237
242
  };
238
- const factUsageCharge = (facts) => Effect.fromResult(Result.all(facts.map(recordEncoding))).pipe(Effect.map((encodings) => encodings.reduce((bytes, record) => bytes + record.progress.terminalUsageBytes, 0)), Effect.mapError((cause) => failure("Cannot account canonical progress facts", cause)));
239
243
  /** These values belong to the active Run, not its permanent conversation history. */
240
244
  const isOperationalRecord = ({ payload }) => payload._tag === "RunStarted" || payload._tag === "RunContextRecorded" || payload._tag === "RunCompleted";
241
245
  const readContinuation = Effect.fnUntraced(function* (threadId, runId, throughSequence) {
@@ -450,15 +454,30 @@ const advanceFacts = Effect.fnUntraced(function* (previous, facts, submissionId,
450
454
  let results = new Map(previous?.results);
451
455
  let childResults = new Map(previous?.childResults);
452
456
  let completionBytes = previous?.completionBytes;
457
+ let factBytes = 0;
458
+ let turn = previous?.continuation.turn ?? 1;
459
+ let usageCharge = 0;
460
+ let closingBytes = 0;
461
+ let closingCount = 0;
453
462
  for (const fact of facts) {
454
463
  const payload = fact.payload;
464
+ const captured = recordEncoding(fact);
465
+ if (Result.isFailure(captured)) return yield* failure("Cannot account canonical progress facts", captured.failure);
466
+ const encoded = captured.success;
467
+ factBytes += encoded.bytes;
468
+ if ("turn" in payload) turn = Math.max(turn, payload.turn);
469
+ usageCharge += encoded.progress.terminalUsageBytes;
470
+ if (encoded.progress.terminal) {
471
+ closingBytes += encoded.bytes;
472
+ closingCount++;
473
+ }
455
474
  switch (payload._tag) {
456
475
  case "RunStarted":
457
476
  position = "awaiting-model";
458
477
  break;
459
478
  case "RunContextRecorded":
460
479
  if (savedContext !== void 0) return yield* failure("A Run's original context cannot be replaced");
461
- savedContext = yield* reference(fact);
480
+ savedContext = EvidenceReference.make({ recordId: fact.recordId });
462
481
  position = "awaiting-model";
463
482
  break;
464
483
  case "ModelResponseRecorded": {
@@ -483,7 +502,7 @@ const advanceFacts = Effect.fnUntraced(function* (previous, facts, submissionId,
483
502
  accounting.lastInputTokens = summary?.inputTokens ?? payload.inputTokens ?? 0;
484
503
  accounting.lastOutputTokens = summary?.outputTokens ?? payload.outputTokens ?? 0;
485
504
  accounting.unobservedModelCalls += payload.unobservedModelCalls ?? 0;
486
- latestResponse = yield* reference(fact);
505
+ latestResponse = EvidenceReference.make({ recordId: fact.recordId });
487
506
  response = payload;
488
507
  results = /* @__PURE__ */ new Map();
489
508
  childResults = /* @__PURE__ */ new Map();
@@ -544,12 +563,12 @@ const advanceFacts = Effect.fnUntraced(function* (previous, facts, submissionId,
544
563
  case "RunCompleted":
545
564
  case "RunFailed":
546
565
  completionBytes = payload._tag === "RunCompleted" ? utf8ByteLength(JSON.stringify(payload.output)) + (payload.runDisposition === void 0 ? 0 : utf8ByteLength(JSON.stringify(payload.runDisposition))) : void 0;
547
- terminal = yield* reference(fact);
566
+ terminal = EvidenceReference.make({ recordId: fact.recordId });
548
567
  position = "settling";
549
568
  break;
550
569
  case "SubmissionSettled":
551
570
  if (payload.submissionId !== submissionId) break;
552
- terminal = yield* reference(fact);
571
+ terminal = EvidenceReference.make({ recordId: fact.recordId });
553
572
  position = "settled";
554
573
  if (payload.usageSummary !== void 0) {
555
574
  accounting.modelCalls = payload.usageSummary.modelCalls;
@@ -576,12 +595,8 @@ const advanceFacts = Effect.fnUntraced(function* (previous, facts, submissionId,
576
595
  if (last === void 0) return yield* failure("Progress has no owning fact");
577
596
  if (previous?.continuation.position === "settled") position = "settled";
578
597
  else if (previous?.continuation.position === "settling" && position !== "settled") position = "settling";
579
- const factBytes = facts.reduce((bytes, fact) => bytes + canonicalRecordBytes(fact), 0);
580
- const turn = facts.reduce((current, fact) => "turn" in fact.payload ? Math.max(current, fact.payload.turn) : current, previous?.continuation.turn ?? 1);
581
598
  const turnBase = (previous?.continuation.turn === turn ? previous.continuation.turnBytes : initialBytes) + factBytes;
582
- const usageCharge = yield* factUsageCharge(facts);
583
599
  const terminalUsageBytes = (previous?.continuation.terminalUsageBytes ?? 0) + usageCharge;
584
- const closing = facts.filter(isTerminalBudgetFact);
585
600
  return {
586
601
  accounting,
587
602
  savedContext,
@@ -598,9 +613,9 @@ const advanceFacts = Effect.fnUntraced(function* (previous, facts, submissionId,
598
613
  turnBase,
599
614
  usageCharge,
600
615
  terminalUsageBytes,
601
- terminalBytes: (previous?.continuation.terminalBytes ?? 0) + closing.reduce((bytes, fact) => bytes + canonicalRecordBytes(fact), 0),
602
- terminalRecords: (previous?.continuation.terminalRecords ?? 0) + closing.length,
603
- closing: closing.length > 0
616
+ terminalBytes: (previous?.continuation.terminalBytes ?? 0) + closingBytes,
617
+ terminalRecords: (previous?.continuation.terminalRecords ?? 0) + closingCount,
618
+ closing: closingCount > 0
604
619
  };
605
620
  });
606
621
  /**
@@ -642,6 +657,7 @@ const makeProgressWriter = Effect.fnUntraced(function* (threadId, deploymentId)
642
657
  const reader = yield* ThreadReader;
643
658
  const gate = yield* Semaphore.make(1);
644
659
  const cached = /* @__PURE__ */ new Map();
660
+ let verifiedEmpty;
645
661
  const reservations = /* @__PURE__ */ new Map();
646
662
  const stagedUsage = /* @__PURE__ */ new Map();
647
663
  const provide = (effect) => Effect.provideService(effect, ThreadReader, reader);
@@ -702,10 +718,6 @@ const makeProgressWriter = Effect.fnUntraced(function* (threadId, deploymentId)
702
718
  ...completionBytes === void 0 ? {} : { completionBytes }
703
719
  };
704
720
  });
705
- const loadState = (runId, after) => Effect.suspend(() => {
706
- const retained = cached.get(runId);
707
- return retained === void 0 ? loadUncachedState(runId, after) : Effect.succeed(retained);
708
- });
709
721
  const checkFutureShapes = (state, cursorBytes) => {
710
722
  const progress = state.continuation;
711
723
  if (progress.position === "settled") return Effect.void;
@@ -743,7 +755,7 @@ const makeProgressWriter = Effect.fnUntraced(function* (threadId, deploymentId)
743
755
  };
744
756
  const prepare = Effect.fnUntraced(function* (batch, after, mode = "commit") {
745
757
  if (batch.records.some((record) => record.payload._tag === "RunContinuation")) return yield* failure("A caller cannot supply interpreter progress to the progress writer");
746
- const ownedRecords = yield* Effect.fromResult(Result.all(batch.records.map(captureRecord))).pipe(Effect.map((encodings) => encodings.map((record) => record.canonical)), Effect.mapError((cause) => failure("Cannot capture canonical progress facts", cause)));
758
+ const ownedRecords = [...batch.records];
747
759
  const groups = /* @__PURE__ */ new Map();
748
760
  for (const record of ownedRecords) for (const runId of executionRunIds(record)) {
749
761
  const facts = groups.get(runId) ?? [];
@@ -754,7 +766,8 @@ const makeProgressWriter = Effect.fnUntraced(function* (threadId, deploymentId)
754
766
  const accepted = /* @__PURE__ */ new Map();
755
767
  let executionCount = 0;
756
768
  for (const [runId, facts] of groups) {
757
- const previous = yield* loadState(runId, after);
769
+ const empty = verifiedEmpty?.runId === runId && verifiedEmpty.through === after && verifiedEmpty.writer === Option.getOrUndefined(yield* Effect.serviceOption(CurrentRunWriter));
770
+ const previous = empty ? void 0 : cached.get(runId) ?? (yield* loadUncachedState(runId, after));
758
771
  let original = facts.find((record) => record.payload._tag === "UserInputRecorded" && record.payload.kind === "user" && record.payload.runId === runId && record.payload.submissionId !== void 0);
759
772
  let originalCount = 0;
760
773
  let initialBytes = 0;
@@ -772,7 +785,7 @@ const makeProgressWriter = Effect.fnUntraced(function* (threadId, deploymentId)
772
785
  if (submissionId === void 0) return yield* failure("Run progress has no original admission identity");
773
786
  if (runId !== runIdForSubmission(submissionId)) return yield* failure("Run progress conflicts with its original admission");
774
787
  if (previous === void 0 && original === void 0) return yield* failure("Run has no accepted original input");
775
- if (previous === void 0) {
788
+ if (previous === void 0 && !empty) {
776
789
  const settled = yield* provide(getRecord({
777
790
  threadId,
778
791
  recordId: submissionSettlementRecordId(submissionId)
@@ -798,7 +811,7 @@ const makeProgressWriter = Effect.fnUntraced(function* (threadId, deploymentId)
798
811
  facts[index] = retained;
799
812
  ownedRecords[ownedRecords.indexOf(fact)] = retained;
800
813
  }
801
- const originalInput = previous !== void 0 ? previous.continuation.originalInput : original === void 0 ? yield* failure("Run progress has no original input") : yield* reference(original);
814
+ const originalInput = previous !== void 0 ? previous.continuation.originalInput : original === void 0 ? yield* failure("Run progress has no original input") : EvidenceReference.make({ recordId: original.recordId });
802
815
  const next = yield* advanceFacts(previous, facts, submissionId, initialBytes);
803
816
  const { accounting, savedContext, latestResponse, terminal, position, response, results, childResults, completionBytes, last, factBytes, turn, turnBase, usageCharge, terminalUsageBytes } = next;
804
817
  let continuation = yield* RunContinuation.makeEffect({
@@ -817,7 +830,7 @@ const makeProgressWriter = Effect.fnUntraced(function* (threadId, deploymentId)
817
830
  ...savedContext === void 0 ? {} : { savedContext },
818
831
  ...latestResponse === void 0 ? {} : { latestResponse },
819
832
  ...terminal === void 0 ? {} : { terminal },
820
- lastFact: yield* reference(last),
833
+ lastFact: EvidenceReference.make({ recordId: last.recordId }),
821
834
  position,
822
835
  accounting
823
836
  }).pipe(Effect.mapError(() => capacityFailure("Canonical continuation exceeds its protocol bounds")));
@@ -982,7 +995,7 @@ const makeProgressWriter = Effect.fnUntraced(function* (threadId, deploymentId)
982
995
  const after = yield* tail;
983
996
  yield* prepare(yield* captureFacts(probe), after);
984
997
  const recordId = probe.records[0].recordId;
985
- const state = yield* loadState(runId, after);
998
+ const state = cached.get(runId) ?? (yield* loadUncachedState(runId, after));
986
999
  if (state === void 0) return yield* failure("Dispatch has no canonical Run progress");
987
1000
  if (reservations.has(recordId)) return yield* failure("Dispatch capacity is already reserved");
988
1001
  yield* checkCapacity(state, /* @__PURE__ */ new Set(), {
@@ -1006,7 +1019,7 @@ const makeProgressWriter = Effect.fnUntraced(function* (threadId, deploymentId)
1006
1019
  yield* prepare(owned, after, "preflight");
1007
1020
  const response = owned.records.find((record) => record.payload._tag === "ModelResponseRecorded");
1008
1021
  if (response === void 0 || response.payload._tag !== "ModelResponseRecorded") return yield* failure("Deferred dispatch has no response");
1009
- const progress = yield* loadState(response.payload.runId, after);
1022
+ const progress = cached.get(response.payload.runId) ?? (yield* loadUncachedState(response.payload.runId, after));
1010
1023
  if (progress === void 0) return yield* failure("Deferred dispatch has no Run progress");
1011
1024
  const pending = resultCapacity({
1012
1025
  ...progress,
@@ -1036,11 +1049,16 @@ const makeProgressWriter = Effect.fnUntraced(function* (threadId, deploymentId)
1036
1049
  });
1037
1050
  return owned;
1038
1051
  }));
1039
- const check = (runId) => gate.withPermits(1)(Effect.gen(function* () {
1040
- const state = yield* loadState(runId, yield* tail);
1041
- if (state === void 0) return yield* failure("Execution has no canonical Run progress");
1042
- if (cached.get(runId) !== state) yield* checkFutureShapes(state);
1043
- if (state.continuation.position !== "settling" && state.continuation.position !== "settled") yield* checkCapacity(state);
1052
+ const checkState = (state, recovered) => {
1053
+ if (state === void 0) return Effect.fail(failure("Execution has no canonical Run progress"));
1054
+ const capacity = () => state.continuation.position === "settling" || state.continuation.position === "settled" ? Effect.void : checkCapacity(state);
1055
+ return recovered ? Effect.andThen(checkFutureShapes(state), capacity) : capacity();
1056
+ };
1057
+ const check = (runId) => gate.withPermits(1)(Effect.flatMap(CurrentRunWriter, (writer) => {
1058
+ if (writer.threadId !== threadId) return Effect.fail(failure("Progress writer belongs to another Thread"));
1059
+ const retained = cached.get(runId);
1060
+ if (retained !== void 0) return checkState(retained, false);
1061
+ return Effect.flatMap(writer.tail, (position) => Effect.flatMap(loadUncachedState(runId, position.sequence), (state) => checkState(state, true)));
1044
1062
  }));
1045
1063
  return {
1046
1064
  commit,
@@ -1048,6 +1066,22 @@ const makeProgressWriter = Effect.fnUntraced(function* (threadId, deploymentId)
1048
1066
  reserve,
1049
1067
  defer,
1050
1068
  check,
1069
+ /** Internal read view immediately after this writer's acknowledged commit, while
1070
+ * holding its initialization gates. Never authority across ownership or writes. */
1071
+ acceptedCheckpoint: (runId) => cached.get(runId)?.checkpoint,
1072
+ /** Scope a verified empty execution/evidence view to one owned initialization body.
1073
+ * The caller holds progress+mutation gates; a changed writer or tail never reuses it. */
1074
+ withVerifiedEmptyRun: (runId, through, body) => Effect.flatMap(CurrentRunWriter, (writer) => {
1075
+ const view = {
1076
+ runId,
1077
+ through,
1078
+ writer
1079
+ };
1080
+ verifiedEmpty = view;
1081
+ return body.pipe(Effect.ensuring(Effect.sync(() => {
1082
+ if (verifiedEmpty === view) verifiedEmpty = void 0;
1083
+ })));
1084
+ }),
1051
1085
  stageUsage: (runId, bytes) => {
1052
1086
  if (bytes === 0) stagedUsage.delete(runId);
1053
1087
  else stagedUsage.set(runId, bytes);
@@ -1057,4 +1091,4 @@ const makeProgressWriter = Effect.fnUntraced(function* (threadId, deploymentId)
1057
1091
  //#endregion
1058
1092
  export { readRunContext as _, canonicalRecordBytes as a, reference as b, prepareProgressAppend as c, resolveExecutionEvidence as d, runEvidence as f, digestRunHistory as g, verifyRunContinuations as h, RunContinuation_exports as i, readContinuation as l, validateSuffix as m, CurrentRunWriter as n, isOperationalRecord as o, validateProgressAppend as p, ProgressAppendReader as r, makeProgressWriter as s, CurrentRunSettlement as t, readRunEvidenceSnapshot as u, validateContextBoundary as v, resolveEvidence as x, RunContextReader as y };
1059
1093
 
1060
- //# sourceMappingURL=RunContinuation-4ZATcVLB.mjs.map
1094
+ //# sourceMappingURL=RunContinuation-BiyKJK32.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RunContinuation-BiyKJK32.mjs","names":["failure"],"sources":["../src/durable/internal/evidence.ts","../src/durable/internal/run-context-reader.ts","../src/durable/internal/run-context.ts","../src/durable/RunContinuation.ts"],"sourcesContent":["import { Effect, Option } from \"effect\";\n\nimport type { ThreadId } from \"../../core/Identifiers.ts\";\nimport { EvidenceReference, type RecordEnvelope } from \"../Records.ts\";\nimport { getRecord, ThreadStoreError } from \"../ThreadStore.ts\";\n\nconst failure = (message: string, cause?: unknown) =>\n ThreadStoreError.make({\n operation: \"RunContinuation\",\n message,\n ...(cause === undefined ? {} : { cause }),\n });\n\n/** References identify immutable facts; schema and owning readers validate their meaning. */\nexport const reference = (record: RecordEnvelope) =>\n Effect.succeed(EvidenceReference.make({ recordId: record.recordId }));\n\n/** Resolve an immutable fact by Thread and record identity. A failed reference leaves the original work owed. */\nexport const resolveEvidence = Effect.fnUntraced(function* (\n threadId: ThreadId,\n ref: EvidenceReference,\n) {\n const found = yield* getRecord({ threadId, recordId: ref.recordId });\n\n if (Option.isNone(found)) return yield* failure(\"Required canonical evidence is unavailable\");\n\n return found.value;\n});\n","import { Context, Effect, Layer, Option, type Stream } from \"effect\";\n\nimport type { ThreadId } from \"../../core/Identifiers.ts\";\nimport type { CanonicalRecordEnvelope, RecordId } from \"../Records.ts\";\nimport {\n getRecord,\n ThreadReader,\n type ThreadNotMaterialized,\n type ThreadStoreError,\n type ThreadPromptRead,\n} from \"../ThreadStore.ts\";\nimport type { JournalRecordEnvelope } from \"./journal-metadata.ts\";\n\n/** Canonical history access bound by the recovery or verification-snapshot owner. */\nexport class RunContextReader extends Context.Service<\n RunContextReader,\n {\n /** Recovery decodes the prompt view; verification supplies full canonical envelopes. */\n readonly read: (\n request: ThreadPromptRead,\n ) => Stream.Stream<JournalRecordEnvelope, ThreadStoreError | ThreadNotMaterialized>;\n readonly record: (\n recordId: RecordId,\n ) => Effect.Effect<\n CanonicalRecordEnvelope | undefined,\n ThreadStoreError | ThreadNotMaterialized\n >;\n }\n>()(\"@effect-agent/thread/RunContextReader\") {\n static layer(threadId: ThreadId) {\n return Layer.effect(\n RunContextReader,\n Effect.gen(function* () {\n const reader = yield* ThreadReader;\n\n return RunContextReader.of({\n read: reader.readPrompt,\n record: (recordId) =>\n getRecord({ threadId, recordId }).pipe(\n Effect.provideService(ThreadReader, reader),\n Effect.map(Option.getOrUndefined),\n ),\n });\n }),\n );\n }\n}\n","import { type Crypto, Effect, Schema, Stream } from \"effect\";\nimport { Prompt } from \"effect/ai\";\n\nimport { canonicalJson, digestCanonicalJson } from \"../Digest.ts\";\nimport {\n CanonicalSequence,\n PromptRecord,\n type RecordId,\n PROMPT_EVIDENCE_TAGS,\n type CanonicalRecordEnvelope,\n type RunContextRecorded,\n} from \"../Records.ts\";\nimport {\n projectRunJournalStream,\n RunJournalError,\n type RunJournalContext,\n type JournalBoundary,\n} from \"../RunJournal.ts\";\nimport type { ThreadNotMaterialized, ThreadStoreError } from \"../ThreadStore.ts\";\nimport type { JournalRecordEnvelope } from \"./journal-metadata.ts\";\nimport { RunContextReader } from \"./run-context-reader.ts\";\n\nconst invalid = (message: string) => RunJournalError.make({ message });\nconst encodePrompt = Schema.encodeEffect(Schema.toCodecJson(Prompt.Prompt));\n\nconst decodePromptRecord = Schema.decodeUnknownEffect(PromptRecord);\nconst promptTags = new Set<string>(PROMPT_EVIDENCE_TAGS);\n\nconst projectHistoryRecord = (\n entry: JournalRecordEnvelope,\n ownerRunId: RunContextRecorded[\"runId\"],\n): Effect.Effect<JournalRecordEnvelope> => {\n if (!(\"batchId\" in entry)) return Effect.succeed(entry);\n const payload = entry.record.payload;\n\n if ((\"runId\" in payload && payload.runId === ownerRunId) || !promptTags.has(payload._tag))\n return Effect.succeed(entry);\n\n return decodePromptRecord({ recordId: entry.record.recordId, payload }).pipe(\n Effect.map((record) => ({ threadId: entry.threadId, sequence: entry.sequence, record })),\n // Coverage and later canonical validation must retain their original error precedence.\n Effect.catchTag(\"SchemaError\", () => Effect.succeed(entry)),\n );\n};\n\nexport const encodeRunHistory = (prompt: Prompt.Prompt) =>\n encodePrompt(prompt).pipe(\n Effect.map(canonicalJson),\n Effect.mapError((cause) =>\n RunJournalError.make({ message: \"Original model history integrity is unavailable\", cause }),\n ),\n );\n\nexport const digestRunHistory = (prompt: Prompt.Prompt) =>\n encodeRunHistory(prompt).pipe(\n Effect.flatMap(digestCanonicalJson),\n Effect.mapError((cause) =>\n RunJournalError.make({ message: \"Original model history integrity is unavailable\", cause }),\n ),\n );\n\nexport const validateContextBoundary = (\n context: RunContextRecorded,\n original: CanonicalRecordEnvelope,\n): Effect.Effect<void, RunJournalError> =>\n original.record.payload._tag !== \"UserInputRecorded\" ||\n original.record.payload.kind !== \"user\" ||\n original.record.payload.runId !== context.runId ||\n context.historyThrough + 1 !== original.sequence ||\n context.historyFrom < 1 ||\n context.historyFrom > original.sequence ||\n context.retained.some(\n (ref, index) =>\n ref.sequence <= (context.retained[index - 1]?.sequence ?? 0) ||\n ref.sequence >= context.historyFrom,\n )\n ? Effect.fail(invalid(\"Saved context has an invalid original admission boundary\"))\n : Effect.void;\n\ntype ProjectedRunHistory = Pick<\n RunJournalContext,\n \"prompt\" | \"historyFrom\" | \"contextWindowId\" | \"boundaries\"\n>;\n\n/** Reconstruct the exact saved range using the owner's history validation boundary. */\nconst readProjectedHistory = Effect.fnUntraced(function* (\n context: RunContextRecorded,\n original: CanonicalRecordEnvelope,\n): Effect.fn.Return<\n ProjectedRunHistory,\n RunJournalError | ThreadStoreError | ThreadNotMaterialized,\n RunContextReader | Crypto.Crypto\n> {\n yield* validateContextBoundary(context, original);\n const reader = yield* RunContextReader;\n const records: Array<JournalRecordEnvelope> = [];\n\n for (const ref of context.retained) {\n const entry = yield* reader.record(ref.recordId);\n\n if (\n entry === undefined ||\n entry.threadId !== original.threadId ||\n entry.record.recordId !== ref.recordId ||\n entry.sequence !== ref.sequence\n )\n return yield* invalid(\"Saved context has missing or corrupt retained evidence\");\n records.push(yield* projectHistoryRecord(entry, context.runId));\n }\n\n let after = CanonicalSequence.make(context.historyFrom - 1);\n\n while (after < context.historyThrough) {\n const page = yield* reader\n .read({\n threadId: original.threadId,\n throughSequence: context.historyThrough,\n afterSequence: after,\n limit: 8,\n })\n .pipe(Stream.take(9), Stream.runCollect);\n\n if (page.length > 8) return yield* invalid(\"Saved context page exceeds its record bound\");\n for (const entry of page) {\n if (\n entry.threadId !== original.threadId ||\n entry.sequence <= after ||\n entry.sequence > context.historyThrough\n )\n return yield* invalid(\"Saved context range has invalid canonical ordering\");\n after = entry.sequence;\n records.push(yield* projectHistoryRecord(entry, context.runId));\n }\n if (page.length < 8) break;\n }\n\n let through = 0;\n const retained = new Map(context.retained.map((ref) => [ref.sequence, ref.recordId]));\n\n for (const entry of records) {\n if (\n entry.threadId !== original.threadId ||\n entry.sequence <= through ||\n entry.sequence > context.historyThrough ||\n (entry.sequence < context.historyFrom &&\n retained.get(entry.sequence) !== entry.record.recordId)\n )\n return yield* invalid(\"Saved context has invalid canonical range evidence\");\n through = entry.sequence;\n retained.delete(entry.sequence);\n }\n if (retained.size !== 0) return yield* invalid(\"Saved context is missing retained evidence\");\n\n const boundaries: Array<JournalBoundary> = [];\n\n records.push(original);\n\n const history = yield* projectRunJournalStream(\n Stream.fromIterable(records),\n context.runId,\n (boundary) => boundaries.push(boundary),\n );\n\n return {\n prompt: history.prompt,\n historyFrom: history.historyFrom,\n boundaries,\n ...(history.contextWindowId === undefined ? {} : { contextWindowId: history.contextWindowId }),\n };\n});\n\n/** Both readers preserve the exact saved context and historyDigest. */\nexport const readRunContext = Effect.fnUntraced(function* (\n context: RunContextRecorded,\n original: CanonicalRecordEnvelope,\n recordId: RecordId,\n): Effect.fn.Return<\n RunJournalContext,\n RunJournalError | ThreadStoreError | ThreadNotMaterialized,\n RunContextReader | Crypto.Crypto\n> {\n const history = yield* readProjectedHistory(context, original);\n const historyDigest = yield* digestRunHistory(history.prompt);\n\n if (\n historyDigest !== context.historyDigest ||\n history.historyFrom !== context.historyFrom ||\n history.prompt.content.length !== context.priorHistoryLength ||\n history.contextWindowId !== context.contextWindowId\n )\n return yield* invalid(\"Saved context differs from its original model history\");\n\n const prefix = yield* Schema.decodeUnknownEffect(Prompt.Prompt)(context.runScopedInput).pipe(\n Effect.mapError(() => invalid(\"Saved Run instructions and input are malformed\")),\n );\n\n return {\n runId: context.runId,\n prompt: Prompt.fromMessages([...history.prompt.content, ...prefix.content]),\n priorHistoryLength: context.priorHistoryLength,\n historyFrom: context.historyFrom,\n boundaries: history.boundaries.filter(\n (boundary) => boundary.promptLength <= context.priorHistoryLength,\n ),\n recordId,\n ...(context.contextWindowId === undefined ? {} : { contextWindowId: context.contextWindowId }),\n };\n});\n","import { Context, DateTime, Effect, Option, Result, Schema, Semaphore, Stream } from \"effect\";\nimport { Prompt } from \"effect/ai\";\n\nimport { AgentPersistenceCapacityError } from \"../core/AgentError.ts\";\nimport type { RunId, SubmissionId, ThreadId } from \"../core/Identifiers.ts\";\nimport { ToolCallId } from \"../core/Identifiers.ts\";\nimport { utf8ByteLength } from \"../core/internal/utf8.ts\";\nimport { resolveEvidence } from \"./internal/evidence.ts\";\nimport { continuationUsage } from \"./internal/usage-totals.ts\";\nexport { reference, resolveEvidence } from \"./internal/evidence.ts\";\nimport {\n captureRecord,\n recordEncoding,\n type ProgressAppendRecord,\n} from \"./internal/record-encoding.ts\";\nimport {\n canonicalRunIds,\n executionRunIds,\n isPreContinuationFact,\n isTerminalBudgetFact,\n} from \"./internal/record-ownership.ts\";\nexport { terminalUsageCharge } from \"./internal/record-ownership.ts\";\nimport { readRunContext, validateContextBoundary } from \"./internal/run-context.ts\";\nimport {\n type CanonicalRecordEnvelope,\n type ContinuationAccounting,\n type DeploymentId,\n CanonicalBatch,\n CanonicalSequence,\n EvidenceReference,\n MAX_RUN_CONTINUATION_BYTES,\n MAX_RUN_EVIDENCE_BYTES,\n MAX_RUN_TERMINAL_BYTES,\n MAX_RUN_EVIDENCE_RECORDS,\n MAX_RUN_RECOVERY_SUFFIX_BYTES,\n MAX_RUN_RECOVERY_SUFFIX_RECORDS,\n MAX_TURN_CANONICAL_BYTES,\n MAX_PERSISTED_JSON_BYTES,\n RUN_TERMINAL_RESERVE_BYTES,\n RUN_TERMINAL_RESERVE_RECORDS,\n RecordEnvelope,\n RecordId,\n RunContinuation,\n type ModelResponseRecorded,\n type ToolCallSettled,\n} from \"./Records.ts\";\nimport {\n runIdForSubmission,\n runCompletedRecordId,\n toolCallSettledRecordId,\n toolCallResultBatchId,\n subagentRequestedRecordId,\n subagentStartedRecordId,\n} from \"./RunJournal.ts\";\nimport type { RunStorageSession, RunWriter } from \"./RunStorage.ts\";\nimport {\n submissionAbortRecordId,\n submissionInputRecordId,\n submissionSettlementRecordId,\n submissionSettlementBatchId,\n} from \"./SubmissionLedger.ts\";\nimport {\n CommitBatch,\n ExecutionCheckpoint,\n ExecutionUpdate,\n getRecord,\n getRunInput,\n ThreadReader,\n ThreadStoreError,\n} from \"./ThreadStore.ts\";\n\nexport { RunContinuation, RunContextRecorded, EvidenceReference } from \"./Records.ts\";\n\n/** Writer and progress sequencer selected at the local owner's resource boundary. */\nexport class CurrentRunWriter extends Context.Service<\n CurrentRunWriter,\n Pick<RunWriter, \"threadId\" | \"tail\" | \"append\" | \"withProgress\">\n>()(\"@effect-agent/thread/CurrentRunWriter\") {}\n\n/** Settlement publication keeps its original atomic authority and claim-scoped implementation. */\nexport class CurrentRunSettlement extends Context.Service<\n CurrentRunSettlement,\n Pick<RunStorageSession, \"threadId\" | \"tail\" | \"publishSettlement\" | \"withProgress\">\n>()(\"@effect-agent/thread/CurrentRunSettlement\") {}\n\n/** Canonical reads pinned to the append owner's current transaction or mutation gate. */\nexport class ProgressAppendReader extends Context.Service<\n ProgressAppendReader,\n {\n readonly previous: (\n runId: RunId,\n ) => Effect.Effect<RunContinuation | undefined, ThreadStoreError>;\n readonly initial: (\n next: RunContinuation,\n ) => Effect.Effect<ReadonlyArray<RecordEnvelope>, ThreadStoreError>;\n }\n>()(\"@effect-agent/thread/ProgressAppendReader\") {}\n\nexport {\n canonicalRunIds,\n executionRunIds,\n isWorkHandoff,\n isPreContinuationFact,\n} from \"./internal/record-ownership.ts\";\n\nconst failure = (message: string, cause?: unknown) =>\n ThreadStoreError.make({\n operation: \"RunContinuation\",\n message,\n ...(cause === undefined ? {} : { cause }),\n });\n\nconst capacityFailure = (message: string) =>\n failure(message, AgentPersistenceCapacityError.make({ message }));\n\nconst isExecutionProgressRecord = (\n record: RecordEnvelope,\n): record is RecordEnvelope & { readonly payload: RunContinuation } =>\n record.payload._tag === \"RunContinuation\";\n\nconst decodeResponsePrompt = Schema.decodeUnknownEffect(Prompt.Prompt);\n// The decoded Prompt stays private. Progress and capacity are recomputed on every invocation.\nconst responsePrompts = new WeakMap<ModelResponseRecorded, Prompt.Prompt>();\n\n/** Cache eligibility only: freezing does not make accessors or custom iterators immutable. */\nconst isFrozenJsonData = (input: Schema.Json): boolean => {\n const pending: Array<unknown> = [input];\n const seen = new WeakSet<object>();\n\n while (pending.length > 0) {\n const value = pending.pop();\n\n if (value === null) continue;\n if (typeof value !== \"object\") {\n if (typeof value !== \"string\" && typeof value !== \"number\" && typeof value !== \"boolean\")\n return false;\n continue;\n }\n if (seen.has(value)) continue;\n seen.add(value);\n const prototype = Object.getPrototypeOf(value);\n\n if (\n !Object.isFrozen(value) ||\n (prototype !== null && prototype !== Object.prototype && prototype !== Array.prototype)\n )\n return false;\n for (const key of Reflect.ownKeys(value)) {\n if (typeof key !== \"string\") return false;\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n\n if (descriptor === undefined || !(\"value\" in descriptor)) return false;\n pending.push(descriptor.value);\n }\n }\n\n return true;\n};\n\nconst validateBatchShape = Schema.decodeUnknownSync(\n Schema.Struct({\n batchId: CanonicalBatch.fields.batchId,\n producerId: CanonicalBatch.fields.producerId,\n records: Schema.NonEmptyArray(Schema.Unknown).check(Schema.isMaxLength(256)),\n }),\n);\n\nconst ContinuationBytes = Schema.Struct({\n turnBytes: RunContinuation.fields.turnBytes,\n terminalBytes: RunContinuation.fields.terminalBytes,\n});\n\nconst decodeExecutionFrontier = Schema.decodeUnknownEffect(\n Schema.Struct({\n canonicalRecords: ExecutionCheckpoint.fields.canonicalRecords,\n throughSequence: ExecutionCheckpoint.fields.throughSequence,\n }),\n);\n\n/** One private snapshot for every retry; callers cannot change facts while awaiting the gate. */\nconst captureFacts = (batch: CommitBatch) =>\n Effect.try({\n try: () =>\n Result.gen(function* () {\n const inputs = batch.records;\n\n const { batchId, producerId } = validateBatchShape({\n batchId: batch.batchId,\n producerId: batch.producerId,\n records: inputs,\n });\n\n const encodings = yield* Result.all(inputs.map(captureRecord));\n const records = encodings.map((record) => record.canonical);\n\n return Object.freeze(\n CanonicalBatch.make(\n { batchId, producerId, records: [records[0]!, ...records.slice(1)] },\n { disableChecks: true },\n ),\n );\n }),\n catch: (cause) => failure(\"Cannot capture canonical progress facts\", cause),\n }).pipe(\n Effect.flatMap(Effect.fromResult),\n Effect.mapError((cause) =>\n Schema.is(ThreadStoreError)(cause)\n ? cause\n : failure(\"Cannot capture canonical progress facts\", cause),\n ),\n );\n\n/** Exact UTF-8 wire accounting reuses the append's privately captured Schema encoding. */\nexport const canonicalRecordBytes = (record: RecordEnvelope): number => {\n const encoded = recordEncoding(record);\n\n if (Result.isFailure(encoded)) {\n // oxlint-disable-next-line effect/no-untyped-throw, effect/no-native-error -- Public synchronous byte-accounting validation must reject malformed records before returning a number.\n throw encoded.failure.cause ?? new RangeError(encoded.failure.message);\n }\n\n return encoded.success.bytes;\n};\n\nexport type { ProgressAppendRecord } from \"./internal/record-encoding.ts\";\n\n/** Capture before acquiring the mutation owner; summaries never cross a wire boundary. */\nexport const prepareProgressAppend = (\n records: ReadonlyArray<RecordEnvelope>,\n): ReadonlyArray<ProgressAppendRecord> => {\n const encodings = Result.all(records.map(captureRecord));\n\n if (Result.isFailure(encodings)) {\n // oxlint-disable-next-line effect/no-untyped-throw, effect/no-native-error -- Public synchronous progress construction must reject malformed records before acquiring a mutation owner.\n throw encodings.failure.cause ?? new RangeError(encodings.failure.message);\n }\n\n return Object.freeze(encodings.success.map((record) => record.progress));\n};\n\n/** These values belong to the active Run, not its permanent conversation history. */\nexport const isOperationalRecord = ({ payload }: RecordEnvelope): boolean =>\n payload._tag === \"RunStarted\" ||\n payload._tag === \"RunContextRecorded\" ||\n payload._tag === \"RunCompleted\";\n\nexport const readContinuation = Effect.fnUntraced(function* (\n threadId: ThreadId,\n runId: RunId,\n throughSequence: CanonicalSequence,\n) {\n const reader = yield* ThreadReader;\n\n const loaded = yield* reader\n .readExecution({ threadId, runId })\n .pipe(\n Effect.catchTag(\"ThreadNotMaterialized\", (cause) =>\n throughSequence === 0\n ? Effect.succeed(Option.none())\n : failure(\"Active Run history is not materialized\", cause),\n ),\n );\n\n if (Option.isNone(loaded)) return Option.none();\n const value = loaded.value;\n\n if (\n value.progress.runId !== runId ||\n value.throughSequence > throughSequence ||\n canonicalRecordBytes(value.progressRecord) > MAX_RUN_CONTINUATION_BYTES ||\n value.operational.some(\n (record) => !isOperationalRecord(record) || !executionRunIds(record).includes(runId),\n ) ||\n new Set(value.operational.map((record) => record.recordId)).size !== value.operational.length\n )\n return yield* failure(\"Invalid active Run checkpoint\");\n\n return Option.some({\n ...value,\n checkpoint: value,\n get progress() {\n return value.progress;\n },\n record: value.progressRecord,\n continuation: value.progress,\n });\n});\n\n/** Resolve an active-only fact without presenting it as a canonical envelope or sequence. */\nexport const resolveExecutionEvidence = Effect.fnUntraced(function* (\n threadId: ThreadId,\n checkpoint: ExecutionCheckpoint,\n ref: EvidenceReference,\n) {\n const operational = checkpoint.operational.find((record) => record.recordId === ref.recordId);\n const record = operational ?? (yield* resolveEvidence(threadId, ref)).record;\n\n return record;\n});\n\n/** Each selected page is at most eight records; total resident encoded evidence is bounded. */\nexport const runEvidence = (\n threadId: ThreadId,\n submissionId: SubmissionId,\n throughSequence: CanonicalSequence,\n afterSequence: CanonicalSequence = CanonicalSequence.make(0),\n): Stream.Stream<CanonicalRecordEnvelope, ThreadStoreError, ThreadReader> =>\n Stream.unwrap(\n Effect.map(ThreadReader, (reader) =>\n Stream.suspend(() => {\n let after = afterSequence;\n let count = 0;\n let bytes = 0;\n const runId = runIdForSubmission(submissionId);\n\n const controls = new Set([\n submissionInputRecordId(submissionId),\n submissionAbortRecordId(submissionId),\n submissionSettlementRecordId(submissionId),\n ]);\n\n const next = (): Stream.Stream<CanonicalRecordEnvelope, ThreadStoreError> =>\n Stream.unwrap(\n Stream.runCollect(\n reader.read({\n threadId,\n selection: { _tag: \"RunEvidence\", runId, submissionId, throughSequence },\n page: { limit: 8, ...(after === 0 ? {} : { afterSequence: after }) },\n }),\n ).pipe(\n Effect.mapError((cause) =>\n cause._tag === \"ThreadStoreError\"\n ? cause\n : failure(\"Selected Run disappeared\", cause),\n ),\n Effect.flatMap((page) =>\n Effect.gen(function* () {\n if (page.length > 8)\n return yield* failure(\"Run evidence page exceeds its record bound\");\n for (const entry of page) {\n if (\n entry.threadId !== threadId ||\n entry.sequence <= after ||\n entry.sequence > throughSequence ||\n entry.record.payload._tag === \"RunContinuation\" ||\n (!canonicalRunIds(entry.record).includes(runId) &&\n !controls.has(entry.record.recordId))\n )\n return yield* failure(\"Run evidence page has invalid identity or ordering\");\n after = entry.sequence;\n count += 1;\n bytes += yield* Effect.try({\n try: () => canonicalRecordBytes(entry.record),\n catch: (cause) => failure(\"Selected Run evidence is malformed\", cause),\n });\n if (\n count > MAX_RUN_EVIDENCE_RECORDS + RUN_TERMINAL_RESERVE_RECORDS ||\n bytes > MAX_RUN_EVIDENCE_BYTES + MAX_RUN_TERMINAL_BYTES\n )\n return yield* failure(\"Selected Run evidence exceeds its recovery bound\");\n }\n\n return page.length < 8\n ? Stream.fromIterable(page)\n : Stream.concat(Stream.fromIterable(page), Stream.suspend(next));\n }),\n ),\n ),\n );\n\n return next();\n }),\n ),\n );\n\n/** A bounded selected-Run suffix, never a Thread-wide tail or an implicit replay fallback. */\nexport const validateSuffix = (\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n through: CanonicalSequence,\n) => {\n const suffix = records.filter((record) => record.sequence > through);\n\n return (\n suffix.length <= MAX_RUN_RECOVERY_SUFFIX_RECORDS &&\n suffix.reduce((bytes, record) => bytes + canonicalRecordBytes(record.record), 0) <=\n MAX_RUN_RECOVERY_SUFFIX_BYTES\n );\n};\n\n/**\n * Selected semantic evidence without expanding model context. Worker acknowledgements and\n * delivery repair must validate locator completeness before treating missing effects as closed.\n */\nexport const readRunEvidenceSnapshot = Effect.fnUntraced(function* (\n threadId: ThreadId,\n submissionId: SubmissionId,\n throughSequence: CanonicalSequence,\n) {\n const records = yield* Stream.runCollect(runEvidence(threadId, submissionId, throughSequence));\n const runId = runIdForSubmission(submissionId);\n const own = records.filter((entry) => executionRunIds(entry.record).includes(runId));\n const progress = yield* readContinuation(threadId, runId, throughSequence);\n\n if (Option.isNone(progress)) {\n const terminal = own.findLast(\n ({ record }) => record.payload._tag === \"SubmissionSettled\" && record.payload.runId === runId,\n );\n\n if (terminal?.record.payload._tag === \"SubmissionSettled\") {\n if (\n terminal.record.payload.historyRecordCount === undefined ||\n own.filter((entry) => entry.sequence <= terminal.sequence).length !==\n terminal.record.payload.historyRecordCount\n )\n return yield* failure(\"Settled Run history is incomplete\");\n\n return records;\n }\n if (own.some(({ record }) => !isPreContinuationFact(record)))\n return yield* failure(\"Active execution has no durable checkpoint\");\n\n return records;\n }\n const checkpoint = progress.value;\n const cursor = checkpoint.continuation;\n\n if (cursor.submissionId !== submissionId)\n return yield* failure(\"Active checkpoint has another admitted owner\");\n if (\n own.filter((entry) => entry.sequence <= checkpoint.throughSequence).length !==\n checkpoint.canonicalRecords ||\n !validateSuffix(own, checkpoint.throughSequence)\n )\n return yield* failure(\"Selected execution history is incomplete or exceeds its suffix bound\");\n\n const resolve = (ref: EvidenceReference) =>\n resolveExecutionEvidence(threadId, checkpoint.checkpoint, ref);\n\n const input = yield* resolve(cursor.originalInput);\n\n if (\n input.payload._tag !== \"UserInputRecorded\" ||\n input.payload.submissionId !== submissionId ||\n input.payload.kind !== \"user\" ||\n input.payload.runId !== runId\n )\n return yield* failure(\"Active checkpoint has no original accepted input\");\n yield* resolve(cursor.lastFact);\n if (cursor.savedContext !== undefined) {\n const context = yield* resolve(cursor.savedContext);\n\n if (context.payload._tag !== \"RunContextRecorded\" || context.payload.runId !== runId)\n return yield* failure(\"Active checkpoint has invalid saved context\");\n }\n if (cursor.latestResponse !== undefined) {\n const response = yield* resolve(cursor.latestResponse);\n\n if (\n response.payload._tag !== \"ModelResponseRecorded\" ||\n response.payload.runId !== runId ||\n response.payload.turn !== cursor.accounting.committedTurns\n )\n return yield* failure(\"Active checkpoint has invalid operation evidence\");\n }\n if (cursor.terminal !== undefined) {\n const terminal = yield* resolve(cursor.terminal);\n\n if (\n terminal.payload._tag !== \"RunCompleted\" &&\n terminal.payload._tag !== \"RunFailed\" &&\n terminal.payload._tag !== \"SubmissionSettled\"\n )\n return yield* failure(\"Active checkpoint has invalid terminal evidence\");\n }\n\n return records;\n});\n\n/** Called inside the adapter's existing mutation, before publishing any fact or index. */\nexport const validateProgressAppend = Effect.fnUntraced(function* (\n records: ReadonlyArray<ProgressAppendRecord>,\n updates: ReadonlyArray<ExecutionUpdate> = [],\n): Effect.fn.Return<void, ThreadStoreError, ProgressAppendReader> {\n const reader = yield* ProgressAppendReader;\n\n if (records.some((record) => record.continuation !== undefined))\n return yield* failure(\"Interpreter progress must be committed as active execution state\");\n\n const operational = new Map(\n updates.flatMap((update) => update.facts.map((fact) => [fact.recordId, fact] as const)),\n );\n\n const factsAndProgress = [\n ...records,\n ...prepareProgressAppend([...operational.values()]),\n ...prepareProgressAppend(updates.map((update) => update.checkpoint.progressRecord)),\n ];\n\n const seen = new Set<RunId>();\n let progressStarted = false;\n\n for (const record of factsAndProgress) {\n const next = record.continuation;\n\n if (next === undefined) {\n if (progressStarted)\n return yield* failure(\"Execution facts cannot follow their continuation\");\n continue;\n }\n progressStarted = true;\n if (record.recordBytes > MAX_RUN_CONTINUATION_BYTES)\n return yield* failure(\"Encoded continuation exceeds its record byte bound\");\n if (seen.has(next.runId))\n return yield* failure(\"One atomic batch cannot publish conflicting Run progress\");\n seen.add(next.runId);\n\n const update = updates.find((value) => value.checkpoint.progress.runId === next.runId);\n\n if (\n update === undefined ||\n update.previousRevision + 1 !== next.revision ||\n update.facts.some((fact) => !isOperationalRecord(fact)) ||\n (update.retire && (next.position !== \"settled\" || next.terminal === undefined))\n )\n return yield* failure(\"Invalid active execution transition\");\n\n const facts = factsAndProgress.filter(\n (fact) => fact.continuation === undefined && fact.runIds.includes(next.runId),\n );\n\n const frontier = facts.find((fact) => fact.recordId === next.lastFact.recordId);\n const prior = yield* reader.previous(next.runId);\n\n const retained =\n prior === undefined\n ? (yield* reader.initial(next)).filter((fact) => executionRunIds(fact).includes(next.runId))\n : [];\n\n const retainedBytes = retained.reduce((bytes, fact) => bytes + canonicalRecordBytes(fact), 0);\n const factBytes = facts.reduce((bytes, fact) => bytes + fact.recordBytes, 0);\n const turnBase = prior?.turn === next.turn ? prior.turnBytes : retainedBytes;\n const closing = facts.filter((fact) => fact.terminal);\n\n if (\n frontier === undefined ||\n retained.length > MAX_RUN_RECOVERY_SUFFIX_RECORDS ||\n retainedBytes > MAX_RUN_RECOVERY_SUFFIX_BYTES ||\n retained.some(\n (fact) => !isPreContinuationFact(fact) || !executionRunIds(fact).includes(next.runId),\n ) ||\n frontier.recordId !== next.lastFact.recordId ||\n next.revision !== (prior?.revision ?? 0) + 1 ||\n next.recordBytes < (prior?.recordBytes ?? 0) ||\n next.turn < (prior?.turn ?? 0) ||\n (prior !== undefined && next.turn === prior.turn && next.turnBytes <= prior.turnBytes) ||\n next.recordBytes !== (prior?.recordBytes ?? retainedBytes) + factBytes ||\n next.terminalUsageBytes !==\n (prior?.terminalUsageBytes ?? 0) +\n facts.reduce((bytes, fact) => bytes + fact.terminalUsageBytes, 0) ||\n next.turnBytes !== turnBase + factBytes + record.recordBytes ||\n next.recordCount !== (prior?.recordCount ?? retained.length) + facts.length ||\n next.terminalRecords !== (prior?.terminalRecords ?? 0) + closing.length ||\n next.terminalBytes !==\n (prior?.terminalBytes ?? 0) +\n closing.reduce((bytes, fact) => bytes + fact.recordBytes, 0) +\n (closing.length > 0 ? record.recordBytes : 0) ||\n (prior !== undefined &&\n (prior.submissionId !== next.submissionId ||\n !Schema.toEquivalence(EvidenceReference)(prior.originalInput, next.originalInput) ||\n (prior.savedContext !== undefined &&\n (next.savedContext === undefined ||\n !Schema.toEquivalence(EvidenceReference)(prior.savedContext, next.savedContext))))) ||\n (prior !== undefined &&\n (\n [\n \"committedTurns\",\n \"toolCalls\",\n \"programmaticToolCalls\",\n \"modelRestarts\",\n \"modelCalls\",\n \"inputTokens\",\n \"outputTokens\",\n \"costMicrousd\",\n \"unobservedModelCalls\",\n \"accountedToolTurn\",\n ] satisfies ReadonlyArray<keyof ContinuationAccounting>\n ).some((field) => next.accounting[field] < prior.accounting[field])) ||\n (prior?.accounting.finalizationUsed === true && !next.accounting.finalizationUsed)\n )\n return yield* failure(\"Run continuation conflicts with its canonical frontier or revision\");\n }\n});\n\ninterface ChildResultCapacity {\n readonly resultBytes: number;\n readonly remainingBytes: number;\n readonly remainingRecords: number;\n}\n\ninterface ProgressState {\n readonly continuation: RunContinuation;\n readonly record: RecordEnvelope;\n readonly response?: ModelResponseRecorded;\n readonly results: ReadonlyMap<ToolCallId, ToolCallSettled>;\n readonly completionBytes?: number;\n readonly childResults: ReadonlyMap<ToolCallId, ChildResultCapacity>;\n readonly checkpoint?: ExecutionCheckpoint;\n}\n\ntype CapacityState = Omit<ProgressState, \"continuation\" | \"record\"> & {\n readonly continuation: Pick<\n RunContinuation,\n | \"runId\"\n | \"position\"\n | \"turn\"\n | \"turnBytes\"\n | \"recordBytes\"\n | \"recordCount\"\n | \"accounting\"\n | \"terminalUsageBytes\"\n | \"terminalBytes\"\n | \"terminalRecords\"\n >;\n};\n\n/** Headers/identities must themselves fit a continuation. Leave room for a result's cursor too. */\nconst resultCapacity = (state: CapacityState): { bytes: number; records: number } => {\n const response = state.response;\n\n if (\n response === undefined ||\n state.continuation.position === \"settling\" ||\n state.continuation.position === \"settled\" ||\n state.continuation.accounting.accountedToolTurn >= response.turn\n )\n return { bytes: 0, records: 0 };\n let bytes = 0;\n let records = 0;\n\n for (const operation of response.toolOperations) {\n if (state.results.has(operation.toolCallId)) continue;\n\n const identity = JSON.stringify({\n recordId: toolCallSettledRecordId(response.runId, response.turn, operation.toolCallId),\n payload: {\n _tag: \"ToolCallSettled\",\n runId: response.runId,\n toolCallId: operation.toolCallId,\n toolName: operation.toolName,\n result: null,\n isFailure: false,\n },\n });\n\n // An uncertain ordinary call may later close with exact supplier/operator truth, rather\n // than the interpreter's truncated result. Attached joins retain their frozen allocation.\n const resultBytes =\n operation.executionKind === \"ordinary\" && operation.executionClass !== \"readonly\"\n ? MAX_PERSISTED_JSON_BYTES\n : Math.max(\n response.toolResultMaxBytes,\n state.childResults.get(operation.toolCallId)?.resultBytes ?? 0,\n );\n\n const joining = state.childResults.get(operation.toolCallId);\n\n bytes +=\n utf8ByteLength(identity) +\n resultBytes +\n (joining?.remainingBytes ?? 0) +\n response.toolSelectionMaxBytes +\n 2 * MAX_RUN_CONTINUATION_BYTES +\n 256;\n records += joining?.remainingRecords ?? 1;\n }\n\n return { bytes, records };\n};\n\nconst emptyAccounting = (): ContinuationAccounting => ({\n committedTurns: 0,\n toolCalls: 0,\n programmaticToolCalls: 0,\n consecutiveToolFailures: 0,\n finalizationUsed: false,\n modelRestarts: 0,\n modelCalls: 0,\n unobservedModelCalls: 0,\n inputTokens: 0,\n outputTokens: 0,\n lastInputTokens: 0,\n lastOutputTokens: 0,\n costMicrousd: 0,\n accountedToolTurn: 0,\n});\n\n/** Recompute semantic progress solely from immutable owning facts. No port grants authority. */\nconst advanceFacts = Effect.fnUntraced(function* (\n previous: ProgressState | undefined,\n facts: ReadonlyArray<RecordEnvelope>,\n submissionId: SubmissionId,\n initialBytes: number,\n) {\n const accounting = { ...(previous?.continuation.accounting ?? emptyAccounting()) };\n let savedContext = previous?.continuation.savedContext;\n let latestResponse = previous?.continuation.latestResponse;\n let terminal = previous?.continuation.terminal;\n let position = previous?.continuation.position ?? \"starting\";\n let response = previous?.response;\n let responsePrompt: Prompt.Prompt | undefined;\n let results = new Map(previous?.results);\n let childResults = new Map(previous?.childResults);\n let completionBytes = previous?.completionBytes;\n let factBytes = 0;\n let turn = previous?.continuation.turn ?? 1;\n let usageCharge = 0;\n let closingBytes = 0;\n let closingCount = 0;\n\n for (const fact of facts) {\n const payload = fact.payload;\n const captured = recordEncoding(fact);\n\n if (Result.isFailure(captured))\n return yield* failure(\"Cannot account canonical progress facts\", captured.failure);\n const encoded = captured.success;\n\n factBytes += encoded.bytes;\n if (\"turn\" in payload) turn = Math.max(turn, payload.turn);\n usageCharge += encoded.progress.terminalUsageBytes;\n if (encoded.progress.terminal) {\n closingBytes += encoded.bytes;\n closingCount++;\n }\n\n switch (payload._tag) {\n case \"RunStarted\":\n position = \"awaiting-model\";\n break;\n case \"RunContextRecorded\":\n if (savedContext !== undefined)\n return yield* failure(\"A Run's original context cannot be replaced\");\n savedContext = EvidenceReference.make({ recordId: fact.recordId });\n position = \"awaiting-model\";\n break;\n case \"ModelResponseRecorded\": {\n if (savedContext === undefined)\n return yield* failure(\"A model response has no saved original Run context\");\n if (payload.turn !== accounting.committedTurns + 1)\n return yield* failure(\"Canonical Turn progress must advance once\");\n\n const promptInput = payload.messages;\n const retainedPrompt = responsePrompts.get(payload);\n\n const messages =\n retainedPrompt ??\n (yield* decodeResponsePrompt(promptInput).pipe(\n Effect.mapError((cause) => failure(\"Invalid model evidence\", cause)),\n ));\n\n if (retainedPrompt === undefined) {\n const property = Object.getOwnPropertyDescriptor(payload, \"messages\");\n\n if (\n Object.isFrozen(payload) &&\n property !== undefined &&\n \"value\" in property &&\n property.value === promptInput &&\n isFrozenJsonData(promptInput)\n )\n responsePrompts.set(payload, messages);\n }\n responsePrompt = messages;\n\n const calls = messages.content.flatMap((message) =>\n message.role === \"assistant\"\n ? message.content.filter((part) => part.type === \"tool-call\")\n : [],\n );\n\n const summary =\n payload.modelUsage === undefined\n ? undefined\n : yield* continuationUsage(payload.modelUsage).pipe(\n Effect.mapError((cause) => failure(\"Invalid usage evidence\", cause)),\n );\n\n accounting.committedTurns = payload.turn;\n accounting.toolCalls += calls.length;\n accounting.modelCalls += summary?.modelCalls ?? 1;\n accounting.inputTokens += summary?.inputTokens ?? payload.inputTokens ?? 0;\n accounting.outputTokens += summary?.outputTokens ?? payload.outputTokens ?? 0;\n accounting.costMicrousd += summary?.costMicrousd ?? payload.costMicrousd ?? 0;\n accounting.lastInputTokens = summary?.inputTokens ?? payload.inputTokens ?? 0;\n accounting.lastOutputTokens = summary?.outputTokens ?? payload.outputTokens ?? 0;\n accounting.unobservedModelCalls += payload.unobservedModelCalls ?? 0;\n latestResponse = EvidenceReference.make({ recordId: fact.recordId });\n response = payload;\n results = new Map();\n childResults = new Map();\n position = payload.toolOperations.length === 0 ? \"awaiting-model\" : \"processing-operations\";\n break;\n }\n case \"ToolCallSettled\":\n results.set(payload.toolCallId, payload);\n childResults.delete(payload.toolCallId);\n break;\n case \"ToolCallUnknown\":\n position = \"unknown\";\n break;\n case \"ToolCallResolved\":\n position = \"processing-operations\";\n break;\n case \"ToolApprovalRequested\":\n position = \"waiting-approval\";\n break;\n case \"ToolApprovalDecided\":\n position = \"processing-operations\";\n break;\n case \"SubagentRequested\":\n childResults.set(payload.toolCallId, {\n resultBytes: Math.min(\n MAX_PERSISTED_JSON_BYTES,\n payload.budget?.allocation.resultBytes ?? MAX_PERSISTED_JSON_BYTES,\n ),\n remainingBytes: RUN_TERMINAL_RESERVE_BYTES,\n remainingRecords: 4,\n });\n position = \"waiting-dependency\";\n break;\n case \"SubagentStarted\":\n {\n const reserved = childResults.get(payload.toolCallId);\n\n if (reserved !== undefined)\n childResults.set(payload.toolCallId, {\n ...reserved,\n remainingBytes: Math.max(\n 0,\n reserved.remainingBytes - canonicalRecordBytes(fact) - MAX_RUN_CONTINUATION_BYTES,\n ),\n remainingRecords: reserved.remainingRecords - 1,\n });\n }\n position = \"waiting-dependency\";\n break;\n case \"RunPolicyUsageReserved\":\n if (\n payload.programmaticToolCalls < accounting.programmaticToolCalls ||\n (accounting.finalizationUsed && !payload.finalizationUsed)\n )\n return yield* failure(\"Run reservations cannot be refunded\");\n accounting.programmaticToolCalls = payload.programmaticToolCalls;\n accounting.finalizationUsed = payload.finalizationUsed;\n break;\n case \"ModelCallAborted\": {\n if (payload.restart !== (accounting.modelRestarts ?? 0) + 1)\n return yield* failure(\"Model restart progress must advance once\");\n\n const summary = yield* continuationUsage(payload.modelUsage).pipe(\n Effect.mapError((cause) => failure(\"Invalid cancelled model usage\", cause)),\n );\n\n accounting.modelRestarts = payload.restart;\n accounting.modelCalls += summary.modelCalls;\n accounting.inputTokens += summary.inputTokens;\n accounting.outputTokens += summary.outputTokens;\n accounting.costMicrousd += summary.costMicrousd;\n accounting.unobservedModelCalls += payload.unobservedModelCalls;\n break;\n }\n case \"RunCompleted\":\n case \"RunFailed\":\n completionBytes =\n payload._tag === \"RunCompleted\"\n ? utf8ByteLength(JSON.stringify(payload.output)) +\n (payload.runDisposition === undefined\n ? 0\n : utf8ByteLength(JSON.stringify(payload.runDisposition)))\n : undefined;\n terminal = EvidenceReference.make({ recordId: fact.recordId });\n position = \"settling\";\n break;\n case \"SubmissionSettled\":\n if (payload.submissionId !== submissionId) break;\n terminal = EvidenceReference.make({ recordId: fact.recordId });\n position = \"settled\";\n if (payload.usageSummary !== undefined) {\n accounting.modelCalls = payload.usageSummary.modelCalls;\n accounting.inputTokens = payload.usageSummary.inputTokens.total;\n accounting.outputTokens = payload.usageSummary.outputTokens.total;\n accounting.costMicrousd = payload.usageSummary.costMicrousd;\n accounting.unobservedModelCalls =\n payload.usageSummary.unobservedModelCalls ?? accounting.unobservedModelCalls;\n }\n break;\n default:\n break;\n }\n }\n if (\n response !== undefined &&\n response.turn > accounting.accountedToolTurn &&\n response.toolOperations.every((operation) => results.has(operation.toolCallId))\n ) {\n const messages =\n responsePrompt ??\n responsePrompts.get(response) ??\n (yield* decodeResponsePrompt(response.messages).pipe(\n Effect.mapError((cause) => failure(\"Invalid batch evidence\", cause)),\n ));\n\n const parts = messages.content.flatMap((message) =>\n message.role === \"assistant\" ? message.content : [],\n );\n\n for (const call of parts) {\n if (call.type !== \"tool-call\") continue;\n\n const result = call.providerExecuted\n ? parts.find((part) => part.type === \"tool-result\" && part.id === call.id)\n : results.get(ToolCallId.make(call.id));\n\n if (\n result === undefined ||\n !(\"isFailure\" in result) ||\n (\"budgetRejected\" in result && result.budgetRejected === true)\n )\n continue;\n accounting.consecutiveToolFailures = result.isFailure\n ? accounting.consecutiveToolFailures + 1\n : 0;\n }\n accounting.accountedToolTurn = response.turn;\n results.clear();\n if (position !== \"settling\" && position !== \"settled\") position = \"awaiting-model\";\n }\n const last = facts.at(-1);\n\n if (last === undefined) return yield* failure(\"Progress has no owning fact\");\n if (previous?.continuation.position === \"settled\") position = \"settled\";\n else if (previous?.continuation.position === \"settling\" && position !== \"settled\")\n position = \"settling\";\n\n const turnBase =\n (previous?.continuation.turn === turn ? previous.continuation.turnBytes : initialBytes) +\n factBytes;\n\n const terminalUsageBytes = (previous?.continuation.terminalUsageBytes ?? 0) + usageCharge;\n\n return {\n accounting,\n savedContext,\n latestResponse,\n terminal,\n position,\n response,\n results,\n childResults,\n completionBytes,\n last,\n factBytes,\n turn,\n turnBase,\n usageCharge,\n terminalUsageBytes,\n terminalBytes: (previous?.continuation.terminalBytes ?? 0) + closingBytes,\n terminalRecords: (previous?.continuation.terminalRecords ?? 0) + closingCount,\n closing: closingCount > 0,\n };\n});\n\n/**\n * Verify retained history. Mutable checkpoint revisions are deliberately not historical proof.\n * Active original context is still checked against its exact retained historyDigest.\n */\nexport const verifyRunContinuations = Effect.fnUntraced(function* (\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n options?: {\n readonly verifyContext?: boolean;\n readonly executions?: ReadonlyArray<ExecutionCheckpoint>;\n },\n) {\n const inputs = records.filter(\n ({ record }) =>\n record.payload._tag === \"UserInputRecorded\" &&\n record.payload.kind === \"user\" &&\n record.payload.submissionId !== undefined,\n );\n\n if (records.some(({ record }) => record.payload._tag === \"RunContinuation\"))\n return yield* failure(\"Mutable interpreter progress is not canonical history\");\n for (const input of inputs) {\n const payload = input.record.payload;\n\n if (payload._tag !== \"UserInputRecorded\" || payload.submissionId === undefined) continue;\n const runId = runIdForSubmission(payload.submissionId);\n const own = records.filter((entry) => executionRunIds(entry.record).includes(runId));\n\n const terminal = own.findLast(\n ({ record }) => record.payload._tag === \"SubmissionSettled\" && record.payload.runId === runId,\n );\n\n if (terminal?.record.payload._tag === \"SubmissionSettled\") {\n if (\n terminal.record.payload.historyRecordCount === undefined ||\n own.filter((entry) => entry.sequence <= terminal.sequence).length !==\n terminal.record.payload.historyRecordCount\n )\n return yield* failure(\"Terminal history differs from its retained fact count\");\n continue;\n }\n if (options?.verifyContext === false) continue;\n const checkpoint = options?.executions?.find((value) => value.progress.runId === runId);\n\n if (checkpoint === undefined) {\n if (own.some(({ record }) => !isPreContinuationFact(record)))\n return yield* failure(\"Active execution is missing its authoritative checkpoint\");\n continue;\n }\n\n const saved = checkpoint.operational.find(\n ({ payload }) => payload._tag === \"RunContextRecorded\",\n );\n\n if (saved?.payload._tag === \"RunContextRecorded\") {\n yield* validateContextBoundary(saved.payload, input).pipe(\n Effect.mapError((cause) => failure(\"Context has an invalid admission boundary\", cause)),\n );\n yield* readRunContext(saved.payload, input, saved.recordId).pipe(\n Effect.mapError((cause) => failure(\"Context differs from its original history\", cause)),\n );\n }\n }\n});\n\n/**\n * Prepare progress for the existing atomic append/publication. Accept the returned state only\n * after that append commits; a failed or stale producer cannot publish speculative progress.\n * One writer retains bounded metadata for its active Run, not its historical results or IDs.\n */\nexport const makeProgressWriter = Effect.fnUntraced(function* (\n threadId: ThreadId,\n deploymentId: DeploymentId,\n) {\n const reader = yield* ThreadReader;\n const gate = yield* Semaphore.make(1);\n const cached = new Map<RunId, ProgressState>();\n\n let verifiedEmpty:\n | {\n readonly runId: RunId;\n readonly through: CanonicalSequence;\n readonly writer: CurrentRunWriter[\"Service\"];\n }\n | undefined;\n\n const reservations = new Map<\n RecordId,\n {\n readonly runId: RunId;\n readonly turn: number;\n readonly bytes: number;\n readonly records: number;\n }\n >();\n\n const stagedUsage = new Map<RunId, number>();\n\n const provide = <A, E>(effect: Effect.Effect<A, E, ThreadReader>) =>\n Effect.provideService(effect, ThreadReader, reader);\n\n const loadUncachedState = Effect.fnUntraced(function* (runId: RunId, after: CanonicalSequence) {\n const loaded = yield* provide(readContinuation(threadId, runId, after));\n\n if (Option.isNone(loaded)) return undefined;\n const continuation = loaded.value.continuation;\n let response: ModelResponseRecorded | undefined;\n let completionBytes: number | undefined;\n const results = new Map<ToolCallId, ToolCallSettled>();\n\n const childResults = new Map<ToolCallId, ChildResultCapacity>();\n\n if (continuation.latestResponse !== undefined) {\n const evidence = yield* provide(resolveEvidence(threadId, continuation.latestResponse));\n\n if (\n evidence.record.payload._tag !== \"ModelResponseRecorded\" ||\n evidence.record.payload.runId !== runId\n )\n return yield* failure(\"Continuation operation reference is invalid\");\n response = evidence.record.payload;\n if (continuation.accounting.accountedToolTurn < response.turn) {\n for (const operation of response.toolOperations) {\n const found = yield* provide(\n getRecord({\n threadId,\n recordId: toolCallSettledRecordId(runId, response.turn, operation.toolCallId),\n }),\n );\n\n if (Option.isSome(found)) {\n const result = found.value.record.payload;\n\n if (\n result._tag !== \"ToolCallSettled\" ||\n result.runId !== runId ||\n result.toolCallId !== operation.toolCallId ||\n result.toolName !== operation.toolName\n )\n return yield* failure(\"Continuation result identity is invalid\");\n results.set(operation.toolCallId, result);\n } else if (operation.executionKind === \"delegation\") {\n const requested = yield* provide(\n getRecord({\n threadId,\n recordId: subagentRequestedRecordId(runId, operation.toolCallId),\n }),\n );\n\n if (\n Option.isSome(requested) &&\n requested.value.record.payload._tag === \"SubagentRequested\"\n ) {\n if (\n requested.value.record.payload.runId !== runId ||\n requested.value.record.payload.toolCallId !== operation.toolCallId\n )\n return yield* failure(\"Continuation child request identity is invalid\");\n\n const started = yield* provide(\n getRecord({\n threadId,\n recordId: subagentStartedRecordId(runId, operation.toolCallId),\n }),\n );\n\n if (\n Option.isSome(started) &&\n (started.value.record.payload._tag !== \"SubagentStarted\" ||\n started.value.record.payload.runId !== runId ||\n started.value.record.payload.toolCallId !== operation.toolCallId ||\n started.value.record.payload.childThreadId !==\n requested.value.record.payload.childThreadId)\n )\n return yield* failure(\"Continuation child start identity is invalid\");\n\n const startedBytes = Option.isSome(started)\n ? canonicalRecordBytes(started.value.record) + MAX_RUN_CONTINUATION_BYTES\n : 0;\n\n childResults.set(operation.toolCallId, {\n resultBytes: Math.min(\n MAX_PERSISTED_JSON_BYTES,\n requested.value.record.payload.budget?.allocation.resultBytes ??\n MAX_PERSISTED_JSON_BYTES,\n ),\n remainingBytes: Math.max(0, RUN_TERMINAL_RESERVE_BYTES - startedBytes),\n remainingRecords: Option.isSome(started) ? 3 : 4,\n });\n }\n }\n }\n }\n }\n if (continuation.position === \"settling\" && continuation.terminal !== undefined) {\n const terminal = yield* provide(\n resolveExecutionEvidence(threadId, loaded.value.checkpoint, continuation.terminal),\n );\n\n const payload = terminal.payload;\n\n if (payload._tag === \"RunCompleted\")\n completionBytes =\n utf8ByteLength(JSON.stringify(payload.output)) +\n (payload.runDisposition === undefined\n ? 0\n : utf8ByteLength(JSON.stringify(payload.runDisposition)));\n }\n\n return {\n continuation,\n record: loaded.value.record,\n checkpoint: loaded.value.checkpoint,\n ...(response === undefined ? {} : { response }),\n results,\n childResults,\n ...(completionBytes === undefined ? {} : { completionBytes }),\n };\n });\n\n const checkFutureShapes = (\n state: ProgressState,\n cursorBytes?: number,\n ): Effect.Effect<void, ThreadStoreError> => {\n const progress = state.continuation;\n\n if (progress.position === \"settled\") return Effect.void;\n const size = cursorBytes ?? canonicalRecordBytes(state.record);\n const textBytes = (value: string) => utf8ByteLength(JSON.stringify(value));\n const refBytes = (value: EvidenceReference) => utf8ByteLength(JSON.stringify(value));\n\n const ref = (recordId: RecordId) => EvidenceReference.make({ recordId });\n\n const fits = (batchId: string, lastFact: EvidenceReference, terminal?: EvidenceReference) =>\n // Only these identities change. The fixed allowance covers scalar and timestamp growth.\n size +\n textBytes(JSON.stringify([\"continuation@1\", progress.runId, batchId])) -\n textBytes(state.record.recordId) +\n textBytes(deploymentId) -\n textBytes(state.record.deploymentId) +\n refBytes(lastFact) -\n refBytes(progress.lastFact) +\n (terminal === undefined\n ? 0\n : refBytes(terminal) -\n (progress.terminal === undefined ? 0 : refBytes(progress.terminal)) +\n 12) +\n 1024 <=\n MAX_RUN_CONTINUATION_BYTES;\n\n if (\n !fits(\n submissionSettlementBatchId(progress.submissionId),\n ref(submissionSettlementRecordId(progress.submissionId)),\n ref(runCompletedRecordId(progress.runId)),\n )\n )\n return Effect.fail(capacityFailure(\"Run has no room for a terminal continuation envelope\"));\n\n if (\n state.response !== undefined &&\n progress.accounting.accountedToolTurn < state.response.turn\n ) {\n for (const operation of state.response.toolOperations) {\n if (state.results.has(operation.toolCallId)) continue;\n if (\n !fits(\n toolCallResultBatchId(progress.runId, state.response.turn, operation.toolCallId),\n ref(toolCallSettledRecordId(progress.runId, state.response.turn, operation.toolCallId)),\n )\n )\n return Effect.fail(\n capacityFailure(\"Tool dispatch has no room for its result continuation envelope\"),\n );\n }\n }\n\n return Effect.void;\n };\n\n const checkCapacity = (\n state: CapacityState,\n consumed: ReadonlySet<RecordId> = new Set(),\n extra?: { readonly turn: number; readonly bytes: number; readonly records: number },\n committedUsageBytes = 0,\n ): Effect.Effect<void, ThreadStoreError> => {\n const progress = state.continuation;\n const pending = resultCapacity(state);\n\n const terminal =\n progress.position === \"settled\"\n ? 0\n : Math.max(\n 0,\n RUN_TERMINAL_RESERVE_BYTES +\n 2 * (state.completionBytes ?? 0) +\n 2 *\n (progress.terminalUsageBytes +\n Math.max(0, (stagedUsage.get(progress.runId) ?? 0) - committedUsageBytes)) -\n progress.terminalBytes,\n );\n\n let turnBytes =\n (extra !== undefined && extra.turn !== progress.turn ? 0 : progress.turnBytes) +\n pending.bytes +\n terminal +\n (extra?.bytes ?? 0);\n\n let recordBytes = progress.recordBytes + pending.bytes + terminal + (extra?.bytes ?? 0);\n\n let recordCount =\n progress.recordCount +\n pending.records +\n (progress.position === \"settled\"\n ? 0\n : Math.max(0, RUN_TERMINAL_RESERVE_RECORDS - progress.terminalRecords)) +\n (extra?.records ?? 0);\n\n for (const [recordId, reservation] of reservations) {\n if (reservation.runId !== progress.runId || consumed.has(recordId)) continue;\n if (reservation.turn === (extra?.turn ?? progress.turn)) turnBytes += reservation.bytes;\n recordBytes += reservation.bytes;\n recordCount += reservation.records;\n }\n if (\n turnBytes > MAX_TURN_CANONICAL_BYTES ||\n recordBytes > MAX_RUN_EVIDENCE_BYTES ||\n recordCount > MAX_RUN_EVIDENCE_RECORDS\n )\n return Effect.fail(\n failure(\n \"Run has no remaining canonical dispatch capacity\",\n AgentPersistenceCapacityError.make({\n message: \"Run has no room for the next result and a bounded terminal settlement\",\n }),\n ),\n );\n\n return Effect.void;\n };\n\n const prepare = Effect.fnUntraced(function* (\n batch: CanonicalBatch,\n after: CanonicalSequence,\n mode: \"commit\" | \"preflight\" = \"commit\",\n ) {\n if (batch.records.some((record) => record.payload._tag === \"RunContinuation\"))\n return yield* failure(\"A caller cannot supply interpreter progress to the progress writer\");\n\n // Every private caller passes captureFacts' owned snapshot. Keep a mutable\n // list for settlement accounting without capturing that snapshot a second time.\n const ownedRecords = [...batch.records];\n\n const groups = new Map<RunId, Array<RecordEnvelope>>();\n\n for (const record of ownedRecords) {\n for (const runId of executionRunIds(record)) {\n const facts = groups.get(runId) ?? [];\n\n facts.push(record);\n groups.set(runId, facts);\n }\n }\n const executions: Array<ExecutionUpdate> = [];\n const accepted = new Map<RunId, ProgressState>();\n let executionCount = 0;\n\n for (const [runId, facts] of groups) {\n const empty =\n verifiedEmpty?.runId === runId &&\n verifiedEmpty.through === after &&\n // Settlement preparation need not have a Run writer; absence disables reuse.\n verifiedEmpty.writer ===\n Option.getOrUndefined(yield* Effect.serviceOption(CurrentRunWriter));\n\n const previous = empty\n ? undefined\n : (cached.get(runId) ?? (yield* loadUncachedState(runId, after)));\n\n let original = facts.find(\n (record) =>\n record.payload._tag === \"UserInputRecorded\" &&\n record.payload.kind === \"user\" &&\n record.payload.runId === runId &&\n record.payload.submissionId !== undefined,\n );\n\n let originalCount = 0;\n let initialBytes = 0;\n let originalSequence = previous?.checkpoint?.originalSequence;\n\n if (previous === undefined && original === undefined) {\n const input = yield* provide(getRunInput({ threadId, runId }));\n\n if (\n Option.isNone(input) ||\n input.value.record.payload._tag !== \"UserInputRecorded\" ||\n input.value.record.payload.submissionId === undefined\n )\n continue;\n\n original = input.value.record;\n originalSequence = input.value.sequence;\n }\n\n const submissionId =\n previous?.continuation.submissionId ??\n (original?.payload._tag === \"UserInputRecorded\"\n ? original.payload.submissionId\n : undefined);\n\n if (submissionId === undefined)\n return yield* failure(\"Run progress has no original admission identity\");\n if (runId !== runIdForSubmission(submissionId))\n return yield* failure(\"Run progress conflicts with its original admission\");\n if (previous === undefined && original === undefined)\n return yield* failure(\"Run has no accepted original input\");\n\n if (previous === undefined && !empty) {\n const settled = yield* provide(\n getRecord({\n threadId,\n recordId: submissionSettlementRecordId(submissionId),\n }),\n );\n\n if (\n Option.isSome(settled) &&\n settled.value.sequence <= after &&\n settled.value.record.payload._tag === \"SubmissionSettled\" &&\n settled.value.record.payload.runId === runId &&\n settled.value.record.payload.historyRecordCount !== undefined &&\n facts.every(\n ({ payload }) =>\n payload._tag === \"WorkerReportPrepared\" ||\n payload._tag === \"SubmissionSettled\" ||\n payload._tag === \"ToolCallSettled\" ||\n payload._tag === \"ToolCallResolved\" ||\n payload._tag === \"SubagentJoined\",\n )\n )\n // Independent obligations can record factual closure after interpreter retirement.\n continue;\n\n const selected = yield* provide(\n Stream.runCollect(\n runEvidence(threadId, submissionId, after).pipe(\n Stream.take(MAX_RUN_RECOVERY_SUFFIX_RECORDS + 1),\n ),\n ),\n );\n\n const existing = selected.filter(({ record }) => executionRunIds(record).includes(runId));\n\n if (\n !validateSuffix(existing, CanonicalSequence.make(0)) ||\n existing.some(({ record }) => !isPreContinuationFact(record))\n )\n return yield* failure(\n `Run execution has no active checkpoint or exceeds its preparation bound (${facts.map((fact) => fact.payload._tag).join(\", \")})`,\n );\n originalCount = existing.length;\n initialBytes = existing.reduce(\n (bytes, entry) => bytes + canonicalRecordBytes(entry.record),\n 0,\n );\n }\n\n const canonicalRecords =\n (previous?.checkpoint?.canonicalRecords ?? originalCount) +\n facts.filter((fact) => !isOperationalRecord(fact)).length;\n\n for (let index = 0; index < facts.length; index++) {\n const fact = facts[index]!;\n const payload = fact.payload;\n\n if (payload._tag !== \"SubmissionSettled\" || payload.runId !== runId) continue;\n\n const retained = yield* Effect.fromResult(\n captureRecord(\n RecordEnvelope.make({\n ...fact,\n payload: { ...payload, historyRecordCount: canonicalRecords },\n }),\n ),\n ).pipe(\n Effect.map((record) => record.canonical),\n Effect.mapError((cause) => failure(\"Cannot capture canonical progress facts\", cause)),\n );\n\n facts[index] = retained;\n ownedRecords[ownedRecords.indexOf(fact)] = retained;\n }\n\n const originalInput =\n previous !== undefined\n ? previous.continuation.originalInput\n : original === undefined\n ? yield* failure(\"Run progress has no original input\")\n : EvidenceReference.make({ recordId: original.recordId });\n\n const next = yield* advanceFacts(previous, facts, submissionId, initialBytes);\n\n const {\n accounting,\n savedContext,\n latestResponse,\n terminal,\n position,\n response,\n results,\n childResults,\n completionBytes,\n last,\n factBytes,\n turn,\n turnBase,\n usageCharge,\n terminalUsageBytes,\n } = next;\n\n let continuation = yield* RunContinuation.makeEffect({\n version: 1,\n runId,\n submissionId,\n revision: (previous?.continuation.revision ?? 0) + 1,\n recordCount: (previous?.continuation.recordCount ?? originalCount) + facts.length,\n recordBytes: (previous?.continuation.recordBytes ?? initialBytes) + factBytes,\n turn,\n turnBytes: turnBase,\n terminalUsageBytes,\n terminalBytes: next.terminalBytes,\n terminalRecords: next.terminalRecords,\n originalInput,\n ...(savedContext === undefined ? {} : { savedContext }),\n ...(latestResponse === undefined ? {} : { latestResponse }),\n ...(terminal === undefined ? {} : { terminal }),\n lastFact: EvidenceReference.make({ recordId: last.recordId }),\n position,\n accounting,\n }).pipe(\n Effect.mapError(() =>\n capacityFailure(\"Canonical continuation exceeds its protocol bounds\"),\n ),\n );\n\n const header = {\n recordId: RecordId.make(JSON.stringify([\"continuation@1\", runId, batch.batchId])),\n family: \"thread\" as const,\n schemaVersion: 1 as const,\n createdAt: last.createdAt,\n deploymentId: last.deploymentId,\n };\n\n // The validated continuation fields are JSON; only the envelope DateTime needs encoding.\n // Key order does not change byte width. Measure without capturing a provisional record,\n // then compare against the final Schema encoding before accepting its accounting.\n const provisional = {\n ...header,\n createdAt: DateTime.formatIso(header.createdAt),\n payload: continuation,\n } satisfies typeof RecordEnvelope.Encoded;\n\n const initialCursorBytes = utf8ByteLength(JSON.stringify(provisional));\n\n const initialWidth =\n String(continuation.turnBytes).length + String(continuation.terminalBytes).length;\n\n let turnBytes = continuation.turnBytes;\n let terminalBytes = continuation.terminalBytes;\n\n for (let attempts = 0; ; attempts++) {\n const cursorBytes =\n initialCursorBytes +\n String(turnBytes).length +\n String(terminalBytes).length -\n initialWidth;\n\n const nextTurnBytes = turnBase + cursorBytes;\n const nextTerminalBytes = next.terminalBytes + (next.closing ? cursorBytes : 0);\n\n if (nextTurnBytes === turnBytes && nextTerminalBytes === terminalBytes) break;\n if (attempts >= 4) return yield* failure(\"Continuation byte accounting did not converge\");\n turnBytes = nextTurnBytes;\n terminalBytes = nextTerminalBytes;\n }\n\n const checkedBytes = yield* ContinuationBytes.makeEffect({\n turnBytes,\n terminalBytes,\n }).pipe(\n Effect.mapError(() =>\n capacityFailure(\"Turn exceeds its incremental canonical byte budget\"),\n ),\n );\n\n // Every other field was checked above; byte accounting changes only these counters.\n continuation = RunContinuation.make(\n { ...continuation, ...checkedBytes },\n { disableChecks: true },\n );\n\n const proposedRecord = RecordEnvelope.make(\n { ...header, payload: continuation },\n { disableChecks: true },\n );\n\n const cursorBytes = turnBytes - turnBase;\n\n if (cursorBytes > MAX_RUN_CONTINUATION_BYTES)\n return yield* capacityFailure(\n \"Encoded continuation exceeds 8192 bytes including its envelope\",\n );\n executionCount++;\n if (\n mode === \"preflight\" &&\n previous?.checkpoint !== undefined &&\n facts.every(({ payload }) => payload._tag === \"ModelResponseRecorded\")\n ) {\n // The payload and header are validated, and operational facts are unchanged.\n // Dispatch needs their capacity proof; only a commit needs checkpoint wire.\n yield* decodeExecutionFrontier({\n canonicalRecords,\n throughSequence: after + ownedRecords.filter((fact) => !isOperationalRecord(fact)).length,\n }).pipe(Effect.mapError((cause) => failure(\"Active execution exceeds its bounds\", cause)));\n\n const state: ProgressState = {\n continuation,\n record: proposedRecord,\n ...(response === undefined ? {} : { response }),\n results,\n childResults,\n ...(completionBytes === undefined ? {} : { completionBytes }),\n };\n\n yield* checkCapacity(\n state,\n new Set(batch.records.map(({ recordId }) => recordId)),\n undefined,\n usageCharge,\n );\n yield* checkFutureShapes(state, cursorBytes);\n continue;\n }\n\n const record = yield* Effect.fromResult(captureRecord(proposedRecord)).pipe(\n Effect.map((record) => record.canonical),\n Effect.mapError((cause) => failure(\"Cannot capture canonical progress facts\", cause)),\n );\n\n if (!isExecutionProgressRecord(record))\n return yield* failure(\"Captured execution has no Run continuation\");\n if (canonicalRecordBytes(record) !== cursorBytes)\n return yield* failure(\"Continuation byte accounting differs from its Schema encoding\");\n\n const operational = new Map(\n (previous?.checkpoint?.operational ?? []).map((fact) => [fact.recordId, fact]),\n );\n\n const changed = facts.filter(isOperationalRecord);\n\n for (const fact of changed) {\n const prior = operational.get(fact.recordId);\n\n if (\n prior !== undefined &&\n (yield* Effect.fromResult(recordEncoding(prior)).pipe(\n Effect.mapError((cause) => failure(\"Cannot encode active Run fact\", cause)),\n )).json !==\n (yield* Effect.fromResult(recordEncoding(fact)).pipe(\n Effect.mapError((cause) => failure(\"Cannot encode active Run fact\", cause)),\n )).json\n )\n return yield* failure(\"An active Run fact cannot change after becoming durable\");\n operational.set(fact.recordId, fact);\n }\n\n const checkpoint = yield* ExecutionCheckpoint.makeEffect({\n version: 2,\n progressRecord: record,\n operational: [...operational.values()],\n canonicalRecords,\n originalSequence:\n originalSequence ??\n CanonicalSequence.make(\n after +\n ownedRecords\n .filter((fact) => !isOperationalRecord(fact))\n .findIndex((fact) => fact.recordId === originalInput.recordId) +\n 1,\n ),\n throughSequence: CanonicalSequence.make(\n after + ownedRecords.filter((fact) => !isOperationalRecord(fact)).length,\n ),\n batchId: batch.batchId,\n }).pipe(Effect.mapError((cause) => failure(\"Active execution exceeds its bounds\", cause)));\n\n const state = {\n continuation,\n record,\n checkpoint,\n ...(response === undefined ? {} : { response }),\n results,\n childResults,\n ...(completionBytes === undefined ? {} : { completionBytes }),\n };\n\n if (\n !facts.every((fact) => isTerminalBudgetFact(fact) && fact.payload._tag !== \"RunCompleted\")\n )\n yield* checkCapacity(\n state,\n new Set(batch.records.map(({ recordId }) => recordId)),\n undefined,\n usageCharge,\n );\n yield* checkFutureShapes(state);\n executions.push(\n ExecutionUpdate.make({\n previousRevision: previous?.continuation.revision ?? 0,\n checkpoint,\n facts: changed,\n // Pending operations and handoffs retain their own recovery rows and original facts.\n retire: position === \"settled\",\n }),\n );\n accepted.set(runId, state);\n }\n\n if (ownedRecords.length + executionCount > 256)\n return yield* failure(\"Progress and facts exceed the atomic batch bound\");\n\n const prepared = CommitBatch.make(\n {\n ...batch,\n records: ownedRecords.filter((fact) => !isOperationalRecord(fact)),\n },\n { disableChecks: true },\n );\n\n return {\n batch: prepared,\n executions,\n accept: () => {\n for (const record of batch.records) reservations.delete(record.recordId);\n for (const [runId, state] of accepted) {\n if (executions.find((update) => update.checkpoint.progress.runId === runId)?.retire)\n cached.delete(runId);\n else cached.set(runId, state);\n }\n // Administrative writers can address many old Runs; retention is still bounded.\n while (cached.size > 8) {\n const first = cached.keys().next().value;\n\n if (first !== undefined) cached.delete(first);\n }\n },\n };\n });\n\n const tail = Effect.flatMap(CurrentRunWriter, (writer) =>\n writer.threadId !== threadId\n ? Effect.fail(failure(\"Progress writer belongs to another Thread\"))\n : Effect.map(writer.tail, (position) => position.sequence),\n );\n\n const commitCaptured = Effect.fnUntraced(\n function* (batch: CanonicalBatch) {\n const writer = yield* CurrentRunWriter;\n\n for (let retries = 0; ; retries++) {\n const prepared = yield* prepare(batch, yield* tail).pipe(\n Effect.catchTag(\"ThreadNotMaterialized\", (cause) =>\n failure(\"Selected Run disappeared during progress publication\", cause),\n ),\n );\n\n const result = yield* writer.append(prepared.batch, prepared.executions).pipe(\n Effect.catchTag(\"AppendConflict\", (conflict) => {\n if (conflict.reason !== \"tail\" || retries >= 8) return Effect.fail(conflict);\n cached.clear();\n\n return Effect.succeed(undefined);\n }),\n );\n\n if (result === undefined) continue;\n\n if (result.replayed) cached.clear();\n else prepared.accept();\n\n return result;\n }\n },\n (effect) =>\n Effect.flatMap(CurrentRunWriter, (writer) =>\n writer.withProgress(gate.withPermits(1)(effect)),\n ),\n );\n\n const publishCaptured = Effect.fnUntraced(\n function* (batch: CanonicalBatch) {\n const publisher = yield* CurrentRunSettlement;\n\n if (publisher.threadId !== threadId)\n return yield* failure(\"Settlement publisher belongs to another Thread\");\n\n for (let retries = 0; ; retries++) {\n const prepared = yield* prepare(batch, (yield* publisher.tail).sequence).pipe(\n Effect.catchTag(\"ThreadNotMaterialized\", (cause) =>\n failure(\"Selected Run disappeared during progress publication\", cause),\n ),\n );\n\n const first = prepared.batch.records[0];\n\n if (first === undefined)\n return yield* failure(\"Settlement must publish a retained terminal fact\");\n\n const terminalBatch = yield* CanonicalBatch.makeEffect({\n ...prepared.batch,\n records: [first, ...prepared.batch.records.slice(1)],\n }).pipe(\n Effect.mapError((cause) =>\n failure(\"Settlement must publish a retained terminal fact\", cause),\n ),\n );\n\n const result = yield* publisher.publishSettlement(terminalBatch, prepared.executions).pipe(\n Effect.catchTag(\"AppendConflict\", (conflict) => {\n if (conflict.reason !== \"tail\" || retries >= 8) return Effect.fail(conflict);\n cached.clear();\n\n return Effect.succeed(undefined);\n }),\n );\n\n if (result === undefined) continue;\n\n if (result.replayed) cached.clear();\n else prepared.accept();\n\n return result;\n }\n },\n (effect) =>\n Effect.flatMap(CurrentRunSettlement, (writer) =>\n writer.withProgress(gate.withPermits(1)(effect)),\n ),\n );\n\n const commit = (batch: CommitBatch) => captureFacts(batch).pipe(Effect.flatMap(commitCaptured));\n\n const publish = (batch: CanonicalBatch) =>\n captureFacts(batch).pipe(Effect.flatMap(publishCaptured));\n\n const reserve = (runId: RunId, probe: CanonicalBatch, bytes: number) =>\n gate.withPermits(1)(\n Effect.gen(function* () {\n const after = yield* tail;\n\n yield* prepare(yield* captureFacts(probe), after);\n const recordId = probe.records[0].recordId;\n const state = cached.get(runId) ?? (yield* loadUncachedState(runId, after));\n\n if (state === undefined) return yield* failure(\"Dispatch has no canonical Run progress\");\n if (reservations.has(recordId))\n return yield* failure(\"Dispatch capacity is already reserved\");\n yield* checkCapacity(state, new Set(), {\n turn: state.continuation.turn,\n bytes,\n records: 1,\n });\n reservations.set(recordId, { runId, turn: state.continuation.turn, bytes, records: 1 });\n\n return gate.withPermits(1)(\n Effect.sync(() => {\n reservations.delete(recordId);\n }),\n );\n }),\n );\n\n const defer = (batch: CanonicalBatch) =>\n gate.withPermits(1)(\n Effect.gen(function* () {\n const after = yield* tail;\n\n const owned = yield* captureFacts(batch);\n\n yield* prepare(owned, after, \"preflight\");\n\n const response = owned.records.find(\n (record) => record.payload._tag === \"ModelResponseRecorded\",\n );\n\n if (response === undefined || response.payload._tag !== \"ModelResponseRecorded\")\n return yield* failure(\"Deferred dispatch has no response\");\n\n const progress =\n cached.get(response.payload.runId) ??\n (yield* loadUncachedState(response.payload.runId, after));\n\n if (progress === undefined) return yield* failure(\"Deferred dispatch has no Run progress\");\n\n const pending = resultCapacity({\n ...progress,\n continuation: {\n ...progress.continuation,\n accounting: { ...progress.continuation.accounting, accountedToolTurn: 0 },\n },\n response: response.payload,\n results: new Map(),\n childResults: new Map(),\n });\n\n const bytes =\n owned.records.reduce((total, record) => total + canonicalRecordBytes(record), 0) +\n MAX_RUN_CONTINUATION_BYTES +\n pending.bytes;\n\n const records = owned.records.length + pending.records;\n\n yield* checkCapacity(progress, new Set(), { turn: response.payload.turn, bytes, records });\n reservations.set(response.recordId, {\n runId: response.payload.runId,\n turn: response.payload.turn,\n bytes,\n records,\n });\n\n return owned;\n }),\n );\n\n const checkState = (state: ProgressState | undefined, recovered: boolean) => {\n if (state === undefined) return Effect.fail(failure(\"Execution has no canonical Run progress\"));\n\n const capacity = () =>\n state.continuation.position === \"settling\" || state.continuation.position === \"settled\"\n ? Effect.void\n : checkCapacity(state);\n\n // Accepted states were shape-checked, but usage and reservations remain live inputs.\n return recovered ? Effect.andThen(checkFutureShapes(state), capacity) : capacity();\n };\n\n const check = (runId: RunId) =>\n gate.withPermits(1)(\n Effect.flatMap(CurrentRunWriter, (writer) => {\n if (writer.threadId !== threadId)\n return Effect.fail(failure(\"Progress writer belongs to another Thread\"));\n\n const retained = cached.get(runId);\n\n if (retained !== undefined) return checkState(retained, false);\n\n return Effect.flatMap(writer.tail, (position) =>\n Effect.flatMap(loadUncachedState(runId, position.sequence), (state) =>\n checkState(state, true),\n ),\n );\n }),\n );\n\n return {\n commit,\n publish,\n reserve,\n defer,\n check,\n /** Internal read view immediately after this writer's acknowledged commit, while\n * holding its initialization gates. Never authority across ownership or writes. */\n acceptedCheckpoint: (runId: RunId) => cached.get(runId)?.checkpoint,\n /** Scope a verified empty execution/evidence view to one owned initialization body.\n * The caller holds progress+mutation gates; a changed writer or tail never reuses it. */\n withVerifiedEmptyRun: <A, E, R>(\n runId: RunId,\n through: CanonicalSequence,\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<A, E, R | CurrentRunWriter> =>\n Effect.flatMap(CurrentRunWriter, (writer) => {\n const view = { runId, through, writer };\n\n verifiedEmpty = view;\n\n return body.pipe(\n Effect.ensuring(\n Effect.sync(() => {\n if (verifiedEmpty === view) verifiedEmpty = undefined;\n }),\n ),\n );\n }),\n stageUsage: (runId: RunId, bytes: number) => {\n if (bytes === 0) stagedUsage.delete(runId);\n else stagedUsage.set(runId, bytes);\n },\n };\n});\n"],"mappings":"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"}