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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/dist/{Admin-Bpg24yCK.d.mts → Admin-NvXFPDIM.d.mts} +26 -6
  2. package/dist/{DurableAgentRuntime-CGW93k81.mjs → DurableAgentRuntime-CWhu1exp.mjs} +49 -69
  3. package/dist/DurableAgentRuntime-CWhu1exp.mjs.map +1 -0
  4. package/dist/{EventSource-A6TB7t-f.d.mts → EventSource-DNyaWmyQ.d.mts} +2 -2
  5. package/dist/{MessageDelivery-BkWrcQUd.d.mts → MessageDelivery-CLzWJImC.d.mts} +42 -42
  6. package/dist/{PreparedInputAdmission-DKIfqRZT.d.mts → PreparedInputAdmission-BQ9UCLFS.d.mts} +3 -3
  7. package/dist/{RunContinuation-D42RFqjS.mjs → RunContinuation-BF95Ncv2.mjs} +9 -11
  8. package/dist/RunContinuation-BF95Ncv2.mjs.map +1 -0
  9. package/dist/{RunContinuation-Ce2pR8VD.d.mts → RunContinuation-CL0wBsQE.d.mts} +3 -6
  10. package/dist/{RunStorage-BRGP3Tcu.mjs → RunStorage-DlfvMfHM.mjs} +20 -6
  11. package/dist/RunStorage-DlfvMfHM.mjs.map +1 -0
  12. package/dist/{Subscription-D5sOrmlI.d.mts → Subscription-D2yn6Eo3.d.mts} +2 -2
  13. package/dist/{SubscriptionInput-CxSXZUiC.d.mts → SubscriptionInput-Cog4x7Rd.d.mts} +2 -2
  14. package/dist/{ThreadImport-DUcPj5jC.mjs → ThreadImport-BoTfjjrz.mjs} +4 -4
  15. package/dist/{ThreadImport-DUcPj5jC.mjs.map → ThreadImport-BoTfjjrz.mjs.map} +1 -1
  16. package/dist/{ThreadImport-C6IiPJMW.d.mts → ThreadImport-em89zmM-.d.mts} +4 -4
  17. package/dist/{ThreadStore-Cn6FDWX9.mjs → ThreadStore-D2rqtt7k.mjs} +13 -8
  18. package/dist/ThreadStore-D2rqtt7k.mjs.map +1 -0
  19. package/dist/{ThreadTransfer-BWnAHIge.mjs → ThreadTransfer-BFolkpEp.mjs} +2 -2
  20. package/dist/{ThreadTransfer-BWnAHIge.mjs.map → ThreadTransfer-BFolkpEp.mjs.map} +1 -1
  21. package/dist/{WorkerAdmission-cfiK9aRi.mjs → WorkerAdmission-CtX1HRkm.mjs} +2 -2
  22. package/dist/{WorkerAdmission-cfiK9aRi.mjs.map → WorkerAdmission-CtX1HRkm.mjs.map} +1 -1
  23. package/dist/capabilities/BrowserUse.d.mts +36 -18
  24. package/dist/capabilities/BrowserUse.mjs +43 -11
  25. package/dist/capabilities/BrowserUse.mjs.map +1 -1
  26. package/dist/capabilities/CodeMode.mjs +1 -0
  27. package/dist/capabilities/CodeMode.mjs.map +1 -1
  28. package/dist/durable/Admin.d.mts +1 -1
  29. package/dist/durable/AgentRegistration.d.mts +1 -1
  30. package/dist/durable/Certification.d.mts +1 -1
  31. package/dist/durable/CommittedActivity.d.mts +1 -1
  32. package/dist/durable/CommittedActivity.mjs +1 -1
  33. package/dist/durable/DurableAgentRuntime.d.mts +1 -1
  34. package/dist/durable/DurableAgentRuntime.mjs +2 -2
  35. package/dist/durable/EventSource.d.mts +1 -1
  36. package/dist/durable/GitHubWorkflowSource.d.mts +3 -3
  37. package/dist/durable/LifecyclePublication.d.mts +1 -1
  38. package/dist/durable/LifecyclePublication.mjs +1 -1
  39. package/dist/durable/MessageDelivery.d.mts +1 -1
  40. package/dist/durable/MessageDeliveryStoreConformance.d.mts +2 -2
  41. package/dist/durable/PersistentHistory.d.mts +1 -1
  42. package/dist/durable/PersistentHistory.mjs +2 -2
  43. package/dist/durable/PreparedInputAdmission.d.mts +1 -1
  44. package/dist/durable/Recovery.d.mts +1 -1
  45. package/dist/durable/RunContinuation.d.mts +2 -2
  46. package/dist/durable/RunContinuation.mjs +2 -2
  47. package/dist/durable/RunJournal.d.mts +1 -1
  48. package/dist/durable/RunStorage.d.mts +1 -1
  49. package/dist/durable/RunStorage.mjs +1 -1
  50. package/dist/durable/Scheduling.d.mts +1 -1
  51. package/dist/durable/SettlementPublisher.d.mts +1 -1
  52. package/dist/durable/SettlementPublisher.mjs +1 -1
  53. package/dist/durable/SubmissionLedger.d.mts +1 -1
  54. package/dist/durable/SubmissionLedgerConformance.d.mts +1 -1
  55. package/dist/durable/SubmissionLedgerConformance.mjs +2 -2
  56. package/dist/durable/SubmissionStatus.d.mts +1 -1
  57. package/dist/durable/Subscription.d.mts +1 -1
  58. package/dist/durable/SubscriptionInput.d.mts +1 -1
  59. package/dist/durable/SubscriptionStoreConformance.d.mts +1 -1
  60. package/dist/durable/SubscriptionTools.d.mts +2 -2
  61. package/dist/durable/SubscriptionTransition.d.mts +1 -1
  62. package/dist/durable/Subscriptions.d.mts +5 -5
  63. package/dist/durable/ThreadArchiveRange.d.mts +1 -1
  64. package/dist/durable/ThreadContextHistory.d.mts +1 -1
  65. package/dist/durable/ThreadContextHistory.mjs +1 -1
  66. package/dist/durable/ThreadImport.d.mts +1 -1
  67. package/dist/durable/ThreadImport.mjs +1 -1
  68. package/dist/durable/ThreadInvariants.d.mts +3 -3
  69. package/dist/durable/ThreadInvariants.mjs +3 -3
  70. package/dist/durable/ThreadProjectionMaintenance.d.mts +1 -1
  71. package/dist/durable/ThreadReader.d.mts +1 -1
  72. package/dist/durable/ThreadReader.mjs +1 -1
  73. package/dist/durable/ThreadStore.d.mts +2 -2
  74. package/dist/durable/ThreadStore.mjs +2 -2
  75. package/dist/durable/ThreadStoreConformance.d.mts +2 -1
  76. package/dist/durable/ThreadStoreConformance.mjs +2 -2
  77. package/dist/durable/ThreadTransfer.d.mts +1 -1
  78. package/dist/durable/ThreadTransfer.mjs +1 -1
  79. package/dist/durable/ThreadWork.d.mts +1 -1
  80. package/dist/durable/ThreadWork.mjs +2 -2
  81. package/dist/durable/WorkerAdmission.d.mts +1 -1
  82. package/dist/durable/WorkerAdmission.mjs +1 -1
  83. package/dist/durable/WorkerHost.d.mts +1 -1
  84. package/dist/index.d.mts +8 -8
  85. package/dist/index.mjs +6 -6
  86. package/dist/{run-context-reader-BtBPX_nC.d.mts → run-context-reader-kpO9xhP2.d.mts} +2 -2
  87. package/dist/sandbox/CodeExecutor.d.mts +3 -1
  88. package/dist/sandbox/CodeExecutor.mjs +3 -1
  89. package/dist/sandbox/CodeExecutor.mjs.map +1 -1
  90. package/package.json +1 -1
  91. package/src/capabilities/BrowserUse.ts +53 -15
  92. package/src/capabilities/CodeMode.ts +1 -0
  93. package/src/durable/DurableAgentRuntime.ts +78 -143
  94. package/src/durable/RunContinuation.ts +44 -32
  95. package/src/durable/RunStorage.ts +56 -15
  96. package/src/durable/ThreadStore.ts +11 -0
  97. package/src/durable/internal/prompt-history-cache.ts +19 -3
  98. package/src/durable/internal/record-encoding.ts +8 -7
  99. package/src/sandbox/CodeExecutor.ts +3 -1
  100. package/dist/DurableAgentRuntime-CGW93k81.mjs.map +0 -1
  101. package/dist/RunContinuation-D42RFqjS.mjs.map +0 -1
  102. package/dist/RunStorage-BRGP3Tcu.mjs.map +0 -1
  103. package/dist/ThreadStore-Cn6FDWX9.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DurableAgentRuntime-CWhu1exp.mjs","names":["failure","sameAdmission","sameJson","definitionDigestsEqual","decodePrompt","readWorkerState","readNativeWorkerState","definitionDigestsEqual","FailureDiagnostic.capture","ensureThreadCreated","ThreadInitialization.ensureThreadCreated","definitionDigestsEqual","FailureDiagnostic.captureContext","AgentRuntime.executeWithUsageAccountingUnknown","ConversationStore","IdGenerator","ctx"],"sources":["../src/durable/internal/worker-runtime.ts","../src/durable/internal/agent-updates.ts","../src/durable/internal/initial-context.ts","../src/durable/internal/message-status.ts","../src/durable/internal/messaging-host.ts","../src/durable/internal/prompt-footprint.ts","../src/durable/internal/prompt-history-cache.ts","../src/durable/internal/worker-host.ts","../src/durable/DurableAgentRuntime.ts"],"sourcesContent":["import { Context, type Effect } from \"effect\";\n\nimport type { makeWorkerRuntime } from \"./worker-host.ts\";\n\n/** Canonical worker operations constructed once by the durable coordinator. */\nexport class WorkerRuntime extends Context.Service<\n WorkerRuntime,\n Effect.Success<ReturnType<typeof makeWorkerRuntime>>\n>()(\"@effect-agent/thread/internal/WorkerRuntime\") {}\n","import { Clock, Crypto, DateTime, Effect, Option, Schema, Stream } from \"effect\";\n\nimport { Update, UpdateError } from \"../../core/AgentUpdates.ts\";\nimport type { RunId, SubmissionId, ThreadId } from \"../../core/Identifiers.ts\";\nimport { nativeUpdateId } from \"../../core/internal/agent-updates.ts\";\nimport { utf8ByteLength } from \"../../core/internal/utf8.ts\";\nimport { IdempotencyKey } from \"../../core/Receipt.ts\";\nimport { digestJson } from \"../Digest.ts\";\nimport { DurableRuntimeFailpoint } from \"../DurableFailpoint.ts\";\nimport {\n MessageDeliveryStore,\n MessageDeliveryRecord,\n prepareMessageDelivery,\n} from \"../MessageDelivery.ts\";\nimport {\n AgentUpdateEmitted,\n BatchId,\n CanonicalBatch,\n DefinitionDigests,\n type CanonicalRecordEnvelope,\n type DeclaredToolCall,\n type DeploymentId,\n PersistedJson,\n type ProducerId,\n RecordEnvelope,\n RecordId,\n} from \"../Records.ts\";\nimport { CurrentRunWriter, readRunEvidenceSnapshot } from \"../RunContinuation.ts\";\nimport { runIdForSubmission } from \"../RunJournal.ts\";\nimport { LedgerError, type SubmissionSnapshot } from \"../SubmissionLedger.ts\";\nimport { PreparedInput } from \"../Subscription.ts\";\nimport { getRecord, ThreadReader, ThreadStore, ThreadTailRequest } from \"../ThreadStore.ts\";\nimport {\n deliveryPredecessor,\n decodeWorkCursor,\n encodeWorkCursor,\n MAX_RECOVERY_PAGES,\n type ThreadWorkPage,\n} from \"../ThreadWork.ts\";\nimport { WakeScheduler } from \"../WakeScheduler.ts\";\nimport { WorkerRuntime } from \"./worker-runtime.ts\";\n\ntype Delivery = NonNullable<AgentUpdateEmitted[\"delivery\"]>;\n\nconst storage = () =>\n LedgerError.make({ operation: \"agent-update\", message: \"Durable update persistence failed\" });\n\nconst rejected = (reason: UpdateError[\"reason\"]) => UpdateError.make({ reason });\n\nconst updateDigest = (threadId: ThreadId, runId: RunId, updateId: string) =>\n digestJson([threadId, runId, updateId]);\n\nconst nativeParameters = Schema.Struct({ value: Schema.Json });\nconst isNativeParameters = Schema.is(nativeParameters);\nconst definitionDigestsEqual = Schema.toEquivalence(DefinitionDigests);\nconst updateValuesEqual = Schema.toEquivalence(Schema.Json);\n\n/** Canonical native acceptance proves only this exact update call, never an external effect.\n * Its frozen delivery remains independently recoverable even when its Tool acknowledgement is lost.\n */\nexport const nativeUpdateAccepted = (\n submission: SubmissionSnapshot,\n call: DeclaredToolCall,\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n): boolean => {\n if (call.toolName !== \"emit_update\" || !isNativeParameters(call.parameters)) return false;\n const value = call.parameters.value;\n\n return records.some(\n ({ record: { payload } }) =>\n payload._tag === \"AgentUpdateEmitted\" &&\n payload.update.threadId === submission.threadId &&\n payload.update.agentId === submission.agentId &&\n payload.update.runId === call.runId &&\n payload.update.updateId === nativeUpdateId(call.runId, call.toolCallId) &&\n definitionDigestsEqual(payload.definitions, submission.agentDigests) &&\n updateValuesEqual(payload.update.value, value),\n );\n};\n\n/** Acceptance is fenced by the actual emitting Attempt; recovery only recreates frozen outbox rows. */\nexport const makeAgentUpdateRuntime = Effect.fnUntraced(function* (options: {\n readonly deploymentId: DeploymentId;\n readonly producerId: ProducerId;\n}) {\n const store = yield* ThreadStore;\n const workers = yield* WorkerRuntime;\n const wake = yield* WakeScheduler;\n const deliveries = yield* Effect.serviceOption(MessageDeliveryStore);\n const crypto = yield* Crypto.Crypto;\n const failpoint = yield* DurableRuntimeFailpoint;\n\n const reader = ThreadReader.fromStore(store);\n\n // Terminal operation evidence excludes updates; fetch the original acceptance by its\n // stable identity instead of expanding every operation's recovery history.\n const accepted = Effect.fnUntraced(function* (\n submission: SubmissionSnapshot,\n call: DeclaredToolCall,\n ) {\n if (call.toolName !== \"emit_update\") return false;\n\n const digest = yield* updateDigest(\n submission.threadId,\n call.runId,\n nativeUpdateId(call.runId, call.toolCallId),\n ).pipe(Effect.provideService(Crypto.Crypto, crypto), Effect.mapError(storage));\n\n const record = yield* getRecord({\n threadId: submission.threadId,\n recordId: RecordId.make(`agent-update:${digest}`),\n }).pipe(Effect.provideService(ThreadReader, reader), Effect.mapError(storage));\n\n return Option.isSome(record) && nativeUpdateAccepted(submission, call, [record.value]);\n });\n\n const readRun = Effect.fnUntraced(function* (threadId: ThreadId, submissionId: SubmissionId) {\n const tail = yield* store\n .inspectTail(ThreadTailRequest.make({ threadId }))\n .pipe(Effect.mapError(storage));\n\n const records = yield* readRunEvidenceSnapshot(threadId, submissionId, tail.tailSequence).pipe(\n Effect.provideService(ThreadReader, reader),\n Effect.provideService(Crypto.Crypto, crypto),\n Effect.mapError(storage),\n );\n\n const latest = yield* Stream.runCollect(\n reader.read({\n threadId,\n selection: { _tag: \"LastAgentUpdate\", throughSequence: tail.tailSequence },\n page: { limit: 1 },\n }),\n ).pipe(Effect.mapError(storage));\n\n if (\n latest.length > 1 ||\n latest.some(\n (entry) =>\n entry.threadId !== threadId ||\n entry.sequence > tail.tailSequence ||\n entry.record.payload._tag !== \"AgentUpdateEmitted\",\n )\n )\n return yield* storage();\n const payload = latest[0]?.record.payload;\n\n return {\n ...tail,\n records,\n execution: yield* store\n .readExecution({ threadId, runId: runIdForSubmission(submissionId) })\n .pipe(Effect.mapError(storage)),\n updateSequence: payload?._tag === \"AgentUpdateEmitted\" ? payload.update.sequence : 0,\n };\n });\n\n const pendingUpdates = Effect.fnUntraced(function* (threadId: ThreadId) {\n if (store.work === undefined) return yield* rejected(\"unavailable\");\n\n const initial = yield* decodeWorkCursor({ threadId, limit: 128 }).pipe(\n Effect.provideService(Crypto.Crypto, crypto),\n Effect.mapError(storage),\n );\n\n let cursor: string | undefined = encodeWorkCursor({ ...initial, source: \"canonical\" });\n\n let count = 0;\n\n for (let pages = 0; pages < MAX_RECOVERY_PAGES; pages++) {\n const page: ThreadWorkPage = yield* store.work\n .page({ threadId, limit: 128, cursor })\n .pipe(Effect.mapError(() => rejected(\"unavailable\")));\n\n for (const entry of page.entries) {\n if (entry.owner._tag === \"Handoff\" && entry.owner.kind === \"update\") count++;\n if (entry.owner._tag === \"Delivery\") {\n if (entry.partition === undefined) return yield* rejected(\"unavailable\");\n if (entry.partition === \"update\") count++;\n }\n }\n cursor = page.cursor;\n if (cursor === undefined) return count;\n }\n\n return yield* rejected(\"capacity\");\n });\n\n const prepareDelivery = Effect.fnUntraced(function* (update: Update, delivery: Delivery) {\n const envelope = yield* Schema.decodeUnknownEffect(PreparedInput)(delivery.envelope).pipe(\n Effect.mapError(storage),\n );\n\n return yield* prepareMessageDelivery({\n key: { ownerThreadId: update.threadId, messageId: delivery.messageId },\n envelope,\n createdAtMillis: delivery.createdAtMillis,\n deadlineAtMillis: delivery.deadlineAtMillis,\n ...(delivery.predecessor === undefined ? {} : { predecessor: delivery.predecessor }),\n }).pipe(Effect.provideService(Crypto.Crypto, crypto), Effect.mapError(storage));\n });\n\n const insert = Effect.fnUntraced(function* (record: AgentUpdateEmitted) {\n const delivery = record.delivery;\n\n if (delivery === undefined) return;\n if (Option.isNone(deliveries)) return yield* storage();\n const prepared = yield* prepareDelivery(record.update, delivery);\n\n yield* failpoint.hit(\"update:before-delivery-insert\");\n yield* deliveries.value.insert(prepared).pipe(Effect.mapError(storage));\n yield* failpoint.hit(\"update:after-delivery-insert\");\n });\n\n const repairRun = Effect.fnUntraced(function* (threadId: ThreadId, submissionId: SubmissionId) {\n const tail = yield* store\n .inspectTail(ThreadTailRequest.make({ threadId }))\n .pipe(Effect.mapError(storage));\n\n const records = yield* readRunEvidenceSnapshot(threadId, submissionId, tail.tailSequence).pipe(\n Effect.provideService(ThreadReader, reader),\n Effect.provideService(Crypto.Crypto, crypto),\n Effect.mapError(storage),\n );\n\n for (const { record } of records) {\n if (record.payload._tag === \"AgentUpdateEmitted\" && record.payload.delivery !== undefined)\n yield* insert(record.payload);\n }\n });\n\n const emit = Effect.fnUntraced(\n function* (request: {\n readonly submission: SubmissionSnapshot;\n readonly runId: RunId;\n readonly definitions: DefinitionDigests;\n readonly updateId: IdempotencyKey;\n readonly value: Schema.Json;\n readonly maxCount?: number;\n readonly maxBytes?: number;\n }) {\n const value = yield* Schema.encodeEffect(Schema.fromJsonString(PersistedJson))(\n request.value,\n ).pipe(\n Effect.flatMap(Schema.decodeEffect(Schema.fromJsonString(PersistedJson))),\n Effect.mapError(() => rejected(\"validation\")),\n );\n\n const updateId = yield* Schema.decodeEffect(IdempotencyKey)(request.updateId).pipe(\n Effect.mapError(() => rejected(\"validation\")),\n );\n\n const digest = yield* updateDigest(request.submission.threadId, request.runId, updateId).pipe(\n Effect.provideService(Crypto.Crypto, crypto),\n Effect.mapError(storage),\n );\n\n const id = `agent-update:${digest}`;\n const messageId = Schema.decodeSync(IdempotencyKey)(`worker-update:${digest}`);\n const maxCount = request.maxCount ?? 32;\n const maxBytes = request.maxBytes ?? 16_384;\n\n if (\n !Number.isSafeInteger(maxCount) ||\n maxCount < 1 ||\n !Number.isSafeInteger(maxBytes) ||\n maxBytes < 1\n )\n return yield* rejected(\"validation\");\n\n const writer = yield* CurrentRunWriter;\n\n for (let attempt = 0; attempt < 32; attempt++) {\n const history = yield* readRun(\n request.submission.threadId,\n request.submission.submissionId,\n );\n\n const updates = history.records.flatMap(({ record }) =>\n record.payload._tag === \"AgentUpdateEmitted\" ? [record.payload] : [],\n );\n\n const existing = updates.find(\n (entry) => entry.update.runId === request.runId && entry.update.updateId === updateId,\n );\n\n if (existing !== undefined) {\n if (\n existing.update.agentId !== request.submission.agentId ||\n !Schema.toEquivalence(PersistedJson)(existing.update.value, value) ||\n !Schema.toEquivalence(DefinitionDigests)(existing.definitions, request.definitions)\n )\n return yield* rejected(\"conflict\");\n yield* insert(existing);\n\n return existing.update;\n }\n const own = updates.filter((entry) => entry.update.runId === request.runId);\n\n if (\n own.length >= maxCount ||\n own.reduce(\n (total, entry) => total + utf8ByteLength(JSON.stringify(entry.update.value)),\n 0,\n ) +\n utf8ByteLength(JSON.stringify(value)) >\n maxBytes\n )\n return yield* rejected(\"capacity\");\n if (\n history.records.some(\n ({ record }) =>\n record.payload._tag === \"SubmissionSettled\" && record.payload.runId === request.runId,\n ) ||\n Option.isNone(history.execution) ||\n !history.execution.value.operational.some(\n ({ payload }) => payload._tag === \"RunStarted\" && payload.runId === request.runId,\n )\n )\n return yield* rejected(\"identity\");\n\n const update = Update.make({\n schemaVersion: 1,\n agentId: request.submission.agentId,\n threadId: request.submission.threadId,\n runId: request.runId,\n updateId,\n sequence: history.updateSequence + 1,\n value,\n });\n\n const prepared = yield* workers.prepareUpdate(update, request.submission, messageId);\n let delivery: Delivery | undefined;\n\n if (prepared !== undefined) {\n if (Option.isNone(deliveries)) return yield* rejected(\"unavailable\");\n if (\n utf8ByteLength(JSON.stringify(prepared.envelope)) >\n deliveries.value.limits.maxEnvelopeBytes\n )\n return yield* rejected(\"capacity\");\n if (\n (yield* pendingUpdates(request.submission.threadId)) >=\n (deliveries.value.limits.maxPendingUpdatesPerOwner ?? 32)\n )\n return yield* rejected(\"capacity\");\n\n const predecessor = yield* deliveryPredecessor(\n request.submission.threadId,\n history.tailSequence,\n ).pipe(Effect.provideService(ThreadReader, reader), Effect.mapError(storage));\n\n delivery = { ...prepared, ...(predecessor === undefined ? {} : { predecessor }) };\n const deliveryRecord = yield* prepareDelivery(update, delivery);\n\n const stored = yield* Schema.encodeEffect(Schema.fromJsonString(MessageDeliveryRecord))(\n deliveryRecord,\n ).pipe(Effect.mapError(storage));\n\n if (utf8ByteLength(stored) > deliveries.value.maxStoredValueBytes)\n return yield* rejected(\"capacity\");\n }\n\n const payload = AgentUpdateEmitted.make({\n update,\n definitions: request.definitions,\n ...(delivery === undefined ? {} : { delivery }),\n });\n\n const tail = yield* store\n .inspectTail(ThreadTailRequest.make({ threadId: request.submission.threadId }))\n .pipe(Effect.mapError(storage));\n\n // Reenter the progress guard to recheck this Attempt's generation after preflight.\n yield* writer.withProgress(Effect.void).pipe(Effect.mapError(storage));\n if (tail.tailSequence !== history.tailSequence) continue;\n yield* failpoint.hit(\"update:before-canonical-append\");\n\n const appended = yield* writer\n .append(\n CanonicalBatch.make({\n batchId: Schema.decodeSync(BatchId)(id),\n producerId: options.producerId,\n records: [\n RecordEnvelope.make({\n recordId: Schema.decodeSync(RecordId)(id),\n family: \"thread\",\n schemaVersion: 1,\n createdAt: DateTime.makeUnsafe(yield* Clock.currentTimeMillis),\n deploymentId: options.deploymentId,\n payload,\n }),\n ],\n }),\n )\n .pipe(\n Effect.as(true),\n Effect.catchTag(\"AppendConflict\", () => Effect.succeed(false)),\n Effect.mapError(storage),\n );\n\n if (!appended) continue;\n yield* failpoint.hit(\"update:after-canonical-append\");\n // Canonical progress is observable even when no parent report is selected.\n yield* wake.notify(request.submission.threadId);\n yield* insert(payload);\n\n return update;\n }\n\n return yield* storage();\n },\n (effect) =>\n Effect.flatMap(CurrentRunWriter, (writer) =>\n writer.withProgress(effect).pipe(\n Effect.catchTags({\n OwnershipLost: () => storage(),\n ThreadStoreError: () => storage(),\n ThreadNotMaterialized: () => storage(),\n AppendConflict: () => storage(),\n }),\n ),\n ),\n );\n\n return { emit, accepted, repair: insert, repairRun };\n});\n","import { Effect, Option, Schema, Stream } from \"effect\";\nimport { Prompt } from \"effect/ai\";\n\nimport {\n CanonicalSequence,\n type CanonicalRecordEnvelope,\n type RecordEnvelope,\n type UserInputRecorded,\n} from \"../Records.ts\";\nimport { RunJournalError, toolCallSettledRecordId } from \"../RunJournal.ts\";\nimport { submissionSettlementRecordId } from \"../SubmissionLedger.ts\";\nimport { getRecord, getRunInput, PROMPT_EVIDENCE_TAGS, ThreadReader } from \"../ThreadStore.ts\";\nimport type { JournalRecordEnvelope } from \"./journal-metadata.ts\";\n\n/** A captured original input can prepare context before its atomic publication. It carries\n * an expected position, never a committed observation cursor or dispatch authority. */\nexport type InitialContextInput =\n | CanonicalRecordEnvelope\n | {\n readonly threadId: CanonicalRecordEnvelope[\"threadId\"];\n readonly sequence: CanonicalRecordEnvelope[\"sequence\"];\n readonly record: RecordEnvelope & { readonly payload: UserInputRecorded };\n };\n\nconst invalid = (message: string) => RunJournalError.make({ message });\nconst promptTag = new Set<string>(PROMPT_EVIDENCE_TAGS);\n\n/** Fresh admission trusts validated immutable history; recovery verifies its saved Prompt digest. */\nexport const initialContext = Effect.fnUntraced(function* (original: InitialContextInput) {\n const reader = yield* ThreadReader;\n const threadId = original.threadId;\n const through = CanonicalSequence.make(original.sequence - 1);\n const facts = new Map<number, JournalRecordEnvelope>();\n const queue: Array<JournalRecordEnvelope> = [];\n const creatorInputs = new Set<string>();\n const terminalInputs = new Set<string>();\n const declarations = new Set<string>();\n\n const retain = (entry: JournalRecordEnvelope): RunJournalError | undefined => {\n if (\n entry.threadId !== threadId ||\n entry.sequence < 1 ||\n entry.sequence > through ||\n !promptTag.has(entry.record.payload._tag)\n )\n return invalid(\"Initial context dependency escaped its admission boundary\");\n const prior = facts.get(entry.sequence);\n\n if (prior !== undefined)\n return prior.record.recordId === entry.record.recordId\n ? undefined\n : invalid(\"Initial context has conflicting canonical identities\");\n facts.set(entry.sequence, entry);\n queue.push(entry);\n const payload = entry.record.payload;\n\n if (\n payload._tag === \"UserInputRecorded\" &&\n payload.kind === \"user\" &&\n payload.runId !== undefined\n )\n creatorInputs.add(payload.runId);\n if (payload._tag === \"ModelResponseRecorded\") {\n if (\"toolOperations\" in payload) {\n for (const operation of payload.toolOperations)\n declarations.add(\n toolCallSettledRecordId(payload.runId, payload.turn, operation.toolCallId),\n );\n } else {\n for (const message of payload.messages.content) {\n if (message.role !== \"assistant\") continue;\n for (const part of message.content)\n if (part.type === \"tool-call\" && !part.providerExecuted)\n declarations.add(`tool-settled:${payload.runId}:${payload.turn}:${part.id}`);\n }\n }\n }\n\n return undefined;\n };\n\n let after = CanonicalSequence.make(0);\n\n while (after < through) {\n const page = yield* reader\n .readPrompt({ threadId, afterSequence: after, throughSequence: through, limit: 256 })\n .pipe(Stream.take(257), Stream.runCollect);\n\n if (page.length > 256) return yield* invalid(\"Initial context page exceeded its record bound\");\n for (const entry of page) {\n if (entry.sequence <= after)\n return yield* invalid(\"Initial context selection is not in canonical order\");\n after = entry.sequence;\n const error = retain(entry);\n\n if (error !== undefined) return yield* error;\n }\n if (page.length < 256) break;\n }\n\n for (let index = 0; index < queue.length; index++) {\n const entry = queue[index];\n\n if (entry === undefined) return yield* invalid(\"Initial context dependency disappeared\");\n const payload = entry.record.payload;\n\n if (payload._tag === \"CompactionCreated\" && !creatorInputs.has(payload.runId)) {\n creatorInputs.add(payload.runId);\n const input = yield* getRunInput({ threadId, runId: payload.runId });\n\n if (Option.isNone(input)) return yield* invalid(\"Compaction has no exact creator input\");\n const error = retain(input.value);\n\n if (error !== undefined) return yield* error;\n }\n if (payload._tag !== \"ToolCallSettled\" || declarations.has(entry.record.recordId)) continue;\n\n const matches = yield* reader\n .read({\n threadId,\n selection: {\n _tag: \"ToolDeclaration\",\n settlementRecordId: entry.record.recordId,\n throughSequence: through,\n },\n page: { limit: 1 },\n })\n .pipe(Stream.take(2), Stream.runCollect);\n\n const declaration = matches[0];\n\n if (matches.length !== 1 || declaration === undefined || declaration.sequence >= entry.sequence)\n return yield* invalid(\"Late Tool result has no exact original declaration\");\n const response = declaration.record.payload;\n\n if (\n response._tag !== \"ModelResponseRecorded\" ||\n response.runId !== payload.runId ||\n toolCallSettledRecordId(response.runId, response.turn, payload.toolCallId) !==\n entry.record.recordId ||\n !response.toolOperations.some(\n (operation) =>\n operation.toolCallId === payload.toolCallId && operation.toolName === payload.toolName,\n )\n )\n return yield* invalid(\"Late Tool result differs from its original declaration identity\");\n\n const prompt = yield* Schema.decodeUnknownEffect(Prompt.Prompt)(response.messages).pipe(\n Effect.mapError(() => invalid(\"Late Tool declaration messages are malformed\")),\n );\n\n if (\n !prompt.content.some(\n (message) =>\n message.role === \"assistant\" &&\n message.content.some(\n (part) =>\n part.type === \"tool-call\" &&\n !part.providerExecuted &&\n part.id === payload.toolCallId &&\n part.name === payload.toolName,\n ),\n )\n )\n return yield* invalid(\"Late Tool declaration arguments are invalid\");\n const error = retain(declaration);\n\n if (error !== undefined) return yield* error;\n\n // Retired incomplete batches need their original owner and immutable terminal proof.\n if (!terminalInputs.has(payload.runId)) {\n terminalInputs.add(payload.runId);\n const input = yield* getRunInput({ threadId, runId: payload.runId });\n\n if (Option.isNone(input)) return yield* invalid(\"Late Tool result has no original owner\");\n const inputError = retain(input.value);\n\n if (inputError !== undefined) return yield* inputError;\n const owner = input.value.record.payload;\n\n if (owner._tag === \"UserInputRecorded\" && owner.submissionId !== undefined) {\n const terminal = yield* getRecord({\n threadId,\n recordId: submissionSettlementRecordId(owner.submissionId),\n });\n\n if (Option.isSome(terminal) && terminal.value.sequence <= through) {\n if (\n terminal.value.record.payload._tag !== \"SubmissionSettled\" ||\n terminal.value.record.payload.runId !== payload.runId\n )\n return yield* invalid(\"Late Tool owner has invalid terminal evidence\");\n const terminalError = retain(terminal.value);\n\n if (terminalError !== undefined) return yield* terminalError;\n }\n }\n }\n }\n\n return [...facts.values()].sort((left, right) => left.sequence - right.sequence).concat(original);\n});\n","import { Schema } from \"effect\";\n\nimport { MessageStatus } from \"../../core/Messaging.ts\";\nimport type { MessageDeliveryRecord } from \"../MessageDelivery.ts\";\n\n/** Share the bounded projection across peer and worker delivery; diagnostics stay in storage. */\nexport const messageStatus = (row: MessageDeliveryRecord) =>\n Schema.decodeUnknownEffect(MessageStatus)({\n message: row.key,\n status: row.status,\n receipt: row.receipt,\n settlement:\n row.settlement === null\n ? null\n : { settlementId: row.settlement.settlementId, outcome: row.settlement.outcome },\n reason:\n row.refusal ??\n row.parkReason ??\n (row.status === \"pending\" || row.status === \"accepted\" ? row.retry.lastFailure : null),\n });\n","import { Clock, Crypto, DateTime, Effect, Option, Schema, Stream } from \"effect\";\n\nimport type { InboxPage } from \"../../capabilities/Messaging.ts\";\nimport {\n MessageAdmission,\n MessageRef,\n MessagingError,\n PeerName,\n} from \"../../capabilities/Messaging.ts\";\nimport type { AgentId, ThreadId } from \"../../core/Identifiers.ts\";\nimport { IdempotencyKey, type Principal } from \"../../core/Receipt.ts\";\nimport type { WorkerSource } from \"../../core/Worker.ts\";\nimport {\n type MessagingHost,\n type PeerTarget,\n type SendPeerMessage,\n} from \"../../engine/MessagingHost.ts\";\nimport {\n PeerAuthorizer,\n PeerRoutes,\n PeerDeliveryLifetime,\n PeerMessageCapacity,\n} from \"../../engine/MessagingHost.ts\";\nimport { digestJson } from \"../Digest.ts\";\nimport type { DurableSubmitOptions } from \"../DurableAgentRuntime.ts\";\nimport {\n MessageDeliveryFailpoint,\n MessageDeliveryStore,\n type MessageDeliveryRecord,\n prepareMessageDelivery,\n} from \"../MessageDelivery.ts\";\nimport {\n BatchId,\n CanonicalBatch,\n CanonicalSequence,\n type DeploymentId,\n type Digest,\n PeerMessagePrepared,\n PersistedJson,\n type ProducerId,\n RecordEnvelope,\n} from \"../Records.ts\";\nimport { peerMessageRecordId } from \"../RunJournal.ts\";\nimport {\n SubmissionLedger,\n SubmissionLookupByKey,\n submissionInputRecordId,\n} from \"../SubmissionLedger.ts\";\nimport { PreparedInput } from \"../Subscription.ts\";\nimport {\n getRecord,\n AppendRequest,\n ThreadRead,\n ThreadTailRequest,\n ThreadStore,\n ThreadReader,\n} from \"../ThreadStore.ts\";\nimport {\n definitionDigestsEqual,\n resolveDefinitionBinding,\n type ResolvedBinding,\n} from \"./agent-registration.ts\";\nimport { messageStatus } from \"./message-status.ts\";\n\nexport interface MessagingRuntimeOptions {\n readonly bindings: ReadonlyArray<ResolvedBinding>;\n readonly deploymentId: DeploymentId;\n readonly producerId: ProducerId;\n}\n\nconst failure = (operation: MessagingError[\"operation\"], reason: MessagingError[\"reason\"]) =>\n MessagingError.make({ operation, reason });\n\nconst sameRef = Schema.toEquivalence(MessageRef);\nconst sameAdmission = Schema.toEquivalence(MessageAdmission);\nconst sameJson = Schema.toEquivalence(PersistedJson);\n\n/** Thread-owned durable peer delivery. Source proof and the independent due index survive Run settlement. */\nexport const makeMessagingRuntime = Effect.fnUntraced(function* (options: MessagingRuntimeOptions) {\n const deps = {\n ...options,\n store: yield* ThreadStore,\n ledger: yield* SubmissionLedger,\n deliveries: yield* Effect.serviceOption(MessageDeliveryStore),\n crypto: yield* Crypto.Crypto,\n authorizer: yield* PeerAuthorizer,\n routes: yield* PeerRoutes,\n lifetimeMillis: yield* PeerDeliveryLifetime,\n maxMessagesPerSource: yield* PeerMessageCapacity,\n failpoint: yield* MessageDeliveryFailpoint,\n };\n\n const digest = (value: Schema.Json) =>\n digestJson(value).pipe(\n Effect.provideService(Crypto.Crypto, deps.crypto),\n Effect.mapError(() => failure(\"send\", \"storage\")),\n );\n\n const exactRecord = Effect.fnUntraced(function* (\n threadId: ThreadId,\n recordId: RecordEnvelope[\"recordId\"],\n ) {\n return Option.getOrUndefined(\n yield* getRecord({ threadId, recordId })\n .pipe(Effect.provideService(ThreadReader, ThreadReader.fromStore(deps.store)))\n .pipe(Effect.mapError(() => failure(\"send\", \"storage\"))),\n )?.record;\n });\n\n const sourceOf = Effect.fnUntraced(function* (threadId: ThreadId) {\n const log = yield* deps.store\n .inspectTail(ThreadTailRequest.make({ threadId }))\n .pipe(Effect.mapError(() => failure(\"context\", \"storage\")));\n\n const records = yield* deps.store.read(ThreadRead.make({ threadId, limit: 1 })).pipe(\n Stream.runCollect,\n Effect.mapError(() => failure(\"context\", \"storage\")),\n );\n\n const created = records[0]?.record.payload;\n\n if (created?._tag !== \"ThreadCreated\") return yield* failure(\"context\", \"not-found\");\n\n const matching = deps.bindings.filter((binding) => binding.agentId === created.agentId);\n\n if (matching.length !== 1) return yield* failure(\"context\", \"binding-mismatch\");\n\n return { log, address: { threadId, agentId: created.agentId } };\n });\n\n const decodeProof = Effect.fnUntraced(function* (record: RecordEnvelope) {\n if (record.payload._tag !== \"PeerMessagePrepared\") return yield* failure(\"send\", \"corrupt\");\n\n const envelope = yield* Schema.decodeUnknownEffect(PreparedInput)(\n record.payload.encodedEnvelope,\n ).pipe(Effect.mapError(() => failure(\"send\", \"corrupt\")));\n\n if (\n !Schema.is(MessageAdmission)(envelope.messageAdmission) ||\n envelope.messageAdmission.message.messageId !== record.payload.messageId\n )\n return yield* failure(\"send\", \"corrupt\");\n\n return {\n envelope,\n sourcePrincipal: record.payload.sourcePrincipal,\n operation: record.payload.operation,\n deadlineAtMillis: record.payload.deadlineAtMillis,\n createdAtMillis: DateTime.toEpochMillis(record.createdAt),\n };\n });\n\n const proof = Effect.fnUntraced(function* (message: MessageRef) {\n const source = yield* sourceOf(message.ownerThreadId);\n\n const record = yield* exactRecord(\n message.ownerThreadId,\n peerMessageRecordId(message.messageId),\n );\n\n if (record === undefined) return yield* failure(\"reply\", \"invalid-reference\");\n const saved = yield* decodeProof(record);\n\n if (\n !Schema.is(MessageAdmission)(saved.envelope.messageAdmission) ||\n saved.envelope.messageAdmission.sender.agentId !== source.address.agentId ||\n !sameRef(saved.envelope.messageAdmission.message, message)\n )\n return yield* failure(\"reply\", \"invalid-reference\");\n\n return saved;\n });\n\n const authorizeEnvelope = Effect.fnUntraced(function* (\n saved: Effect.Success<ReturnType<typeof proof>>,\n operation: \"send\" | \"reply\",\n ) {\n const metadata = saved.envelope.messageAdmission;\n\n if (!Schema.is(MessageAdmission)(metadata)) return yield* failure(operation, \"corrupt\");\n\n const principal = yield* deps.authorizer.authorize({\n source: metadata.sender,\n principal: saved.sourcePrincipal,\n operation: saved.operation,\n access: \"send\",\n peerName: metadata.peerName,\n destination: { threadId: saved.envelope.threadId, agentId: saved.envelope.agentId },\n });\n\n if (principal !== saved.envelope.deliveryPrincipal) return yield* failure(operation, \"denied\");\n });\n\n const status = (row: MessageDeliveryRecord, operation: MessagingError[\"operation\"]) =>\n messageStatus(row).pipe(Effect.mapError(() => failure(operation, \"corrupt\")));\n\n const deliveries = (operation: MessagingError[\"operation\"]) =>\n Option.isSome(deps.deliveries)\n ? Effect.succeed(deps.deliveries.value)\n : failure(operation, \"unavailable\");\n\n const mapStore =\n (operation: MessagingError[\"operation\"]) =>\n (error: { readonly _tag: string; readonly reason?: string }) =>\n failure(\n operation,\n error.reason === \"capacity\"\n ? \"capacity\"\n : error.reason === \"conflict\"\n ? \"conflict\"\n : \"storage\",\n );\n\n const lifetime = Schema.decodeEffect(\n Schema.Int.check(Schema.isGreaterThan(0), Schema.isLessThanOrEqualTo(604_800_000)),\n )(deps.lifetimeMillis).pipe(Effect.mapError(() => failure(\"send\", \"capacity\")));\n\n const capacity = Schema.decodeEffect(\n Schema.Int.check(Schema.isGreaterThan(0), Schema.isLessThanOrEqualTo(1_000)),\n )(deps.maxMessagesPerSource ?? 256).pipe(Effect.mapError(() => failure(\"send\", \"capacity\")));\n\n const facet = (\n threadId: ThreadId,\n principal: Principal,\n toolSource?: WorkerSource,\n ): MessagingHost[\"Service\"] => {\n const authorize = Effect.fnUntraced(function* (\n operation: MessagingError[\"operation\"],\n access: \"context\" | \"read\" | \"send\" | \"control\",\n peer?: PeerTarget,\n destination?: { readonly threadId: ThreadId; readonly agentId: AgentId },\n ) {\n const source = yield* sourceOf(threadId);\n\n if (\n toolSource !== undefined &&\n (toolSource.agentId !== source.address.agentId || toolSource.threadId !== threadId)\n )\n return yield* failure(operation, \"denied\");\n if (peer !== undefined)\n yield* Schema.decodeEffect(PeerName)(peer.name).pipe(\n Effect.mapError(() => failure(operation, \"invalid-input\")),\n );\n\n const deliveryPrincipal = yield* deps.authorizer.authorize({\n source: source.address,\n principal,\n operation,\n access,\n ...(peer === undefined ? {} : { peerName: peer.name }),\n ...(destination === undefined ? {} : { destination }),\n });\n\n return { ...source, deliveryPrincipal };\n });\n\n const send = Effect.fnUntraced(function* (\n request: SendPeerMessage,\n operation: \"send\" | \"reply\",\n ) {\n const initial = yield* authorize(operation, \"send\", request);\n\n const target = yield* resolveDefinitionBinding(deps.bindings, request.target).pipe(\n Effect.mapError(() => failure(operation, \"binding-mismatch\")),\n );\n\n const encoded = yield* Schema.decodeUnknownEffect(Schema.toEncoded(target.definition.input))(\n request.encodedInput,\n ).pipe(Effect.mapError(() => failure(operation, \"invalid-input\")));\n\n const input = yield* Schema.decodeUnknownEffect(PersistedJson)(encoded).pipe(\n Effect.flatMap(Schema.encodeEffect(Schema.fromJsonString(PersistedJson))),\n Effect.flatMap(Schema.decodeEffect(Schema.fromJsonString(PersistedJson))),\n Effect.mapError(() => failure(operation, \"invalid-input\")),\n );\n\n const key = yield* Schema.decodeEffect(IdempotencyKey)(request.idempotencyKey).pipe(\n Effect.mapError(() => failure(operation, \"invalid-input\")),\n );\n\n const inReplyTo =\n request.inReplyTo === undefined\n ? undefined\n : yield* Schema.decodeEffect(MessageRef)(request.inReplyTo).pipe(\n Effect.mapError(() => failure(operation, \"invalid-reference\")),\n );\n\n const message: MessageRef = {\n ownerThreadId: threadId,\n messageId: Schema.decodeSync(IdempotencyKey)(\n `peer:${yield* digest([threadId, principal, request.name, operation, key])}`,\n ),\n };\n\n const store = yield* deliveries(operation);\n const window = yield* lifetime;\n const maxMessages = yield* capacity;\n\n for (let attempt = 0; attempt < 8; attempt++) {\n const current = attempt === 0 ? initial : yield* sourceOf(threadId);\n\n const prior = yield* exactRecord(threadId, peerMessageRecordId(message.messageId));\n\n let saved: Effect.Success<ReturnType<typeof proof>>;\n\n if (prior !== undefined) {\n saved = yield* decodeProof(prior);\n const metadata = saved.envelope.messageAdmission;\n\n if (\n !Schema.is(MessageAdmission)(metadata) ||\n metadata.peerName !== request.name ||\n saved.envelope.agentId !== target.agentId ||\n !sameJson(saved.envelope.input, input) ||\n (inReplyTo === undefined || metadata.inReplyTo === undefined\n ? inReplyTo !== metadata.inReplyTo\n : !sameRef(inReplyTo, metadata.inReplyTo))\n )\n return yield* failure(operation, \"conflict\");\n yield* authorize(operation, \"send\", request, {\n threadId: saved.envelope.threadId,\n agentId: target.agentId,\n });\n yield* authorizeEnvelope(saved, operation);\n } else {\n if (deps.store.countPeerMessages === undefined)\n return yield* failure(operation, \"unavailable\");\n if (\n (yield* deps.store\n .countPeerMessages({\n threadId,\n nowMillis: yield* Clock.currentTimeMillis,\n limit: maxMessages,\n })\n .pipe(Effect.mapError(mapStore(operation)))) >= maxMessages\n )\n return yield* failure(operation, \"capacity\");\n let destinationThread: ThreadId;\n\n if (operation === \"reply\") {\n if (inReplyTo === undefined) return yield* failure(operation, \"invalid-reference\");\n\n const original = yield* proof(inReplyTo);\n\n if (\n original.envelope.threadId !== threadId ||\n original.envelope.agentId !== current.address.agentId\n )\n return yield* failure(operation, \"invalid-reference\");\n\n const accepted = yield* deps.ledger\n .lookup(\n SubmissionLookupByKey.make({\n threadId,\n principal: original.envelope.deliveryPrincipal,\n idempotencyKey: inReplyTo.messageId,\n }),\n )\n .pipe(Effect.mapError(mapStore(operation)));\n\n const inbound = Option.isNone(accepted)\n ? undefined\n : (yield* exactRecord(threadId, submissionInputRecordId(accepted.value.submissionId)))\n ?.payload;\n\n if (\n inbound?._tag !== \"UserInputRecorded\" ||\n !Schema.is(MessageAdmission)(inbound.messageAdmission) ||\n inbound.messageAdmission.sender.agentId !== target.agentId ||\n !sameRef(inbound.messageAdmission.message, inReplyTo) ||\n !Schema.is(MessageAdmission)(original.envelope.messageAdmission) ||\n !sameAdmission(inbound.messageAdmission, original.envelope.messageAdmission) ||\n Option.isNone(accepted) ||\n inbound.submissionId !== accepted.value.submissionId\n )\n return yield* failure(operation, \"invalid-reference\");\n destinationThread = inbound.messageAdmission.returnAddress.threadId;\n } else {\n destinationThread = yield* deps.routes.resolve({\n source: current.address,\n principal,\n peerName: request.name,\n targetAgentId: target.agentId,\n });\n }\n\n const allowed = yield* authorize(operation, \"send\", request, {\n threadId: destinationThread,\n agentId: target.agentId,\n });\n\n const metadata = MessageAdmission.make({\n schemaVersion: 1,\n message,\n peerName: request.name,\n sender: current.address,\n returnAddress: current.address,\n ...(inReplyTo === undefined ? {} : { inReplyTo }),\n });\n\n const envelope = PreparedInput.make({\n schemaVersion: 1,\n threadId: destinationThread,\n agentId: target.agentId,\n definitions: target.digests,\n deliveryPrincipal: allowed.deliveryPrincipal,\n input,\n inputDigest: yield* digest(input),\n admissionKey: message.messageId,\n authorization: { policyId: \"peer-message\", decisionId: message.messageId },\n messageAdmission: metadata,\n });\n\n const encodedEnvelope = yield* Schema.encodeEffect(PreparedInput)(envelope).pipe(\n Effect.mapError(() => failure(operation, \"invalid-input\")),\n );\n\n const tail = yield* deps.store\n .inspectTail(ThreadTailRequest.make({ threadId }))\n .pipe(Effect.mapError(mapStore(operation)));\n\n if (tail.tailSequence !== current.log.tailSequence) continue;\n const createdAtMillis = yield* Clock.currentTimeMillis;\n\n yield* deps.failpoint\n .hit(\"peer:before-prepared-append\")\n .pipe(Effect.mapError(mapStore(operation)));\n\n const appended = yield* deps.store\n .append(\n AppendRequest.make({\n threadId,\n expectedTailSequence: tail.tailSequence,\n\n batch: CanonicalBatch.make({\n batchId: Schema.decodeSync(BatchId)(message.messageId),\n producerId: deps.producerId,\n records: [\n RecordEnvelope.make({\n recordId: peerMessageRecordId(message.messageId),\n family: \"thread\",\n schemaVersion: 1,\n createdAt: DateTime.makeUnsafe(createdAtMillis),\n deploymentId: deps.deploymentId,\n payload: PeerMessagePrepared.make({\n messageId: message.messageId,\n source: toolSource ?? { _tag: \"programmatic\", ...initial.address },\n encodedEnvelope,\n sourcePrincipal: principal,\n operation,\n deadlineAtMillis: createdAtMillis + window,\n }),\n }),\n ],\n }),\n }),\n )\n .pipe(\n Effect.as(true),\n Effect.catchTag(\"AppendConflict\", () => Effect.succeed(false)),\n Effect.mapError(mapStore(operation)),\n );\n\n if (!appended) continue;\n yield* deps.failpoint\n .hit(\"peer:after-prepared-append\")\n .pipe(Effect.mapError(mapStore(operation)));\n saved = {\n envelope,\n sourcePrincipal: principal,\n operation,\n createdAtMillis,\n deadlineAtMillis: createdAtMillis + window,\n };\n }\n\n const prepared = yield* prepareMessageDelivery({\n key: message,\n envelope: saved.envelope,\n createdAtMillis: saved.createdAtMillis,\n deadlineAtMillis: saved.deadlineAtMillis,\n }).pipe(\n Effect.provideService(Crypto.Crypto, deps.crypto),\n Effect.mapError(mapStore(operation)),\n );\n\n return yield* status(\n yield* store.insert(prepared).pipe(Effect.mapError(mapStore(operation))),\n operation,\n );\n }\n\n return yield* failure(operation, \"capacity\");\n });\n\n const lookup = Effect.fnUntraced(function* (\n request: PeerTarget & { readonly message: MessageRef },\n operation: \"inspect\" | \"retry\",\n ) {\n yield* authorize(operation, operation === \"inspect\" ? \"read\" : \"control\", request);\n\n const message = yield* Schema.decodeEffect(MessageRef)(request.message).pipe(\n Effect.mapError(() => failure(operation, \"invalid-reference\")),\n );\n\n if (message.ownerThreadId !== threadId) return yield* failure(operation, \"denied\");\n const store = yield* deliveries(operation);\n const row = yield* store.get(message).pipe(Effect.mapError(mapStore(operation)));\n\n if (row === null) return yield* failure(operation, \"not-found\");\n if (\n !Schema.is(MessageAdmission)(row.envelope.messageAdmission) ||\n row.envelope.messageAdmission.peerName !== request.name ||\n row.envelope.agentId !== request.target.id\n )\n return yield* failure(operation, \"invalid-reference\");\n yield* authorize(operation, operation === \"inspect\" ? \"read\" : \"control\", request, {\n threadId: row.envelope.threadId,\n agentId: row.envelope.agentId,\n });\n\n return { row, store };\n });\n\n return {\n context: authorize(\"context\", \"context\").pipe(\n Effect.map(\n (source): WorkerSource => toolSource ?? { _tag: \"programmatic\", ...source.address },\n ),\n ),\n send: (request) => send(request, \"send\"),\n reply: (request) => send(request, \"reply\"),\n inspect: (request) =>\n lookup(request, \"inspect\").pipe(Effect.flatMap(({ row }) => status(row, \"inspect\"))),\n retry: Effect.fnUntraced(function* (request) {\n const { row, store } = yield* lookup(request, \"retry\");\n\n yield* authorizeEnvelope(yield* proof(row.key), \"send\");\n const nowMillis = yield* Clock.currentTimeMillis;\n\n return yield* status(\n yield* store\n .change(row.key, {\n _tag: \"Recover\",\n expectedVersion: row.version,\n nowMillis,\n deadlineAtMillis: nowMillis + (yield* lifetime),\n })\n .pipe(Effect.mapError(mapStore(\"retry\"))),\n \"retry\",\n );\n }),\n inbox: Effect.fnUntraced(function* (request) {\n const current = yield* authorize(\"inbox\", \"read\", request);\n\n const limit = yield* Schema.decodeEffect(\n Schema.Int.check(Schema.isGreaterThan(0), Schema.isLessThanOrEqualTo(100)),\n )(request.limit).pipe(Effect.mapError(() => failure(\"inbox\", \"capacity\")));\n\n let after = yield* Schema.decodeEffect(CanonicalSequence)(request.after ?? 0).pipe(\n Effect.mapError(() => failure(\"inbox\", \"invalid-reference\")),\n );\n\n const items: Array<(typeof InboxPage.Type)[\"items\"][number]> = [];\n\n while (after < current.log.tailSequence && items.length < limit) {\n const records = yield* Stream.runCollect(\n deps.store.read(ThreadRead.make({ threadId, afterSequence: after, limit: 1_024 })),\n ).pipe(Effect.mapError(() => failure(\"inbox\", \"storage\")));\n\n if (records.length === 0) break;\n for (const entry of records) {\n if (entry.sequence > current.log.tailSequence) break;\n after = entry.sequence;\n const payload = entry.record.payload;\n\n if (\n payload._tag === \"UserInputRecorded\" &&\n Schema.is(MessageAdmission)(payload.messageAdmission) &&\n payload.messageAdmission.sender.agentId === request.target.id\n ) {\n yield* authorize(\"inbox\", \"read\", request, payload.messageAdmission.sender);\n items.push({ sequence: entry.sequence, admission: payload.messageAdmission });\n }\n if (items.length >= limit) break;\n }\n }\n\n return { items, next: after < current.log.tailSequence ? after : null };\n }),\n };\n };\n\n return {\n acquire: Effect.fnUntraced(function* (request: {\n readonly sourceThreadId: ThreadId;\n readonly principal: Principal;\n }) {\n const service = facet(request.sourceThreadId, request.principal);\n\n yield* service.context;\n\n return service;\n }),\n forTool: (source: WorkerSource, principal: Principal) =>\n facet(source.threadId, principal, source),\n validateAdmission: Effect.fnUntraced(function* (\n unvalidated: MessageAdmission,\n options: DurableSubmitOptions,\n agentId: AgentId,\n inputDigest: Digest,\n ) {\n const admission = yield* Schema.decodeEffect(MessageAdmission)(unvalidated).pipe(\n Effect.mapError(() => failure(\"send\", \"invalid-input\")),\n );\n\n const saved = yield* proof(admission.message);\n const envelope = saved.envelope;\n\n if (\n !Schema.is(MessageAdmission)(envelope.messageAdmission) ||\n !sameAdmission(envelope.messageAdmission, admission) ||\n envelope.threadId !== options.threadId ||\n envelope.agentId !== agentId ||\n envelope.inputDigest !== inputDigest ||\n envelope.deliveryPrincipal !== options.principal ||\n envelope.admissionKey !== options.idempotencyKey ||\n !definitionDigestsEqual(envelope.definitions, options.definitions)\n )\n return yield* failure(\"send\", \"denied\");\n yield* authorizeEnvelope(saved, \"send\");\n\n return admission;\n }),\n };\n});\n","import { utf8ByteLength } from \"../Digest.ts\";\n\n/**\n * Count JSON from an owned canonical projection or checkpoint parser before retaining a Prompt.\n * Keep the conservative object/property/string charges without probing arbitrary object brands.\n * ThreadStore reads own their canonical JSON subgraphs; Schema encoding alone does not establish\n * that ownership for Unknown/Json leaves. Never use this guard on arbitrary provider values.\n */\nexport const promptJsonFootprint = (json: unknown, allowance: number): number | undefined => {\n let bytes = 0;\n const add = (size: number) => (bytes += size) <= allowance;\n\n const visit = (value: unknown, depth: number): boolean => {\n if (depth > 128) return false;\n if (value === null) return add(4);\n switch (typeof value) {\n case \"string\":\n return add(utf8ByteLength(value) + 2);\n case \"number\":\n return add(16);\n case \"boolean\":\n return add(4);\n case \"object\": {\n if (!add(32)) return false;\n if (Array.isArray(value)) {\n if (!add(value.length)) return false;\n for (let index = 0; index < value.length; index++) {\n if (!add(8 + String(index).length) || !visit(value[index], depth + 1)) return false;\n }\n\n return true;\n }\n for (const key of Object.keys(value)) {\n if (!add(8 + utf8ByteLength(key)) || !visit(Reflect.get(value, key), depth + 1))\n return false;\n }\n\n return true;\n }\n default:\n return false;\n }\n };\n\n return visit(json, 0) ? bytes : undefined;\n};\n","import { Effect, Option, Result, Schema, Stream } from \"effect\";\nimport { Prompt } from \"effect/ai\";\n\nimport type { RunId, ThreadId } from \"../../core/Identifiers.ts\";\nimport { boundedValueFootprint } from \"../../engine/internal/bounded-value.ts\";\nimport { canonicalJson, digestCanonicalJson, utf8ByteLength } from \"../Digest.ts\";\nimport {\n CanonicalSequence,\n type CanonicalRecordEnvelope,\n CURRENT_RECORD_FORMAT,\n PromptRecord,\n type Digest,\n type PromptRecordEnvelope,\n type RecordEnvelope,\n} from \"../Records.ts\";\nimport { CurrentRunWriter } from \"../RunContinuation.ts\";\nimport { projectRunJournalStream, RunJournalError } from \"../RunJournal.ts\";\nimport type { RunWriter } from \"../RunStorage.ts\";\nimport {\n MAX_PROMPT_CHECKPOINT_BYTES,\n MAX_PROMPT_CHECKPOINT_RUNS,\n ThreadPromptRead,\n ThreadStore,\n ThreadTailRequest,\n} from \"../ThreadStore.ts\";\nimport type { InitialContextInput } from \"./initial-context.ts\";\nimport type { JournalRecordEnvelope } from \"./journal-metadata.ts\";\nimport { promptJsonFootprint } from \"./prompt-footprint.ts\";\nimport { captureRecord } from \"./record-encoding.ts\";\nimport { digestRunHistory } from \"./run-context.ts\";\n\n// One Scope-owned Thread, including native values and encoded text. Compaction reconstructs\n// its canonical boundary map on demand; neither cache retains a second copy of that map.\nconst MAX_BYTES = 16 * 1024 * 1024;\nconst MAX_ENTRIES = 16_384;\nconst MAX_SUFFIX_RECORDS = 1_024;\n// Cold restoration reads a small page per snapshot; the native-value guard below\n// still bounds retained suffix facts before any further page is requested.\nconst COLD_SUFFIX_PAGE_RECORDS = 8;\nconst JSON_PREFIX = '{\"content\":[';\nconst encodePrompt = Schema.encodeEffect(Schema.toCodecJson(Prompt.Prompt));\nconst parseJson = Schema.decodeEffect(Schema.fromJsonString(Schema.Unknown));\nconst decodeCommittedPromptRecord = Schema.decodeUnknownSync(PromptRecord);\n\n// Construct these only when a persisted checkpoint is read. The encoded-side schema\n// validates without running native defaults for every historical message and part.\nconst decodeEncodedPrompt = Schema.decodeUnknownEffect(\n Schema.suspend(() =>\n Schema.Struct({\n content: Schema.Array(Schema.toEncoded(Prompt.Message)).check(\n Schema.isMaxLength(MAX_ENTRIES),\n ),\n }),\n ),\n);\n\nconst decodePrompt = Schema.decodeUnknownEffect(\n Schema.suspend(() =>\n Schema.Struct({\n content: Schema.Array(Schema.toCodecJson(Prompt.Message)).check(\n Schema.isMaxLength(MAX_ENTRIES),\n ),\n }),\n ),\n);\n\n// Inputs have crossed Effect's encoded-message Schema boundary. Native constructors\n// supply only the brands and defaults; Effect still owns every message and part type.\nfunction hydratePart(part: Prompt.UserMessagePartEncoded): Prompt.UserMessagePart;\nfunction hydratePart(part: Prompt.ToolMessagePartEncoded): Prompt.ToolMessagePart;\nfunction hydratePart(part: Prompt.AssistantMessagePartEncoded): Prompt.AssistantMessagePart;\nfunction hydratePart(part: Prompt.PartEncoded): Prompt.Part {\n switch (part.type) {\n case \"text\":\n return Prompt.textPart(part);\n case \"reasoning\":\n return Prompt.reasoningPart(part);\n case \"file\":\n return Prompt.filePart(part);\n case \"tool-call\":\n // Unlike options, providerExecuted is required by Effect's constructors;\n // only its Schema decoder supplies the false default.\n return Prompt.toolCallPart({ ...part, providerExecuted: part.providerExecuted ?? false });\n case \"tool-result\":\n return Prompt.toolResultPart({ ...part, providerExecuted: part.providerExecuted ?? false });\n case \"tool-approval-request\":\n return Prompt.toolApprovalRequestPart(part);\n case \"tool-approval-response\":\n return Prompt.toolApprovalResponsePart(part);\n }\n\n return part satisfies never;\n}\n\nconst hydrateMessage = (message: Prompt.MessageEncoded): Prompt.Message => {\n switch (message.role) {\n case \"system\":\n return Prompt.systemMessage(message);\n case \"user\":\n return Prompt.userMessage({\n ...message,\n content:\n typeof message.content === \"string\"\n ? [Prompt.textPart({ text: message.content })]\n : message.content.map((p) => hydratePart(p)),\n });\n case \"assistant\":\n return Prompt.assistantMessage({\n ...message,\n content:\n typeof message.content === \"string\"\n ? [Prompt.textPart({ text: message.content })]\n : message.content.map((p) => hydratePart(p)),\n });\n case \"tool\":\n return Prompt.toolMessage({\n ...message,\n content: message.content.map((p) => hydratePart(p)),\n });\n }\n\n return message satisfies never;\n};\n\nexport interface PromptHistory {\n readonly prompt: Prompt.Prompt;\n encoded: string | undefined;\n bytes: number | undefined;\n digest?: Digest | undefined;\n readonly runsSinceCheckpoint?: number | undefined;\n}\n\nexport interface CachedPromptHistory extends PromptHistory {\n readonly threadId: ThreadId;\n readonly through: CanonicalSequence;\n}\n\n/** Internal canonical projection; ownership comes from the ThreadStore read contract. */\nexport const preparePromptHistory = (prompt: Prompt.Prompt): PromptHistory | undefined =>\n prompt.content.length > MAX_ENTRIES\n ? undefined\n : { prompt, encoded: undefined, bytes: undefined };\n\nconst retainedBytes = (value: unknown, json: string, allowance: number) => {\n const encodedBytes = 2 * json.length;\n\n if (encodedBytes > allowance) return undefined;\n const footprint = promptJsonFootprint(value, Math.floor((allowance - encodedBytes) / 2));\n\n return footprint === undefined ? undefined : encodedBytes + 2 * footprint;\n};\n\nconst encodeHistory = (prompt: Prompt.Prompt, allowance: number) =>\n Effect.suspend(() =>\n Effect.mapEager(encodePrompt(prompt), (value) => {\n const encoded = canonicalJson(value);\n\n return { encoded, bytes: retainedBytes(value, encoded, allowance) };\n }),\n );\n\n// Finish parsing/decoding before suspending for suffix reads. Only the native prefix and its\n// canonical string leave this Effect; it does not keep a second parsed root in the outer Run.\nexport const decodeCheckpointPrefix = Effect.fnUntraced(function* (\n encoded: string,\n length: number,\n) {\n const value = yield* parseJson(encoded);\n const bytes = retainedBytes(value, encoded, MAX_BYTES);\n\n if (bytes === undefined) return undefined;\n\n const decoded = yield* decodeEncodedPrompt(value).pipe(\n Effect.map((prompt) => ({ content: prompt.content.map(hydrateMessage) })),\n // Keep the canonical codec as fallback for representations the encoded Schema rejects.\n Effect.catch(() => decodePrompt(value)),\n );\n\n return decoded.content.length === length\n ? { prompt: Prompt.fromMessages(decoded.content), encoded, bytes }\n : undefined;\n});\n\n// A concatenated content index has at most five digits under MAX_ENTRIES. Relative to the\n// suffix's original one-or-more digits, reserve four extra bytes in both value estimates.\nconst appendedBytes = (\n prefix: number,\n suffix: { readonly bytes: number; readonly prompt: Prompt.Prompt },\n) => prefix + suffix.bytes + 8 * suffix.prompt.content.length;\n\n/** The ordinary codec remains the oracle on canonical reconstruction and explicit verify. */\nexport const digestPromptHistory = (prompt: Prompt.Prompt, history: PromptHistory | undefined) => {\n if (history === undefined) return digestRunHistory(prompt);\n if (\n prompt.content.length !== history.prompt.content.length ||\n prompt.content.some((message, index) => message !== history.prompt.content[index])\n ) {\n history.encoded = undefined;\n history.bytes = undefined;\n history.digest = undefined;\n\n return digestRunHistory(prompt);\n }\n\n return Effect.gen(function* () {\n let encoded = history.encoded;\n\n if (encoded === undefined) {\n const captured = yield* encodeHistory(prompt, MAX_BYTES);\n\n encoded = captured.encoded;\n if (captured.bytes !== undefined) {\n history.encoded = encoded;\n history.bytes = captured.bytes;\n }\n }\n const digest = yield* digestCanonicalJson(encoded);\n\n history.digest = digest;\n\n return digest;\n }).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: \"Original model history integrity is unavailable\",\n cause,\n }),\n ),\n );\n};\n\n/** Writer identity is data; effectful writer ports stay in Effect context. */\ntype WriterIdentity = Pick<RunWriter, \"threadId\">;\n\nconst suffixRecordFootprint = (entry: PromptRecordEnvelope, allowance: number) => {\n const payload = entry.record.payload;\n\n return boundedValueFootprint(\n {\n ...entry,\n record: {\n ...entry.record,\n payload:\n payload._tag === \"ModelResponseRecorded\"\n ? { ...payload, messages: payload.messages.content }\n : { ...payload },\n },\n },\n Math.floor(allowance / 32),\n );\n};\n\n/**\n * Attempt-local prompt facts, seeded by the original committed input and extended only by\n * acknowledged, consecutive appends. Never authority for writes or recovery; any uncertainty\n * discards this derivative and completion rereads canonical history.\n */\nexport const makeCommittedPromptSuffix = (\n original: Pick<CanonicalRecordEnvelope, \"threadId\" | \"sequence\" | \"record\">,\n) => {\n const records: Array<PromptRecordEnvelope> = [];\n\n const runId =\n original.record.payload._tag === \"UserInputRecorded\"\n ? original.record.payload.runId\n : undefined;\n\n let through = original.sequence - 1;\n let remaining = MAX_BYTES;\n let valid = runId !== undefined;\n\n const discard = () => {\n valid = false;\n records.length = 0;\n };\n\n const append = (\n facts: ReadonlyArray<RecordEnvelope>,\n result: {\n readonly firstSequence: CanonicalSequence;\n readonly lastSequence: CanonicalSequence;\n readonly replayed: boolean;\n },\n ) => {\n if (!valid) return;\n if (\n result.replayed ||\n result.firstSequence !== through + (facts.length === 0 ? 0 : 1) ||\n result.lastSequence !== through + facts.length ||\n records.length + facts.length > MAX_SUFFIX_RECORDS\n ) {\n discard();\n\n return;\n }\n // Prepared append facts already have privately frozen encodings; the original input and\n // winning settlement are captured here before retention. An input contributes only its\n // owned identity; other facts still decode the prompt projection used by readPrompt.\n // Failure invalidates this derivative, not the commit.\n try {\n for (const fact of facts) {\n const captured = captureRecord(fact);\n\n if (Result.isFailure(captured)) {\n discard();\n\n return;\n }\n const owned = captured.success;\n const payload = owned.canonical.payload;\n\n if (\n payload._tag !== \"UserInputRecorded\" &&\n payload._tag !== \"ModelResponseRecorded\" &&\n payload._tag !== \"ToolCallSettled\" &&\n payload._tag !== \"SubmissionSettled\"\n ) {\n discard();\n\n return;\n }\n if (\n payload._tag === \"UserInputRecorded\" &&\n (records.length !== 0 || payload.kind !== \"user\")\n ) {\n discard();\n\n return;\n }\n if (payload.runId !== runId) {\n discard();\n\n return;\n }\n\n const record: PromptRecord =\n payload._tag === \"UserInputRecorded\"\n ? {\n recordId: owned.canonical.recordId,\n payload: {\n _tag: payload._tag,\n kind: payload.kind,\n ...(payload.runId === undefined ? {} : { runId: payload.runId }),\n ...(payload.submissionId === undefined\n ? {}\n : { submissionId: payload.submissionId }),\n },\n }\n : decodeCommittedPromptRecord(owned.wire);\n\n const entry: PromptRecordEnvelope = {\n threadId: original.threadId,\n sequence: CanonicalSequence.make(through + 1),\n record,\n };\n\n const footprint = suffixRecordFootprint(entry, remaining);\n\n if (footprint === undefined) {\n discard();\n\n return;\n }\n remaining -= 32 * footprint;\n records.push(entry);\n through++;\n }\n } catch {\n discard();\n }\n };\n\n append([original.record], {\n firstSequence: original.sequence,\n lastSequence: original.sequence,\n replayed: false,\n });\n\n return {\n append,\n discard,\n take: (sequence: CanonicalSequence): ReadonlyArray<PromptRecordEnvelope> | undefined =>\n valid && sequence === through ? records : undefined,\n };\n};\n\nexport type CommittedPromptSuffix = ReturnType<typeof makeCommittedPromptSuffix>;\n\n/** Fold only complete, sequential Runs. Raw facts and encoded/native messages are bounded. */\nconst readSuffix = Effect.fnUntraced(function* (\n writer: WriterIdentity,\n from: CanonicalSequence,\n through: CanonicalSequence,\n firstRun: RunId,\n allowance: number,\n firstThrough: CanonicalSequence,\n pageRecords = 1,\n committed?: ReadonlyArray<PromptRecordEnvelope>,\n) {\n const store = yield* ThreadStore;\n const records: Array<JournalRecordEnvelope> = [];\n let after = from;\n let remaining = allowance;\n let active: RunId | undefined;\n let runs = 0;\n\n while (after < through) {\n const page =\n committed ??\n (yield* store\n .readPrompt(\n ThreadPromptRead.make({\n threadId: writer.threadId,\n afterSequence: after,\n throughSequence: through,\n limit: pageRecords,\n }),\n )\n .pipe(Stream.take(pageRecords + 1), Stream.runCollect));\n\n if (\n (committed === undefined && page.length > pageRecords) ||\n records.length + page.length > MAX_SUFFIX_RECORDS\n )\n return undefined;\n for (const entry of page) {\n const payload = entry.record.payload;\n\n if (\n entry.threadId !== writer.threadId ||\n entry.sequence <= after ||\n entry.sequence > through ||\n payload._tag === \"CompactionCreated\" ||\n payload._tag === \"ModelCompleted\" ||\n payload._tag === \"RunFailed\"\n )\n return undefined;\n if (payload._tag === \"UserInputRecorded\") {\n if (\n active !== undefined ||\n payload.kind !== \"user\" ||\n payload.runId === undefined ||\n (runs === 0 && (payload.runId !== firstRun || entry.sequence !== from + 1))\n )\n return undefined;\n active = payload.runId;\n if (++runs > MAX_PROMPT_CHECKPOINT_RUNS) return undefined;\n } else {\n if (active === undefined || payload.runId !== active) return undefined;\n if (payload._tag === \"SubmissionSettled\") {\n if (payload.outcome !== \"completed\" || (runs === 1 && entry.sequence !== firstThrough))\n return undefined;\n active = undefined;\n }\n }\n\n // This native-value guard only visits a bounded new suffix. Reserve encoding/escape\n // copies before collecting it; the full encoded prefix uses the JSON-specific counter.\n const footprint = suffixRecordFootprint(entry, remaining);\n\n if (footprint === undefined) return undefined;\n remaining -= 32 * footprint;\n records.push(entry);\n after = entry.sequence;\n }\n if (page.length === 0) break;\n }\n if (runs === 0 || active !== undefined) return undefined;\n let incomplete = false;\n\n const delta = yield* projectRunJournalStream(\n Stream.fromIterable(records),\n undefined,\n (boundary) => {\n if (boundary.incomplete) incomplete = true;\n },\n );\n\n if (incomplete || delta.prompt.content.length > MAX_ENTRIES) return undefined;\n const encoded = yield* encodeHistory(delta.prompt, allowance);\n\n return encoded.bytes === undefined\n ? undefined\n : { ...encoded, bytes: encoded.bytes, prompt: delta.prompt, runs };\n});\n\nconst appendJson = (\n prefix: { readonly prompt: Prompt.Prompt; readonly encoded: string },\n suffix: { readonly prompt: Prompt.Prompt; readonly encoded: string },\n) =>\n prefix.encoded.slice(0, -2) +\n (prefix.prompt.content.length > 0 && suffix.prompt.content.length > 0 ? \",\" : \"\") +\n suffix.encoded.slice(JSON_PREFIX.length);\n\n/** Sequence anchors are unambiguous within one append-only Thread; import discards derivatives. */\nexport const makePromptHistoryCache = Effect.fnUntraced(function* () {\n let current: CachedPromptHistory | undefined;\n let closed = false;\n\n yield* Effect.addFinalizer(() =>\n Effect.sync(() => {\n current = undefined;\n closed = true;\n }),\n );\n\n const take = Effect.fnUntraced(\n function* (writer: WriterIdentity) {\n const cached = current;\n\n current = undefined;\n if (closed) return undefined;\n const store = yield* ThreadStore;\n\n if (cached === undefined && store.promptCheckpoints === undefined) return undefined;\n if (cached !== undefined && cached.threadId !== writer.threadId) return undefined;\n const head = yield* store.inspectTail(ThreadTailRequest.make({ threadId: writer.threadId }));\n\n if (cached !== undefined) {\n return head.tailSequence === cached.through ? cached : undefined;\n }\n if (store.promptCheckpoints === undefined) return undefined;\n\n const loaded = yield* store.promptCheckpoints.load({\n threadId: writer.threadId,\n throughSequence: head.tailSequence,\n });\n\n if (Option.isNone(loaded)) return undefined;\n const checkpoint = loaded.value;\n\n if (\n checkpoint.threadId !== writer.threadId ||\n checkpoint.throughSequence > head.tailSequence ||\n checkpoint.historyThrough >= checkpoint.throughSequence ||\n utf8ByteLength(checkpoint.promptJson) > MAX_PROMPT_CHECKPOINT_BYTES ||\n 2 * checkpoint.promptJson.length > MAX_BYTES ||\n !checkpoint.promptJson.startsWith(JSON_PREFIX) ||\n (yield* digestCanonicalJson(checkpoint.promptJson)) !== checkpoint.historyDigest\n )\n return undefined;\n\n const prefix = yield* decodeCheckpointPrefix(\n checkpoint.promptJson,\n checkpoint.priorHistoryLength,\n );\n\n if (prefix === undefined) return undefined;\n\n const delta = yield* readSuffix(\n writer,\n checkpoint.historyThrough,\n head.tailSequence,\n checkpoint.runId,\n MAX_BYTES - prefix.bytes,\n checkpoint.throughSequence,\n COLD_SUFFIX_PAGE_RECORDS,\n );\n\n if (\n delta === undefined ||\n appendedBytes(prefix.bytes, delta) > MAX_BYTES ||\n prefix.prompt.content.length + delta.prompt.content.length > MAX_ENTRIES\n )\n return undefined;\n\n // A cold load refreshes after this Run. Warm reuse amortizes replacements across Runs.\n return {\n threadId: writer.threadId,\n through: head.tailSequence,\n prompt: Prompt.concat(prefix.prompt, delta.prompt),\n encoded: appendJson(prefix, delta),\n bytes: appendedBytes(prefix.bytes, delta),\n } satisfies CachedPromptHistory;\n },\n Effect.orElseSucceed(() => undefined),\n );\n\n const complete = Effect.fnUntraced(\n function* (\n writer: WriterIdentity,\n original: InitialContextInput,\n history: PromptHistory,\n committed?: CommittedPromptSuffix,\n ) {\n const { encoded, bytes, digest } = history;\n const input = original.record.payload;\n\n if (\n closed ||\n encoded === undefined ||\n bytes === undefined ||\n digest === undefined ||\n input._tag !== \"UserInputRecorded\" ||\n input.runId === undefined\n )\n return;\n const store = yield* ThreadStore;\n const tail = yield* (yield* CurrentRunWriter).tail;\n\n const delta = yield* readSuffix(\n writer,\n CanonicalSequence.make(original.sequence - 1),\n tail.sequence,\n input.runId,\n MAX_BYTES - bytes,\n tail.sequence,\n 1,\n committed?.take(tail.sequence),\n );\n\n if (\n delta === undefined ||\n delta.runs !== 1 ||\n appendedBytes(bytes, delta) > MAX_BYTES ||\n history.prompt.content.length + delta.prompt.content.length > MAX_ENTRIES\n )\n return;\n const head = yield* store.inspectTail(ThreadTailRequest.make({ threadId: writer.threadId }));\n\n if (closed || head.tailSequence !== tail.sequence) return;\n const runsSinceCheckpoint = (history.runsSinceCheckpoint ?? MAX_PROMPT_CHECKPOINT_RUNS) + 1;\n const refresh = runsSinceCheckpoint >= MAX_PROMPT_CHECKPOINT_RUNS;\n\n if (refresh && store.promptCheckpoints !== undefined) {\n yield* store.promptCheckpoints\n .save({\n version: 2,\n recordFormat: CURRENT_RECORD_FORMAT,\n threadId: writer.threadId,\n runId: input.runId,\n throughSequence: tail.sequence,\n historyThrough: CanonicalSequence.make(original.sequence - 1),\n priorHistoryLength: history.prompt.content.length,\n historyDigest: digest,\n promptJson: encoded,\n })\n .pipe(Effect.catch(() => Effect.void));\n }\n if (closed) return;\n current = {\n threadId: writer.threadId,\n through: tail.sequence,\n prompt: Prompt.concat(history.prompt, delta.prompt),\n encoded: appendJson({ prompt: history.prompt, encoded }, delta),\n bytes: appendedBytes(bytes, delta),\n runsSinceCheckpoint: refresh ? 0 : runsSinceCheckpoint,\n };\n },\n Effect.catch(() => Effect.void),\n );\n\n return { take, complete };\n});\n","import {\n Cause,\n Clock,\n Context,\n Crypto,\n DateTime,\n Duration,\n Effect,\n Option,\n Schema,\n Stream,\n} from \"effect\";\n\nimport type * as Agent from \"../../core/Agent.ts\";\nimport { AgentPolicy } from \"../../core/AgentPolicy.ts\";\nimport { Update, UpdateError } from \"../../core/AgentUpdates.ts\";\nimport { ThreadId, type AgentId, type SubmissionId } from \"../../core/Identifiers.ts\";\nimport { MessageRef, type MessageStatus } from \"../../core/Messaging.ts\";\nimport { IdempotencyKey, Receipt } from \"../../core/Receipt.ts\";\nimport { SubagentDelegationCaps, SubagentGrant } from \"../../core/SubagentContract.ts\";\nimport {\n type WorkerSummary,\n type WorkerStarted,\n WorkerCompletion,\n FrameworkMessage,\n WorkerUpdate,\n WorkerError,\n WorkerHistoryEntry,\n type WorkerContext,\n type WorkerBudgetScope,\n WorkerRef,\n WorkerStop,\n} from \"../../core/Worker.ts\";\nimport {\n type SubagentHost,\n type DeferredStartWorkerRequest,\n type DeferredFollowUpWorkerRequest,\n type FollowUpWorkerRequest,\n type StartWorkerRequest,\n type WorkerObservation,\n type WorkerReceiptRequest,\n type WorkerRunReport,\n} from \"../../engine/SubagentHost.ts\";\nimport { digestJson } from \"../Digest.ts\";\nimport type {\n DurableAbortFailure,\n DurableAwaitFailure,\n DurableSubmitFailure,\n DurableSubmitOptions,\n} from \"../DurableAgentRuntime.ts\";\nimport {\n DurableRuntimeFailpoint,\n type DurableRuntimeFailpointLocation,\n} from \"../DurableFailpoint.ts\";\nimport {\n MessageDeliveryDriver,\n MessageDeliveryStore,\n prepareMessageDelivery,\n type MessageDeliveryRecord,\n} from \"../MessageDelivery.ts\";\nimport { PreparedInputAdmission } from \"../PreparedInputAdmission.ts\";\nimport {\n BatchId,\n CanonicalBatch,\n type CanonicalRecordEnvelope,\n CanonicalSequence,\n type Digest,\n type DeploymentId,\n type ProducerId,\n RecordEnvelope,\n RecordId,\n WorkerAdmission,\n WorkerInputRequested,\n WorkerStopRequested,\n WorkHandoffCompleted,\n WorkerOrigin,\n WorkerContinuation,\n WorkerInputCompleted,\n WorkerInputRefused,\n WorkerReportPrepared,\n WorkerReportRefused,\n WorkerReportingIntent,\n SubtreeBudgetReserved,\n PersistedJson,\n MAX_RUN_EVIDENCE_BYTES,\n MAX_RUN_EVIDENCE_RECORDS,\n MAX_RUN_TERMINAL_BYTES,\n} from \"../Records.ts\";\nimport { canonicalRecordBytes, readRunEvidenceSnapshot, reference } from \"../RunContinuation.ts\";\nimport {\n workerInputRecordId,\n agentUpdateRecordId,\n firstWorkerInputRecordId,\n workerOriginRecordId,\n workerReportRecordId,\n runIdForSubmission,\n} from \"../RunJournal.ts\";\nimport {\n type ScheduledInputFailure,\n ScheduledInputRefused,\n ScheduledInputRetryable,\n} from \"../Schedule.ts\";\nimport {\n SubmissionLedger,\n WorkerLedgerState,\n LedgerError,\n AbortCommand,\n type AbortIntent,\n type Principal,\n type Settlement,\n SubmissionLookupById,\n SubmissionLookupByKey,\n FundingOwnerRequest,\n submissionSettlementRecordId,\n type SubmissionSnapshot,\n} from \"../SubmissionLedger.ts\";\nimport type { SubmissionStatus } from \"../SubmissionStatus.ts\";\nimport { PreparedInput } from \"../Subscription.ts\";\nimport {\n ThreadIdentityRequest,\n ThreadStore,\n ThreadReader,\n getRecord,\n getRunInput,\n readWorkerState as readNativeWorkerState,\n AppendRequest,\n type ThreadIdentity,\n type ThreadWorkerCapacity,\n ThreadRead,\n ThreadTailRequest,\n} from \"../ThreadStore.ts\";\nimport { deliveryPredecessor, workId } from \"../ThreadWork.ts\";\nimport { WakeScheduler } from \"../WakeScheduler.ts\";\nimport {\n WorkerBudgetAuthorizer,\n WorkerConcurrencyLimit,\n WorkerConcurrencyResolver,\n WorkerHostAuthorizer,\n WorkerHostConfig,\n WorkerPolicyResolver,\n type WorkerPolicyTarget,\n type WorkerStartAdmission,\n} from \"../WorkerHost.ts\";\nimport {\n definitionDigestsEqual,\n resolveDefinitionBinding,\n type ResolvedBinding,\n} from \"./agent-registration.ts\";\nimport { messageStatus } from \"./message-status.ts\";\nimport { ensureWorkerOrigin } from \"./thread-initialization.ts\";\nimport { unresolvedToolOperations } from \"./tool-operations.ts\";\n\nconst failure = (\n operation: WorkerError[\"operation\"],\n reason: WorkerError[\"reason\"],\n cause?: unknown,\n) => WorkerError.make({ operation, reason, ...(cause === undefined ? {} : { cause }) });\n\nconst storageFailure = (operation: WorkerError[\"operation\"]) => (cause: unknown) =>\n failure(operation, \"storage\", cause);\n\nconst decode = <S extends Schema.Top>(\n schema: S,\n value: unknown,\n operation: WorkerError[\"operation\"],\n) =>\n Schema.decodeUnknownEffect(Schema.toType(schema))(value).pipe(\n Effect.mapError((cause) => failure(operation, \"corrupt\", cause)),\n );\n\nconst sameOrigin = Schema.toEquivalence(WorkerOrigin);\nconst sameAdmission = Schema.toEquivalence(WorkerAdmission);\nconst sameReporting = Schema.toEquivalence(Schema.UndefinedOr(WorkerReportingIntent));\nconst sameJson = Schema.toEquivalence(PersistedJson);\nconst sameCaps = Schema.toEquivalence(SubagentDelegationCaps);\nconst samePolicy = Schema.toEquivalence(AgentPolicy);\n\nconst amountCaps = [\n [\"turns\", \"maxTurns\"],\n [\"toolCalls\", \"maxToolCalls\"],\n [\"durationMillis\", \"maxDurationMillis\"],\n [\"inputTokens\", \"maxInputTokens\"],\n [\"outputTokens\", \"maxOutputTokens\"],\n [\"costMicrousd\", \"maxCostMicrousd\"],\n [\"resultBytes\", \"maxResultBytes\"],\n] as const;\n\nconst sourceCaps = (policy: AgentPolicy): SubagentDelegationCaps =>\n SubagentDelegationCaps.make({\n maxTotalChildInvocations: policy.maxToolCalls,\n maxConcurrentChildren: policy.toolConcurrency,\n maxTurns: policy.maxTurns,\n maxToolCalls: policy.maxToolCalls,\n maxDurationMillis: Math.ceil(Duration.toMillis(policy.maxDuration)),\n maxResultBytes: Math.min(\n Number.MAX_SAFE_INTEGER,\n policy.toolResultBounds.maxBytes * policy.maxToolCalls,\n ),\n ...(policy.tokenBudget === undefined\n ? {}\n : { maxInputTokens: policy.tokenBudget, maxOutputTokens: policy.tokenBudget }),\n ...(policy.costBudgetMicrousd === undefined\n ? {}\n : { maxCostMicrousd: policy.costBudgetMicrousd }),\n });\n\nconst withinPolicy = (origin: WorkerOrigin, source: AgentPolicy, target: AgentPolicy): boolean => {\n const policy = origin.policy;\n const allocation = origin.budget.allocation;\n const caps = origin.budget.caps;\n const ceilings = sourceCaps(source);\n\n for (const [, name] of origin.budgetScope === \"worker-run\" ? [] : amountCaps) {\n if (caps[name] !== undefined && ceilings[name] !== undefined && caps[name] > ceilings[name])\n return false;\n }\n if (\n origin.budgetScope !== \"worker-run\" &&\n ((caps.maxTotalChildInvocations !== undefined &&\n caps.maxTotalChildInvocations > source.maxToolCalls) ||\n (caps.maxConcurrentChildren !== undefined &&\n caps.maxConcurrentChildren > source.toolConcurrency))\n )\n return false;\n const tokenCeiling = Math.min(source.tokenBudget ?? Infinity, target.tokenBudget ?? Infinity);\n\n const costCeiling = Math.min(\n source.costBudgetMicrousd ?? Infinity,\n target.costBudgetMicrousd ?? Infinity,\n );\n\n return (\n policy.maxTurns <= Math.min(allocation.turns, source.maxTurns, target.maxTurns) &&\n policy.maxToolCalls <=\n Math.min(allocation.toolCalls, source.maxToolCalls, target.maxToolCalls) &&\n Duration.toMillis(policy.maxDuration) <=\n Math.min(\n allocation.durationMillis,\n Duration.toMillis(source.maxDuration),\n Duration.toMillis(target.maxDuration),\n ) &&\n policy.toolConcurrency <= Math.min(source.toolConcurrency, target.toolConcurrency) &&\n policy.toolResultBounds.maxBytes <=\n Math.min(source.toolResultBounds.maxBytes, target.toolResultBounds.maxBytes) &&\n (tokenCeiling === Infinity ||\n (policy.tokenBudget !== undefined && policy.tokenBudget <= tokenCeiling)) &&\n (costCeiling === Infinity ||\n (policy.costBudgetMicrousd !== undefined && policy.costBudgetMicrousd <= costCeiling)) &&\n (source.tokenBudget === undefined ||\n (allocation.inputTokens > 0 &&\n allocation.outputTokens > 0 &&\n policy.tokenBudget !== undefined &&\n policy.tokenBudget <= allocation.inputTokens + allocation.outputTokens)) &&\n (source.costBudgetMicrousd === undefined ||\n (policy.costBudgetMicrousd !== undefined &&\n policy.costBudgetMicrousd <= allocation.costMicrousd))\n );\n};\n\nexport interface WorkerRuntimeOptions {\n readonly bindings: ReadonlyArray<ResolvedBinding>;\n readonly deploymentId: DeploymentId;\n readonly producerId: ProducerId;\n readonly settlementPollInterval: Duration.Duration;\n}\n\n/** Admission and cancellation enter the owning runtime, never the raw ledger. */\nexport class WorkerInputControl extends Context.Service<\n WorkerInputControl,\n {\n readonly submit: (envelope: PreparedInput) => Effect.Effect<Receipt, DurableSubmitFailure>;\n readonly status: (\n receipt: Receipt,\n ) => Effect.Effect<SubmissionStatus, DurableAwaitFailure | ScheduledInputFailure>;\n readonly abort: (command: AbortCommand) => Effect.Effect<AbortIntent, DurableAbortFailure>;\n }\n>()(\"@effect-agent/thread/internal/WorkerInputControl\") {}\n\nconst CurrentStartPreparation = Context.Reference<WorkerStartAdmission | undefined>(\n \"@effect-agent/thread/internal/CurrentStartPreparation\",\n { defaultValue: () => undefined },\n);\n\nconst CurrentStartDelivery = Context.Reference<\n | {\n readonly authorization: WorkerStartAdmission;\n readonly admission: WorkerAdmission;\n readonly inputDigest: Digest;\n }\n | undefined\n>(\"@effect-agent/thread/internal/CurrentStartDelivery\", { defaultValue: () => undefined });\n\n/** No in-memory ownership: every mutation is reserved in source canonical history with CAS. */\nexport const makeWorkerRuntime = Effect.fnUntraced(function* (options: WorkerRuntimeOptions) {\n const control = yield* WorkerInputControl;\n // A routed read may belong to another owner; capture it before exposing worker operations.\n const admission = yield* Effect.serviceOption(PreparedInputAdmission);\n\n const deps = {\n ...options,\n ...control,\n store: yield* ThreadStore,\n ledger: yield* SubmissionLedger,\n deliveries: yield* Effect.serviceOption(MessageDeliveryStore),\n crypto: yield* Crypto.Crypto,\n authorizer: yield* WorkerHostAuthorizer,\n budgetAuthorizer: yield* WorkerBudgetAuthorizer,\n policyResolver: yield* WorkerPolicyResolver,\n concurrencyResolver: yield* WorkerConcurrencyResolver,\n limits: yield* WorkerHostConfig,\n failpoint: yield* DurableRuntimeFailpoint,\n wake: yield* Effect.serviceOption(WakeScheduler),\n status: Option.getOrUndefined(admission)?.submissionStatus ?? control.status,\n };\n\n const withCrypto = <A, E>(effect: Effect.Effect<A, E, Crypto.Crypto>) =>\n Effect.provideService(effect, Crypto.Crypto, deps.crypto);\n\n const currentStart = Effect.fnUntraced(function* (\n admission: WorkerStartAdmission | undefined,\n sourceThreadId: ThreadId,\n sourceSubmissionId: SubmissionId | undefined,\n principal: Principal,\n targetAgentId: AgentId,\n continuationOf: WorkerContinuation | undefined,\n ) {\n if (\n admission === undefined ||\n admission.sourceThreadId !== sourceThreadId ||\n admission.sourceSubmissionId !== sourceSubmissionId ||\n (admission.principal !== principal && admission.requestedPrincipal !== principal) ||\n admission.targetAgentId !== targetAgentId ||\n !Schema.toEquivalence(Schema.UndefinedOr(WorkerContinuation))(\n admission.continuationOf,\n continuationOf,\n )\n )\n return undefined;\n\n const tail = yield* deps.store\n .inspectTail(ThreadTailRequest.make({ threadId: sourceThreadId }))\n .pipe(Effect.mapError(storageFailure(\"start\")));\n\n return tail.tailSequence === admission.tailSequence ? admission : undefined;\n });\n\n const authorizeBudget = Effect.fnUntraced(function* (\n origin: WorkerOrigin,\n principal: Principal,\n admission?: WorkerStartAdmission,\n ) {\n yield* verifyContinuation(origin);\n if (origin.budgetScope !== \"worker-run\") return;\n // Independence changes accounting ownership, never delegation generations.\n if (origin.depth !== 1) return yield* failure(\"start\", \"denied\");\n\n yield* deps.budgetAuthorizer.authorize({\n ...(admission === undefined ? {} : { admission }),\n source: origin.source,\n principal,\n worker: origin.worker,\n ...(origin.continuationOf === undefined ? {} : { continuationOf: origin.continuationOf }),\n policy: origin.policy,\n budget: origin.budget,\n });\n });\n\n const exactRecord = (\n threadId: ThreadId,\n recordId: RecordId,\n operation: WorkerError[\"operation\"],\n ) =>\n getRecord({ threadId, recordId }).pipe(\n Effect.provideService(ThreadReader, ThreadReader.fromStore(deps.store)),\n Effect.mapError(storageFailure(operation)),\n );\n\n const readStop = Effect.fnUntraced(function* (\n threadId: ThreadId,\n workerThreadId: ThreadId,\n throughSequence: CanonicalSequence,\n ) {\n const page = yield* Stream.runCollect(\n deps.store.read({\n threadId,\n selection: { _tag: \"WorkerStop\", workerThreadId, throughSequence },\n page: { limit: 1 },\n }),\n ).pipe(Effect.mapError(storageFailure(\"stop\")));\n\n const entry = page[0];\n\n if (\n page.length > 1 ||\n (entry !== undefined &&\n (entry.threadId !== threadId ||\n entry.sequence > throughSequence ||\n entry.record.payload._tag !== \"WorkerStopRequested\" ||\n entry.record.payload.command.worker.threadId !== workerThreadId))\n )\n return yield* failure(\"stop\", \"corrupt\");\n\n return entry;\n });\n\n /** One worker Receipt and its exact joined host, without the unrelated Thread transcript. */\n const readSubmission = Effect.fnUntraced(function* (submission: SubmissionSnapshot) {\n const threadId = submission.threadId;\n\n const tail = yield* deps.store\n .inspectTail(ThreadTailRequest.make({ threadId }))\n .pipe(Effect.mapError(storageFailure(\"inspect\")));\n\n const identity = yield* deps.store\n .readIdentity(ThreadIdentityRequest.make({ threadId }))\n .pipe(Effect.mapError(storageFailure(\"inspect\")));\n\n const selected = [submission.submissionId];\n\n const settled = Option.getOrUndefined(\n yield* exactRecord(\n threadId,\n submissionSettlementRecordId(submission.submissionId),\n \"inspect\",\n ),\n );\n\n if (\n settled?.record.payload._tag === \"SubmissionSettled\" &&\n settled.record.payload.runId !== undefined &&\n settled.record.payload.runId !== runIdForSubmission(submission.submissionId)\n ) {\n const original = yield* getRunInput({ threadId, runId: settled.record.payload.runId }).pipe(\n Effect.provideService(ThreadReader, ThreadReader.fromStore(deps.store)),\n Effect.mapError(storageFailure(\"inspect\")),\n );\n\n const input = Option.getOrUndefined(original)?.record.payload;\n\n if (input?._tag !== \"UserInputRecorded\" || input.submissionId === undefined)\n return yield* failure(\"inspect\", \"corrupt\");\n selected.push(input.submissionId);\n }\n\n const byId = new Map(\n identity.records\n .filter((entry) => entry.sequence <= tail.tailSequence)\n .map((entry) => [entry.record.recordId, entry]),\n );\n\n let bytes = 0;\n\n for (const submissionId of selected) {\n const records = yield* readRunEvidenceSnapshot(\n threadId,\n submissionId,\n tail.tailSequence,\n ).pipe(\n Effect.provideService(ThreadReader, ThreadReader.fromStore(deps.store)),\n Effect.provideService(Crypto.Crypto, deps.crypto),\n Effect.mapError(storageFailure(\"inspect\")),\n );\n\n for (const entry of records) {\n if (!byId.has(entry.record.recordId)) bytes += canonicalRecordBytes(entry.record);\n if (bytes > MAX_RUN_EVIDENCE_BYTES + MAX_RUN_TERMINAL_BYTES)\n return yield* failure(\"inspect\", \"capacity\");\n byId.set(entry.record.recordId, entry);\n }\n }\n\n return {\n ...tail,\n records: [...byId.values()].sort((left, right) => left.sequence - right.sequence),\n };\n });\n\n const completedContinuation = Effect.fnUntraced(function* (\n source: WorkerContext[\"source\"],\n worker: WorkerRef,\n targetAgentId: AgentId,\n delegationId: WorkerRef[\"delegationId\"],\n expected?: WorkerContinuation,\n ) {\n const selected = yield* decode(WorkerRef, worker, \"start\");\n\n if (\n selected.targetAgentId !== targetAgentId ||\n selected.delegationId !== delegationId ||\n selected.threadId === source.threadId ||\n deps.ledger.inspectWorker === undefined\n )\n return yield* failure(\"start\", \"worker-mismatch\");\n const sourceState = yield* readIdentity(source.threadId, \"start\");\n\n if (yield* readStop(source.threadId, selected.threadId, sourceState.tailSequence))\n return yield* failure(\"start\", \"denied\");\n\n const first = Option.getOrUndefined(\n yield* exactRecord(source.threadId, firstWorkerInputRecordId(selected), \"start\"),\n )?.record.payload;\n\n const origin = first?._tag === \"WorkerInputRequested\" ? first.admission.origin : undefined;\n\n if (\n origin === undefined ||\n origin.lifecycle !== \"assignment\" ||\n !Schema.toEquivalence(WorkerRef)(origin.worker, selected) ||\n origin.source.threadId !== source.threadId ||\n origin.source.agentId !== source.agentId ||\n first?._tag !== \"WorkerInputRequested\" ||\n first.admission.messageId !== origin.firstMessageId\n )\n return yield* failure(\"start\", \"worker-mismatch\");\n\n const recorded = Option.getOrUndefined(\n yield* exactRecord(selected.threadId, workerOriginRecordId(selected.threadId), \"start\"),\n )?.record.payload;\n\n if (recorded?._tag !== \"WorkerOriginRecorded\" || !sameOrigin(recorded.origin, origin))\n return yield* failure(\"start\", \"worker-mismatch\");\n\n const control = yield* deps.ledger\n .inspectWorker(selected.threadId)\n .pipe(Effect.mapError(storageFailure(\"start\")));\n\n if (control.terminal !== \"completed\" || !control.stopped || control.active !== null)\n return yield* failure(\"start\", \"denied\");\n\n const tail = yield* deps.store\n .inspectTail(ThreadTailRequest.make({ threadId: selected.threadId }))\n .pipe(Effect.mapError(storageFailure(\"start\")));\n\n const execution = yield* deps.store\n .read({\n threadId: selected.threadId,\n selection: {\n _tag: \"WorkerExecution\",\n expectedTailSequence: tail.tailSequence,\n },\n page: { limit: 2 },\n })\n .pipe(Stream.runCollect, Effect.mapError(storageFailure(\"start\")));\n\n const run = execution.find(({ record }) => record.payload._tag === \"SubmissionSettled\")?.record\n .payload;\n\n if (run?._tag !== \"SubmissionSettled\" || run.runId === undefined)\n return yield* failure(\"start\", \"corrupt\");\n\n const input = Option.getOrUndefined(\n yield* getRunInput({ threadId: selected.threadId, runId: run.runId }).pipe(\n Effect.provideService(ThreadReader, ThreadReader.fromStore(deps.store)),\n Effect.mapError(storageFailure(\"start\")),\n ),\n )?.record.payload;\n\n if (input?._tag !== \"UserInputRecorded\" || input.submissionId === undefined)\n return yield* failure(\"start\", \"corrupt\");\n\n const found = yield* deps.ledger\n .lookup(SubmissionLookupById.make({ submissionId: input.submissionId }))\n .pipe(Effect.mapError(storageFailure(\"start\")));\n\n const row = Option.getOrUndefined(found);\n\n const settlement = Option.getOrUndefined(\n yield* exactRecord(\n selected.threadId,\n submissionSettlementRecordId(input.submissionId),\n \"start\",\n ),\n )?.record.payload;\n\n if (\n row === undefined ||\n row.threadId !== selected.threadId ||\n row.state !== \"settled\" ||\n row.settledOutcome !== \"completed\" ||\n row.workerAdmission === undefined ||\n !sameOrigin(row.workerAdmission.origin, origin) ||\n settlement?._tag !== \"SubmissionSettled\" ||\n settlement.outcome !== \"completed\" ||\n settlement.runDisposition !== \"completed\" ||\n settlement.finishReason !== undefined ||\n settlement.runId !== run.runId ||\n settlement.submissionId !== row.submissionId ||\n settlement.receiptId !== row.receiptId\n )\n return yield* failure(\"start\", \"denied\");\n\n const evidence = WorkerContinuation.make({\n worker: selected,\n receipt: Receipt.make({\n threadId: row.threadId,\n submissionId: row.submissionId,\n receiptId: row.receiptId,\n queueSequence: row.queueSequence,\n }),\n settlementId: settlement.settlementId,\n });\n\n if (expected !== undefined && !Schema.toEquivalence(WorkerContinuation)(expected, evidence))\n return yield* failure(\"start\", \"worker-mismatch\");\n\n return { evidence, origin };\n });\n\n const verifyContinuation = Effect.fnUntraced(function* (origin: WorkerOrigin) {\n if (origin.continuationOf === undefined) return;\n\n const previous = yield* completedContinuation(\n origin.source,\n origin.continuationOf.worker,\n origin.worker.targetAgentId,\n origin.worker.delegationId,\n origin.continuationOf,\n );\n\n if (\n origin.worker.threadId === previous.origin.worker.threadId ||\n origin.lifecycle !== \"assignment\" ||\n !samePolicy(origin.policy, previous.origin.policy) ||\n !Schema.toEquivalence(WorkerOrigin.fields.budget)(origin.budget, previous.origin.budget) ||\n !Schema.toEquivalence(SubagentGrant)(origin.grant, previous.origin.grant) ||\n origin.budgetScope !== previous.origin.budgetScope ||\n origin.depth !== previous.origin.depth ||\n origin.toolCallAllowance !== previous.origin.toolCallAllowance ||\n origin.expiresAtMillis > previous.origin.expiresAtMillis\n )\n return yield* failure(\"start\", \"denied\");\n });\n\n const readIdentity = (threadId: ThreadId, operation: WorkerError[\"operation\"]) =>\n deps.store\n .readIdentity(ThreadIdentityRequest.make({ threadId }))\n .pipe(Effect.mapError(storageFailure(operation)));\n\n const readWorkerState = (\n threadId: ThreadId,\n operation: WorkerError[\"operation\"],\n sourceSubmissionId: SubmissionId,\n ) =>\n readNativeWorkerState({\n threadId,\n limit: MAX_RUN_EVIDENCE_RECORDS,\n sourceSubmissionId,\n }).pipe(\n Effect.provideService(ThreadReader, ThreadReader.fromStore(deps.store)),\n Effect.mapError(storageFailure(operation)),\n );\n\n const hit = (location: DurableRuntimeFailpointLocation, operation: WorkerError[\"operation\"]) =>\n deps.failpoint.hit(location).pipe(Effect.mapError(storageFailure(operation)));\n\n const append = Effect.fnUntraced(\n function* (\n threadId: ThreadId,\n id: string,\n payload:\n | WorkerStopRequested\n | WorkHandoffCompleted\n | WorkerInputRequested\n | WorkerInputRefused\n | WorkerInputCompleted\n | WorkerReportPrepared\n | WorkerReportRefused\n | SubtreeBudgetReserved,\n current: Pick<ThreadIdentity, \"tailSequence\" | \"records\">,\n phase: \"source\" | \"completion\" | \"subtree\" | \"report\" | \"stop\",\n ) {\n const operation = \"start\";\n\n // The owner's transaction checks the exact prefix used for this decision.\n yield* hit(`worker:before-${phase}-append`, operation);\n\n const result = yield* deps.store\n .append(\n AppendRequest.make({\n threadId,\n expectedTailSequence: current.tailSequence,\n\n batch: CanonicalBatch.make({\n batchId: Schema.decodeSync(BatchId)(id),\n producerId: deps.producerId,\n records: [\n RecordEnvelope.make({\n recordId: Schema.decodeSync(RecordId)(id),\n family: \"thread\",\n schemaVersion: 1,\n createdAt: DateTime.makeUnsafe(\n payload._tag === \"WorkerInputRequested\"\n ? payload.admission.createdAtMillis\n : payload._tag === \"WorkerInputCompleted\"\n ? payload.completedAtMillis\n : yield* Clock.currentTimeMillis,\n ),\n deploymentId: deps.deploymentId,\n payload,\n }),\n ],\n }),\n }),\n )\n .pipe(\n Effect.as(true),\n Effect.catchTag(\"AppendConflict\", () => Effect.succeed(false)),\n );\n\n if (result) yield* hit(`worker:after-${phase}-append`, operation);\n\n return result;\n },\n Effect.mapError(storageFailure(\"start\")),\n );\n\n const completedMessageIds = (records: ReadonlyArray<CanonicalRecordEnvelope>) =>\n new Set<string>(\n records.flatMap(({ record }) =>\n (record.payload._tag === \"WorkerInputCompleted\" && record.payload.effectsResolved) ||\n record.payload._tag === \"WorkerInputRefused\"\n ? [record.payload.messageId]\n : [],\n ),\n );\n\n const reportIntent = Effect.fnUntraced(function* (\n source: ResolvedBinding,\n target: ResolvedBinding,\n delegationId: WorkerRef[\"delegationId\"],\n authority: Effect.Success<ReturnType<typeof sourceAuthority>>,\n ): Effect.fn.Return<WorkerOrigin[\"reporting\"], WorkerError> {\n const reports = source.reporting?.filter((entry) => entry.delegationId === delegationId) ?? [];\n const report = reports[0];\n\n if (report === undefined) return undefined;\n if (reports.length !== 1 || !Object.is(report.target, target.definition))\n return yield* failure(\"start\", \"declaration-unavailable\");\n\n const submission = authority.submission;\n\n if (\n submission === undefined ||\n (authority.depth !== 0 && submission.workerAdmission === undefined)\n )\n return yield* failure(\"start\", \"denied\");\n\n const retained =\n submission.workerAdmission === undefined\n ? undefined\n : yield* Schema.encodeEffect(WorkerAdmission)(submission.workerAdmission).pipe(\n Effect.flatMap(Schema.decodeEffect(PersistedJson)),\n Effect.mapError(storageFailure(\"start\")),\n );\n\n return {\n sourceDigests: source.digests,\n mode: \"standard\",\n returnAddress: {\n input: submission.inputPayload,\n principal: submission.principal,\n policy: authority.policy,\n depth: authority.depth,\n ...(authority.grant === undefined ? {} : { grant: authority.grant }),\n ...(retained === undefined ? {} : { workerAdmission: retained }),\n },\n };\n });\n\n const currentBinding = (agentId: AgentId): ResolvedBinding | undefined => {\n const matches = deps.bindings.filter((entry) => entry.agentId === agentId);\n\n return matches.length === 1 ? matches[0] : undefined;\n };\n\n const sourceAuthority = Effect.fnUntraced(function* (\n threadId: ThreadId,\n submissionId?: SubmissionId,\n reservations = false,\n ) {\n let ownerSubmission: SubmissionSnapshot | undefined;\n\n if (submissionId !== undefined) {\n if (deps.ledger.resolveFundingOwner === undefined)\n return yield* failure(\"start\", \"unavailable\");\n\n const funding = yield* deps.ledger\n .resolveFundingOwner(FundingOwnerRequest.make({ threadId, submissionId }))\n .pipe(Effect.mapError(storageFailure(\"start\")));\n\n if (\n funding.selected.submissionId !== submissionId ||\n funding.selected.threadId !== threadId ||\n funding.owner.threadId !== threadId\n )\n return yield* failure(\"start\", \"denied\");\n ownerSubmission = funding.owner;\n }\n\n const current = yield* reservations && ownerSubmission !== undefined\n ? readWorkerState(threadId, \"start\", ownerSubmission.submissionId)\n : readIdentity(threadId, \"start\");\n\n const created = current.records[0]?.record.payload;\n\n if (created?._tag !== \"ThreadCreated\" || current.records[0]?.sequence !== 1)\n return yield* failure(\"start\", \"not-found\");\n\n const binding = currentBinding(created.agentId);\n\n const worker = current.records.find(\n ({ record }) => record.payload._tag === \"WorkerOriginRecorded\",\n )?.record.payload;\n\n const attached = current.records.find(\n ({ record }) => record.payload._tag === \"SubagentLineageRecorded\",\n )?.record.payload;\n\n const nested =\n worker?._tag === \"WorkerOriginRecorded\" || attached?._tag === \"SubagentLineageRecorded\";\n\n if (nested && ownerSubmission === undefined) return yield* failure(\"start\", \"denied\");\n if (ownerSubmission !== undefined) {\n if (nested && ownerSubmission.agentId !== created.agentId)\n return yield* failure(\"start\", \"denied\");\n if (\n worker?._tag === \"WorkerOriginRecorded\" &&\n (ownerSubmission.workerAdmission === undefined ||\n !sameOrigin(ownerSubmission.workerAdmission.origin, worker.origin))\n )\n return yield* failure(\"start\", \"denied\");\n if (\n attached?._tag === \"SubagentLineageRecorded\" &&\n (ownerSubmission.parentLinkage?.parentSubmissionId !== attached.parentSubmissionId ||\n ownerSubmission.parentLinkage.parentToolCallId !== attached.parentLink.parentToolCallId)\n )\n return yield* failure(\"start\", \"denied\");\n }\n\n const ownerBinding =\n ownerSubmission === undefined ? undefined : currentBinding(ownerSubmission.agentId);\n\n const selectedBinding = ownerBinding ?? binding;\n\n if (worker?._tag === \"WorkerOriginRecorded\")\n return {\n current,\n binding: selectedBinding,\n submission: ownerSubmission,\n policyOverride: Option.none<AgentPolicy>(),\n policy: worker.origin.policy,\n budget: worker.origin.budget,\n budgetScope: worker.origin.budgetScope,\n grant: worker.origin.grant,\n depth: worker.origin.depth,\n };\n if (attached?._tag === \"SubagentLineageRecorded\") {\n if (\n attached.policy === undefined ||\n attached.budget === undefined ||\n attached.grant === undefined\n )\n return yield* failure(\"start\", \"denied\");\n\n return {\n current,\n binding: selectedBinding,\n submission: ownerSubmission,\n policyOverride: Option.none<AgentPolicy>(),\n policy: attached.policy,\n budget: attached.budget,\n budgetScope: undefined,\n grant: attached.grant,\n depth: attached.parentLink.depth,\n };\n }\n\n const changedRootAgent =\n ownerSubmission !== undefined && ownerSubmission.agentId !== created.agentId;\n\n // A root conversation may admit a new registered Agent after deployment.\n // Its immutable owner input selects authority; child lineage never changes.\n if (selectedBinding === undefined || (changedRootAgent && ownerBinding === undefined))\n return yield* failure(\"start\", \"declaration-unavailable\");\n\n const selected = yield* deps.policyResolver.resolveSource({\n threadId,\n definition: selectedBinding.definition,\n definitions: ownerSubmission?.agentDigests ?? selectedBinding.digests,\n ...(ownerSubmission === undefined ? {} : { submission: ownerSubmission }),\n });\n\n if (Option.isSome(selected) && ownerSubmission !== undefined && ownerBinding === undefined)\n return yield* failure(\"start\", \"declaration-unavailable\");\n\n const effectiveBinding =\n Option.isSome(selected) || changedRootAgent || binding === undefined\n ? selectedBinding\n : binding;\n\n if (effectiveBinding === undefined) return yield* failure(\"start\", \"declaration-unavailable\");\n\n const policy = Option.isNone(selected)\n ? effectiveBinding.definition.policy\n : yield* decode(AgentPolicy, selected.value, \"start\");\n\n return {\n current,\n binding: effectiveBinding,\n submission: ownerSubmission,\n policyOverride: Option.map(selected, () => policy),\n policy,\n budget: undefined,\n budgetScope: undefined,\n grant: undefined,\n depth: 0,\n };\n });\n\n const resolveTargetPolicy = Effect.fnUntraced(function* (request: WorkerPolicyTarget) {\n const selected = yield* deps.policyResolver.resolveTarget(request);\n\n if (Option.isNone(selected)) return selected;\n const policy = yield* decode(AgentPolicy, selected.value, \"start\");\n\n if (request._tag === \"RetainedWorker\" && !samePolicy(policy, request.origin.policy))\n return yield* failure(\"start\", \"worker-mismatch\");\n\n return Option.some(policy);\n });\n\n const reserveSubtree = Effect.fnUntraced(function* (\n sourceThreadId: ThreadId,\n requested: SubtreeBudgetReserved,\n ): Effect.fn.Return<void, WorkerError> {\n const decoded = yield* decode(SubtreeBudgetReserved, requested, \"start\");\n\n if (decoded.sourceSubmissionId === undefined) return yield* failure(\"start\", \"denied\");\n const funding = yield* sourceAuthority(sourceThreadId, decoded.sourceSubmissionId);\n\n if (funding.submission === undefined) return yield* failure(\"start\", \"denied\");\n\n const payload = SubtreeBudgetReserved.make({\n ...decoded,\n sourceSubmissionId: funding.submission.submissionId,\n });\n\n const recordId = `subtree:${payload.reservationId}`;\n\n let repairs = 64;\n\n for (let attempt = 0; attempt < 16; attempt++) {\n const source = yield* sourceAuthority(sourceThreadId, payload.sourceSubmissionId, true);\n\n const previous = Option.getOrUndefined(\n yield* exactRecord(sourceThreadId, RecordId.make(recordId), \"start\"),\n )?.record.payload;\n\n if (previous !== undefined) {\n if (\n previous._tag !== \"SubtreeBudgetReserved\" ||\n !Schema.toEquivalence(SubtreeBudgetReserved)(previous, payload)\n )\n return yield* failure(\"start\", \"idempotency-conflict\");\n\n return;\n }\n if (\n Option.isSome(\n yield* exactRecord(\n sourceThreadId,\n RecordId.make(`worker-input-refused:${payload.reservationId}`),\n \"start\",\n ),\n )\n )\n return yield* failure(\"start\", \"denied\");\n if (payload.depth !== source.depth + 1 || payload.depth > payload.grant.maxDepth)\n return yield* failure(\"start\", \"denied\");\n const inherited = source.grant;\n const lifetimes = inherited?.childLifetimes;\n\n if (\n inherited !== undefined &&\n (payload.depth > inherited.maxDepth ||\n payload.grant.maxDepth > inherited.maxDepth ||\n (lifetimes !== undefined && !lifetimes.includes(payload.lifetime)) ||\n payload.grant.allowedToolNames.some(\n (name) => !inherited.allowedToolNames.includes(name),\n ) ||\n (lifetimes !== undefined &&\n (payload.grant.childLifetimes ?? [\"attached\", \"background\"]).some(\n (lifetime) => !lifetimes.includes(lifetime),\n )))\n )\n return yield* failure(\"start\", \"denied\");\n\n const rows = source.current.records.flatMap(({ record }) =>\n record.payload._tag === \"SubtreeBudgetReserved\" &&\n record.payload.sourceSubmissionId === payload.sourceSubmissionId\n ? [record.payload]\n : [],\n );\n\n const caps = payload.budget.caps;\n\n if (rows.some((row) => !sameCaps(row.budget.caps, caps)))\n return yield* failure(\"start\", \"capacity\");\n\n const own = {\n turns: source.policy.maxTurns,\n toolCalls: source.policy.maxToolCalls,\n durationMillis: Math.ceil(Duration.toMillis(source.policy.maxDuration)),\n inputTokens: source.policy.tokenBudget ?? source.budget?.allocation.inputTokens ?? 0,\n outputTokens: source.policy.tokenBudget ?? source.budget?.allocation.outputTokens ?? 0,\n costMicrousd:\n source.policy.costBudgetMicrousd ?? source.budget?.allocation.costMicrousd ?? 0,\n resultBytes: source.policy.toolResultBounds.maxBytes,\n };\n\n const ceilings = sourceCaps(source.policy);\n const child = payload.policy;\n const allocation = payload.budget.allocation;\n\n if (\n child.maxTurns > Math.min(source.policy.maxTurns, allocation.turns) ||\n child.maxToolCalls > Math.min(source.policy.maxToolCalls, allocation.toolCalls) ||\n Duration.toMillis(child.maxDuration) >\n Math.min(Duration.toMillis(source.policy.maxDuration), allocation.durationMillis) ||\n child.toolConcurrency > source.policy.toolConcurrency ||\n child.toolResultBounds.maxBytes > source.policy.toolResultBounds.maxBytes ||\n (source.policy.tokenBudget !== undefined &&\n (child.tokenBudget === undefined ||\n child.tokenBudget > source.policy.tokenBudget ||\n child.tokenBudget > allocation.inputTokens + allocation.outputTokens)) ||\n (source.policy.costBudgetMicrousd !== undefined &&\n (child.costBudgetMicrousd === undefined ||\n child.costBudgetMicrousd >\n Math.min(source.policy.costBudgetMicrousd, allocation.costMicrousd)))\n )\n return yield* failure(\"start\", \"capacity\");\n for (const [, cap] of amountCaps) {\n if (caps[cap] !== undefined && ceilings[cap] !== undefined && caps[cap] > ceilings[cap])\n return yield* failure(\"start\", \"capacity\");\n }\n if (\n (caps.maxTotalChildInvocations ?? 0) > source.policy.maxToolCalls ||\n (caps.maxConcurrentChildren ?? 0) > source.policy.toolConcurrency\n )\n return yield* failure(\"start\", \"capacity\");\n const slots = 1 + (payload.budget.descendantInvocations ?? 0);\n\n const chargedSlots = rows.reduce(\n (sum, row) => sum + 1 + (row.budget.descendantInvocations ?? 0),\n slots,\n );\n\n const slotLimit = Math.min(\n caps.maxTotalChildInvocations ?? Infinity,\n source.budget === undefined\n ? source.policy.maxToolCalls\n : (source.budget.descendantInvocations ?? 0),\n );\n\n if (chargedSlots > slotLimit) return yield* failure(\"start\", \"capacity\");\n for (const [amount, cap] of amountCaps) {\n // Zero is the encoded absence of an allocation when this dimension is unconfigured.\n // It must not become a new cumulative token or dollar ceiling in a descendant.\n if (\n source.budgetScope === \"worker-run\" &&\n (amount === \"inputTokens\" || amount === \"outputTokens\" || amount === \"costMicrousd\") &&\n source.budget !== undefined &&\n source.budget.caps[cap] === undefined &&\n source.budget.allocation[amount] === 0 &&\n ceilings[cap] === undefined\n ) {\n const charged = rows.reduce(\n (sum, row) => sum + row.budget.allocation[amount],\n allocation[amount],\n );\n\n if (charged > (caps[cap] ?? Infinity)) return yield* failure(\"start\", \"capacity\");\n continue;\n }\n\n const residual =\n source.budget === undefined\n ? (ceilings[cap] ?? Infinity)\n : Math.max(0, source.budget.allocation[amount] - own[amount]);\n\n const limit = Math.min(caps[cap] ?? Infinity, residual);\n\n const charged = rows.reduce(\n (sum, row) => sum + row.budget.allocation[amount],\n payload.budget.allocation[amount],\n );\n\n if (charged > limit) return yield* failure(\"start\", \"capacity\");\n }\n\n // Include unreconciled reservations conservatively; only canonical completion frees an\n // active slot. A worker Thread consumes one slot even when multiple inputs safely join it.\n const completedAttached = new Set<string>(\n source.current.records.flatMap(({ record }) =>\n record.payload._tag === \"SubagentJoined\" ? [record.payload.reservationId] : [],\n ),\n );\n\n const activeLimit = Math.min(\n caps.maxConcurrentChildren ?? Infinity,\n source.policy.toolConcurrency,\n );\n\n const hasSlot = (completed: ReadonlySet<string>, conservative = false) => {\n const active = new Set(\n rows\n .filter((row) =>\n row.lifetime === \"background\"\n ? !completed.has(row.reservationId)\n : !completedAttached.has(row.reservationId),\n )\n .map((row) => row.childThreadId),\n );\n\n return active.has(payload.childThreadId)\n ? !conservative || active.size <= activeLimit\n : active.size < activeLimit;\n };\n\n const localCompletions = completedMessageIds(source.current.records);\n\n if (!hasSlot(localCompletions, true)) {\n let changed = false;\n\n for (const entry of source.current.records) {\n const reserved = entry.record.payload;\n\n if (repairs === 0) break;\n if (\n reserved._tag !== \"SubtreeBudgetReserved\" ||\n reserved.lifetime !== \"background\" ||\n localCompletions.has(reserved.reservationId)\n )\n continue;\n repairs--;\n\n const input = Option.getOrUndefined(\n yield* exactRecord(\n sourceThreadId,\n workerInputRecordId(IdempotencyKey.make(reserved.reservationId)),\n \"start\",\n ),\n );\n\n if (\n input?.record.payload._tag === \"WorkerInputRequested\"\n ? (yield* repairInput(sourceThreadId, input.record.payload)) === \"repaired\"\n : yield* repairReservation(sourceThreadId, entry)\n )\n changed = true;\n }\n if (changed) continue;\n if (!hasSlot(localCompletions))\n return yield* WorkerError.make({\n operation: \"start\",\n reason: \"capacity\",\n retryable: true,\n });\n }\n if (yield* append(sourceThreadId, recordId, payload, source.current, \"subtree\")) return;\n }\n\n return yield* failure(\"start\", \"storage\");\n });\n\n const repairCapacityPage = Effect.fnUntraced(function* (\n threadId: ThreadId,\n tail: ThreadWorkerCapacity,\n pressure: { remaining: number; after: CanonicalSequence; worker?: ThreadId },\n worker?: ThreadId,\n ) {\n if (pressure.worker !== worker) {\n pressure.worker = worker;\n pressure.after = CanonicalSequence.make(0);\n }\n if (pressure.remaining === 0) return { changed: false, incumbent: false, more: false };\n\n const selected = yield* Stream.runCollect(\n deps.store.read({\n threadId,\n selection: {\n _tag: \"LiveWorkerInputs\",\n throughSequence: tail.tailSequence,\n ...(worker === undefined ? {} : { workerThreadId: worker }),\n },\n page: { afterSequence: pressure.after, limit: Math.min(64, pressure.remaining) },\n }),\n ).pipe(\n Effect.map(Option.some),\n Effect.catchTag(\"ThreadStoreError\", (cause) =>\n deps.store\n .inspectTail(ThreadTailRequest.make({ threadId }))\n .pipe(\n Effect.flatMap((current) =>\n current.tailSequence !== tail.tailSequence\n ? Effect.succeed(Option.none<ReadonlyArray<CanonicalRecordEnvelope>>())\n : Effect.fail(cause),\n ),\n ),\n ),\n Effect.mapError(storageFailure(\"start\")),\n );\n\n if (Option.isNone(selected)) return { changed: true, incumbent: false, more: false };\n const entries = selected.value;\n\n const requests: Array<WorkerInputRequested> = [];\n\n for (const entry of entries) {\n if (\n entry.threadId !== threadId ||\n entry.sequence <= pressure.after ||\n entry.sequence > tail.tailSequence ||\n entry.record.payload._tag !== \"WorkerInputRequested\" ||\n (worker !== undefined && entry.record.payload.admission.origin.worker.threadId !== worker)\n )\n return yield* failure(\"start\", \"corrupt\");\n pressure.after = entry.sequence;\n pressure.remaining--;\n requests.push(entry.record.payload);\n }\n\n // Foreign reads stay concurrent under pressure; canonical acknowledgements retain source order.\n const completions = yield* Effect.forEach(\n requests,\n Effect.fnUntraced(function* (request) {\n return { request, completion: yield* readInputCompletion(request.admission) };\n }),\n { concurrency: 8 },\n );\n\n let changed = false;\n let incumbent = false;\n\n for (const { request, completion } of completions) {\n if ((yield* repairInput(threadId, request, completion)) === \"repaired\") changed = true;\n else if (worker !== undefined) incumbent = true;\n }\n\n return { changed, incumbent, more: entries.length > 0 && pressure.remaining > 0 };\n });\n\n const reservation = Effect.fnUntraced(function* (\n admission: WorkerAdmission,\n inputDigest: Digest,\n input: PersistedJson,\n principal: Principal,\n retainedFrameworkInput: boolean,\n authorization?: WorkerStartAdmission,\n ): Effect.fn.Return<void, WorkerError> {\n const origin = admission.origin;\n\n yield* verifyContinuation(origin);\n const id = workerInputRecordId(admission.messageId);\n\n const pressure: { remaining: number; after: CanonicalSequence; worker?: ThreadId } = {\n remaining: 64,\n after: CanonicalSequence.make(0),\n };\n\n for (let attempt = 0; attempt < 16; attempt++) {\n const source = yield* sourceAuthority(origin.source.threadId, admission.sourceSubmissionId);\n\n const current = source.current;\n\n if (\n origin.continuationOf !== undefined &&\n (yield* readStop(\n origin.source.threadId,\n origin.continuationOf.worker.threadId,\n current.tailSequence,\n ))\n )\n return yield* failure(\"start\", \"denied\");\n\n const retained = Option.getOrUndefined(\n yield* exactRecord(origin.source.threadId, id, \"start\"),\n );\n\n if (retained !== undefined && retained.sequence > current.tailSequence) continue;\n const existing = retained?.record.payload;\n\n if (\n Option.isSome(\n yield* exactRecord(\n origin.source.threadId,\n RecordId.make(`worker-input-refused:${admission.messageId}`),\n \"start\",\n ),\n )\n )\n return yield* failure(\"start\", \"denied\");\n if (existing !== undefined) {\n if (\n existing._tag !== \"WorkerInputRequested\" ||\n existing.inputDigest !== inputDigest ||\n !sameAdmission(existing.admission, admission)\n )\n return yield* failure(\"start\", \"idempotency-conflict\");\n }\n const first = current.records[0]?.record.payload;\n\n if (first?._tag !== \"ThreadCreated\") return yield* failure(\"start\", \"denied\");\n\n const firstRequest = Option.getOrUndefined(\n yield* exactRecord(\n origin.source.threadId,\n workerInputRecordId(origin.firstMessageId),\n \"start\",\n ),\n );\n\n if (firstRequest !== undefined && firstRequest.sequence > current.tailSequence) continue;\n if (firstRequest !== undefined && firstRequest.record.payload._tag !== \"WorkerInputRequested\")\n return yield* failure(\"start\", \"corrupt\");\n\n const prior =\n firstRequest?.record.payload._tag === \"WorkerInputRequested\"\n ? firstRequest.record.payload.admission.origin\n : undefined;\n\n if (\n prior === undefined &&\n (source.submission?.agentId ?? first.agentId) !== origin.source.agentId\n )\n return yield* failure(\"start\", \"denied\");\n if (prior !== undefined && !sameOrigin(prior, origin))\n return yield* failure(\"start\", \"worker-mismatch\");\n if (prior === undefined && admission.messageId !== origin.firstMessageId)\n return yield* failure(\"start\", \"not-found\");\n const caps = origin.budget.caps;\n\n const sourceBinding = source.binding;\n\n const targetBinding = currentBinding(origin.worker.targetAgentId);\n\n if (sourceBinding === undefined || targetBinding === undefined)\n return yield* failure(\"start\", \"declaration-unavailable\");\n // Standard reports and updates retain the owner's original input bytes. Their\n // framework message carries the new information independently of the current input codec.\n if (!retainedFrameworkInput)\n yield* Schema.decodeEffect(Schema.toEncoded(targetBinding.definition.input))(input).pipe(\n Effect.mapError((cause) => failure(\"start\", \"corrupt\", cause)),\n );\n\n const targetRequest = {\n definition: targetBinding.definition,\n definitions: targetBinding.digests,\n source: origin.source,\n };\n\n const selected = yield* resolveTargetPolicy(\n admission.messageId === origin.firstMessageId\n ? {\n ...targetRequest,\n _tag: \"InitialInput\",\n ...(authorization === undefined || authorization.tailSequence !== current.tailSequence\n ? {}\n : { admission: authorization }),\n ...(origin.continuationOf === undefined\n ? {}\n : { continuationOf: origin.continuationOf }),\n input,\n inputDigest,\n ...(source.submission === undefined ? {} : { sourceSubmission: source.submission }),\n }\n : { ...targetRequest, _tag: \"RetainedWorker\", origin: prior ?? origin },\n );\n\n const independent = origin.budgetScope === \"worker-run\";\n\n const targetPolicy = Option.isSome(selected)\n ? selected.value\n : independent\n ? targetBinding.definition.policy\n : AgentPolicy.resolve(\n targetBinding.definition.policyOverrides ?? targetBinding.definition.policy,\n source.policy,\n );\n\n // Captured authority is checked on replay too, before the retained reservation returns.\n // Static callers retain the old idempotent-return behavior.\n if (\n (existing === undefined || Option.isSome(selected)) &&\n !withinPolicy(origin, independent ? targetPolicy : source.policy, targetPolicy)\n )\n return yield* failure(\"start\", \"capacity\");\n if (existing !== undefined) return;\n const now = yield* Clock.currentTimeMillis;\n\n if (now >= origin.expiresAtMillis) return yield* failure(\"start\", \"capacity\");\n if (\n prior === undefined &&\n !sameReporting(\n yield* reportIntent(sourceBinding, targetBinding, origin.worker.delegationId, source),\n origin.reporting,\n )\n )\n return yield* failure(\"start\", \"denied\");\n if (independent && source.depth !== 0) return yield* failure(\"start\", \"denied\");\n if (!independent && admission.sourceSubmissionId === undefined)\n return yield* failure(\"start\", \"denied\");\n\n // Resolve inside the source CAS loop: independently delivered starts must compete\n // against one canonical prefix. A conflict repeats both authority and capacity reads.\n const selectedConcurrency = yield* deps.concurrencyResolver.resolve({\n source: origin.source,\n worker: origin.worker,\n ...(origin.continuationOf === undefined ? {} : { continuationOf: origin.continuationOf }),\n principal,\n ...(source.submission === undefined ? {} : { sourceSubmission: source.submission }),\n });\n\n const sourceConcurrency = Option.isSome(selectedConcurrency)\n ? (yield* decode(WorkerConcurrencyLimit, selectedConcurrency.value, \"start\"))\n .maxActiveWorkersPerSource\n : Infinity;\n\n const activeLimit = Math.min(\n sourceConcurrency,\n deps.limits.maxActiveWorkersPerSource ?? source.policy.toolConcurrency,\n independent\n ? Infinity\n : Math.min(caps.maxConcurrentChildren ?? Infinity, source.policy.toolConcurrency),\n );\n\n if (deps.store.readWorkerCapacity === undefined)\n return yield* failure(\"start\", \"unavailable\");\n\n const pendingLimit =\n admission.reportKind === \"update\"\n ? (deps.limits.maxPendingUpdateInputsPerWorker ?? 32)\n : deps.limits.maxPendingInputsPerWorker;\n\n const capacity = yield* deps.store\n .readWorkerCapacity({\n threadId: origin.source.threadId,\n workerThreadId: origin.worker.threadId,\n expectedTailSequence: current.tailSequence,\n\n update: admission.reportKind === \"update\",\n activeLimit,\n pendingLimit,\n })\n .pipe(\n Effect.map(Option.some),\n Effect.catchTag(\"ThreadStoreError\", (cause) =>\n deps.store\n .inspectTail(ThreadTailRequest.make({ threadId: origin.source.threadId }))\n .pipe(\n Effect.flatMap((tail) =>\n tail.tailSequence !== current.tailSequence\n ? Effect.succeed(Option.none<ThreadWorkerCapacity>())\n : Effect.fail(cause),\n ),\n ),\n ),\n Effect.mapError(storageFailure(\"start\")),\n );\n\n if (Option.isNone(capacity)) continue;\n const live = capacity.value;\n\n if (live.threadId !== origin.source.threadId || live.tailSequence !== current.tailSequence)\n return yield* failure(\"start\", \"corrupt\");\n const pending = live.pendingInputs < pendingLimit;\n\n const slot = live.workerActive\n ? live.activeWorkers <= activeLimit\n : live.activeWorkers < activeLimit;\n\n if (!pending || !slot) {\n const repaired = yield* repairCapacityPage(\n origin.source.threadId,\n live,\n pressure,\n !pending || live.workerActive ? origin.worker.threadId : undefined,\n );\n\n if (repaired.changed) continue;\n if (!(pending && live.workerActive && repaired.incumbent)) {\n if (repaired.more) continue;\n\n return yield* WorkerError.make({\n operation: \"start\",\n reason: \"capacity\",\n retryable: true,\n });\n }\n }\n if (!independent)\n yield* reserveSubtree(\n origin.source.threadId,\n SubtreeBudgetReserved.make({\n reservationId: Schema.decodeSync(SubtreeBudgetReserved.fields.reservationId)(\n admission.messageId,\n ),\n executionRunId: admission.executionRunId,\n ...(admission.sourceSubmissionId === undefined\n ? {}\n : { sourceSubmissionId: admission.sourceSubmissionId }),\n childThreadId: origin.worker.threadId,\n lifetime: \"background\",\n depth: origin.depth,\n policy: origin.policy,\n grant: origin.grant,\n budget: origin.budget,\n }),\n );\n if (\n yield* append(\n origin.source.threadId,\n id,\n WorkerInputRequested.make({ admission, inputDigest }),\n current,\n \"source\",\n )\n )\n return;\n }\n\n return yield* failure(\"start\", \"storage\");\n });\n\n const ensureOrigin = (origin: WorkerOrigin) =>\n ensureWorkerOrigin(\n { producerId: deps.producerId, deploymentId: deps.deploymentId },\n origin,\n ).pipe(\n Effect.provideService(ThreadStore, deps.store),\n Effect.provideService(DurableRuntimeFailpoint, deps.failpoint),\n );\n\n const validateAdmission = Effect.fnUntraced(function* (\n unvalidated: WorkerAdmission,\n options: DurableSubmitOptions,\n agentId: Agent.AnyDefinition[\"id\"],\n inputDigest: Digest,\n input: PersistedJson,\n ) {\n const admission = yield* decode(WorkerAdmission, unvalidated, \"start\");\n\n if (admission.reportKind === \"update\") {\n if (!Schema.is(WorkerUpdate)(options.messageAdmission))\n return yield* failure(\"start\", \"denied\");\n yield* validateCompletion(options.messageAdmission, options, agentId, inputDigest);\n }\n\n yield* verifyContinuation(admission.origin);\n const delivery = yield* CurrentStartDelivery;\n\n const authorization =\n delivery !== undefined &&\n sameAdmission(delivery.admission, admission) &&\n delivery.inputDigest === inputDigest\n ? yield* currentStart(\n delivery.authorization,\n admission.origin.source.threadId,\n admission.sourceSubmissionId,\n options.principal,\n agentId,\n admission.origin.continuationOf,\n )\n : undefined;\n\n yield* deps.authorizer.authorize({\n ...(authorization === undefined ? {} : { admission: authorization }),\n sourceThreadId: admission.origin.source.threadId,\n ...(admission.sourceSubmissionId === undefined\n ? {}\n : { sourceSubmissionId: admission.sourceSubmissionId }),\n principal: options.principal,\n operation: \"start\",\n access: \"send\",\n worker: admission.origin.worker,\n ...(admission.origin.continuationOf === undefined\n ? {}\n : { continuationOf: admission.origin.continuationOf }),\n });\n yield* authorizeBudget(admission.origin, options.principal, authorization);\n if (\n admission.origin.worker.threadId !== options.threadId ||\n admission.origin.worker.targetAgentId !== agentId ||\n !definitionDigestsEqual(admission.origin.targetDigests, options.definitions) ||\n options.idempotencyKey !== admission.messageId ||\n (admission.deliveryPrincipal !== undefined &&\n admission.deliveryPrincipal !== options.principal)\n )\n return yield* failure(\"start\", \"worker-mismatch\");\n const retainedFrameworkInput = Schema.is(FrameworkMessage)(options.messageAdmission);\n\n if (retainedFrameworkInput && admission.reportKind !== \"update\")\n yield* validateCompletion(options.messageAdmission, options, agentId, inputDigest);\n yield* reservation(\n admission,\n inputDigest,\n input,\n options.principal,\n retainedFrameworkInput,\n authorization,\n );\n\n return admission;\n });\n\n const prepareUpdate = Effect.fnUntraced(\n function* (update: Update, submission: SubmissionSnapshot, messageId: IdempotencyKey) {\n const origin = submission.workerAdmission?.origin;\n const intent = origin?.reporting;\n\n if (origin === undefined || intent?.mode !== \"standard\") return undefined;\n if (update.threadId !== submission.threadId || update.agentId !== origin.worker.targetAgentId)\n return yield* failure(\"followUp\", \"worker-mismatch\");\n\n const destination = intent.returnAddress;\n\n if (destination === undefined) return yield* failure(\"followUp\", \"corrupt\");\n\n const retained =\n destination.workerAdmission === undefined\n ? undefined\n : yield* Schema.decodeUnknownEffect(WorkerAdmission)(destination.workerAdmission).pipe(\n Effect.mapError((cause) => failure(\"followUp\", \"corrupt\", cause)),\n );\n\n const sourceBinding = currentBinding(origin.source.agentId);\n const targetBinding = currentBinding(origin.worker.targetAgentId);\n\n const reports =\n sourceBinding?.reporting?.filter(\n (entry) => entry.delegationId === origin.worker.delegationId,\n ) ?? [];\n\n if (\n sourceBinding === undefined ||\n targetBinding === undefined ||\n reports.length !== 1 ||\n reports[0] === undefined ||\n reports[0].target !== targetBinding.definition ||\n !definitionDigestsEqual(submission.agentDigests, origin.targetDigests)\n )\n return yield* failure(\"followUp\", \"declaration-unavailable\");\n\n const receivingOrigin = retained?.origin;\n\n if (destination.depth !== 0 && receivingOrigin === undefined)\n return yield* failure(\"followUp\", \"denied\");\n const now = yield* Clock.currentTimeMillis;\n\n const deadlineAtMillis = Math.min(\n origin.expiresAtMillis,\n receivingOrigin?.expiresAtMillis ?? Infinity,\n );\n\n if (now >= deadlineAtMillis) return yield* failure(\"followUp\", \"denied\");\n if (reports[0].reportUpdate !== undefined && !reports[0].reportUpdate(update))\n return undefined;\n const input = destination.input;\n\n let workerAdmission: WorkerAdmission | undefined;\n\n if (retained !== undefined) {\n workerAdmission = {\n origin: retained.origin,\n executionRunId: null,\n reportKind: \"update\",\n messageId,\n parameters: retained.parameters,\n createdAtMillis: now,\n ...(retained.sourceSubmissionId === undefined\n ? {}\n : { sourceSubmissionId: retained.sourceSubmissionId }),\n };\n }\n\n const message = WorkerUpdate.make({\n _tag: \"WorkerUpdate\",\n schemaVersion: 1,\n worker: origin.worker,\n update,\n });\n\n const envelope: PreparedInput = {\n schemaVersion: 1,\n threadId: origin.source.threadId,\n deliveryPrincipal: destination.principal,\n agentId: origin.source.agentId,\n definitions: intent.sourceDigests,\n input,\n inputDigest: yield* withCrypto(digestJson(input)).pipe(\n Effect.mapError(storageFailure(\"followUp\")),\n ),\n admissionKey: messageId,\n authorization: { policyId: \"worker-report\", decisionId: messageId },\n messageAdmission: message,\n ...(workerAdmission === undefined\n ? {}\n : { workerAdmission: { ...workerAdmission, deliveryPrincipal: destination.principal } }),\n };\n\n return {\n messageId,\n envelope: yield* Schema.encodeEffect(PreparedInput)(envelope).pipe(\n Effect.flatMap(Schema.decodeEffect(PersistedJson)),\n Effect.mapError(storageFailure(\"followUp\")),\n ),\n createdAtMillis: now,\n deadlineAtMillis,\n };\n },\n Effect.mapError((error) =>\n error.reason === \"storage\" || error.reason === \"corrupt\"\n ? LedgerError.make({ operation: \"worker-update\", message: error.reason, cause: error })\n : UpdateError.make({ reason: error.reason === \"denied\" ? \"denied\" : \"unavailable\" }),\n ),\n );\n\n const reportRun = Effect.fnUntraced(function* (\n submission: SubmissionSnapshot,\n history: Effect.Success<ReturnType<typeof readSubmission>>,\n ): Effect.fn.Return<void, WorkerError> {\n const admission = submission.workerAdmission;\n const intent = admission?.origin.reporting;\n\n if (admission === undefined || intent === undefined) return;\n const origin = admission.origin;\n\n const member = history.records.find(\n ({ record }) =>\n record.payload._tag === \"SubmissionSettled\" &&\n record.payload.submissionId === submission.submissionId,\n )?.record.payload;\n\n if (member?._tag !== \"SubmissionSettled\") return yield* failure(\"inspect\", \"corrupt\");\n if (member.runId === undefined) return; // No actual Run means no fabricated report identity.\n const runId = member.runId;\n\n const host = history.records.find(\n ({ record }) => record.payload._tag === \"SubmissionSettled\" && record.payload.runId === runId,\n )?.record.payload;\n\n if (host?._tag !== \"SubmissionSettled\") return yield* failure(\"inspect\", \"corrupt\");\n\n const messageId = yield* withCrypto(\n digestJson([\"worker-report\", submission.threadId, runId]),\n ).pipe(\n Effect.map((value) => Schema.decodeSync(IdempotencyKey)(`report:${value}`)),\n Effect.mapError(storageFailure(\"inspect\")),\n );\n\n const recordId = workerReportRecordId(messageId);\n\n const prepare = Effect.fnUntraced(function* (): Effect.fn.Return<\n WorkerReportPrepared | WorkerReportRefused,\n WorkerError\n > {\n const refused = (reason: WorkerReportRefused[\"reason\"]) =>\n WorkerReportRefused.make({ runId, messageId, reason });\n\n if (intent.mode !== \"standard\") return yield* failure(\"inspect\", \"corrupt\");\n\n const selected = yield* deps.ledger\n .lookup(SubmissionLookupById.make({ submissionId: host.submissionId }))\n .pipe(Effect.mapError(storageFailure(\"inspect\")));\n\n if (\n Option.isNone(selected) ||\n selected.value.threadId !== submission.threadId ||\n selected.value.receiptId !== host.receiptId ||\n selected.value.workerAdmission === undefined ||\n !sameOrigin(selected.value.workerAdmission.origin, origin)\n )\n return yield* failure(\"inspect\", \"corrupt\");\n const hostSubmission = selected.value;\n const hostAdmission = selected.value.workerAdmission;\n\n const address = intent.returnAddress;\n\n if (address === undefined) return yield* failure(\"inspect\", \"corrupt\");\n\n const retainedAdmission =\n address.workerAdmission === undefined\n ? undefined\n : yield* Schema.decodeUnknownEffect(WorkerAdmission)(address.workerAdmission).pipe(\n Effect.mapError((cause) => failure(\"inspect\", \"corrupt\", cause)),\n );\n\n const source = { ...address, admission: retainedAdmission };\n\n const sourceBinding = currentBinding(origin.source.agentId);\n const targetBinding = currentBinding(origin.worker.targetAgentId);\n\n const reports =\n sourceBinding?.reporting?.filter(\n (entry) => entry.delegationId === origin.worker.delegationId,\n ) ?? [];\n\n const descriptor = reports[0];\n\n if (\n sourceBinding === undefined ||\n targetBinding === undefined ||\n descriptor === undefined ||\n reports.length !== 1 ||\n !Object.is(descriptor.target, targetBinding.definition)\n )\n return refused(\"declaration-unavailable\");\n\n const sourceOrigin = source.admission?.origin;\n\n if (source.depth !== 0 && sourceOrigin === undefined) return refused(\"destination\");\n const now = yield* Clock.currentTimeMillis;\n\n const deadlineAtMillis = Math.min(\n origin.expiresAtMillis,\n sourceOrigin?.expiresAtMillis ?? Infinity,\n );\n\n if (now >= deadlineAtMillis) return refused(\"expired\");\n\n const context: WorkerContext = {\n source: origin.source,\n policy: source.policy,\n depth: source.depth,\n ...(source.grant === undefined ? {} : { grant: source.grant }),\n };\n\n const report: WorkerRunReport = {\n worker: origin.worker,\n context,\n observation: {\n _tag: \"Settled\",\n receipt: Receipt.make({\n threadId: hostSubmission.threadId,\n submissionId: hostSubmission.submissionId,\n receiptId: hostSubmission.receiptId,\n queueSequence: hostSubmission.queueSequence,\n }),\n runId,\n settlementId: host.settlementId,\n outcome: host.outcome,\n encodedParameters: hostAdmission.parameters,\n encodedResult: host.result ?? null,\n ...(host.outcome === \"failed\" ? { diagnostic: host.result } : {}),\n budgetExhausted: host.finishReason === \"budget-exhausted\",\n },\n };\n\n const projection = yield* Effect.suspend(() =>\n descriptor.reportCompletion?.(report) === false\n ? Effect.succeed(undefined)\n : descriptor.prepare(report),\n ).pipe(\n Effect.timeout(\n Math.min(deps.limits.reportPreparationTimeoutMillis ?? 5_000, deadlineAtMillis - now),\n ),\n Effect.map((value) => ({ _tag: \"Prepared\" as const, value })),\n Effect.catchTag(\"WorkerReportPreparationFailure\", (error) =>\n Effect.succeed(refused(error.stage)),\n ),\n Effect.catchTag(\"TimeoutError\", () => Effect.succeed(refused(\"timeout\"))),\n Effect.catchCauseIf(\n (cause) => !Cause.hasInterrupts(cause),\n () => Effect.succeed(refused(\"defect\")),\n ),\n );\n\n if (projection._tag === \"WorkerReportRefused\") return projection;\n\n if (projection.value === undefined) return refused(\"filtered\");\n\n const message = projection.value.message;\n\n if (!Schema.is(WorkerCompletion)(message)) return refused(\"input\");\n if (\n !Schema.toEquivalence(WorkerRef)(message.report.worker, origin.worker) ||\n !Schema.toEquivalence(Receipt)(message.report.receipt, report.observation.receipt) ||\n message.report.runId !== runId ||\n message.report.settlementId !== host.settlementId ||\n message.report.outcome !== host.outcome ||\n message.budgetExhausted !== report.observation.budgetExhausted\n )\n return refused(\"input\");\n\n const validated = yield* Schema.decodeEffect(PersistedJson)(source.input).pipe(Effect.option);\n\n if (Option.isNone(validated)) return refused(\"input\");\n const input = validated.value;\n\n const inputDigest = yield* withCrypto(digestJson(input)).pipe(\n Effect.mapError(storageFailure(\"inspect\")),\n );\n\n let workerAdmission: WorkerAdmission | undefined;\n const principal = source.principal;\n\n if (sourceOrigin !== undefined) {\n const retained = source.admission;\n\n if (retained === undefined) return refused(\"destination\");\n\n const parameters = yield* Schema.decodeEffect(PersistedJson)(retained.parameters).pipe(\n Effect.option,\n );\n\n if (Option.isNone(parameters)) return refused(\"destination\");\n workerAdmission = {\n origin: sourceOrigin,\n executionRunId: null,\n messageId,\n parameters: parameters.value,\n createdAtMillis: now,\n ...(retained.sourceSubmissionId === undefined\n ? {}\n : { sourceSubmissionId: retained.sourceSubmissionId }),\n };\n }\n\n // The destination reauthorizes standard messages through validateCompletion.\n const envelope: PreparedInput = {\n schemaVersion: 1,\n threadId: origin.source.threadId,\n deliveryPrincipal: principal,\n agentId: origin.source.agentId,\n definitions: intent.sourceDigests,\n input,\n inputDigest,\n admissionKey: messageId,\n authorization: { policyId: \"worker-report\", decisionId: messageId },\n messageAdmission: message,\n ...(workerAdmission === undefined\n ? {}\n : { workerAdmission: { ...workerAdmission, deliveryPrincipal: principal } }),\n };\n\n const encoded = yield* Schema.encodeEffect(PreparedInput)(envelope).pipe(\n Effect.flatMap(Schema.decodeUnknownEffect(PersistedJson)),\n Effect.mapError(storageFailure(\"inspect\")),\n );\n\n const predecessor = yield* deliveryPredecessor(\n submission.threadId,\n history.tailSequence,\n ).pipe(\n Effect.provideService(ThreadReader, ThreadReader.fromStore(deps.store)),\n Effect.mapError(storageFailure(\"inspect\")),\n );\n\n return WorkerReportPrepared.make({\n runId,\n messageId,\n envelope: encoded,\n createdAtMillis: now,\n deadlineAtMillis,\n ...(predecessor === undefined ? {} : { predecessor }),\n });\n });\n\n let decision: WorkerReportPrepared | WorkerReportRefused | undefined;\n\n for (let attempt = 0; attempt < 16; attempt++) {\n const current = yield* readSubmission(submission);\n\n const existing = current.records.find(({ record }) => record.recordId === recordId)?.record\n .payload;\n\n if (existing !== undefined) {\n if (\n (existing._tag !== \"WorkerReportPrepared\" && existing._tag !== \"WorkerReportRefused\") ||\n existing.runId !== runId ||\n existing.messageId !== messageId\n )\n return yield* failure(\"inspect\", \"corrupt\");\n decision = existing;\n break;\n }\n decision ??= yield* prepare();\n if (yield* append(submission.threadId, recordId, decision, current, \"report\")) break;\n if (attempt === 15) return yield* failure(\"inspect\", \"storage\");\n }\n if (decision?._tag !== \"WorkerReportPrepared\") return;\n if (Option.isNone(deps.deliveries)) return yield* failure(\"inspect\", \"unavailable\");\n\n const envelope = yield* Schema.decodeUnknownEffect(PreparedInput)(decision.envelope).pipe(\n Effect.mapError((cause) => failure(\"inspect\", \"corrupt\", cause)),\n );\n\n const prepared = yield* withCrypto(\n prepareMessageDelivery({\n key: { ownerThreadId: submission.threadId, messageId },\n envelope,\n createdAtMillis: decision.createdAtMillis,\n deadlineAtMillis: decision.deadlineAtMillis,\n ...(decision.predecessor === undefined ? {} : { predecessor: decision.predecessor }),\n }),\n ).pipe(Effect.mapError(storageFailure(\"inspect\")));\n\n // Until this insertion commits the child ledger stays nonterminal. Afterwards its independent\n // due index survives both child and source settlement, including Object eviction.\n yield* hit(\"worker:before-report-delivery\", \"inspect\");\n yield* deps.deliveries.value.insert(prepared).pipe(Effect.mapError(storageFailure(\"inspect\")));\n yield* hit(\"worker:after-report-delivery\", \"inspect\");\n });\n\n const completeInput = Effect.fnUntraced(function* (submission: SubmissionSnapshot) {\n const admission = submission.workerAdmission;\n\n if (admission === undefined) return;\n const child = yield* readSubmission(submission);\n\n const settledEnvelope = child.records.find(\n ({ record }) =>\n record.payload._tag === \"SubmissionSettled\" &&\n record.payload.submissionId === submission.submissionId,\n )?.record;\n\n const settled = settledEnvelope?.payload;\n\n if (\n settled?._tag !== \"SubmissionSettled\" ||\n settled.receiptId !== submission.receiptId ||\n settledEnvelope === undefined\n )\n return yield* failure(\"inspect\", \"corrupt\");\n\n const unresolved = new Set<string>();\n const declarationIds = new Set<string>();\n\n for (const { record } of child.records) {\n const value = record.payload;\n\n if (value._tag === \"ModelResponseRecorded\" && value.runId === settled.runId) {\n for (const operation of value.toolOperations) {\n if (declarationIds.has(operation.toolCallId)) return yield* failure(\"inspect\", \"corrupt\");\n declarationIds.add(operation.toolCallId);\n }\n }\n if (value._tag === \"ToolCallUnknown\" && value.runId === settled.runId)\n unresolved.add(value.toolCallId);\n if (value._tag === \"ToolCallSettled\" && value.runId === settled.runId)\n unresolved.delete(value.toolCallId);\n }\n if (unresolved.size > 0 || unresolvedToolOperations(child.records, settled.runId).length > 0) {\n yield* reportRun(submission, child);\n\n return;\n }\n\n const payload = WorkerInputCompleted.make({\n effectsResolved: true,\n messageId: admission.messageId,\n workerThreadId: submission.threadId,\n submissionId: submission.submissionId,\n receiptId: submission.receiptId,\n settlementId: settled.settlementId,\n completedAtMillis: DateTime.toEpochMillis(settledEnvelope.createdAt),\n });\n\n for (let attempt = 0; attempt < 16; attempt++) {\n const current = yield* readSubmission(submission);\n\n const existing = Option.getOrUndefined(\n yield* exactRecord(\n submission.threadId,\n RecordId.make(`worker-effects-resolved:${admission.messageId}`),\n \"inspect\",\n ),\n )?.record.payload;\n\n if (existing !== undefined) {\n if (\n existing._tag !== \"WorkerInputCompleted\" ||\n !Schema.toEquivalence(WorkerInputCompleted)(\n { ...existing, effectsResolved: true },\n payload,\n )\n )\n return yield* failure(\"inspect\", \"corrupt\");\n\n if (existing.effectsResolved) {\n yield* reportRun(submission, current);\n\n return;\n }\n }\n if (\n yield* append(\n submission.threadId,\n `worker-effects-resolved:${admission.messageId}`,\n payload,\n current,\n \"completion\",\n )\n ) {\n if (Option.isSome(deps.wake))\n yield* deps.wake.value\n .notify(admission.origin.source.threadId)\n .pipe(Effect.mapError(storageFailure(\"inspect\")));\n\n yield* reportRun(submission, current);\n\n return;\n }\n }\n\n return yield* failure(\"inspect\", \"storage\");\n });\n\n /** Open refused inboxes remain owed until an operator stops them; funding charges never refund. */\n const repairReservation = Effect.fnUntraced(function* (\n sourceThreadId: ThreadId,\n reservation: CanonicalRecordEnvelope,\n ): Effect.fn.Return<boolean, WorkerError> {\n const fact = reservation.record.payload;\n\n if (\n reservation.threadId !== sourceThreadId ||\n (fact._tag !== \"WorkerInputRequested\" &&\n (fact._tag !== \"SubtreeBudgetReserved\" || fact.lifetime !== \"background\"))\n )\n return yield* failure(\"inspect\", \"corrupt\");\n if (fact._tag === \"SubtreeBudgetReserved\") {\n const input = Option.getOrUndefined(\n yield* exactRecord(\n sourceThreadId,\n workerInputRecordId(IdempotencyKey.make(fact.reservationId)),\n \"inspect\",\n ),\n );\n\n if (input !== undefined) {\n if (input.record.payload._tag !== \"WorkerInputRequested\")\n return yield* failure(\"inspect\", \"corrupt\");\n\n return (yield* repairInput(sourceThreadId, input.record.payload)) === \"repaired\";\n }\n }\n\n const messageId =\n fact._tag === \"WorkerInputRequested\"\n ? fact.admission.messageId\n : IdempotencyKey.make(fact.reservationId);\n\n const workerThreadId =\n fact._tag === \"WorkerInputRequested\"\n ? fact.admission.origin.worker.threadId\n : fact.childThreadId;\n\n const id = RecordId.make(`worker-input-refused:${messageId}`);\n\n if (Option.isNone(deps.deliveries) || deps.ledger.inspectWorker === undefined)\n return yield* failure(\"inspect\", \"unavailable\");\n\n const delivery = yield* deps.deliveries.value\n .get({ ownerThreadId: sourceThreadId, messageId })\n .pipe(Effect.mapError(storageFailure(\"inspect\")));\n\n if (delivery === null) return false;\n const admission = delivery.envelope.workerAdmission;\n\n if (\n admission === undefined ||\n delivery.envelope.threadId !== workerThreadId ||\n admission.messageId !== messageId ||\n delivery.envelope.admissionKey !== messageId ||\n admission.origin.source.threadId !== sourceThreadId ||\n admission.origin.worker.threadId !== workerThreadId ||\n (fact._tag === \"WorkerInputRequested\"\n ? !sameAdmission(admission, fact.admission) ||\n delivery.envelope.inputDigest !== fact.inputDigest\n : !Schema.toEquivalence(SubtreeBudgetReserved)(\n fact,\n SubtreeBudgetReserved.make({\n reservationId: fact.reservationId,\n executionRunId: admission.executionRunId,\n ...(admission.sourceSubmissionId === undefined\n ? {}\n : { sourceSubmissionId: admission.sourceSubmissionId }),\n childThreadId: workerThreadId,\n lifetime: \"background\",\n depth: admission.origin.depth,\n policy: admission.origin.policy,\n grant: admission.origin.grant,\n budget: admission.origin.budget,\n }),\n ))\n )\n return yield* failure(\"inspect\", \"corrupt\");\n if (delivery.status !== \"refused\" || delivery.receipt !== null) return false;\n\n const ref = yield* withCrypto(reference(reservation.record)).pipe(\n Effect.mapError(storageFailure(\"inspect\")),\n );\n\n for (let attempt = 0; attempt < 16; attempt++) {\n const existing = Option.getOrUndefined(yield* exactRecord(sourceThreadId, id, \"inspect\"))\n ?.record.payload;\n\n if (existing !== undefined) {\n if (\n existing._tag !== \"WorkerInputRefused\" ||\n existing.messageId !== messageId ||\n existing.workerThreadId !== workerThreadId ||\n existing.reservation.recordId !== ref.recordId ||\n existing.receiver.threadId !== workerThreadId ||\n existing.receiver.principal !== delivery.envelope.deliveryPrincipal ||\n existing.receiver.idempotencyKey !== delivery.envelope.admissionKey ||\n existing.receiver.inputDigest !== delivery.envelope.inputDigest ||\n existing.envelopeDigest !== delivery.envelopeDigest ||\n existing.deliveryVersion !== delivery.version\n )\n return yield* failure(\"inspect\", \"corrupt\");\n\n const stop = Option.getOrUndefined(\n yield* exactRecord(sourceThreadId, existing.stop.recordId, \"inspect\"),\n );\n\n if (\n stop?.record.payload._tag !== \"WorkerStopRequested\" ||\n !Schema.toEquivalence(WorkerRef)(\n stop.record.payload.command.worker,\n admission.origin.worker,\n )\n )\n return yield* failure(\"inspect\", \"corrupt\");\n\n return true;\n }\n\n const tail = yield* deps.store\n .inspectTail(ThreadTailRequest.make({ threadId: sourceThreadId }))\n .pipe(Effect.mapError(storageFailure(\"inspect\")));\n\n // A source reservation can advance to an input while this repair yields. Close its\n // current exact owner, with the tail below fencing any later transition.\n if (fact._tag === \"SubtreeBudgetReserved\") {\n const input = Option.getOrUndefined(\n yield* exactRecord(sourceThreadId, workerInputRecordId(messageId), \"inspect\"),\n );\n\n if (input !== undefined) {\n if (input.sequence > tail.tailSequence) continue;\n if (input.record.payload._tag !== \"WorkerInputRequested\")\n return yield* failure(\"inspect\", \"corrupt\");\n\n return (yield* repairInput(sourceThreadId, input.record.payload)) === \"repaired\";\n }\n }\n\n const stop = yield* readStop(sourceThreadId, workerThreadId, tail.tailSequence);\n\n if (stop === undefined) return false;\n if (\n stop.record.payload._tag !== \"WorkerStopRequested\" ||\n !Schema.toEquivalence(WorkerRef)(\n stop.record.payload.command.worker,\n admission.origin.worker,\n )\n )\n return yield* failure(\"inspect\", \"corrupt\");\n\n const receiver = yield* deps.ledger\n .inspectWorker(workerThreadId)\n .pipe(Effect.mapError(storageFailure(\"inspect\")));\n\n if (!receiver.stopped) return false;\n\n const key = SubmissionLookupByKey.make({\n threadId: workerThreadId,\n principal: delivery.envelope.deliveryPrincipal,\n idempotencyKey: delivery.envelope.admissionKey,\n });\n\n const resolution = yield* deps.ledger\n .resolveAdmission(key)\n .pipe(Effect.mapError(storageFailure(\"inspect\")));\n\n if (resolution._tag !== \"NotAdmitted\") return false;\n\n const payload = WorkerInputRefused.make({\n messageId,\n workerThreadId,\n reservation: ref,\n stop: yield* withCrypto(reference(stop.record)).pipe(\n Effect.mapError(storageFailure(\"inspect\")),\n ),\n deliveryVersion: delivery.version,\n envelopeDigest: delivery.envelopeDigest,\n receiver: {\n ...key,\n inputDigest: delivery.envelope.inputDigest,\n stopped: true,\n resolution: \"NotAdmitted\",\n },\n });\n\n if (yield* append(sourceThreadId, id, payload, { ...tail, records: [] }, \"completion\"))\n return true;\n }\n\n return yield* failure(\"inspect\", \"storage\");\n });\n\n const readInputCompletion = (admission: WorkerAdmission) =>\n getRecord({\n threadId: admission.origin.worker.threadId,\n recordId: RecordId.make(`worker-effects-resolved:${admission.messageId}`),\n }).pipe(\n Effect.provideService(ThreadReader, ThreadReader.fromStore(deps.store)),\n Effect.catchTag(\"ThreadNotMaterialized\", () => Effect.succeed(Option.none())),\n Effect.mapError(storageFailure(\"inspect\")),\n );\n\n /** Copy an exact factual child acknowledgement into source accounting, even after its Run ends. */\n const repairInput = Effect.fnUntraced(function* (\n sourceThreadId: ThreadId,\n request: WorkerInputRequested,\n completion?: Option.Option<CanonicalRecordEnvelope>,\n ): Effect.fn.Return<\"repaired\" | \"delivery-owned\" | \"awaiting-effects\", WorkerError> {\n const admission = request.admission;\n\n const reserved = Option.getOrUndefined(\n yield* exactRecord(sourceThreadId, workerInputRecordId(admission.messageId), \"inspect\"),\n );\n\n if (\n reserved === undefined ||\n reserved.record.payload._tag !== \"WorkerInputRequested\" ||\n !sameAdmission(reserved.record.payload.admission, admission) ||\n reserved.record.payload.inputDigest !== request.inputDigest\n )\n return yield* failure(\"inspect\", \"corrupt\");\n if (yield* repairReservation(sourceThreadId, reserved)) return \"repaired\";\n const id = RecordId.make(`worker-effects-resolved:${admission.messageId}`);\n\n if (Option.isNone(deps.deliveries)) return yield* failure(\"inspect\", \"unavailable\");\n\n const delivery = yield* deps.deliveries.value\n .get({ ownerThreadId: sourceThreadId, messageId: admission.messageId })\n .pipe(Effect.mapError(storageFailure(\"inspect\")));\n\n if (delivery === null) return yield* failure(\"inspect\", \"unavailable\");\n if (\n delivery.key.ownerThreadId !== sourceThreadId ||\n delivery.key.messageId !== admission.messageId ||\n delivery.envelope.threadId !== admission.origin.worker.threadId ||\n delivery.envelope.inputDigest !== request.inputDigest ||\n delivery.envelope.workerAdmission === undefined ||\n !sameAdmission(delivery.envelope.workerAdmission, admission)\n )\n return yield* failure(\"inspect\", \"corrupt\");\n // A parked delivery may already have a factual effects-resolved acknowledgement.\n // Settlement alone cannot release capacity; the exact child fact below can.\n // The delivery driver owns settlement polling. Normal maintenance waits for its local\n // observation; capacity pressure supplies an exact foreign read without polling live Runs.\n if (completion === undefined && delivery.settlement === null) return \"delivery-owned\";\n\n const child = Option.getOrUndefined(completion ?? (yield* readInputCompletion(admission)));\n\n // Only the child storage owner publishes factual acknowledgements. Its native WorkerEffects\n // obligation survives settlement and operation closure; source recovery copies that evidence.\n if (child === undefined) return \"awaiting-effects\";\n const payload = child.record.payload;\n\n if (\n payload._tag !== \"WorkerInputCompleted\" ||\n payload.effectsResolved !== true ||\n payload.messageId !== admission.messageId ||\n payload.workerThreadId !== admission.origin.worker.threadId ||\n (delivery.receipt !== null &&\n (payload.submissionId !== delivery.receipt.submissionId ||\n payload.receiptId !== delivery.receipt.receiptId))\n )\n return yield* failure(\"inspect\", \"corrupt\");\n\n const origin = Option.getOrUndefined(\n yield* exactRecord(\n admission.origin.worker.threadId,\n workerOriginRecordId(admission.origin.worker.threadId),\n \"inspect\",\n ),\n )?.record.payload;\n\n if (origin?._tag !== \"WorkerOriginRecorded\" || !sameOrigin(origin.origin, admission.origin))\n return yield* failure(\"inspect\", \"corrupt\");\n for (let attempt = 0; attempt < 16; attempt++) {\n const existing = Option.getOrUndefined(yield* exactRecord(sourceThreadId, id, \"inspect\"))\n ?.record.payload;\n\n if (existing !== undefined) {\n if (\n existing._tag !== \"WorkerInputCompleted\" ||\n !Schema.toEquivalence(WorkerInputCompleted)(existing, payload)\n )\n return yield* failure(\"inspect\", \"corrupt\");\n\n return \"repaired\";\n }\n\n const tail = yield* deps.store\n .inspectTail(ThreadTailRequest.make({ threadId: sourceThreadId }))\n .pipe(Effect.mapError(storageFailure(\"inspect\")));\n\n if (yield* append(sourceThreadId, id, payload, { ...tail, records: [] }, \"completion\"))\n return \"repaired\";\n }\n\n return yield* failure(\"inspect\", \"storage\");\n });\n\n const completeHandoff = Effect.fnUntraced(function* (\n threadId: ThreadId,\n preparationId: RecordId,\n ownerId: string,\n operation: \"inspect\" | \"stop\",\n ) {\n const id = RecordId.make(`work-handoff-completed:${preparationId}`);\n\n for (let attempt = 0; attempt < 16; attempt++) {\n const prior = Option.getOrUndefined(yield* exactRecord(threadId, id, operation))?.record\n .payload;\n\n if (prior !== undefined) {\n if (\n prior._tag !== \"WorkHandoffCompleted\" ||\n prior.preparationId !== preparationId ||\n prior.ownerId !== ownerId\n )\n return yield* failure(operation, \"corrupt\");\n\n return;\n }\n\n const tail = yield* deps.store\n .inspectTail(ThreadTailRequest.make({ threadId }))\n .pipe(Effect.mapError(storageFailure(operation)));\n\n if (\n yield* append(\n threadId,\n id,\n WorkHandoffCompleted.make({ preparationId, ownerId }),\n { ...tail, records: [] },\n operation === \"stop\" ? \"stop\" : \"completion\",\n )\n )\n return;\n }\n\n return yield* failure(operation, \"storage\");\n });\n\n /** A retained command preserves its original principal and input owner; discovery grants neither. */\n const repairStop = Effect.fnUntraced(function* (\n sourceThreadId: ThreadId,\n preparationId: RecordId,\n request: WorkerStopRequested,\n ) {\n if (deps.ledger.stopWorker === undefined) return yield* failure(\"stop\", \"unavailable\");\n\n const first = Option.getOrUndefined(\n yield* exactRecord(sourceThreadId, firstWorkerInputRecordId(request.command.worker), \"stop\"),\n )?.record.payload;\n\n const retained =\n first === undefined && Option.isSome(deps.deliveries)\n ? yield* deps.deliveries.value\n .get({\n ownerThreadId: sourceThreadId,\n messageId: IdempotencyKey.make(request.command.worker.threadId),\n })\n .pipe(Effect.mapError(storageFailure(\"stop\")))\n : null;\n\n const origin =\n first?._tag === \"WorkerInputRequested\"\n ? first.admission.origin\n : retained?.envelope.workerAdmission?.origin;\n\n if (\n origin === undefined ||\n origin.source.threadId !== sourceThreadId ||\n origin.firstMessageId !== IdempotencyKey.make(request.command.worker.threadId) ||\n !Schema.toEquivalence(WorkerRef)(origin.worker, request.command.worker) ||\n (retained !== null &&\n (retained.key.ownerThreadId !== sourceThreadId ||\n retained.key.messageId !== origin.firstMessageId ||\n retained.envelope.workerAdmission?.messageId !== origin.firstMessageId ||\n retained.envelope.agentId !== origin.worker.targetAgentId ||\n retained.envelope.threadId !== origin.worker.threadId ||\n retained.envelope.admissionKey !== origin.firstMessageId))\n )\n return yield* failure(\"stop\", \"worker-mismatch\");\n\n const principal = yield* deps.authorizer.authorize({\n sourceThreadId,\n principal: request.principal,\n operation: \"stop\",\n access: \"control\",\n worker: request.command.worker,\n ...(request.sourceSubmissionId === undefined\n ? {}\n : { sourceSubmissionId: request.sourceSubmissionId }),\n });\n\n if (principal !== request.principal) return yield* failure(\"stop\", \"denied\");\n\n const owned = yield* deps.ledger\n .stopWorker({ threadId: request.command.worker.threadId, author: principal })\n .pipe(Effect.mapError(storageFailure(\"stop\")));\n\n if (owned !== 0) return false;\n yield* completeHandoff(sourceThreadId, preparationId, workId(\"handoff\", preparationId), \"stop\");\n\n return true;\n });\n\n const facet = (\n context: WorkerContext,\n principal: Principal,\n sourceSubmissionId?: SubmissionId,\n ): SubagentHost[\"Service\"] => {\n const requestedPrincipal = principal;\n\n const authorize = (\n operation: WorkerError[\"operation\"],\n access: \"context\" | \"read\" | \"send\" | \"control\",\n worker?: WorkerRef,\n continuationOf?: WorkerContinuation,\n admission?: WorkerStartAdmission,\n ) =>\n deps.authorizer.authorize({\n ...(admission === undefined ? {} : { admission }),\n sourceThreadId: context.source.threadId,\n ...(sourceSubmissionId === undefined ? {} : { sourceSubmissionId }),\n principal,\n operation,\n access,\n ...(worker === undefined ? {} : { worker }),\n ...(continuationOf === undefined ? {} : { continuationOf }),\n });\n\n const binding = (target: Agent.AnyDefinition, operation: WorkerError[\"operation\"]) =>\n resolveDefinitionBinding(deps.bindings, target).pipe(\n Effect.mapError((cause) => failure(operation, \"declaration-unavailable\", cause)),\n );\n\n const deliveryStatus = (row: MessageDeliveryRecord, operation: WorkerError[\"operation\"]) =>\n messageStatus(row).pipe(Effect.mapError((cause) => failure(operation, \"corrupt\", cause)));\n\n const preparedTarget = Effect.fnUntraced(function* (\n target: Agent.AnyDefinition,\n encodedInput: unknown,\n continuationOf?: WorkerContinuation,\n authorization?: WorkerStartAdmission,\n ) {\n const resolved = yield* binding(target, \"start\");\n\n yield* Schema.decodeUnknownEffect(Schema.toEncoded(target.input))(encodedInput).pipe(\n Effect.mapError((cause) => failure(\"start\", \"corrupt\", cause)),\n );\n const input = yield* decode(PersistedJson, encodedInput, \"start\");\n\n const inputDigest = yield* withCrypto(digestJson(input)).pipe(\n Effect.mapError(storageFailure(\"start\")),\n );\n\n const source = yield* sourceAuthority(context.source.threadId, sourceSubmissionId);\n\n const admission = yield* currentStart(\n authorization,\n context.source.threadId,\n sourceSubmissionId,\n principal,\n target.id,\n continuationOf,\n );\n\n const policy = yield* resolveTargetPolicy({\n _tag: \"InitialInput\",\n ...(admission === undefined ? {} : { admission }),\n ...(continuationOf === undefined ? {} : { continuationOf }),\n definition: resolved.definition,\n definitions: resolved.digests,\n source: context.source,\n ...(source.submission === undefined ? {} : { sourceSubmission: source.submission }),\n input,\n inputDigest,\n });\n\n return { resolved, source, policy };\n });\n\n const findOrigin = Effect.fnUntraced(function* (\n worker: WorkerRef,\n target: Agent.AnyDefinition,\n operation: WorkerError[\"operation\"],\n ) {\n yield* binding(target, operation);\n\n if (worker.targetAgentId !== target.id) return yield* failure(operation, \"worker-mismatch\");\n\n const first = Option.getOrUndefined(\n yield* exactRecord(context.source.threadId, firstWorkerInputRecordId(worker), operation),\n )?.record.payload;\n\n const origin = first?._tag === \"WorkerInputRequested\" ? first.admission.origin : undefined;\n\n if (origin === undefined) {\n const retained = Option.isNone(deps.deliveries)\n ? null\n : yield* deps.deliveries.value\n .get({\n ownerThreadId: context.source.threadId,\n messageId: Schema.decodeSync(IdempotencyKey)(worker.threadId),\n })\n .pipe(Effect.mapError(storageFailure(operation)));\n\n const pendingOrigin = retained?.envelope.workerAdmission?.origin;\n\n if (pendingOrigin === undefined) return yield* failure(operation, \"not-found\");\n if (\n !Schema.toEquivalence(WorkerRef)(pendingOrigin.worker, worker) ||\n pendingOrigin.firstMessageId !== retained?.key.messageId ||\n pendingOrigin.source.threadId !== context.source.threadId\n )\n return yield* failure(operation, \"worker-mismatch\");\n\n return pendingOrigin;\n }\n if (\n !Schema.toEquivalence(WorkerRef)(origin.worker, worker) ||\n first?._tag !== \"WorkerInputRequested\" ||\n first.admission.messageId !== origin.firstMessageId ||\n workerInputRecordId(origin.firstMessageId) !== firstWorkerInputRecordId(worker)\n )\n return yield* failure(operation, \"worker-mismatch\");\n\n return origin;\n });\n\n const receiptInput = Effect.fnUntraced(function* (\n request: WorkerReceiptRequest,\n operation: WorkerError[\"operation\"],\n ) {\n const origin = yield* findOrigin(request.worker, request.target, operation);\n const receipt = request.receipt;\n\n const snapshot = yield* deps.ledger\n .lookup(SubmissionLookupById.make({ submissionId: receipt.submissionId }))\n .pipe(Effect.mapError(storageFailure(operation)));\n\n if (Option.isNone(snapshot)) return yield* failure(operation, \"not-found\");\n const row = snapshot.value;\n\n if (\n row.threadId !== request.worker.threadId ||\n row.threadId !== receipt.threadId ||\n row.receiptId !== receipt.receiptId ||\n row.queueSequence !== receipt.queueSequence ||\n row.workerAdmission === undefined ||\n !sameOrigin(row.workerAdmission.origin, origin)\n )\n return yield* failure(operation, \"receipt-mismatch\");\n\n return row.workerAdmission;\n });\n\n const observation = Effect.fnUntraced(function* (\n request: WorkerReceiptRequest,\n admission: WorkerAdmission,\n settlement: Settlement,\n ): Effect.fn.Return<WorkerObservation, WorkerError> {\n const selected = yield* deps.ledger\n .lookup(SubmissionLookupById.make({ submissionId: settlement.submissionId }))\n .pipe(Effect.mapError(storageFailure(\"inspect\")));\n\n if (Option.isNone(selected) || selected.value.threadId !== request.worker.threadId)\n return yield* failure(\"inspect\", \"corrupt\");\n const history = yield* readSubmission(selected.value);\n\n const record = history.records.find(\n ({ record }) =>\n record.payload._tag === \"SubmissionSettled\" &&\n record.payload.submissionId === settlement.submissionId,\n )?.record.payload;\n\n if (\n record?._tag !== \"SubmissionSettled\" ||\n record.settlementId !== settlement.settlementId ||\n record.receiptId !== request.receipt.receiptId ||\n record.outcome !== settlement.outcome\n )\n return yield* failure(\"inspect\", \"corrupt\");\n\n const input = history.records.find(\n ({ record }) =>\n record.payload._tag === \"UserInputRecorded\" &&\n record.payload.submissionId === settlement.submissionId,\n )?.record.payload;\n\n const inputRunId = input?._tag === \"UserInputRecorded\" ? input.runId : undefined;\n\n if (inputRunId !== undefined && record.runId !== undefined && inputRunId !== record.runId)\n return yield* failure(\"inspect\", \"corrupt\");\n const runId = record.runId ?? inputRunId;\n\n // The host settlement precedes the joined members and carries the Run's actual output.\n // Both identities come from canonical history; no foreign recovery or finalization is needed.\n const host =\n runId === undefined\n ? undefined\n : history.records.find(\n ({ record }) =>\n record.payload._tag === \"SubmissionSettled\" && record.payload.runId === runId,\n )?.record.payload;\n\n const result = host?._tag === \"SubmissionSettled\" ? host : record;\n\n if (result.outcome !== record.outcome) return yield* failure(\"inspect\", \"corrupt\");\n\n return {\n _tag: \"Settled\",\n receipt: request.receipt,\n settlementId: settlement.settlementId,\n ...(result.runId === undefined ? {} : { runId: result.runId }),\n outcome: settlement.outcome,\n encodedParameters: admission.parameters,\n encodedResult: result.result ?? null,\n ...(result.outcome === \"failed\" ? { diagnostic: result.result } : {}),\n budgetExhausted: result.finishReason === \"budget-exhausted\",\n };\n });\n\n const send = Effect.fnUntraced(function* (\n origin: WorkerOrigin,\n messageId: IdempotencyKey,\n encodedInput: unknown,\n encodedParameters: unknown,\n principal: Principal,\n operation: \"start\" | \"followUp\",\n authorization?: WorkerStartAdmission,\n ) {\n if (Option.isNone(deps.deliveries)) return yield* failure(operation, \"unavailable\");\n const deliveries = deps.deliveries.value;\n const input = yield* decode(PersistedJson, encodedInput, operation);\n const parameters = yield* decode(PersistedJson, encodedParameters, operation);\n\n const inputDigest = yield* withCrypto(digestJson(input)).pipe(\n Effect.mapError(storageFailure(operation)),\n );\n\n const key = { ownerThreadId: context.source.threadId, messageId };\n const saved = yield* deliveries.get(key).pipe(Effect.mapError(storageFailure(operation)));\n\n if (saved !== null) {\n const metadata = saved.envelope.workerAdmission;\n\n if (\n metadata === undefined ||\n !sameOrigin(metadata.origin, origin) ||\n !sameJson(metadata.parameters, parameters) ||\n saved.envelope.inputDigest !== inputDigest ||\n !sameJson(saved.envelope.input, input)\n )\n return yield* failure(operation, \"idempotency-conflict\");\n if (saved.receipt !== null) return yield* deliveryStatus(saved, operation);\n } else {\n const now = yield* Clock.currentTimeMillis;\n\n if (now >= origin.expiresAtMillis) return yield* failure(operation, \"capacity\");\n\n const funding =\n sourceSubmissionId === undefined\n ? undefined\n : yield* sourceAuthority(context.source.threadId, sourceSubmissionId);\n\n const envelope: PreparedInput = {\n schemaVersion: 1,\n threadId: origin.worker.threadId,\n deliveryPrincipal: principal,\n agentId: origin.worker.targetAgentId,\n definitions: origin.targetDigests,\n input,\n inputDigest,\n admissionKey: messageId,\n authorization: { policyId: \"worker-host\", decisionId: messageId },\n workerAdmission: {\n origin,\n // Freeze the first sender's execution owner; replay reuses this whole envelope.\n executionRunId: context.source._tag === \"tool\" ? context.source.runId : null,\n messageId,\n parameters,\n createdAtMillis: now,\n deliveryPrincipal: principal,\n ...(funding?.submission === undefined\n ? {}\n : { sourceSubmissionId: funding.submission.submissionId }),\n },\n };\n\n const prepared = yield* withCrypto(\n prepareMessageDelivery({\n key,\n envelope,\n createdAtMillis: now,\n deadlineAtMillis: origin.expiresAtMillis,\n }),\n ).pipe(Effect.mapError(storageFailure(operation)));\n\n yield* deliveries\n .insert(prepared)\n .pipe(\n Effect.mapError((error) =>\n failure(\n operation,\n error._tag === \"MessageDeliveryError\" && error.reason === \"capacity\"\n ? \"capacity\"\n : \"storage\",\n error,\n ),\n ),\n );\n }\n\n // Direct callers and automatic pumps run the same claim/accept/refuse protocol. A\n // conclusive refusal is retained before it becomes visible to this caller.\n const processed = yield* MessageDeliveryDriver.pipe(\n Effect.flatMap((driver) => driver.process(key)),\n Effect.provide(MessageDeliveryDriver.layer({ batchSize: 1, concurrency: 1 })),\n Effect.provideService(MessageDeliveryStore, deliveries),\n Effect.provideService(PreparedInputAdmission, {\n submit: (prepared) =>\n deps.submit(prepared).pipe(\n Effect.provideService(\n CurrentStartDelivery,\n authorization !== undefined &&\n prepared.workerAdmission !== undefined &&\n prepared.admissionKey === messageId &&\n prepared.inputDigest === inputDigest &&\n sameOrigin(prepared.workerAdmission.origin, origin)\n ? { authorization, admission: prepared.workerAdmission, inputDigest }\n : undefined,\n ),\n Effect.mapError((error) =>\n error._tag === \"AdmissionConflict\" || error._tag === \"AgentInputError\"\n ? ScheduledInputRefused.make({ code: error._tag, cause: error })\n : error._tag === \"AdmissionPolicyError\" && error.reason === \"refused\"\n ? ScheduledInputRefused.make({ code: error.code, cause: error })\n : ScheduledInputRetryable.make({ reason: \"storage\", cause: error }),\n ),\n ),\n submissionStatus: (receipt) =>\n deps\n .status(receipt)\n .pipe(\n Effect.mapError((error) =>\n ScheduledInputRetryable.make({ reason: \"storage\", cause: error }),\n ),\n ),\n }),\n Effect.provideService(Crypto.Crypto, deps.crypto),\n Effect.mapError(storageFailure(operation)),\n );\n\n return yield* deliveryStatus(processed, operation);\n });\n\n const messageIdFor = (parts: ReadonlyArray<string>) =>\n withCrypto(digestJson(parts)).pipe(\n Effect.map((digest) => Schema.decodeSync(IdempotencyKey)(`worker:${digest}`)),\n Effect.mapError(storageFailure(\"start\")),\n );\n\n const summarize = Effect.fnUntraced(function* (\n origin: WorkerOrigin,\n operation: \"list\" | \"inspect\",\n ): Effect.fn.Return<WorkerSummary, WorkerError> {\n yield* authorize(operation, \"read\", origin.worker);\n if (deps.ledger.inspectWorker === undefined || Option.isNone(deps.deliveries))\n return yield* failure(operation, \"unavailable\");\n const threadId = origin.worker.threadId;\n const deliveries = deps.deliveries.value;\n\n const pending = () =>\n deliveries\n .list({ ownerThreadId: context.source.threadId, pendingWorker: threadId, limit: 1 })\n .pipe(\n Effect.mapError(storageFailure(operation)),\n Effect.map((page) => page.items[0]),\n );\n\n const tail = () =>\n deps.store.inspectTail(ThreadTailRequest.make({ threadId })).pipe(\n Effect.catchTag(\"ThreadNotMaterialized\", () => Effect.succeed(undefined)),\n Effect.mapError(storageFailure(operation)),\n );\n\n const receipt = (row: SubmissionSnapshot): Receipt => ({\n threadId: row.threadId,\n submissionId: row.submissionId,\n receiptId: row.receiptId,\n queueSequence: row.queueSequence,\n });\n\n const input = (row: SubmissionSnapshot) => {\n if (row.workerAdmission === undefined || !sameOrigin(row.workerAdmission.origin, origin))\n return failure(operation, \"corrupt\");\n\n return Effect.succeed({ receipt: receipt(row), messageId: row.workerAdmission.messageId });\n };\n\n const submission = (submissionId: SubmissionId) =>\n deps.ledger.lookup(SubmissionLookupById.make({ submissionId })).pipe(\n Effect.mapError(storageFailure(operation)),\n Effect.flatMap((row) =>\n Option.isNone(row) ? failure(operation, \"corrupt\") : Effect.succeed(row.value),\n ),\n );\n\n // Native pages and exact lookups only. Retry changing watermarks instead of combining\n // acceptance, application and completion facts that never coexisted.\n for (let attempt = 0; attempt < 16; attempt++) {\n const delivery = yield* pending();\n\n const control = yield* deps.ledger\n .inspectWorker(threadId)\n .pipe(Effect.mapError(storageFailure(operation)));\n\n const current = yield* tail();\n\n const records =\n current === undefined\n ? []\n : yield* deps.store\n .read({\n threadId,\n selection: {\n _tag: \"WorkerExecution\",\n expectedTailSequence: current.tailSequence,\n },\n page: { limit: 2 },\n })\n .pipe(\n Stream.runCollect,\n Effect.mapError(storageFailure(operation)),\n Effect.catch((error) =>\n Effect.gen(function* () {\n // An unavailable recheck cannot justify discarding the original error.\n const after = yield* tail().pipe(Effect.orElseSucceed(() => current));\n\n if (after !== undefined && current.tailSequence !== after.tailSequence)\n return undefined;\n\n return yield* error;\n }),\n ),\n );\n\n if (records === undefined) continue;\n\n const applied = records.find((entry) => entry.record.payload._tag === \"UserInputRecorded\");\n\n const appliedRunId =\n applied?.record.payload._tag === \"UserInputRecorded\"\n ? applied.record.payload.runId\n : undefined;\n\n const execution =\n appliedRunId === undefined\n ? undefined\n : Option.getOrUndefined(\n yield* deps.store\n .readExecution({ threadId, runId: appliedRunId })\n .pipe(Effect.mapError(storageFailure(operation))),\n );\n\n const started = execution?.operational.find(\n (record) => record.payload._tag === \"RunStarted\",\n )?.payload;\n\n const settled = records.find((entry) => entry.record.payload._tag === \"SubmissionSettled\")\n ?.record.payload;\n\n const latestRunId =\n started?._tag === \"RunStarted\"\n ? started.runId\n : settled?._tag === \"SubmissionSettled\"\n ? settled.runId\n : undefined;\n\n const acceptedInput = control.latest === null ? null : yield* input(control.latest);\n let appliedInput: WorkerSummary[\"appliedInput\"] = null;\n let run: WorkerSummary[\"run\"] = null;\n\n if (applied?.record.payload._tag === \"UserInputRecorded\") {\n const value = applied.record.payload;\n\n if (value.submissionId === undefined || value.runId === undefined)\n return yield* failure(operation, \"corrupt\");\n appliedInput = {\n ...(yield* input(yield* submission(value.submissionId))),\n runId: value.runId,\n sequence: applied.sequence,\n };\n }\n if (latestRunId !== undefined) {\n const initial = Option.getOrUndefined(\n yield* getRunInput({ threadId, runId: latestRunId }).pipe(\n Effect.provideService(ThreadReader, ThreadReader.fromStore(deps.store)),\n Effect.mapError(storageFailure(operation)),\n ),\n )?.record.payload;\n\n if (initial?._tag !== \"UserInputRecorded\" || initial.submissionId === undefined)\n return yield* failure(operation, \"corrupt\");\n const host = yield* input(yield* submission(initial.submissionId));\n\n const terminal = Option.getOrUndefined(\n yield* exactRecord(\n threadId,\n submissionSettlementRecordId(initial.submissionId),\n operation,\n ),\n )?.record.payload;\n\n if (\n terminal !== undefined &&\n (terminal._tag !== \"SubmissionSettled\" || terminal.runId !== latestRunId)\n )\n return yield* failure(operation, \"corrupt\");\n\n run = {\n runId: latestRunId,\n hostReceipt: host.receipt,\n outcome: terminal?.outcome ?? null,\n disposition: terminal?.runDisposition ?? null,\n };\n }\n\n const after = yield* deps.ledger\n .inspectWorker(threadId)\n .pipe(Effect.mapError(storageFailure(operation)));\n\n const afterTail = yield* tail();\n const afterDelivery = yield* pending();\n\n const afterExecution =\n appliedRunId === undefined\n ? undefined\n : Option.getOrUndefined(\n yield* deps.store\n .readExecution({ threadId, runId: appliedRunId })\n .pipe(Effect.mapError(storageFailure(operation))),\n );\n\n if (\n !Schema.toEquivalence(WorkerLedgerState)(control, after) ||\n current?.tailSequence !== afterTail?.tailSequence ||\n execution?.progress.revision !== afterExecution?.progress.revision ||\n delivery?.key.messageId !== afterDelivery?.key.messageId ||\n delivery?.version !== afterDelivery?.version\n )\n continue;\n\n return {\n worker: origin.worker,\n latestReceipt: acceptedInput?.receipt ?? null,\n state:\n control.terminal ??\n (control.stopped\n ? control.active === null\n ? \"stopped\"\n : \"stopping\"\n : control.active !== null\n ? control.active.state === \"unknown\"\n ? \"unknown\"\n : \"active\"\n : delivery !== undefined\n ? \"starting\"\n : \"idle\"),\n acceptedInput,\n appliedInput,\n run,\n pendingDelivery:\n delivery === undefined ? null : yield* deliveryStatus(delivery, operation),\n watermark: {\n canonicalSequence: current?.tailSequence ?? 0,\n acceptedQueueSequence: control.latest?.queueSequence ?? 0,\n pendingDeliveryVersion: delivery?.version ?? null,\n },\n };\n }\n\n return yield* failure(operation, \"storage\");\n });\n\n return {\n context: Effect.gen(function* () {\n yield* authorize(\"context\", \"context\");\n if (context.depth !== 0) return context;\n const source = yield* sourceAuthority(context.source.threadId, sourceSubmissionId);\n\n return {\n ...context,\n policy: Option.getOrElse(source.policyOverride, () => context.policy),\n };\n }),\n resolveTargetPolicy: Effect.fnUntraced(function* (request) {\n const previous =\n request.continuationOf === undefined\n ? undefined\n : yield* completedContinuation(\n context.source,\n request.continuationOf,\n request.target.id,\n request.continuationOf.delegationId,\n );\n\n const admission = yield* currentStart(\n yield* CurrentStartPreparation,\n context.source.threadId,\n sourceSubmissionId,\n principal,\n request.target.id,\n previous?.evidence,\n );\n\n yield* authorize(\"start\", \"send\", undefined, previous?.evidence, admission);\n\n return (yield* preparedTarget(\n request.target,\n request.encodedInput,\n previous?.evidence,\n admission,\n )).policy;\n }),\n start: Effect.fnUntraced(function* <E = never, R = never>(\n command: StartWorkerRequest | DeferredStartWorkerRequest<E, R>,\n ): Effect.fn.Return<WorkerStarted, WorkerError | E, R> {\n const effectiveScope: WorkerBudgetScope =\n command.budgetScope ??\n (context.source._tag === \"programmatic\" && sourceSubmissionId === undefined\n ? \"worker-run\"\n : \"source-subtree\");\n\n if (effectiveScope === \"source-subtree\" && sourceSubmissionId === undefined)\n return yield* failure(\"start\", \"denied\");\n\n const previous =\n command.continuationOf === undefined\n ? undefined\n : yield* completedContinuation(\n context.source,\n command.continuationOf,\n command.target.id,\n command.delegationId,\n );\n\n // Bind the decision to the tail before authorization. If it changes while the\n // authorizer reads current state, currentStart rejects reuse of this decision.\n const tail = yield* deps.store\n .inspectTail(ThreadTailRequest.make({ threadId: context.source.threadId }))\n .pipe(Effect.mapError(storageFailure(\"start\")));\n\n const principal = yield* authorize(\"start\", \"send\", undefined, previous?.evidence);\n\n const startAdmission: WorkerStartAdmission = {\n sourceThreadId: context.source.threadId,\n ...(sourceSubmissionId === undefined ? {} : { sourceSubmissionId }),\n requestedPrincipal,\n principal,\n targetAgentId: command.target.id,\n ...(previous === undefined ? {} : { continuationOf: previous.evidence }),\n access: \"send\",\n tailSequence: tail.tailSequence,\n };\n\n if (context.depth !== 0 && sourceSubmissionId === undefined)\n return yield* failure(\"start\", \"denied\");\n\n const grant = yield* Schema.decodeUnknownEffect(SubagentGrant)(command.encodedGrant).pipe(\n Effect.mapError((cause) => failure(\"start\", \"corrupt\", cause)),\n );\n\n const parameters = yield* decode(PersistedJson, command.encodedParameters, \"start\");\n\n const messageId = yield* messageIdFor([\n context.source.threadId,\n command.delegationId,\n command.idempotencyKey,\n ]);\n\n if (Option.isNone(deps.deliveries)) return yield* failure(\"start\", \"unavailable\");\n const deliveries = deps.deliveries.value;\n\n const retained = () =>\n deliveries\n .get({ ownerThreadId: context.source.threadId, messageId })\n .pipe(Effect.mapError(storageFailure(\"start\")));\n\n const replay = Effect.fnUntraced(function* (saved: MessageDeliveryRecord) {\n const currentPrevious =\n command.continuationOf === undefined\n ? undefined\n : yield* completedContinuation(\n context.source,\n command.continuationOf,\n command.target.id,\n command.delegationId,\n previous?.evidence,\n );\n\n const replayPrincipal = yield* authorize(\n \"start\",\n \"send\",\n undefined,\n currentPrevious?.evidence,\n );\n\n yield* binding(command.target, \"start\");\n const metadata = saved.envelope.workerAdmission;\n\n if (metadata === undefined) return yield* failure(\"start\", \"idempotency-conflict\");\n const origin = metadata.origin;\n\n if (\n !Schema.toEquivalence(Schema.UndefinedOr(WorkerContinuation))(\n origin.continuationOf,\n currentPrevious?.evidence,\n ) ||\n origin.firstMessageId !== messageId ||\n metadata.messageId !== messageId ||\n origin.source.threadId !== context.source.threadId ||\n origin.worker.delegationId !== command.delegationId ||\n origin.worker.targetAgentId !== command.target.id ||\n !sameJson(metadata.parameters, parameters) ||\n !Schema.toEquivalence(SubagentGrant)(origin.grant, grant) ||\n origin.budgetScope !== effectiveScope ||\n origin.depth !== context.depth + 1 ||\n (!(\"prepare\" in command) &&\n (!samePolicy(origin.policy, command.policy) ||\n !Schema.toEquivalence(WorkerOrigin.fields.budget)(origin.budget, command.budget) ||\n origin.toolCallAllowance !== command.toolCallAllowance))\n )\n return yield* failure(\"start\", \"idempotency-conflict\");\n\n yield* verifyContinuation(origin);\n\n return {\n worker: origin.worker,\n delivery: yield* send(\n origin,\n messageId,\n \"prepare\" in command ? saved.envelope.input : command.encodedInput,\n parameters,\n replayPrincipal,\n \"start\",\n ),\n };\n });\n\n const existing = yield* retained();\n\n if (existing !== null) return yield* replay(existing);\n\n return yield* Effect.gen(function* () {\n const request =\n \"prepare\" in command\n ? {\n ...(yield* command\n .prepare(effectiveScope)\n .pipe(Effect.provideService(CurrentStartPreparation, startAdmission))),\n ...command,\n }\n : command;\n\n const currentPrevious =\n command.continuationOf === undefined\n ? undefined\n : yield* completedContinuation(\n context.source,\n command.continuationOf,\n command.target.id,\n command.delegationId,\n previous?.evidence,\n );\n\n if (currentPrevious !== undefined) {\n const preparedPrincipal = yield* authorize(\n \"start\",\n \"send\",\n undefined,\n currentPrevious.evidence,\n );\n\n if (preparedPrincipal !== principal) return yield* failure(\"start\", \"denied\");\n }\n\n const prepared = yield* preparedTarget(\n request.target,\n request.encodedInput,\n currentPrevious?.evidence,\n startAdmission,\n );\n\n const resolved = prepared.resolved;\n\n const sourcePolicy = Option.getOrElse(\n prepared.source.policyOverride,\n () => context.policy,\n );\n\n const now = yield* Clock.currentTimeMillis;\n const sourceBinding = prepared.source.binding;\n\n if (sourceBinding === undefined)\n return yield* failure(\"start\", \"declaration-unavailable\");\n\n const reporting = yield* reportIntent(\n sourceBinding,\n resolved,\n request.delegationId,\n prepared.source,\n );\n\n if (reporting?.mode === \"standard\" && sourceSubmissionId === undefined)\n return yield* failure(\"start\", \"denied\");\n\n const origin = yield* decode(\n WorkerOrigin,\n {\n worker: {\n schemaVersion: 1,\n delegationId: request.delegationId,\n targetAgentId: request.target.id,\n threadId: Schema.decodeSync(ThreadId)(messageId),\n },\n source: context.source,\n ...(currentPrevious === undefined\n ? {}\n : { continuationOf: currentPrevious.evidence }),\n ...(resolved.definition.runDisposition?.workerLifecycle === \"assignment\"\n ? { lifecycle: \"assignment\" }\n : {}),\n targetDigests: resolved.digests,\n policy: request.policy,\n budget: request.budget,\n budgetScope: effectiveScope,\n grant,\n depth: context.depth + 1,\n firstMessageId: messageId,\n createdAtMillis: now,\n expiresAtMillis: Math.min(\n now + deps.limits.lifetimeMillis,\n currentPrevious?.origin.expiresAtMillis ?? Infinity,\n ),\n ...(reporting === undefined ? {} : { reporting }),\n ...(request.toolCallAllowance === undefined\n ? {}\n : { toolCallAllowance: request.toolCallAllowance }),\n },\n \"start\",\n );\n\n yield* authorizeBudget(\n origin,\n principal,\n yield* currentStart(\n startAdmission,\n context.source.threadId,\n sourceSubmissionId,\n principal,\n request.target.id,\n currentPrevious?.evidence,\n ),\n );\n\n const targetPolicy = Option.isSome(prepared.policy)\n ? prepared.policy.value\n : origin.budgetScope === \"worker-run\"\n ? resolved.definition.policy\n : AgentPolicy.resolve(\n resolved.definition.policyOverrides ?? resolved.definition.policy,\n sourcePolicy,\n );\n\n if (\n !withinPolicy(\n origin,\n origin.budgetScope === \"worker-run\" ? targetPolicy : sourcePolicy,\n targetPolicy,\n )\n )\n return yield* failure(\"start\", \"capacity\");\n\n const delivery = yield* send(\n origin,\n messageId,\n request.encodedInput,\n request.encodedParameters,\n principal,\n \"start\",\n startAdmission,\n );\n\n return { worker: origin.worker, delivery };\n }).pipe(\n Effect.catch((error) =>\n Effect.gen(function* () {\n if (!(\"prepare\" in command)) return yield* Effect.fail(error);\n // A concurrent first writer may have retained the command during preparation or insert.\n // Only its exact declared arguments permit replay; absent proof preserves the failure.\n const saved = yield* retained();\n\n return saved === null ? yield* Effect.fail(error) : yield* replay(saved);\n }),\n ),\n );\n }),\n followUp: Effect.fnUntraced(function* <E = never, R = never>(\n command: FollowUpWorkerRequest | DeferredFollowUpWorkerRequest<E, R>,\n ): Effect.fn.Return<MessageStatus, WorkerError | E, R> {\n const principal = yield* authorize(\"followUp\", \"send\", command.worker);\n const origin = yield* findOrigin(command.worker, command.target, \"followUp\");\n\n const currentPolicy = resolveTargetPolicy({\n _tag: \"RetainedWorker\",\n definition: command.target,\n definitions: origin.targetDigests,\n source: origin.source,\n origin,\n });\n\n yield* currentPolicy;\n\n const messageId = yield* messageIdFor([\n context.source.threadId,\n command.worker.threadId,\n \"followUp\",\n command.idempotencyKey,\n ]);\n\n if (Option.isNone(deps.deliveries)) return yield* failure(\"followUp\", \"unavailable\");\n const deliveries = deps.deliveries.value;\n\n const retained = () =>\n deliveries\n .get({ ownerThreadId: context.source.threadId, messageId })\n .pipe(Effect.mapError(storageFailure(\"followUp\")));\n\n const replay = Effect.fnUntraced(function* (saved: MessageDeliveryRecord) {\n const replayPrincipal = yield* authorize(\"followUp\", \"send\", command.worker);\n\n yield* currentPolicy;\n\n return yield* send(\n origin,\n messageId,\n saved.envelope.input,\n command.encodedParameters,\n replayPrincipal,\n \"followUp\",\n );\n });\n\n const existing = \"prepare\" in command ? yield* retained() : null;\n\n if (existing !== null) return yield* replay(existing);\n\n return yield* Effect.gen(function* () {\n const request =\n \"prepare\" in command ? { ...(yield* command.prepare), ...command } : command;\n\n yield* Schema.decodeUnknownEffect(Schema.toEncoded(request.target.input))(\n request.encodedInput,\n ).pipe(Effect.mapError((cause) => failure(\"followUp\", \"corrupt\", cause)));\n\n let sendPrincipal = principal;\n\n if (\"prepare\" in command) {\n // Preparation can yield while authority changes, even when another writer saves equal input.\n sendPrincipal = yield* authorize(\"followUp\", \"send\", command.worker);\n yield* currentPolicy;\n }\n\n return yield* send(\n origin,\n messageId,\n request.encodedInput,\n request.encodedParameters,\n sendPrincipal,\n \"followUp\",\n );\n }).pipe(\n Effect.catch((error) =>\n Effect.gen(function* () {\n if (!(\"prepare\" in command)) return yield* Effect.fail(error);\n // A concurrent first writer can retain the original correction during preparation.\n // Replay rechecks current authority before reusing its immutable envelope.\n const saved = yield* retained();\n\n return saved === null ? yield* Effect.fail(error) : yield* replay(saved);\n }),\n ),\n );\n }),\n inspect: Effect.fnUntraced(function* (request) {\n yield* authorize(\"inspect\", \"read\", request.worker);\n\n if (\"message\" in request) {\n const message = yield* Schema.decodeEffect(MessageRef)(request.message).pipe(\n Effect.mapError((cause) => failure(\"inspect\", \"message-mismatch\", cause)),\n );\n\n if (message.ownerThreadId !== context.source.threadId)\n return yield* failure(\"inspect\", \"denied\");\n yield* binding(request.target, \"inspect\");\n if (request.worker.targetAgentId !== request.target.id)\n return yield* failure(\"inspect\", \"worker-mismatch\");\n if (Option.isNone(deps.deliveries)) return yield* failure(\"inspect\", \"unavailable\");\n\n const row = yield* deps.deliveries.value\n .get(message)\n .pipe(Effect.mapError(storageFailure(\"inspect\")));\n\n if (row === null) return yield* failure(\"inspect\", \"not-found\");\n const admission = row.envelope.workerAdmission;\n\n if (\n admission === undefined ||\n !Schema.toEquivalence(MessageRef)(row.key, message) ||\n admission.messageId !== message.messageId ||\n admission.origin.source.threadId !== context.source.threadId ||\n !Schema.toEquivalence(WorkerRef)(admission.origin.worker, request.worker) ||\n row.envelope.threadId !== request.worker.threadId ||\n row.envelope.agentId !== request.target.id ||\n row.envelope.admissionKey !== message.messageId\n )\n return yield* failure(\"inspect\", \"message-mismatch\");\n\n // Retention precedes source reservation and child materialization. Read its own\n // evidence without requiring either execution journal or attempting delivery again.\n return yield* deliveryStatus(row, \"inspect\");\n }\n\n const admission = yield* receiptInput(request, \"inspect\");\n\n const status = yield* deps\n .status(request.receipt)\n .pipe(Effect.mapError(storageFailure(\"inspect\")));\n\n return status._tag === \"pending\"\n ? { _tag: \"Pending\" as const, receipt: request.receipt }\n : yield* observation(request, admission, status.settlement);\n }),\n summary: Effect.fnUntraced(function* (request) {\n yield* authorize(\"inspect\", \"read\", request.worker);\n const origin = yield* findOrigin(request.worker, request.target, \"inspect\");\n\n return yield* summarize(origin, \"inspect\");\n }),\n observe: (request) =>\n Stream.unwrap(\n Effect.gen(function* () {\n yield* authorize(\"observe\", \"read\", request.worker);\n yield* findOrigin(request.worker, request.target, \"observe\");\n const after = request.after ?? 0;\n\n if (!Number.isSafeInteger(after) || after < 0)\n return yield* failure(\"observe\", \"corrupt\");\n\n const tail = yield* deps.store\n .inspectTail(ThreadTailRequest.make({ threadId: request.worker.threadId }))\n .pipe(Effect.mapError(storageFailure(\"observe\")));\n\n return Stream.paginate(after, (cursor) =>\n Effect.gen(function* () {\n if (cursor >= tail.tailSequence) return [[], Option.none<number>()] as const;\n const limit = Math.min(256, tail.tailSequence - cursor);\n\n const page = yield* deps.store\n .read(\n ThreadRead.make({\n threadId: request.worker.threadId,\n afterSequence: Schema.decodeSync(CanonicalSequence)(cursor),\n limit,\n }),\n )\n .pipe(Stream.runCollect, Effect.mapError(storageFailure(\"observe\")));\n\n if (\n page.length === 0 ||\n page.length > limit ||\n page.some(\n (entry, index) =>\n entry.threadId !== request.worker.threadId ||\n entry.sequence !== cursor + index + 1,\n )\n )\n return yield* failure(\"observe\", \"corrupt\");\n\n const entries = yield* Effect.forEach(page, (entry) =>\n Schema.encodeEffect(RecordEnvelope)(entry.record).pipe(\n Effect.flatMap((record) =>\n Schema.decodeEffect(WorkerHistoryEntry)({\n sequence: entry.sequence,\n recordId: entry.record.recordId,\n record,\n }),\n ),\n Effect.mapError((cause) => failure(\"observe\", \"corrupt\", cause)),\n ),\n );\n\n const next = cursor + page.length;\n\n return [\n entries,\n next >= tail.tailSequence ? Option.none<number>() : Option.some(next),\n ] as const;\n }),\n );\n }),\n ),\n await: Effect.fnUntraced(function* (request) {\n yield* authorize(\"await\", \"read\", request.worker);\n const admission = yield* receiptInput(request, \"await\");\n\n while (true) {\n const status = yield* deps\n .status(request.receipt)\n .pipe(Effect.mapError(storageFailure(\"await\")));\n\n if (status._tag === \"settled\")\n return yield* observation(request, admission, status.settlement);\n // Poll the same host-routed read used by inspect. Interruption stops only this wait.\n yield* Effect.sleep(deps.settlementPollInterval);\n }\n }),\n list: Effect.fnUntraced(function* (request) {\n yield* authorize(\"list\", \"read\");\n yield* binding(request.target, \"list\");\n if (!Number.isSafeInteger(request.limit) || request.limit < 1 || request.limit > 100)\n return yield* failure(\"list\", \"capacity\");\n if (Option.isNone(deps.deliveries)) return yield* failure(\"list\", \"unavailable\");\n\n const page = yield* deps.deliveries.value\n .list({\n ownerThreadId: context.source.threadId,\n limit: request.limit,\n workerStarts: { delegationId: request.delegationId, targetAgentId: request.target.id },\n ...(request.after === undefined\n ? {}\n : { after: Schema.decodeSync(IdempotencyKey)(request.after) }),\n })\n .pipe(Effect.mapError(storageFailure(\"list\")));\n\n const items = yield* Effect.forEach(page.items, (row) => {\n const origin = row.envelope.workerAdmission?.origin;\n\n return origin === undefined || origin.firstMessageId !== row.key.messageId\n ? failure(\"list\", \"corrupt\")\n : summarize(origin, \"list\");\n });\n\n return { items, next: page.next === null ? null : Schema.decodeSync(ThreadId)(page.next) };\n }),\n stop: Effect.fnUntraced(function* (request) {\n const principal = yield* authorize(\"stop\", \"control\", request.worker);\n\n yield* findOrigin(request.worker, request.target, \"stop\");\n if (deps.ledger.stopWorker === undefined) return yield* failure(\"stop\", \"unavailable\");\n const command = yield* decode(WorkerStop, request, \"stop\");\n\n const id = Schema.decodeSync(RecordId)(\n `worker-stop:${yield* messageIdFor([context.source.threadId, request.idempotencyKey])}`,\n );\n\n let retained = false;\n\n for (let attempt = 0; attempt < 16; attempt++) {\n const current = yield* deps.store\n .inspectTail(ThreadTailRequest.make({ threadId: context.source.threadId }))\n .pipe(Effect.mapError(storageFailure(\"stop\")));\n\n const prior = Option.getOrUndefined(\n yield* exactRecord(context.source.threadId, id, \"stop\"),\n )?.record.payload;\n\n if (prior !== undefined) {\n if (\n prior._tag !== \"WorkerStopRequested\" ||\n !Schema.toEquivalence(WorkerStop)(prior.command, command) ||\n prior.principal !== principal ||\n prior.sourceSubmissionId !== sourceSubmissionId\n )\n return yield* failure(\"stop\", \"idempotency-conflict\");\n retained = true;\n break;\n }\n if (\n yield* append(\n context.source.threadId,\n id,\n WorkerStopRequested.make({\n command,\n principal,\n ...(sourceSubmissionId === undefined ? {} : { sourceSubmissionId }),\n }),\n { ...current, records: [] },\n \"stop\",\n )\n ) {\n retained = true;\n break;\n }\n }\n if (!retained) return yield* failure(\"stop\", \"storage\");\n // The destination serializes this seal with admission. Replays retain every earlier\n // abort intent and wait for active handlers/finalizers, rather than acknowledging a hint.\n while (true) {\n yield* hit(\"worker:before-stop-seal\", \"stop\");\n\n const owned = yield* deps.ledger\n .stopWorker({ threadId: request.worker.threadId, author: principal })\n .pipe(Effect.mapError(storageFailure(\"stop\")));\n\n yield* hit(\"worker:after-stop-seal\", \"stop\");\n if (owned === 0) {\n yield* completeHandoff(context.source.threadId, id, workId(\"handoff\", id), \"stop\");\n\n return command;\n }\n yield* Effect.sleep(deps.settlementPollInterval);\n }\n }),\n cancel: Effect.fnUntraced(function* (request) {\n const principal = yield* authorize(\"cancel\", \"control\", request.worker);\n\n yield* receiptInput(request, \"cancel\");\n yield* deps\n .abort(\n AbortCommand.make({\n submissionId: request.receipt.submissionId,\n author: principal,\n reason: \"Worker owner requested cancellation of this Receipt\",\n }),\n )\n .pipe(\n Effect.mapError((error) =>\n error._tag === \"JoinedToHost\" ? error : failure(\"cancel\", \"storage\", error),\n ),\n );\n }),\n };\n };\n\n const validateCompletion = Effect.fnUntraced(function* (\n unvalidated: FrameworkMessage,\n options: DurableSubmitOptions,\n agentId: AgentId,\n inputDigest: Digest,\n ) {\n const message = yield* Schema.decodeEffect(FrameworkMessage)(unvalidated).pipe(\n Effect.mapError((cause) => failure(\"followUp\", \"corrupt\", cause)),\n );\n\n const childThreadId =\n message._tag === \"WorkerCompletion\"\n ? message.report.worker.threadId\n : message.worker.threadId;\n\n const proofId =\n message._tag === \"WorkerCompletion\"\n ? workerReportRecordId(options.idempotencyKey)\n : yield* withCrypto(\n agentUpdateRecordId(\n message.update.threadId,\n message.update.runId,\n message.update.updateId,\n ),\n ).pipe(Effect.mapError(storageFailure(\"followUp\")));\n\n const proof = Option.getOrUndefined(yield* exactRecord(childThreadId, proofId, \"followUp\"))\n ?.record.payload;\n\n const frozen =\n message._tag === \"WorkerCompletion\"\n ? proof?._tag === \"WorkerReportPrepared\" &&\n proof.runId === message.report.runId &&\n proof.messageId === options.idempotencyKey\n ? proof.envelope\n : undefined\n : proof?._tag === \"AgentUpdateEmitted\" &&\n Schema.toEquivalence(Update)(proof.update, message.update)\n ? proof.delivery?.envelope\n : undefined;\n\n if (frozen === undefined) return yield* failure(\"followUp\", \"denied\");\n\n const envelope = yield* Schema.decodeUnknownEffect(PreparedInput)(frozen).pipe(\n Effect.mapError((cause) => failure(\"followUp\", \"corrupt\", cause)),\n );\n\n if (\n !Schema.is(FrameworkMessage)(envelope.messageAdmission) ||\n !Schema.toEquivalence(FrameworkMessage)(envelope.messageAdmission, message) ||\n envelope.threadId !== options.threadId ||\n envelope.agentId !== agentId ||\n envelope.inputDigest !== inputDigest ||\n envelope.deliveryPrincipal !== options.principal ||\n envelope.admissionKey !== options.idempotencyKey ||\n !definitionDigestsEqual(envelope.definitions, options.definitions) ||\n !Schema.toEquivalence(Schema.UndefinedOr(WorkerAdmission))(\n envelope.workerAdmission,\n options.workerAdmission,\n )\n )\n return yield* failure(\"followUp\", \"denied\");\n\n const recorded = Option.getOrUndefined(\n yield* exactRecord(childThreadId, workerOriginRecordId(childThreadId), \"followUp\"),\n )?.record.payload;\n\n if (\n recorded?._tag !== \"WorkerOriginRecorded\" ||\n recorded.origin.worker.threadId !== childThreadId ||\n recorded.origin.reporting?.mode !== \"standard\"\n )\n return yield* failure(\"followUp\", \"denied\");\n const origin = recorded.origin;\n\n const first = Option.getOrUndefined(\n yield* exactRecord(\n origin.source.threadId,\n workerInputRecordId(origin.firstMessageId),\n \"followUp\",\n ),\n )?.record.payload;\n\n if (\n first?._tag !== \"WorkerInputRequested\" ||\n first.admission.messageId !== origin.firstMessageId ||\n !sameOrigin(first.admission.origin, origin)\n )\n return yield* failure(\"followUp\", \"denied\");\n const receiving = envelope.workerAdmission;\n\n const sourceSubmissionId =\n receiving === undefined ? first.admission.sourceSubmissionId : receiving.sourceSubmissionId;\n\n // Emission only persists the child's outbound message. The receiving runtime\n // calls this before acceptance and checks live permission, including revocation.\n // A frozen return address never substitutes for destination authorization.\n const principal = yield* deps.authorizer.authorize({\n sourceThreadId: receiving?.origin.source.threadId ?? origin.source.threadId,\n ...(sourceSubmissionId === undefined ? {} : { sourceSubmissionId }),\n principal: options.principal,\n operation: \"followUp\",\n access: \"report\",\n worker: receiving?.origin.worker ?? origin.worker,\n });\n\n if (principal !== options.principal) return yield* failure(\"followUp\", \"denied\");\n\n return message;\n });\n\n const acquire = Effect.fnUntraced(function* (request: {\n readonly sourceThreadId: ThreadId;\n readonly principal: Principal;\n readonly sourceSubmissionId?: SubmissionId;\n }) {\n const { sourceThreadId, principal } = request;\n\n yield* deps.authorizer.authorize({\n sourceThreadId,\n ...(request.sourceSubmissionId === undefined\n ? {}\n : { sourceSubmissionId: request.sourceSubmissionId }),\n principal,\n operation: \"context\",\n access: \"context\",\n });\n const current = yield* readIdentity(sourceThreadId, \"context\");\n const created = current.records[0]?.record.payload;\n\n if (created?._tag !== \"ThreadCreated\") return yield* failure(\"context\", \"not-found\");\n\n const selected =\n request.sourceSubmissionId === undefined\n ? undefined\n : yield* sourceAuthority(sourceThreadId, request.sourceSubmissionId);\n\n const resolved = selected === undefined ? currentBinding(created.agentId) : selected.binding;\n\n if (resolved === undefined) return yield* failure(\"context\", \"declaration-unavailable\");\n\n const origin = current.records.find(\n ({ record }) => record.payload._tag === \"WorkerOriginRecorded\",\n )?.record.payload;\n\n const attached = current.records.find(\n ({ record }) => record.payload._tag === \"SubagentLineageRecorded\",\n )?.record.payload;\n\n const retained =\n origin?._tag === \"WorkerOriginRecorded\"\n ? origin.origin\n : attached?._tag === \"SubagentLineageRecorded\"\n ? attached\n : undefined;\n\n if (\n selected?.submission !== undefined &&\n selected.submission.submissionId !== request.sourceSubmissionId\n )\n yield* deps.authorizer.authorize({\n sourceThreadId,\n sourceSubmissionId: selected.submission.submissionId,\n principal,\n operation: \"context\",\n access: \"context\",\n });\n\n return facet(\n {\n source: {\n _tag: \"programmatic\",\n threadId: sourceThreadId,\n agentId: selected?.submission?.agentId ?? created.agentId,\n },\n policy:\n retained?.policy ?? selected?.binding?.definition.policy ?? resolved.definition.policy,\n depth:\n origin?._tag === \"WorkerOriginRecorded\"\n ? origin.origin.depth\n : attached?._tag === \"SubagentLineageRecorded\"\n ? attached.parentLink.depth\n : 0,\n ...(retained?.grant === undefined ? {} : { grant: retained.grant }),\n },\n principal,\n selected?.submission?.submissionId,\n );\n });\n\n return {\n facet,\n prepareUpdate,\n acquire,\n validateCompletion,\n validateAdmission,\n ensureOrigin,\n completeInput,\n repairInput,\n repairReservation,\n repairStop,\n reserveSubtree,\n };\n});\n","import type { Scope } from \"effect\";\nimport {\n Cause,\n Clock,\n Context,\n Crypto,\n DateTime,\n Deferred,\n Duration,\n Effect,\n Equal,\n Exit,\n Layer,\n Option,\n Ref,\n Result,\n Schema,\n Semaphore,\n Stream,\n} from \"effect\";\nimport { Prompt, type Tool } from \"effect/ai\";\n\nimport {\n type InputMessage,\n MessageAdmission,\n type MessagingError,\n} from \"../capabilities/Messaging.ts\";\nimport type * as Agent from \"../core/Agent.ts\";\nimport { type RunDispositionDeclaration, type InputPromptSource } from \"../core/Agent.ts\";\nimport {\n AgentApprovalDenied,\n AgentApprovalPending,\n AgentInputDecodeError,\n AgentPersistenceCapacityError,\n AgentInputError,\n AgentToolAuthorizationDenied,\n type AgentToolAuthorizationCheckError,\n PolicyLimit,\n} from \"../core/AgentError.ts\";\nimport { AgentPolicy } from \"../core/AgentPolicy.ts\";\nimport { UpdateError } from \"../core/AgentUpdates.ts\";\nimport * as FailureDiagnostic from \"../core/FailureDiagnostic.ts\";\nimport {\n type ReceiptId,\n ThreadId,\n SubmissionId,\n ToolCallId,\n type AgentId,\n type AttemptId,\n type RunId,\n type TurnId,\n} from \"../core/Identifiers.ts\";\nimport { IdGenerator } from \"../core/IdGenerator.ts\";\nimport { copyJson } from \"../core/internal/json.ts\";\nimport { utf8ByteLength } from \"../core/internal/utf8.ts\";\nimport { Receipt } from \"../core/Receipt.ts\";\nimport type { ExhaustedLimit } from \"../core/RunEvent.ts\";\nimport {\n SubagentBudgetReservation,\n SubagentReservationAmounts,\n SubagentGrant,\n DelegationDepth,\n getToolExecutionKind,\n SubagentParentLink,\n} from \"../core/SubagentContract.ts\";\nimport { Store as ConversationStore, makeMemoryStore } from \"../core/Thread.ts\";\nimport { Selection, Snapshot } from \"../core/ToolExposure.ts\";\nimport type { ToolParameterRejection } from \"../core/ToolResult.ts\";\nimport {\n ModelCallUsage,\n ModelResponseIdentity,\n InputTokenUsage,\n ModelUsageGroup,\n RunUsageSummary,\n ChildRunUsage,\n RunUsageReport,\n emptyRunTotals,\n unknownRunTotals,\n runTotalsFromSummary,\n sumRunTotals,\n summarizeModelUsage,\n OutputTokenUsage,\n} from \"../core/Usage.ts\";\nimport { FrameworkMessage } from \"../core/Worker.ts\";\nimport type { WorkerError } from \"../core/Worker.ts\";\nimport * as AgentRuntime from \"../engine/AgentRuntime.ts\";\nimport {\n AgentChildPending,\n renderInputPrompt,\n type AgentRuntimeRequirements,\n type AgentCompletionProjectionRequirements,\n type RuntimeBinding,\n} from \"../engine/AgentRuntime.ts\";\nimport { ContextCompactor, CompactionError } from \"../engine/ContextCompactor.ts\";\nimport { ContextRolloverTool } from \"../engine/ContextWindow.ts\";\nimport { getToolExecutionClass } from \"../engine/DurableStep.ts\";\nimport { MessagingHost } from \"../engine/MessagingHost.ts\";\nimport {\n CurrentToolFailureObserver,\n AgentUpdateAcceptance,\n ModelUsageAccounting,\n RunContextPreparation,\n RunToolAuthorization,\n RunToolScheduling,\n RunContextPreparationPassthrough,\n type RunContextPreparationError,\n type ChildEstablishStatus,\n type RunApprovalHook,\n type RunContextHook,\n type RunCostEstimator,\n type RunDurabilityHook,\n type RunInputCommand,\n type RunInputHook,\n type RunOptions,\n type RunSubagentEstablishRequest,\n type RunSubagentHook,\n type RunSubagentJoinRequest,\n type RunToolAuthorizationHook,\n type RunToolAuthorizationRequest,\n} from \"../engine/RunOptions.ts\";\nimport { SubagentHost } from \"../engine/SubagentHost.ts\";\nimport { ThreadHistory } from \"../engine/ThreadHistory.ts\";\nimport { RunToolVisibility } from \"../engine/ToolExposure.ts\";\nimport {\n type IntegrityReport,\n type RetryCommand,\n ExplainedEvidence,\n ExplainedSubmission,\n ExplainedUnknownCall,\n ObligationEntry,\n ObligationReport,\n RecoveryExplanation,\n RetryRefused,\n obligationSeverityOf,\n predictRecoveryDisposition,\n recoveryDecisionMeaning,\n type ObligationBlockedOn,\n type ObligationThresholds,\n} from \"./Admin.ts\";\nimport { canonicalJson, digestJson, type DigestError } from \"./Digest.ts\";\nimport {\n DurableRuntimeFailpoint,\n type DurableRuntimeFailpointError,\n type DurableRuntimeFailpointLocation,\n} from \"./DurableFailpoint.ts\";\nimport {\n BindingUnavailable,\n compileRegistrations,\n definitionDigestsEqual,\n toolReplayContracts,\n type AgentRegistration,\n type DurableBindingFailure,\n makeLegacyWorkerBinding,\n type ResolvedBinding,\n resolveDefinitionBinding,\n resolveWorkerBinding,\n CurrentBindingSelection,\n} from \"./internal/agent-registration.ts\";\nimport { makeAgentUpdateRuntime, nativeUpdateAccepted } from \"./internal/agent-updates.ts\";\nimport { inspectForeignDiagnostic, safeUnknownString } from \"./internal/foreign-diagnostic.ts\";\nimport { initialContext, type InitialContextInput } from \"./internal/initial-context.ts\";\nimport {\n makeJournalMetadata,\n type JournalMetadata,\n type JournalRecordEnvelope,\n} from \"./internal/journal-metadata.ts\";\nimport { makeMessagingRuntime } from \"./internal/messaging-host.ts\";\nimport {\n digestPromptHistory,\n makePromptHistoryCache,\n makeCommittedPromptSuffix,\n preparePromptHistory,\n type CachedPromptHistory,\n type CommittedPromptSuffix,\n type PromptHistory,\n} from \"./internal/prompt-history-cache.ts\";\nimport { captureRecord } from \"./internal/record-encoding.ts\";\nimport { RunContextReader } from \"./internal/run-context-reader.ts\";\nimport { readRunContext } from \"./internal/run-context.ts\";\nimport * as ThreadInitialization from \"./internal/thread-initialization.ts\";\nimport {\n initialDispatchBlockedTurns,\n isUnresolvedToolOperation,\n toolOperationStates,\n} from \"./internal/tool-operations.ts\";\nimport { makeWorkerRuntime, WorkerInputControl } from \"./internal/worker-host.ts\";\nimport { WorkerRuntime } from \"./internal/worker-runtime.ts\";\nimport { MessageDeliveryStore, prepareMessageDelivery } from \"./MessageDelivery.ts\";\nimport {\n OperationAuthorizationRequest,\n OperationAuthorizer,\n OperationDenied,\n} from \"./OperationAuthorizer.ts\";\nimport {\n type RunContinuation,\n type CanonicalRecordEnvelope,\n type CanonicalRecordPayload,\n type DeploymentId,\n type Digest,\n type ProducerId,\n AbortRequested,\n BatchId,\n CanonicalBatch,\n CanonicalSequence,\n CompactionCreated,\n DefinitionDigests,\n ModelResponseInterrupted,\n ModelCallAborted,\n PersistedJson,\n RecordEnvelope,\n RecordId,\n RepairAnnotated,\n RunStartedRecord,\n RunContextRecorded,\n MAX_RUN_TOOL_CALL_IDENTITIES,\n MAX_PERSISTED_JSON_BYTES,\n MAX_RUN_CONTINUATION_BYTES,\n RunDurationExhausted,\n SettlementFailureDiagnostic,\n SubagentJoined,\n SubagentLineageRecorded,\n SubtreeBudgetReserved,\n SubagentRequested,\n SubagentStarted,\n SubmissionSettled,\n SubmissionSettledRecord,\n ToolApprovalDecided,\n ToolApprovalRequested,\n DeclaredToolCall,\n ToolOperation,\n ToolUnavailable,\n RunPolicyUsageReserved,\n ToolCallResolved,\n ToolCallSettled,\n ToolCallUnknown,\n ToolStepSettled,\n UserInputRecorded,\n WorkerAdmission,\n WorkHandoffCompleted,\n type ApprovalDecision,\n type SettlementOutcome,\n type ToolCallResolution,\n} from \"./Records.ts\";\nimport {\n classifyRecovery,\n DeclaredPendingBatchEvidence,\n OpenDelegationCallEvidence,\n OpenToolCallEvidence,\n PendingApprovalEvidence,\n pendingApprovalForRecovery,\n RecoveryDecision,\n RecoveryEvidence,\n type DelegationAdmissionEvidence,\n type MarkUnknown as MarkUnknownDecision,\n type SettleAborted as SettleAbortedDecision,\n} from \"./Recovery.ts\";\nimport {\n canonicalRecordBytes,\n CurrentRunWriter,\n CurrentRunSettlement,\n canonicalRunIds,\n executionRunIds,\n isPreContinuationFact,\n makeProgressWriter,\n readContinuation,\n readRunEvidenceSnapshot,\n reference,\n resolveEvidence,\n runEvidence,\n validateSuffix,\n terminalUsageCharge,\n} from \"./RunContinuation.ts\";\nimport {\n RunJournalError,\n approvalDecisionBatchId,\n childThreadIdFor,\n childIdempotencyKeyFor,\n compactionBatchId,\n compactionRecordId,\n markUnknownBatchId,\n modelResponseInterruptedBatchId,\n modelResponseInterruptedRecordId,\n modelResponseRecordId,\n projectRunJournalStream,\n initialRunJournal,\n type JournalBoundary,\n type RunJournalProjection,\n type RunJournalContext,\n type TurnCommitInput,\n runCompletedRecordId,\n runIdForSubmission,\n runStartedBatchId,\n runStartedRecordId,\n runDurationRecordId,\n runDurationBatchId,\n subagentJoinBatchId,\n subagentJoinedRecordId,\n subagentLineageBatchId,\n subagentLineageRecordId,\n subagentRequestedBatchId,\n subagentRequestedRecordId,\n subagentStartedBatchId,\n subagentStartedRecordId,\n toolApprovalDecisionRecordId,\n toolApprovalRequestRecordId,\n toolCallResolutionBatchId,\n toolCallResolvedRecordId,\n toolCallResultBatchId,\n toolCallSettledRecordId,\n toolCallUnknownRecordId,\n toolStepSettledBatchId,\n toolStepSettledRecordId,\n turnApprovalsBatchId,\n turnCanonicalBatch,\n turnIdForRun,\n turnResponseBatch,\n turnResponseBatchId,\n turnResultsBatch,\n} from \"./RunJournal.ts\";\nimport {\n RunStorage,\n StorageOwner,\n makeRunWriter,\n type RunOwnership,\n type RunStorageSession,\n type RunWriter,\n} from \"./RunStorage.ts\";\nimport {\n SettlementPublication,\n type SettlementPublicationAuthority,\n type SettlementPublicationFailure,\n type SettlementPublicationResult,\n} from \"./SettlementPublisher.ts\";\nimport {\n type AdmissionFence,\n AdmissionPolicyError,\n type AbortIntent,\n AbortIntentRequest,\n type AdmissionConflict,\n type JoinedToHost,\n type OwnershipLost,\n type RecoverySnapshot,\n type SettlementConflict,\n type SubmissionSnapshot,\n AbortCommand,\n AdmissionRequest,\n ApprovalDecisionCommand,\n ApprovalPendingSuspension,\n BeginChildBudgetReleaseRequest,\n ChildReservationId,\n ChildSettledNotification,\n ClaimHandoff,\n SubmissionScheduling,\n type JoiningClaim,\n ClaimRequest,\n IdempotencyKey,\n LedgerError,\n MarkReadyRequest,\n MarkUnknownRequest,\n ParentLinkage,\n Principal,\n RecoverySnapshotRequest,\n ReleaseChildBudgetRequest,\n RevertJoiningRequest,\n SettlementFinalization,\n Settlement,\n SubmissionLedger,\n SubmissionLookupById,\n SubmissionLookupByKey,\n UnknownResolutionCommand,\n unknownResolutionKind,\n WaitingChild,\n WaitingForChildSuspension,\n submissionAbortBatchId,\n submissionAbortRecordId,\n submissionInputBatchId,\n submissionInputRecordId,\n submissionSettlementBatchId,\n submissionSettlementId,\n submissionSettlementRecordId,\n type AdmissionResult,\n type ApprovalConflict,\n type ApprovalDecisionIntent,\n type ChildBudgetReservationSnapshot,\n type JoinSnapshot,\n type UnknownResolutionConflict,\n type UnknownResolutionIntent,\n} from \"./SubmissionLedger.ts\";\nimport { PendingSubmission, SettledSubmission, type SubmissionStatus } from \"./SubmissionStatus.ts\";\nimport { PreparedInput } from \"./Subscription.ts\";\nimport {\n type AppendConflict,\n type ThreadNotMaterialized,\n ThreadMaterialization,\n ThreadObservation,\n ThreadRead,\n ThreadIdentityRequest,\n ThreadStore,\n ThreadStoreDiagnostic,\n ThreadStoreError,\n ThreadTailRequest,\n AppendRequest,\n getRecord,\n getRunInput,\n ThreadReader,\n MAX_THREAD_EXPORT_PAGE_BYTES,\n type CommitBatch,\n type ExecutionUpdate,\n} from \"./ThreadStore.ts\";\nimport {\n type WorkIndexRebuildRequest,\n type WorkIndexProgress,\n ThreadWorkDiscovery,\n ThreadWorkEntry,\n ThreadWorkRequest,\n WorkDiscoveryUnavailable,\n type WorkThreadsRequest,\n type WorkThreadsPage,\n resolveWorkEvidence,\n operationEvidence,\n validateWorkPage,\n workId,\n MAX_RECOVERY_WORK_ITEMS,\n MAX_RECOVERY_PAGES,\n MAX_WORK_CURSOR_CHARS,\n decodeWorkCursor,\n type ThreadWorkPage,\n} from \"./ThreadWork.ts\";\nimport { DeclaredToolCallEvidence, ToolReconciler } from \"./ToolReconciler.ts\";\nimport { WakeScheduler } from \"./WakeScheduler.ts\";\nimport { WorkerAdmissionPort, WorkerAdmissionRequest } from \"./WorkerAdmission.ts\";\n\n// Capture the tracing call site once; each application still creates a fresh Attempt span.\nconst withThreadHeadSpan = Effect.withSpan(\"DurableAgentRuntime.processThreadHead\");\n\n/**\n * Instruction failure/requirement derivation mirroring the engine's `RuntimeBinding` defaults:\n * declaring them as generic DEFAULTS (instead of independent inference sites) keeps a plain\n * string-returning instruction function from widening both parameters to `unknown`.\n */\ntype InstructionResultOf<Instructions, Input> = Instructions extends (input: Input) => infer Result\n ? Result\n : Instructions;\n\ntype InstructionErrorOf<Instructions, Input> =\n InstructionResultOf<Instructions, Input> extends Effect.Effect<\n infer _Success,\n infer Error,\n infer _Requirements\n >\n ? Error\n : never;\n\ntype InstructionRequirementsOf<Instructions, Input> =\n InstructionResultOf<Instructions, Input> extends Effect.Effect<\n infer _Success,\n infer _Error,\n infer Requirements\n >\n ? Requirements\n : never;\n\nconst decodeBatchId = Schema.decodeSync(BatchId);\nconst decodeCanonicalSequence = Schema.decodeSync(CanonicalSequence);\nconst decodeRecordId = Schema.decodeSync(RecordId);\nconst decodeToolCallIdUnknown = Schema.decodeUnknownEffect(ToolCallId);\nconst decodeUsageTotal = Schema.decodeEffect(Schema.Natural);\nconst ZERO_SEQUENCE = decodeCanonicalSequence(0);\nconst MAX_FAILURE_MESSAGE_LENGTH = 16_384;\nconst RECONCILER_AUTHOR = \"reconciler\";\n/** Canonical `ToolApprovalDecided.resolver` for policy-auto decisions made by the delegate. */\nconst APPROVAL_POLICY_RESOLVER = \"approval-policy\";\n/** Ledger `ApprovalDecisionIntent.resolver` for the abort-driven suspension closure. */\nconst RECOVERY_RESOLVER = \"recovery\";\n/** Upper bound of one `drain(\"all\")` joining pass (`claimJoining.maxCount` must be positive). */\nconst MAX_JOIN_DRAIN = 32;\n\n/** Bound a hook-supplied approval reason to the canonical `BoundedText` persistence limits. */\nconst boundedApprovalReason = (reason: string | undefined, fallback: string): string => {\n const value = reason === undefined || reason.length === 0 ? fallback : reason;\n\n return value.length > MAX_FAILURE_MESSAGE_LENGTH\n ? value.slice(0, MAX_FAILURE_MESSAGE_LENGTH)\n : value;\n};\n\nconst boundedText = (value: string): string =>\n value.length > MAX_FAILURE_MESSAGE_LENGTH ? value.slice(0, MAX_FAILURE_MESSAGE_LENGTH) : value;\n\nconst decodePrincipalSync = Schema.decodeSync(Principal);\nconst decodeIdempotencyKeySync = Schema.decodeSync(IdempotencyKey);\nconst decodeChildReservationIdSync = Schema.decodeSync(ChildReservationId);\nconst decodeRecordIdSync = Schema.decodeSync(RecordId);\nconst decodeBatchIdSync = Schema.decodeSync(BatchId);\nconst decodeDefinitionDigests = Schema.decodeUnknownEffect(DefinitionDigests);\n\n/**\n * Deterministic parent-owned child budget reservation identity (spec\n * §12 step 2, D4): one reservation per (parent Run, parent Tool Call) pair,\n * so a replayed establishment converges on the one existing row (SUB-016).\n */\nexport const childReservationIdFor = (runId: RunId, toolCallId: ToolCallId): ChildReservationId =>\n decodeChildReservationIdSync(`subagent-reservation:${runId}:${toolCallId}`);\n\n/**\n * S2 fixes every attached durable child at delegation depth 1 (SUB-029\n * rejects all nested delegation at preflight), so recovery can rebuild the\n * child lineage from the canonical `SubagentRequested` record alone — the\n * record deliberately does not carry a depth field.\n */\nconst CHILD_DELEGATION_DEPTH: DelegationDepth = Schema.decodeSync(DelegationDepth)(1);\n\n/** Canonical `AbortRequested.author` of every propagated parent-abort command (spec §13.1). */\nconst SUBAGENT_ABORT_AUTHOR = \"subagent-parent-abort\";\n\n/** Keep this exact reason, including its historical citation: abort repair replays the same command. */\nconst SUBAGENT_ABORT_REASON =\n \"The parent Submission was aborted; request-abort-and-join propagates the durable abort intent to every attached child (spec/subagents.md 13.1)\";\n\n/**\n * The deterministic zero-consumed accounting decision frozen for a\n * provably-childless orphaned reservation (spec §13/§14: \"releases the\n * reservation exactly once\"). Constant so every repair pass freezes the SAME\n * decision — an identical `beginChildBudgetRelease` replay is a no-op.\n */\nconst ORPHAN_ZERO_CONSUMED_ACCOUNTING = Schema.decodeSync(PersistedJson)({\n basis: \"orphan-zero-consumed\",\n});\n\n/** The four parent-log/child-log subagent records of one Run, indexed per Tool Call. */\ninterface SubagentCallRecords {\n readonly requested: Map<ToolCallId, SubagentRequested>;\n readonly started: Map<ToolCallId, SubagentStarted>;\n readonly joined: Map<ToolCallId, SubagentJoined>;\n /** Declared Tool name per application call (delegation joins reuse it for `ToolCallSettled`). */\n readonly declaredNames: Map<ToolCallId, string>;\n}\n\n/** Pure fold of one Run's canonical subagent lifecycle records (plan §1.2). */\nconst subagentRecordsOf = (\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n runId: RunId,\n): SubagentCallRecords => {\n const requested = new Map<ToolCallId, SubagentRequested>();\n const started = new Map<ToolCallId, SubagentStarted>();\n const joined = new Map<ToolCallId, SubagentJoined>();\n const declaredNames = new Map<ToolCallId, string>();\n\n for (const envelope of records) {\n const payload = envelope.record.payload;\n\n switch (payload._tag) {\n case \"SubagentRequested\": {\n if (payload.runId === runId) requested.set(payload.toolCallId, payload);\n break;\n }\n case \"SubagentStarted\": {\n if (payload.runId === runId) started.set(payload.toolCallId, payload);\n break;\n }\n case \"SubagentJoined\": {\n if (payload.runId === runId) joined.set(payload.toolCallId, payload);\n break;\n }\n case \"ModelResponseRecorded\": {\n if (payload.runId === runId)\n for (const operation of payload.toolOperations)\n declaredNames.set(operation.toolCallId, operation.toolName);\n break;\n }\n default: {\n break;\n }\n }\n }\n\n return { requested, started, joined, declaredNames };\n};\n\n/** Joined reports are canonical snapshots, keyed by child Run so replay cannot double charge. */\nconst childUsageReportsOf = (state: SubagentCallRecords): ReadonlyArray<ChildRunUsage> =>\n [...state.started.entries()].map(([toolCallId, child]) => {\n const joined = state.joined.get(toolCallId);\n\n return ChildRunUsage.make({\n runId: child.childRunId,\n report: RunUsageReport.make({\n usage: joined?.usage ?? unknownRunTotals(),\n delegatedUsage: joined?.delegatedUsage ?? unknownRunTotals(),\n }),\n });\n });\n\nexport { threadCreatedBatchId, threadCreatedRecordId } from \"./internal/thread-initialization.ts\";\n\n/** Deterministic batch identity of one executed recovery decision's audit append (DUR-013). */\nexport const recoveryRepairBatchId = (submissionId: SubmissionId, decisionTag: string): BatchId =>\n decodeBatchId(`repair:${submissionId}:${decisionTag}`);\n\nconst isOriginalInputRecord = (\n record: RecordEnvelope,\n): record is RecordEnvelope & { readonly payload: UserInputRecorded } =>\n record.payload._tag === \"UserInputRecorded\";\n\n/** Deterministic record identity of one executed recovery decision's `RepairAnnotated` record. */\nexport const recoveryRepairRecordId = (submissionId: SubmissionId, decisionTag: string): RecordId =>\n decodeRecordId(`repair:${submissionId}:${decisionTag}`);\n\n/**\n * The durable identity returned once ledger admission, Thread materialization, and\n * readiness are committed (DUR-001). It is an identifier for observation and reattachment, not\n * an authorization capability.\n */\nexport { Receipt } from \"../core/Receipt.ts\";\n\n// Foreign names and tags may contain payloads. Retain only these static classifications.\nconst RecoveryCauseTag = Schema.Literals([\n \"AdmissionPolicyError\",\n \"DigestError\",\n \"LedgerError\",\n \"OwnershipLost\",\n \"SettlementConflict\",\n \"ThreadStoreError\",\n \"ThreadNotMaterialized\",\n \"AppendConflict\",\n \"RunJournalError\",\n \"WorkDiscoveryUnavailable\",\n \"DurableRuntimeFailpointError\",\n \"SchemaError\",\n \"Error\",\n \"TypeError\",\n \"RangeError\",\n \"ReferenceError\",\n \"SyntaxError\",\n \"URIError\",\n \"EvalError\",\n \"AggregateError\",\n \"ForeignError\",\n \"NonErrorCause\",\n]);\n\nconst isRecoveryCauseTag = Schema.is(RecoveryCauseTag);\n\n/** Recovery could not establish execution authority. This is never a Settlement or replay grant. */\nexport class RecoveryFailure extends Schema.Class<RecoveryFailure>(\n \"@effect-agent/thread/RecoveryFailure\",\n)({\n phase: Schema.Literals([\"history\", \"recovery\"]),\n reason: Schema.Literals([\"failure\", \"defect\", \"timeout\"]),\n errorTag: Schema.String.check(Schema.isMaxLength(128)),\n /** Static operation names only; error messages and payloads are deliberately excluded. */\n operation: Schema.String.check(Schema.isMaxLength(256)),\n /** Ordered, bounded classifications. Foreign labels, operations and prose stay private. */\n causes: Schema.Array(\n Schema.Struct({\n errorTag: RecoveryCauseTag,\n }),\n ).check(Schema.isMaxLength(16)),\n causesTruncated: Schema.optionalKey(Schema.Literal(true)),\n diagnostic: Schema.optionalKey(ThreadStoreDiagnostic),\n}) {}\n\nconst decodeRecoveryCause = Schema.decodeUnknownOption(\n Schema.Struct({\n diagnostic: Schema.optionalKey(Schema.Unknown),\n cause: Schema.optionalKey(Schema.Unknown),\n }),\n);\n\n/** Reuse the bounded foreign-error capture, then retain only content-free causal metadata. */\nconst recoveryFailureDetails = (cause: Cause.Cause<DurableWorkerFailure>) => {\n const pending = [FailureDiagnostic.capture(cause)];\n const causes: Array<RecoveryFailure[\"causes\"][number]> = [];\n let truncated = false;\n\n while (pending.length > 0 && causes.length < 16) {\n const node = pending.shift();\n\n if (node === undefined) break;\n switch (node._tag) {\n case \"Cause\":\n pending.unshift(\n ...node.reasons.flatMap((reason) =>\n reason._tag === \"Fail\" ? [reason.error] : reason._tag === \"Die\" ? [reason.defect] : [],\n ),\n );\n truncated ||= node.truncated === true;\n break;\n case \"Error\": {\n const tag = node.errorTag ?? node.name;\n\n causes.push({\n errorTag: isRecoveryCauseTag(tag) ? tag : \"ForeignError\",\n });\n pending.unshift(\n ...(node.cause === undefined ? [] : [node.cause]),\n ...(node.reason === undefined ? [] : [node.reason]),\n ...(node.errors ?? []),\n );\n truncated ||= node.truncated === true;\n break;\n }\n case \"Omitted\":\n truncated = true;\n break;\n case \"Value\":\n causes.push({ errorTag: \"NonErrorCause\" });\n break;\n }\n }\n\n // Retain only adapter-created diagnostics, never reify a foreign structural lookalike.\n // Foreign wrappers retain only approved classifications above, never their operation text.\n let nested: unknown = Option.getOrUndefined(Cause.findErrorOption(cause));\n let diagnostic: ThreadStoreDiagnostic | undefined;\n\n for (let depth = 0; depth < 16 && nested !== undefined; depth++) {\n const decoded = decodeRecoveryCause(nested);\n\n if (Option.isNone(decoded)) break;\n if (decoded.value.diagnostic instanceof ThreadStoreDiagnostic) {\n diagnostic = decoded.value.diagnostic;\n break;\n }\n nested = decoded.value.cause;\n }\n\n return {\n causes,\n ...(truncated || pending.length > 0 ? { causesTruncated: true as const } : {}),\n ...(diagnostic === undefined ? {} : { diagnostic }),\n };\n};\n\n/** @internal One bounded failure boundary for execution history and host recovery control reads. */\nexport const isolateRecovery = Effect.fnUntraced(function* <A, E extends DurableWorkerFailure, R>(\n body: Effect.Effect<A, E, R>,\n options: {\n readonly timeout: Duration.Duration;\n readonly phase: () => RecoveryFailure[\"phase\"];\n readonly operation?: string;\n },\n): Effect.fn.Return<Result.Result<A, RecoveryFailure>, E, Exclude<R, Scope.Scope>> {\n const outcome = yield* body.pipe(\n Effect.scoped,\n Effect.timeoutOption(options.timeout),\n Effect.exit,\n );\n\n if (Exit.isSuccess(outcome) && Option.isSome(outcome.value))\n return Result.succeed(outcome.value.value);\n if (\n Exit.isFailure(outcome) &&\n (Cause.hasInterrupts(outcome.cause) ||\n outcome.cause.reasons.some(\n (reason) => reason._tag === \"Fail\" && reason.error._tag === \"DurableRuntimeFailpointError\",\n ))\n )\n return yield* Effect.failCause(outcome.cause);\n\n const error = Exit.isFailure(outcome) ? Cause.findErrorOption(outcome.cause) : Option.none<E>();\n const phase = options.phase();\n\n return Result.fail(\n RecoveryFailure.make({\n phase,\n reason: Exit.isSuccess(outcome)\n ? \"timeout\"\n : Cause.hasDies(outcome.cause)\n ? \"defect\"\n : \"failure\",\n errorTag: Option.isSome(error)\n ? error.value._tag\n : Exit.isSuccess(outcome)\n ? \"RecoveryTimeout\"\n : \"Defect\",\n operation:\n Option.isSome(error) && \"operation\" in error.value\n ? error.value.operation.slice(0, 256)\n : (options.operation ??\n (phase === \"history\" ? \"read recovery history\" : \"recover submission\")),\n ...(Exit.isFailure(outcome) ? recoveryFailureDetails(outcome.cause) : { causes: [] }),\n }),\n );\n});\n\n/** One failed Thread remains pending; the host must not claim it before recovery succeeds. */\nexport class RecoveryBlocked extends Schema.TaggedError<RecoveryBlocked>()(\"RecoveryBlocked\", {\n threadId: ThreadId,\n failure: RecoveryFailure,\n}) {}\n\n/** One executed (or deliberately deferred) recovery decision (durability §14, DUR-013). */\nexport class RecoveryReport extends Schema.Class<RecoveryReport>(\n \"@effect-agent/thread/RecoveryReport\",\n)({\n submissionId: SubmissionId,\n threadId: ThreadId,\n decision: RecoveryDecision,\n /**\n * `repaired` = executed; `deferred` = a claiming worker must finish it; `none` = settled;\n * `unknown` = this Submission is parked on an Unknown Outcome awaiting the authorized\n * DUR-017 resolution path — the settlement obligation stays visible while no worker permit\n * is consumed (durability §16).\n */\n disposition: Schema.Literals([\"repaired\", \"deferred\", \"none\", \"unknown\"]),\n}) {}\n\n/** A selected owner was checked against its original evidence; this grants no execution lease. */\nexport class WorkRecoveryReport extends Schema.Class<WorkRecoveryReport>(\"WorkRecoveryReport\")({\n threadId: ThreadId,\n workId: Schema.NonEmptyString.check(Schema.isMaxLength(4096)),\n disposition: Schema.Literals([\"repaired\", \"deferred\", \"none\", \"unknown\"]),\n submission: Schema.optionalKey(RecoveryReport),\n /**\n * An owning transport transition still needs a timed check; external Unknown waits omit it.\n * Derived fractional durations round up to the next millisecond.\n */\n retryAtMillis: Schema.optionalKey(Schema.Natural),\n}) {}\n\nexport const WorkRecoveryRequest = Schema.Struct({ threadId: ThreadId, work: ThreadWorkEntry });\nexport type WorkRecoveryRequest = typeof WorkRecoveryRequest.Type;\n\n// Global scans must retain one routing identity; scoped scans reuse their native work cursor.\nconst MAX_RECOVERY_CURSOR_CHARS = MAX_THREAD_EXPORT_PAGE_BYTES + 6 * MAX_WORK_CURSOR_CHARS + 1024;\nconst RecoveryCursor = Schema.NonEmptyString.check(Schema.isMaxLength(MAX_RECOVERY_CURSOR_CHARS));\n\nconst RecoverySweepCursor = Schema.Struct({\n version: Schema.Literal(2),\n threadId: Schema.optionalKey(ThreadId),\n workCursor: Schema.optionalKey(\n Schema.NonEmptyString.check(Schema.isMaxLength(MAX_WORK_CURSOR_CHARS)),\n ),\n afterThreadId: Schema.optionalKey(ThreadId),\n});\n\nconst encodeRecoveryCursor = Schema.encodeSync(Schema.fromJsonString(RecoverySweepCursor));\n\n/** Submission decisions and operational faults have different ownership and settlement semantics. */\nexport class RecoverySweepResult extends Schema.Class<RecoverySweepResult>(\"RecoverySweepResult\")({\n reports: Schema.Array(RecoveryReport),\n /** Exactly one fault per failed Thread, regardless of its queued Submission count. */\n blocked: Schema.Array(RecoveryBlocked),\n workReports: Schema.optionalKey(\n Schema.Array(WorkRecoveryReport).check(Schema.isMaxLength(MAX_RECOVERY_WORK_ITEMS)),\n ),\n /**\n * Resume with the same Thread selection; new work behind the cursor appears on the next scan.\n * Scoped cursors are compact and Thread-bound. Global cursors retain one routing identity,\n * so their size can grow with a supported Thread identity.\n */\n cursor: Schema.optionalKey(RecoveryCursor),\n}) {}\n\n/** Recover one bounded page of native work, optionally confined to one Thread. */\nexport interface RecoverySweepOptions {\n readonly threadId?: ThreadId;\n /** Leave this incarnation's untouched root admissions to their first actual claim.\n * A verified sole admission needs no recovery inventory; other owners retain bounded\n * discovery and deferred reports. Neither case supplies ownership or a recovery decision:\n * the Attempt still verifies current controls, journal, fencing and historyDigest. */\n readonly deferUnclaimedAdmissions?: boolean;\n /** Continue the previous pass with the same Thread selection until its result has no cursor. */\n readonly cursor?: string;\n}\n\n/** Per-submission options accepted by `DurableAgentRuntime.submit` (D2). */\nexport interface DurableSubmitOptions {\n readonly threadId: ThreadId;\n readonly principal: Principal;\n readonly idempotencyKey: IdempotencyKey;\n readonly admissionGroup?: string;\n readonly admissionFence?: AdmissionFence;\n /** Host-prepared worker input; immutable origin and per-input projection parameters. */\n readonly workerAdmission?: WorkerAdmission;\n /** Peer provenance or a worker completion, verified against frozen canonical delivery proof. */\n readonly messageAdmission?: InputMessage;\n /** Application-computed digests of the Agent/Model/Toolkit definitions (see `digestDefinitions`). */\n readonly definitions: DefinitionDigests;\n}\n\nexport interface DurableObserveOptions {\n /** Resume the observation after an adapter-owned offset previously returned by `observe`. */\n readonly after?: CanonicalRecordEnvelope[\"offset\"] | undefined;\n}\n\n/** The structural slice of an Agent Binding that `submit` needs. */\nexport interface DurableSubmitAgent<InputSchema extends Schema.Top> {\n readonly definition: {\n readonly id: AgentId;\n readonly input: InputSchema;\n };\n}\n\nexport type DurableSubmitFailure =\n | AgentInputError\n | DigestError\n | AdmissionConflict\n | AdmissionPolicyError\n | LedgerError\n | OwnershipLost\n | ThreadStoreError\n | ThreadNotMaterialized\n | AppendConflict\n | DurableRuntimeFailpointError;\n\n/** Attempt resources could not be retained before deliberate approval suspension. */\nexport class ApprovalSuspensionError extends Schema.TaggedError<ApprovalSuspensionError>()(\n \"ApprovalSuspensionError\",\n { cause: Schema.Defect() },\n) {}\n\nexport type DurableWorkerFailure =\n | AdmissionPolicyError\n | ApprovalSuspensionError\n | DigestError\n | LedgerError\n | OwnershipLost\n | SettlementConflict\n | ThreadStoreError\n | ThreadNotMaterialized\n | AppendConflict\n | RunJournalError\n | WorkDiscoveryUnavailable\n | RecoveryBlocked\n | DurableRuntimeFailpointError;\n\nexport type DurableAwaitFailure = LedgerError | SettlementConflict | OperationDenied;\n\n/** Typed failures from the public canonical progress boundary. */\nexport type DurableProgressFailure = ThreadStoreError | ThreadNotMaterialized | OperationDenied;\n\nexport type DurableAbortFailure =\n | OperationDenied\n | LedgerError\n | SettlementConflict\n | JoinedToHost\n | DurableRuntimeFailpointError;\n\n/**\n * Failure family of `resolveUnknown` (DUR-017, abort-shaped): the durable intent may conflict\n * with a divergent prior resolution, the Submission may already be settled, an `AbortSubmission`\n * resolution routes through the abort path (whose `JoinedToHost` conflict stays visible), and the\n * failpoint after the intent write is armable like every other durable mutation.\n */\nexport type DurableResolveFailure =\n | LedgerError\n | SettlementConflict\n | UnknownResolutionConflict\n | JoinedToHost\n | DurableRuntimeFailpointError;\n\n/**\n * Failure family of `resolveApproval` (plan §2.6, abort-shaped): the durable intent may conflict\n * with a divergent prior decision, and the Submission may already be settled. The ledger adapter\n * owns the crash boundaries of the intent write (`ledger:approval-decision:{before,after}`).\n */\nexport type DurableApprovalFailure = LedgerError | SettlementConflict | ApprovalConflict;\n\n/**\n * Failure family of the read-only `explain`/`explainThread` operations (P7 WP1): pure\n * observation over the two ports plus the evidence assembler's typed failures, and the\n * fail-closed `OperationDenied` when a host-supplied authorizer refuses.\n */\nexport type DurableExplainFailure =\n | LedgerError\n | ThreadStoreError\n | RunJournalError\n | OperationDenied;\n\n/**\n * Failure family of the read-only `verify` operation (P7 WP1). `ThreadNotMaterialized`\n * stays visible: verifying a Thread that does not exist is a caller error, not an empty\n * report.\n */\nexport type DurableVerifyFailure =\n | LedgerError\n | ThreadStoreError\n | ThreadNotMaterialized\n | OperationDenied;\n\n/**\n * Failure family of `retry` (P7 WP1): the scoped recovery execution carries the worker failure\n * family, refusals are typed (`RetryRefused` — settled work and lanes owned by the\n * resolveUnknown/resolveApproval paths), and denial is fail-closed.\n */\nexport type DurableRetryFailure = DurableWorkerFailure | RetryRefused | OperationDenied;\n\n/** Failure family of `scanObligations` (P7 WP1): ledger scan + canonical unknown-age reads. */\nexport type DurableObligationFailure = LedgerError | ThreadStoreError | OperationDenied;\n\n/**\n * Optional policy-auto approval delegate consulted by the durable approval hook (plan §2.6 step\n * 2) AFTER the recorded-decision lookup misses. An immediate `approved`/`denied` answer becomes\n * canonical (`ToolApprovalRequested` + `ToolApprovalDecided`, one atomic batch) before it is\n * honored; `unresolved` falls through to the durable suspension path. The default (`undefined`)\n * suspends every undecided approval durably until `resolveApproval` decides it — the fail-closed\n * posture. Adapt the P2 `ApprovalResolver` capability stack through\n * `@effect-agent/capabilities`' `toDurableRunApprovalHook`.\n */\nexport const DurableApprovalResolver: Context.Reference<RunApprovalHook<never, never> | undefined> =\n Context.Reference<RunApprovalHook<never, never> | undefined>(\n \"@effect-agent/thread/DurableApprovalResolver\",\n { defaultValue: () => undefined },\n );\n\n/**\n * Optional attempt-local retention before an unresolved approval releases ownership. Supply\n * this from the Attempt's Layer, capturing its live resources. The canonical approval request\n * already exists; local ownership and abort observation remain active while this operation runs.\n * Return only after retention is confirmed. Failure leaves the accepted work owed and preserves\n * its cause; interruption keeps normal resource cleanup. No approval-gated Tool runs here.\n *\n * A decision racing with successful retention resumes the pending batch in a fresh Attempt,\n * after the old services and claim finalize. The default leaves existing suspension unchanged.\n */\nexport const DurableApprovalSuspension: Context.Reference<\n Effect.Effect<void, ApprovalSuspensionError> | undefined\n> = Context.Reference<Effect.Effect<void, ApprovalSuspensionError> | undefined>(\n \"@effect-agent/thread/DurableApprovalSuspension\",\n { defaultValue: () => undefined },\n);\n\n/**\n * Services a durable worker needs beyond the runtime's own Layer: the Agent Binding's inferred\n * requirements minus its supplied identity and history services. The coordinator provides\n * deterministic Run/Turn identity and journal-owned history because its coordinator owns all\n * durable reads and commits across Attempts.\n */\nexport type DurableWorkerRequirements<\n AgentValue extends Agent.Any,\n InstructionRequirements = never,\n> =\n | Exclude<\n AgentRuntimeRequirements<AgentValue, never, InstructionRequirements>,\n ThreadHistory | RunContextPreparation\n >\n | AgentCompletionProjectionRequirements<AgentValue>;\n\nexport interface DurableRuntimeConfigOptions {\n /**\n * Deployment identity and the conservative operation version for direct execution without\n * a registered binding. Reuse asserts unchanged handler, Step, and idempotency semantics.\n */\n readonly deploymentId: DeploymentId;\n readonly producerId: ProducerId;\n /** `awaitSettlement` ledger re-check cadence when no wake arrives (default 500ms). */\n readonly settlementPollInterval?: Duration.Duration | undefined;\n /** Active-Run abort-intent poll cadence (default 500ms). */\n readonly abortPollInterval?: Duration.Duration | undefined;\n /** Cooperative bound for one Thread's recovery, including child reads (default 30s). */\n readonly recoveryTimeout?: Duration.Duration | undefined;\n /** Deployment-owned model pricing authority, captured for every recoverable Run. */\n readonly estimateCostMicrousd?: RunCostEstimator | undefined;\n}\n\n/** Deployment-scoped identity and liveness cadences for the durable coordinator. */\nexport class DurableRuntimeConfig extends Context.Service<\n DurableRuntimeConfig,\n {\n readonly deploymentId: DeploymentId;\n readonly producerId: ProducerId;\n readonly settlementPollInterval: Duration.Duration;\n readonly abortPollInterval: Duration.Duration;\n readonly recoveryTimeout: Duration.Duration;\n readonly estimateCostMicrousd?: RunCostEstimator | undefined;\n }\n>()(\"@effect-agent/thread/DurableRuntimeConfig\") {\n static make(options: DurableRuntimeConfigOptions): (typeof DurableRuntimeConfig)[\"Service\"] {\n return {\n deploymentId: options.deploymentId,\n producerId: options.producerId,\n settlementPollInterval: options.settlementPollInterval ?? Duration.millis(500),\n abortPollInterval: options.abortPollInterval ?? Duration.millis(500),\n recoveryTimeout: options.recoveryTimeout ?? Duration.seconds(30),\n ...(options.estimateCostMicrousd === undefined\n ? {}\n : { estimateCostMicrousd: options.estimateCostMicrousd }),\n };\n }\n\n static layer(options: DurableRuntimeConfigOptions): Layer.Layer<DurableRuntimeConfig> {\n return Layer.succeed(DurableRuntimeConfig)(DurableRuntimeConfig.make(options));\n }\n}\n\n/** Terminal outcome an Attempt decided before terminalization (DUR-011). */\ntype AttemptOutcome = { readonly uncommittedModelUsage?: ReadonlyArray<ModelCallUsage> } & (\n | {\n readonly _tag: \"completed\";\n readonly result: PersistedJson;\n /** Schema-encoded application disposition, only for an ordinary completed Run. */\n readonly runDisposition?: PersistedJson;\n /** Set when the Run settled through the final-answer exhaustion resolution (RUN-018). */\n readonly finishReason?: \"budget-exhausted\";\n /** The dimension that bound; set exactly alongside `finishReason` (RUN-011). */\n readonly exhausted?: ExhaustedLimit;\n readonly usageSummary?: RunUsageSummary;\n }\n | {\n readonly _tag: \"failed\";\n readonly result: SettlementFailureDiagnostic;\n /** The typed limit of an `AgentPolicyError` failure; absent otherwise (RUN-011). */\n readonly policyLimit?: PolicyLimit;\n readonly usageSummary?: RunUsageSummary;\n }\n | { readonly _tag: \"aborted\"; readonly usageSummary?: RunUsageSummary }\n);\n\n/**\n * What one `runModel` pass produced: a terminal `AttemptOutcome` for terminalization, a\n * durable approval suspension (plan §2.6) — the unresolved call's canonical request is already\n * appended, NO settlement is owed by this pass, and `runAttempt` transitions the ledger — or a\n * durable `waitingForChild` suspension: every non-waiting\n * sibling result is already committed as a per-call late-settle batch and `runAttempt` executes\n * `ledger.suspend(WaitingForChild)`.\n */\ntype RunPhaseOutcome =\n | AttemptOutcome\n | { readonly _tag: \"yielded\"; readonly nextSubmissionId?: SubmissionId }\n | { readonly _tag: \"suspended\"; readonly toolCallId: ToolCallId }\n | { readonly _tag: \"suspendedChild\"; readonly children: AgentChildPending[\"children\"] };\n\nconst approvalSuspension = (toolCallId: ToolCallId): RunPhaseOutcome => ({\n _tag: \"suspended\",\n toolCallId,\n});\n\nconst childSuspension = (children: AgentChildPending[\"children\"]): RunPhaseOutcome => ({\n _tag: \"suspendedChild\",\n children,\n});\n\nconst abortedRunPhase = (usageSummary: RunUsageSummary): RunPhaseOutcome => ({\n _tag: \"aborted\",\n usageSummary,\n});\n\n/**\n * Internal marker separating coordinator infrastructure failures (fencing, storage, failpoints —\n * the Attempt aborts cleanly and the accepted work stays owed) from Agent Run failures (typed\n * engine errors — the Submission settles `failed`). Never exported: it exists only so the two\n * failure families cannot be confused inside the run phase.\n */\nclass CoordinatorHalt {\n readonly _tag = \"CoordinatorHalt\";\n constructor(readonly failure: DurableWorkerFailure) {}\n}\n\nconst isCoordinatorHaltCause = (\n cause: Cause.Cause<unknown>,\n): cause is Cause.Cause<CoordinatorHalt> =>\n cause.reasons.every(\n (reason) => reason._tag !== \"Fail\" || reason.error instanceof CoordinatorHalt,\n );\n\nconst PolicyFailure = Schema.TaggedStruct(\"AgentPolicyError\", {\n limit: PolicyLimit,\n});\n\nconst decodePolicyFailure = Schema.decodeUnknownOption(PolicyFailure);\n\nconst decodePolicyFailureSafely = (error: unknown) => {\n try {\n return decodePolicyFailure(error);\n } catch {\n return Option.none();\n }\n};\n\nconst agentApprovalPendingOption = (\n cause: Cause.Cause<unknown>,\n): Option.Option<AgentApprovalPending> => {\n try {\n // Suspension authority is nominal. Schema.is/decode would accept a forged tagged object.\n const first = cause.reasons.find(Cause.isFailReason);\n\n return first !== undefined &&\n first.error instanceof AgentApprovalPending &&\n cause.reasons.every(\n (reason) => reason._tag !== \"Fail\" || reason.error instanceof AgentApprovalPending,\n )\n ? Option.some(first.error)\n : Option.none();\n } catch {\n return Option.none();\n }\n};\n\nconst agentChildPendingOption = (error: unknown): Option.Option<AgentChildPending> => {\n try {\n // Suspension authority is nominal. Schema.is/decode would accept a forged tagged object.\n return error instanceof AgentChildPending ? Option.some(error) : Option.none();\n } catch {\n return Option.none();\n }\n};\n\nconst errorMessageOf = (error: unknown): string => {\n const diagnostic = inspectForeignDiagnostic(error);\n\n return diagnostic.message ?? safeUnknownString(error, \"Unknown failure\");\n};\n\nconst errorTagOf = (error: unknown): string =>\n inspectForeignDiagnostic(error).tag ?? \"UnknownError\";\n\nconst nowUtc: Effect.Effect<DateTime.Utc> = Effect.map(Clock.currentTimeMillis, (millis) =>\n DateTime.toUtc(DateTime.makeUnsafe(millis)),\n);\n\nconst decodePrompt = Schema.decodeUnknownEffect(Prompt.Prompt);\nconst decodePersisted = Schema.decodeUnknownEffect(PersistedJson);\nconst encodeCompactionMessageJson = Schema.encodeEffect(Schema.fromJsonString(Prompt.Message));\nconst decodeCompactionMessageJson = Schema.decodeEffect(Schema.fromJsonString(Schema.Json));\n\n/** One application Tool Call declared inside a canonical `ModelResponseRecorded`'s messages. */\ninterface DeclaredApplicationCall {\n readonly id: string;\n readonly name: string;\n /** Encoded JSON parameters exactly as canonical history carries them. */\n readonly params: unknown;\n readonly providerExecuted?: boolean;\n}\n\ninterface DeclaredToolCalls {\n readonly application: Array<DeclaredApplicationCall>;\n readonly all: Array<DeclaredApplicationCall>;\n readonly providerResults: Array<Prompt.ToolResultPart>;\n}\n\n/**\n * Pure inspection of every Tool Call declared in one canonical response. Provider-executed calls\n * retain their terminal results, while only application calls enter the durable declaration/settlement\n * protocol and completion singleton invariant.\n */\nconst declaredToolCalls = (\n messages: PersistedJson,\n): Effect.Effect<DeclaredToolCalls, RunJournalError> =>\n Effect.suspend(() =>\n decodePrompt(messages).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: \"ModelResponseRecorded messages are not Schema-encoded Prompt messages\",\n cause,\n }),\n ),\n Effect.flatMap((prompt) => {\n const application: Array<DeclaredApplicationCall> = [];\n const all: Array<DeclaredApplicationCall> = [];\n const providerResults: Array<Prompt.ToolResultPart> = [];\n\n for (const message of prompt.content) {\n if (message.role !== \"assistant\") continue;\n for (const part of message.content) {\n if (part.type === \"tool-result\" && part.providerExecuted) providerResults.push(part);\n if (part.type !== \"tool-call\") continue;\n all.push({\n id: part.id,\n name: part.name,\n params: part.params,\n providerExecuted: part.providerExecuted,\n });\n if (!part.providerExecuted) {\n application.push({ id: part.id, name: part.name, params: part.params });\n }\n }\n }\n\n const providerCalls = new Map(\n all.filter((call) => call.providerExecuted).map((call) => [call.id, call]),\n );\n\n const resultIds = new Set<string>();\n\n for (const result of providerResults) {\n if (providerCalls.get(result.id)?.name !== result.name || resultIds.has(result.id)) {\n return Effect.fail(\n RunJournalError.make({\n message: `Invalid canonical provider result ${result.id}`,\n }),\n );\n }\n resultIds.add(result.id);\n }\n for (const id of providerCalls.keys()) {\n if (!resultIds.has(id)) {\n return Effect.fail(\n RunJournalError.make({\n message: `Turn lacks canonical provider result for ${id}`,\n }),\n );\n }\n }\n\n return Effect.succeed({ application, all, providerResults });\n }),\n ),\n );\n\n/**\n * The declared-but-unsettled Tool batch of one Run's last committed Turn (§2.4 batch resume):\n * every declared call in canonical encoded form plus the recorded results of the calls that\n * already settled (results batch never committed, or per-call late settles from the resolution\n * path). `undefined` when the Run's journal ends at a complete Turn boundary.\n */\ninterface PendingToolBatch {\n readonly toolResultMaxBytes: number;\n readonly toolOperations: ReadonlyArray<ToolOperation>;\n readonly toolParameterRejections?: ReadonlyArray<ToolParameterRejection> | undefined;\n readonly toolExposure?: Snapshot | undefined;\n readonly turn: number;\n readonly turnId: TurnId;\n readonly calls: ReadonlyArray<DeclaredApplicationCall>;\n readonly settled: ReadonlyArray<{\n readonly id: string;\n readonly result: PersistedJson;\n readonly isFailure: boolean;\n readonly budgetRejected?: true;\n readonly toolSelection?: Selection | undefined;\n }>;\n readonly declaredIds: ReadonlySet<string>;\n readonly responseRecordId: RecordId;\n /** The pending `ModelResponseRecorded.messages`: its pre-assistant slice is the resume's leading messages. */\n readonly messages: PersistedJson;\n}\n\ntype AttemptAppendContext = RunWriter;\n\ninterface RunTiming {\n readonly startedAt: DateTime.Utc;\n readonly deadline: DateTime.Utc;\n}\n\n/** Deferred start/context publication belongs to one owning Attempt. */\nclass CurrentRunStart extends Context.Service<\n CurrentRunStart,\n {\n readonly commit: (\n context?: RecordEnvelope,\n ) => Effect.Effect<\n void,\n Effect.Error<ReturnType<RunWriter[\"append\"]>> | DurableRuntimeFailpointError\n >;\n }\n>()(\"@effect-agent/thread/CurrentRunStart\") {}\n\ntype PublishSettlement = (\n batch: CanonicalBatch,\n) => Effect.Effect<SettlementPublicationResult, SettlementPublicationFailure>;\n\n/** What the resuming worker knows about the ownership period it superseded (durability §9). */\ninterface AttemptLineage {\n readonly attemptId: AttemptId;\n /** The fencing generation preceding this claim (0 = no prior generation). */\n /** The canonical `input:{sid}` record existed before this Attempt started. */\n readonly inputWasRecorded: boolean;\n}\n\n/** Review of one Submission's open (declared-without-outcome) ordinary Tool Calls (DUR-009). */\ninterface OpenCallReview {\n /** No proof either way: these calls must become Unknown Outcomes (never auto-replayed). */\n readonly uncertain: Array<OpenToolCallEvidence>;\n /** Reconciliation or current execution support is unproven: defer without marking Unknown. */\n readonly unproven: Array<OpenToolCallEvidence>;\n /** Proven safe to re-execute (never-started / safe-retry / declared idempotent contract). */\n readonly retryable: Array<OpenToolCallEvidence>;\n /** Calls closed canonically with a recovered result (no handler execution). */\n readonly recovered: number;\n}\n\ninterface InitialJournalSource {\n records: ReadonlyArray<JournalRecordEnvelope> | undefined;\n readonly original: InitialContextInput;\n readonly suffix: ReadonlyArray<CanonicalRecordEnvelope>;\n cacheable: boolean;\n readonly prefix?: CachedPromptHistory;\n history?: PromptHistory;\n}\n\nconst make = Effect.fnUntraced(function* (bindings: ReadonlyArray<ResolvedBinding>) {\n const registeredBindings = [...bindings];\n const bindingSelection = yield* CurrentBindingSelection;\n const workerAdmissionPort = yield* WorkerAdmissionPort;\n const ledger = yield* SubmissionLedger;\n const submissionScheduling = yield* SubmissionScheduling;\n const store = yield* ThreadStore;\n const reader = ThreadReader.fromStore(store);\n const promptHistory = yield* makePromptHistoryCache();\n\n // One incarnation remembers only newly accepted root input, never a recovery decision.\n // A claim consumes the hint before binding/application code can run. Cold owners,\n // replays, linked inputs, and any changed ledger state retain the recovery path.\n const unclaimedAdmissions = new Map<SubmissionId, ThreadId>();\n\n const workDiscovery = yield* ThreadWorkDiscovery.pipe(\n Effect.provide(ThreadWorkDiscovery.layer),\n Effect.provideService(ThreadStore, store),\n );\n\n const runStorage = yield* RunStorage;\n const storageOwner = yield* StorageOwner;\n const deliveries = yield* Effect.serviceOption(MessageDeliveryStore);\n\n // Disposable: canonical tail and owner identify the exact projection, never ownership.\n // Retain only the most recent view; authoritative active checkpoints govern cold recovery.\n let projectedJournal:\n | {\n readonly threadId: ThreadId;\n readonly through: CanonicalSequence;\n readonly runId: RunId;\n readonly contextRecordId: string | undefined;\n readonly contextEvidence: ReadonlyArray<JournalRecordEnvelope>;\n readonly journal: RunJournalProjection;\n readonly boundaries: ReadonlyArray<JournalBoundary>;\n }\n | undefined;\n\n let resolvedContext:\n | {\n readonly threadId: ThreadId;\n readonly recordId: RecordId;\n readonly value: RunJournalContext;\n }\n | undefined;\n\n const wake = yield* WakeScheduler;\n\n const withProcessing: NonNullable<WakeScheduler[\"Service\"][\"withProcessing\"]> =\n wake.withProcessing ?? ((_threadId, body) => body);\n\n const failpoint = yield* DurableRuntimeFailpoint;\n const config = yield* DurableRuntimeConfig;\n const crypto = yield* Crypto.Crypto;\n const reconciler = yield* ToolReconciler;\n const approvalResolver = yield* DurableApprovalResolver;\n\n // Capture independent host choices at acquisition so worker callers cannot replace them.\n const runContextPreparation = yield* Effect.serviceOption(RunContextPreparation).pipe(\n Effect.map(Option.getOrElse(() => RunContextPreparation.of({}))),\n );\n\n const runToolAuthorization = yield* RunToolAuthorization;\n\n const runToolVisibility = yield* RunToolVisibility;\n\n const runToolScheduling = yield* RunToolScheduling;\n\n const compactor = yield* Effect.serviceOption(ContextCompactor).pipe(\n Effect.flatMap(\n Option.match({\n onSome: Effect.succeed,\n onNone: () => Effect.provide(ContextCompactor, ContextCompactor.layer),\n }),\n ),\n );\n\n // Possession-default authorization reference (P7 WP1): the default allows everything —\n // exactly the pre-P7 service-possession boundary — and a host-supplied non-default Layer is\n // consulted fail-closed by observe, the admin operations, and the two resolution paths.\n const operationAuthorizer = yield* OperationAuthorizer;\n // RUN-036: capture once with the runtime, including explicit absence. A worker caller's ambient\n // observer must never replace this host choice on a fresh or replacement Attempt.\n const toolFailureObserver = yield* CurrentToolFailureObserver;\n\n const runServices = Context.make(CurrentToolFailureObserver, toolFailureObserver).pipe(\n Context.add(RunToolVisibility, runToolVisibility),\n Context.add(RunToolScheduling, runToolScheduling),\n Context.add(ContextCompactor, compactor),\n Context.add(RunContextPreparation, runContextPreparation),\n );\n\n const journalServices = Context.make(ThreadReader, reader).pipe(\n Context.add(Crypto.Crypto, crypto),\n );\n\n const withCrypto = <A, E>(effect: Effect.Effect<A, E, Crypto.Crypto>): Effect.Effect<A, E> =>\n Effect.provideService(effect, Crypto.Crypto, crypto);\n\n // Rebuild the pinned admission and captured suffix using this runtime's host dependencies.\n const readInitialJournal = (\n original: InitialContextInput,\n suffix: ReadonlyArray<CanonicalRecordEnvelope>,\n ) =>\n initialContext(original).pipe(\n Effect.provideContext(journalServices),\n Effect.map((history) => history.concat(suffix)),\n );\n\n const resolutionIntentsFor = (snapshot: RecoverySnapshot) => {\n const intents = new Map<ToolCallId, UnknownResolutionIntent>();\n\n for (const intent of snapshot.unknownResolutions) {\n if (!intents.has(intent.toolCallId) || unknownResolutionKind(intent.resolution) === \"factual\")\n intents.set(intent.toolCallId, intent);\n }\n\n return intents;\n };\n\n const contractsFor = (definition: Agent.AnyDefinition) => {\n const registered = registeredBindings.filter(\n (binding) => binding.agentId === definition.id && Object.is(binding.definition, definition),\n );\n\n const current = registered.length === 1 ? registered[0] : undefined;\n const contracts = current?.digests.replay?.tools;\n\n return contracts === undefined\n ? withCrypto(\n toolReplayContracts(definition, undefined, current?.digests.tools ?? config.deploymentId),\n )\n : Effect.succeed(contracts);\n };\n\n const resolveCurrentBinding = (submission: SubmissionSnapshot) =>\n resolveWorkerBinding(registeredBindings, submission).pipe(\n Effect.provideService(CurrentBindingSelection, bindingSelection),\n );\n\n const currentOperationsFor = Effect.fnUntraced(function* (submission: SubmissionSnapshot) {\n const binding = yield* resolveCurrentBinding(submission).pipe(\n Effect.catchTag(\"BindingUnavailable\", () => Effect.succeed(undefined)),\n );\n\n return binding === undefined\n ? undefined\n : {\n definition: binding.definition,\n contracts: yield* contractsFor(binding.definition),\n };\n });\n\n const operationsFor = (records: ReadonlyArray<CanonicalRecordEnvelope>, runId: RunId) => {\n const operations = new Map<string, ToolOperation>();\n\n for (const {\n record: { payload },\n } of records) {\n if (payload._tag !== \"ModelResponseRecorded\" || payload.runId !== runId) continue;\n for (const operation of payload.toolOperations)\n operations.set(operation.toolCallId, operation);\n }\n\n return operations;\n };\n\n const supportsOperation = (\n call: OpenToolCallEvidence,\n operation: ToolOperation | undefined,\n current:\n | {\n readonly definition: Agent.AnyDefinition;\n readonly contracts: Readonly<Record<string, Digest>>;\n }\n | undefined,\n ): boolean => {\n const tool = current?.definition.toolkit.tools[call.toolName];\n\n return (\n tool !== undefined &&\n operation !== undefined &&\n current?.contracts[call.toolName] === operation.replay &&\n operation.toolName === call.toolName &&\n operation.executionClass === getToolExecutionClass(tool) &&\n operation.executionKind === getToolExecutionKind(tool.annotations)\n );\n };\n\n const hit = (\n location: DurableRuntimeFailpointLocation,\n ): Effect.Effect<void, DurableRuntimeFailpointError> => failpoint.hit(location);\n\n const makeEnvelope = (\n recordId: RecordId,\n payload: CanonicalRecordPayload,\n ): Effect.Effect<RecordEnvelope> =>\n Effect.map(nowUtc, (createdAt) =>\n RecordEnvelope.make({\n recordId,\n family: \"thread\",\n schemaVersion: 1,\n createdAt,\n deploymentId: config.deploymentId,\n payload,\n }),\n );\n\n const materializeSettlement = (\n settlement: Settlement,\n record: RecordEnvelope | undefined,\n ): Settlement => {\n const common = {\n submissionId: settlement.submissionId,\n settlementId: settlement.settlementId,\n receiptId: settlement.receiptId,\n outcome: settlement.outcome,\n ...(settlement.failure === undefined ? {} : { failure: settlement.failure }),\n settledAt: settlement.settledAt,\n };\n\n const payload = record?.payload;\n\n if (\n payload === undefined ||\n payload._tag !== \"SubmissionSettled\" ||\n payload.submissionId !== settlement.submissionId ||\n payload.settlementId !== settlement.settlementId ||\n payload.receiptId !== settlement.receiptId ||\n payload.outcome !== settlement.outcome\n ) {\n return Settlement.make(common);\n }\n\n const canonical = {\n ...common,\n ...(payload.usageSummary === undefined ? {} : { usageSummary: payload.usageSummary }),\n };\n\n if (settlement.outcome !== \"completed\" || payload.runDisposition === undefined) {\n return Settlement.make(canonical);\n }\n\n return Settlement.make({\n ...canonical,\n runDisposition: payload.runDisposition,\n });\n };\n\n /** Canonical owner fields and exact admission identities define the control view. */\n const controlRecords = (submissionIds: ReadonlyArray<SubmissionId>) => {\n const runIds = new Set(submissionIds.map(runIdForSubmission));\n\n const recordIds = new Set(\n submissionIds.flatMap((id) => [\n submissionInputRecordId(id),\n submissionAbortRecordId(id),\n submissionSettlementRecordId(id),\n runStartedRecordId(runIdForSubmission(id)),\n runCompletedRecordId(runIdForSubmission(id)),\n ]),\n );\n\n return ({ record }: CanonicalRecordEnvelope): boolean =>\n recordIds.has(record.recordId) ||\n record.payload._tag === \"SubagentLineageRecorded\" ||\n record.payload._tag === \"WorkerOriginRecorded\" ||\n canonicalRunIds(record).some((runId) => runIds.has(runId));\n };\n\n const selectedRange = (\n threadId: ThreadId,\n submissionIds: ReadonlyArray<SubmissionId>,\n through: CanonicalSequence,\n after: CanonicalSequence = ZERO_SEQUENCE,\n ) =>\n Effect.forEach(submissionIds, (submissionId) =>\n Stream.runCollect(runEvidence(threadId, submissionId, through, after)).pipe(\n Effect.provideService(ThreadReader, reader),\n ),\n ).pipe(\n Effect.map((groups) =>\n [...new Map(groups.flat().map((entry) => [entry.sequence, entry])).values()].sort(\n (left, right) => left.sequence - right.sequence,\n ),\n ),\n );\n\n /**\n * A continuation locates immutable semantic evidence, independently of Thread age or a\n * disposable checkpoint. Missing locators and broken references fail before any mutation.\n */\n const recoveryView = Effect.fnUntraced(function* (\n threadId: ThreadId,\n throughSequence: CanonicalSequence,\n submissionIds: ReadonlyArray<SubmissionId>,\n journalOwner?: RunId,\n retained?: ReadonlyArray<CanonicalRecordEnvelope>,\n ) {\n const identity =\n retained === undefined\n ? yield* reader.readIdentity(ThreadIdentityRequest.make({ threadId }))\n : { records: [] };\n\n const selected =\n retained === undefined\n ? yield* selectedRange(threadId, submissionIds, throughSequence)\n : retained.filter((entry) => entry.sequence <= throughSequence);\n\n const byId = new Map(selected.map((entry) => [entry.record.recordId, entry]));\n let context: RunJournalContext | undefined;\n let progress: RunContinuation | undefined;\n let progressThrough: CanonicalSequence | undefined;\n let operational: ReadonlyArray<RecordEnvelope> = [];\n\n const invalid = (message: string) =>\n ThreadStoreError.make({\n operation: \"read Run continuation\",\n message,\n });\n\n for (const submissionId of submissionIds) {\n const runId = runIdForSubmission(submissionId);\n const own = selected.filter((entry) => executionRunIds(entry.record).includes(runId));\n\n const loaded = yield* readContinuation(threadId, runId, throughSequence).pipe(\n Effect.provideService(ThreadReader, reader),\n );\n\n if (Option.isNone(loaded)) {\n const terminal = own.findLast(\n ({ record }) =>\n 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* invalid(\"Settled Run history is incomplete\");\n continue;\n }\n if (own.some(({ record }) => !isPreContinuationFact(record)))\n return yield* invalid(\"Active Run execution has no authoritative checkpoint\");\n continue;\n }\n const envelope = loaded.value;\n const cursor = envelope.continuation;\n\n if (cursor.submissionId !== submissionId)\n return yield* invalid(\"Run continuation differs from its admitted owner\");\n\n const resolve = Effect.fnUntraced(function* (ref: typeof cursor.originalInput) {\n const found = byId.get(ref.recordId);\n\n if (found === undefined) {\n // An exact lookup distinguishes missing evidence from an incomplete native index.\n yield* resolveEvidence(threadId, ref).pipe(Effect.provideContext(journalServices));\n\n return yield* invalid(\n \"Required Run evidence is absent from its locator; rebuild the index explicitly\",\n );\n }\n if (!canonicalRunIds(found.record).includes(runId))\n return yield* invalid(\"Run continuation references another owner\");\n\n return found;\n });\n\n const resolveRecord = Effect.fnUntraced(function* (ref: typeof cursor.originalInput) {\n const operational = envelope.operational.find((record) => record.recordId === ref.recordId);\n\n if (operational === undefined) return (yield* resolve(ref)).record;\n\n return operational;\n });\n\n const input = yield* resolve(cursor.originalInput);\n\n if (\n input.record.payload._tag !== \"UserInputRecorded\" ||\n input.record.payload.kind !== \"user\" ||\n input.record.payload.submissionId !== submissionId ||\n input.record.payload.runId !== runId\n )\n return yield* invalid(\"Run continuation has no exact original admitted input\");\n yield* resolveRecord(cursor.lastFact);\n\n // An intact frontier does not prove that every earlier locator entry is present.\n if (\n own.reduce(\n (count, entry) => count + (entry.sequence <= envelope.throughSequence ? 1 : 0),\n 0,\n ) !== envelope.canonicalRecords\n )\n return yield* invalid(\n \"Run continuation has incomplete canonical evidence; rebuild its locator explicitly\",\n );\n\n if (\n envelope.throughSequence < input.sequence ||\n !validateSuffix(own, envelope.throughSequence)\n )\n return yield* invalid(\n \"Run continuation has an invalid frontier or exceeds its selected suffix bound\",\n );\n let saved: RunJournalContext | undefined;\n\n if (cursor.savedContext !== undefined) {\n const savedRecord = yield* resolveRecord(cursor.savedContext);\n\n if (savedRecord.payload._tag !== \"RunContextRecorded\")\n return yield* invalid(\"Run continuation has invalid saved original context\");\n const initial = savedRecord.payload;\n const cachedContext = resolvedContext;\n\n if (\n cachedContext?.threadId === threadId &&\n cachedContext.recordId === cursor.savedContext.recordId\n ) {\n saved = cachedContext.value;\n } else {\n saved = yield* readRunContext(initial, input, cursor.savedContext.recordId).pipe(\n Effect.provide(RunContextReader.layer(threadId)),\n Effect.provideContext(journalServices),\n Effect.mapError(() =>\n invalid(\"Saved original context cannot be resolved from its evidence\"),\n ),\n );\n resolvedContext = { threadId, recordId: cursor.savedContext.recordId, value: saved };\n }\n if (\n envelope.operational.filter(({ payload }) => payload._tag === \"RunContextRecorded\")\n .length !== 1\n )\n return yield* invalid(\"Run has conflicting saved original contexts\");\n }\n if (cursor.latestResponse !== undefined) {\n const response = yield* resolve(cursor.latestResponse);\n\n if (\n response.record.payload._tag !== \"ModelResponseRecorded\" ||\n saved === undefined ||\n response.record.payload.turn !== cursor.accounting.committedTurns ||\n own.some(\n (entry) =>\n entry.record.payload._tag === \"ModelResponseRecorded\" &&\n entry.sequence <= envelope.throughSequence &&\n entry.sequence > response.sequence,\n )\n )\n return yield* invalid(\"Run continuation has invalid declared-operation evidence\");\n } else if (cursor.accounting.committedTurns !== 0)\n return yield* invalid(\"Run continuation accounting has no corresponding response\");\n if (cursor.terminal !== undefined) {\n const terminal = yield* resolveRecord(cursor.terminal);\n\n if (\n terminal.payload._tag !== \"RunCompleted\" &&\n terminal.payload._tag !== \"RunFailed\" &&\n terminal.payload._tag !== \"SubmissionSettled\"\n )\n return yield* invalid(\"Run continuation has invalid terminal evidence\");\n }\n if (journalOwner === runId) {\n context = saved;\n progress = cursor;\n progressThrough = envelope.throughSequence;\n operational = envelope.operational;\n }\n }\n\n const records = [\n ...new Map(\n [...identity.records.filter((entry) => entry.sequence <= throughSequence), ...selected].map(\n (entry) => [entry.sequence, entry],\n ),\n ).values(),\n ].sort((left, right) => left.sequence - right.sequence);\n\n return { records, context, progress, progressThrough, operational };\n });\n\n const readControl = Effect.fnUntraced(function* (\n threadId: ThreadId,\n submissionIds: ReadonlyArray<SubmissionId>,\n ) {\n const tail = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n const view = yield* recoveryView(threadId, tail.tailSequence, submissionIds);\n\n return view.records.filter(controlRecords(submissionIds));\n });\n\n const readAllTolerant = (\n threadId: ThreadId,\n submissionIds: ReadonlyArray<SubmissionId>,\n ): Effect.Effect<\n { readonly records: ReadonlyArray<CanonicalRecordEnvelope>; readonly materialized: boolean },\n ThreadStoreError\n > =>\n Effect.suspend(() =>\n readControl(threadId, submissionIds).pipe(\n Effect.map((records) => ({ records, materialized: true })),\n Effect.catchTag(\"ThreadNotMaterialized\", () =>\n Effect.succeed({ records: [], materialized: false }),\n ),\n ),\n );\n\n interface RecoveryHistorySnapshot {\n readonly records: ReadonlyArray<CanonicalRecordEnvelope>;\n readonly materialized: boolean;\n readonly throughSequence: CanonicalSequence;\n readonly submissionIds: ReadonlyArray<SubmissionId>;\n }\n\n /**\n * Capture one tail and the addressed Runs' bounded control evidence. Recovery retains this\n * disposable snapshot only while repairing the selected owner; unrelated history is not read.\n */\n const readRecoveryHistory = Effect.fnUntraced(function* (\n threadId: ThreadId,\n submissionIds: ReadonlyArray<SubmissionId>,\n ): Effect.fn.Return<RecoveryHistorySnapshot, ThreadStoreError> {\n const tail = yield* store.inspectTail(ThreadTailRequest.make({ threadId })).pipe(\n Effect.map(Option.some),\n Effect.catchTag(\"ThreadNotMaterialized\", () => Effect.succeed(Option.none())),\n );\n\n if (Option.isNone(tail))\n return { records: [], materialized: false, throughSequence: ZERO_SEQUENCE, submissionIds };\n\n const records = yield* recoveryView(threadId, tail.value.tailSequence, submissionIds).pipe(\n Effect.map((view) => view.records.filter(controlRecords(submissionIds))),\n Effect.catchTag(\"ThreadNotMaterialized\", (error) =>\n ThreadStoreError.make({\n operation: \"read recovery history\",\n message: `Thread ${threadId} disappeared after its recovery tail was captured`,\n cause: error,\n }),\n ),\n );\n\n return { records, materialized: true, throughSequence: tail.value.tailSequence, submissionIds };\n });\n\n /**\n * A recovery mutation that must distinguish a racing canonical append reads only the suffix\n * beyond its pass snapshot. The append-only prefix remains valid; no full-history retry is\n * needed, and malformed suffix pagination fails through the same typed boundary.\n */\n const refreshRecoveryHistory = Effect.fnUntraced(function* (\n threadId: ThreadId,\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n after: CanonicalSequence,\n submissionIds: ReadonlyArray<SubmissionId>,\n ): Effect.fn.Return<ReadonlyArray<CanonicalRecordEnvelope>, DurableWorkerFailure> {\n const tail = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n\n if (tail.tailSequence <= after) return records;\n\n const suffix = yield* selectedRange(threadId, submissionIds, tail.tailSequence, after);\n\n return [...records, ...suffix];\n });\n\n const knownRecordIdsOf = (records: ReadonlyArray<CanonicalRecordEnvelope>): Set<string> =>\n new Set(records.map((envelope) => envelope.record.recordId));\n\n const settlementPayloadFromRecord = Effect.fnUntraced(function* (\n record: RecordEnvelope,\n submissionId: SubmissionId,\n ): Effect.fn.Return<SubmissionSettledRecord, LedgerError> {\n const payload = record.payload;\n\n if (\n payload._tag !== \"SubmissionSettled\" ||\n payload.submissionId !== submissionId ||\n payload.settlementId !== submissionSettlementId(submissionId) ||\n record.recordId !== submissionSettlementRecordId(submissionId)\n ) {\n return yield* LedgerError.make({\n operation: \"settlementPayloadFromRecord\",\n message: `The canonical record is not the exact Settlement for Submission ${submissionId}`,\n });\n }\n\n return payload;\n });\n\n const canonicalSettlementRecord = Effect.fnUntraced(function* (\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n submissionId: SubmissionId,\n ): Effect.fn.Return<RecordEnvelope, LedgerError> {\n const record = records.find(\n (envelope) => envelope.record.recordId === submissionSettlementRecordId(submissionId),\n )?.record;\n\n if (record === undefined) {\n return yield* LedgerError.make({\n operation: \"canonicalSettlementRecord\",\n message: `Canonical history has no Settlement for Submission ${submissionId}`,\n });\n }\n yield* settlementPayloadFromRecord(record, submissionId);\n\n return record;\n });\n\n /**\n * Fold canonical declaration and closure evidence. Unsettled ordinary effects are uncertain\n * unless canonical parameter rejection or a whole-batch approval blocker proves no dispatch.\n * Original operation contracts classify idempotent delegation and orchestration recovery.\n */\n const evidenceFor = Effect.fnUntraced(function* (\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n submissionId: SubmissionId,\n materialized: boolean,\n hostSubmissionId?: SubmissionId,\n ): Effect.fn.Return<RecoveryEvidence, RunJournalError | LedgerError> {\n const runId = runIdForSubmission(submissionId);\n\n const hostRunId =\n hostSubmissionId === undefined ? undefined : runIdForSubmission(hostSubmissionId);\n\n const inputId = submissionInputRecordId(submissionId);\n const abortId = submissionAbortRecordId(submissionId);\n const settlementId = submissionSettlementRecordId(submissionId);\n\n const hostSettlementId =\n hostSubmissionId === undefined ? undefined : submissionSettlementRecordId(hostSubmissionId);\n\n let inputRecorded = false;\n let inputSequence: CanonicalSequence | undefined;\n let abortRecorded = false;\n let subagentLineageRecorded = false;\n let recordedSettlementOutcome: SettlementOutcome | undefined;\n let hostSettlementOutcome: SettlementOutcome | undefined;\n let hostRespondedAfterInput = false;\n const unknownIds = new Set<string>();\n const declarationIds = new Set<string>();\n const responseTurns = new Set<number>();\n const requested: Array<PendingApprovalEvidence> = [];\n const canonicalApprovals = new Map<ToolCallId, ApprovalDecision>();\n\n let lastResponse:\n | {\n readonly turn: number;\n readonly messages: PersistedJson;\n readonly toolExposure?: Snapshot | undefined;\n }\n | undefined;\n\n for (const envelope of records) {\n const recordId = envelope.record.recordId;\n const payload = envelope.record.payload;\n\n if (recordId === inputId) {\n inputRecorded = true;\n inputSequence = envelope.sequence;\n continue;\n }\n if (recordId === abortId) {\n abortRecorded = true;\n continue;\n }\n if (recordId === settlementId && payload._tag === \"SubmissionSettled\") {\n recordedSettlementOutcome = payload.outcome;\n continue;\n }\n if (\n hostSettlementId !== undefined &&\n recordId === hostSettlementId &&\n payload._tag === \"SubmissionSettled\"\n ) {\n hostSettlementOutcome = payload.outcome;\n continue;\n }\n switch (payload._tag) {\n case \"ToolCallUnknown\": {\n if (payload.runId === runId) unknownIds.add(payload.toolCallId);\n break;\n }\n case \"ToolApprovalRequested\": {\n if (payload.runId !== runId) break;\n requested.push(\n PendingApprovalEvidence.make({ toolCallId: payload.toolCallId, turn: payload.turn }),\n );\n break;\n }\n case \"ToolApprovalDecided\": {\n if (payload.runId === runId) canonicalApprovals.set(payload.toolCallId, payload.decision);\n break;\n }\n case \"SubagentLineageRecorded\": {\n // Thread-level fact (one lineage record per child Thread, spec §11):\n // its presence gates the AwaitParentEstablishment row for parent-linked\n // Submissions; root Threads never carry it and never consult it.\n subagentLineageRecorded = true;\n break;\n }\n case \"ModelResponseRecorded\": {\n if (payload.runId === runId) {\n if (\n responseTurns.has(payload.turn) ||\n recordId !== modelResponseRecordId(runId, payload.turn) ||\n payload.turnId !== turnIdForRun(runId, payload.turn)\n )\n return yield* RunJournalError.make({\n message: \"Tool declaration has no unique original response\",\n });\n responseTurns.add(payload.turn);\n for (const operation of payload.toolOperations) {\n if (declarationIds.has(operation.toolCallId))\n return yield* RunJournalError.make({\n message: \"Tool Call identity is reused within a Run\",\n });\n declarationIds.add(operation.toolCallId);\n }\n }\n if (\n payload.runId === runId &&\n (lastResponse === undefined || payload.turn > lastResponse.turn)\n ) {\n lastResponse = {\n turn: payload.turn,\n messages: payload.messages,\n ...(payload.toolExposure === undefined ? {} : { toolExposure: payload.toolExposure }),\n };\n }\n if (\n hostRunId !== undefined &&\n payload.runId === hostRunId &&\n inputSequence !== undefined &&\n envelope.sequence > inputSequence\n ) {\n hostRespondedAfterInput = true;\n }\n break;\n }\n default: {\n break;\n }\n }\n }\n\n const operationStates = toolOperationStates(records, runId);\n\n const operations = new Map<string, ToolOperation>(\n operationStates.map(({ operation }) => [operation.toolCallId, operation]),\n );\n\n for (const toolCallId of unknownIds)\n if (!operations.has(toolCallId))\n return yield* RunJournalError.make({\n message: \"Unknown Tool call has no original declaration\",\n });\n\n const allOpenCalls = operationStates.filter(isUnresolvedToolOperation).map((state) =>\n OpenToolCallEvidence.make({\n toolCallId: state.operation.toolCallId,\n toolName: state.operation.toolName,\n turn: state.turn,\n }),\n );\n\n // Only the original response's operation contract authorizes idempotent establishment.\n const subagent = subagentRecordsOf(records, runId);\n\n const isDeclaredDelegation = (call: OpenToolCallEvidence): boolean =>\n operations.get(call.toolCallId)?.executionKind === \"delegation\";\n\n const openByCallId = new Map(\n allOpenCalls.filter(isDeclaredDelegation).map((call) => [call.toolCallId, call]),\n );\n\n const delegationCallIds: Array<ToolCallId> = [];\n const seenDelegationIds = new Set<ToolCallId>();\n\n const noteDelegation = (toolCallId: ToolCallId): void => {\n if (seenDelegationIds.has(toolCallId)) return;\n seenDelegationIds.add(toolCallId);\n delegationCallIds.push(toolCallId);\n };\n\n for (const toolCallId of subagent.requested.keys()) noteDelegation(toolCallId);\n for (const toolCallId of subagent.started.keys()) noteDelegation(toolCallId);\n for (const toolCallId of subagent.joined.keys()) noteDelegation(toolCallId);\n for (const toolCallId of delegationCallIds) {\n const request = subagent.requested.get(toolCallId);\n\n if (request === undefined || operations.get(toolCallId)?.executionKind !== \"delegation\") {\n return yield* RunJournalError.make({\n message: \"Subagent evidence conflicts with original Tool classification\",\n });\n }\n }\n for (const call of allOpenCalls) {\n if (isDeclaredDelegation(call)) noteDelegation(call.toolCallId);\n }\n const openDelegationCalls: Array<OpenDelegationCallEvidence> = [];\n\n for (const toolCallId of delegationCallIds) {\n // Explicit uncertainty must reach ordinary reconciliation, even for a framework call.\n if (unknownIds.has(toolCallId)) continue;\n const open = openByCallId.get(toolCallId);\n const requestedRecord = subagent.requested.get(toolCallId);\n const startedRecord = subagent.started.get(toolCallId);\n // Authoritative admission tri-state for a requested-but-unstarted call (SUB-031): the\n // deterministic idempotency key queries the ledger directly — projection absence is\n // never proof of absence, and only a proven `not-admitted` permits an admission attempt.\n let admission: DelegationAdmissionEvidence | undefined;\n let childSubmissionId = startedRecord?.childSubmissionId;\n\n if (requestedRecord !== undefined && startedRecord === undefined) {\n const resolution = yield* ledger.resolveAdmission(\n SubmissionLookupByKey.make({\n threadId: requestedRecord.childThreadId,\n principal: decodePrincipalSync(requestedRecord.childPrincipal),\n idempotencyKey: decodeIdempotencyKeySync(requestedRecord.childIdempotencyKey),\n }),\n );\n\n switch (resolution._tag) {\n case \"NotAdmitted\": {\n admission = \"not-admitted\";\n break;\n }\n case \"Admitted\": {\n admission = \"admitted\";\n childSubmissionId = resolution.submission.submissionId;\n break;\n }\n case \"Indeterminate\": {\n admission = \"indeterminate\";\n break;\n }\n }\n }\n const childThreadId = startedRecord?.childThreadId ?? requestedRecord?.childThreadId;\n\n openDelegationCalls.push(\n OpenDelegationCallEvidence.make({\n toolCallId,\n toolName:\n open?.toolName ??\n subagent.declaredNames.get(toolCallId) ??\n requestedRecord?.delegationId ??\n \"delegate_unknown\",\n turn: open?.turn ?? requestedRecord?.turn ?? 1,\n requested: requestedRecord !== undefined,\n started: startedRecord !== undefined,\n joined: subagent.joined.has(toolCallId),\n ...(childThreadId === undefined ? {} : { childThreadId }),\n ...(childSubmissionId === undefined ? {} : { childSubmissionId }),\n ...(admission === undefined ? {} : { admission }),\n }),\n );\n }\n\n const isDeclaredWorker = (call: OpenToolCallEvidence): boolean =>\n operations.get(call.toolCallId)?.executionKind === \"orchestration\";\n\n const openWorkerCalls = allOpenCalls.filter(\n (call) => isDeclaredWorker(call) && !unknownIds.has(call.toolCallId),\n );\n\n const openToolCalls = allOpenCalls.filter(\n (call) =>\n unknownIds.has(call.toolCallId) || (!isDeclaredDelegation(call) && !isDeclaredWorker(call)),\n );\n\n let declaredPendingBatch: DeclaredPendingBatchEvidence | undefined;\n const requestedIds = new Set(requested.map((approval) => approval.toolCallId));\n\n if (lastResponse !== undefined) {\n const turn = lastResponse.turn;\n\n const pending = operationStates.filter((state) => state.turn === turn && !state.settled);\n\n if (pending.length > 0)\n declaredPendingBatch = DeclaredPendingBatchEvidence.make({\n turn,\n callCount: pending.length,\n approvals: operationStates\n .filter(\n (state) =>\n state.turn === turn &&\n !state.settled &&\n !state.resolved &&\n requestedIds.has(state.operation.toolCallId),\n )\n .map((state) => {\n const decision = canonicalApprovals.get(state.operation.toolCallId);\n\n return {\n toolCallId: state.operation.toolCallId,\n ...(decision === undefined ? {} : { decision }),\n };\n }),\n });\n }\n\n const approvalsPending = requested.filter(\n (pending) => !canonicalApprovals.has(pending.toolCallId),\n );\n\n return RecoveryEvidence.make({\n threadMaterialized: materialized,\n inputRecorded,\n abortRecorded,\n subagentLineageRecorded,\n openToolCalls,\n openDelegationCalls,\n openWorkerCalls,\n approvalsPending,\n joinedInputCovered: hostSubmissionId === undefined ? true : hostRespondedAfterInput,\n ...(recordedSettlementOutcome === undefined ? {} : { recordedSettlementOutcome }),\n ...(declaredPendingBatch === undefined ? {} : { declaredPendingBatch }),\n ...(hostSettlementOutcome === undefined ? {} : { hostSettlementOutcome }),\n });\n });\n\n /** Check all declaration identities; validate full owning responses and isolate selected calls. */\n const declaredCallsFor = Effect.fnUntraced(function* (\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n runId: RunId,\n selectedIds: ReadonlySet<string>,\n ) {\n const calls = new Map<string, DeclaredToolCall>();\n const turns = new Set<number>();\n const identities = new Set<string>();\n\n for (const { record } of records) {\n const response = record.payload;\n\n if (response._tag !== \"ModelResponseRecorded\" || response.runId !== runId) continue;\n if (\n turns.has(response.turn) ||\n record.recordId !== modelResponseRecordId(runId, response.turn) ||\n response.turnId !== turnIdForRun(runId, response.turn)\n )\n return yield* RunJournalError.make({\n message: \"Tool declaration has no unique original response\",\n });\n turns.add(response.turn);\n\n for (const operation of response.toolOperations) {\n if (identities.has(operation.toolCallId))\n return yield* RunJournalError.make({\n message: \"Operation evidence differs from the original declaration\",\n });\n identities.add(operation.toolCallId);\n }\n if (!response.toolOperations.some((operation) => selectedIds.has(operation.toolCallId)))\n continue;\n\n const declared = yield* declaredToolCalls(response.messages);\n\n for (const operation of response.toolOperations) {\n const matches = declared.application.filter(\n (call) => call.id === operation.toolCallId && call.name === operation.toolName,\n );\n\n const call = matches[0];\n\n if (call === undefined || matches.length !== 1)\n return yield* RunJournalError.make({\n message: \"Operation evidence differs from the original declaration\",\n });\n if (!selectedIds.has(operation.toolCallId)) continue;\n\n const parameters = yield* decodePersisted(call.params).pipe(\n Effect.map(copyJson),\n Effect.mapError((cause) =>\n RunJournalError.make({ message: \"Invalid canonical Tool parameters\", cause }),\n ),\n );\n\n const parametersDigest = yield* withCrypto(digestJson(parameters)).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({ message: \"Cannot verify declared Tool parameters\", cause }),\n ),\n );\n\n calls.set(\n operation.toolCallId,\n DeclaredToolCall.make({\n ...operation,\n runId,\n turnId: response.turnId,\n turn: response.turn,\n parameters,\n parametersDigest,\n }),\n );\n }\n if (response.toolOperations.length !== declared.application.length)\n return yield* RunJournalError.make({\n message: \"Declared Tool batch has incomplete operation evidence\",\n });\n }\n\n return calls;\n });\n\n /**\n * The declared-but-unsettled Tool batch of the Run's LAST committed Turn (§2.4). Keyed on\n * SETTLED coverage deliberately: a call closed by a never-started/safe-retry `ToolCallResolved`\n * has authorized re-execution, so it stays in the resumed batch until its own `ToolCallSettled`\n * exists.\n */\n const pendingToolBatchFor = Effect.fnUntraced(function* (\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n runId: ReturnType<typeof runIdForSubmission>,\n completionTools: ReadonlyArray<string> = [],\n ): Effect.fn.Return<PendingToolBatch | undefined, RunJournalError> {\n let lastResponse:\n | {\n readonly turn: number;\n readonly messages: PersistedJson;\n readonly toolOperations: ReadonlyArray<ToolOperation>;\n readonly toolResultMaxBytes: number;\n readonly toolParameterRejections?: ReadonlyArray<ToolParameterRejection> | undefined;\n readonly toolExposure?: Snapshot | undefined;\n }\n | undefined;\n\n const settledByCallId = new Map<\n string,\n {\n readonly recordId?: RecordId;\n readonly toolName?: string;\n readonly result: PersistedJson;\n readonly isFailure: boolean;\n readonly budgetRejected?: true;\n readonly toolSelection?: Selection | undefined;\n }\n >();\n\n for (const envelope of records) {\n const payload = envelope.record.payload;\n\n if (payload._tag === \"ModelResponseRecorded\" && payload.runId === runId) {\n if (lastResponse === undefined || payload.turn > lastResponse.turn) {\n settledByCallId.clear();\n lastResponse = {\n turn: payload.turn,\n messages: payload.messages,\n toolParameterRejections: payload.toolParameterRejections,\n toolOperations: payload.toolOperations,\n toolResultMaxBytes: payload.toolResultMaxBytes,\n ...(payload.toolExposure === undefined ? {} : { toolExposure: payload.toolExposure }),\n };\n }\n continue;\n }\n if (payload._tag === \"ToolCallSettled\" && payload.runId === runId) {\n settledByCallId.set(payload.toolCallId, {\n recordId: envelope.record.recordId,\n toolName: payload.toolName,\n result: payload.result,\n isFailure: payload.isFailure,\n ...(payload.budgetRejected === true ? { budgetRejected: true } : {}),\n ...(payload.toolSelection === undefined ? {} : { toolSelection: payload.toolSelection }),\n });\n }\n }\n if (lastResponse === undefined) return undefined;\n const declared = yield* declaredToolCalls(lastResponse.messages);\n\n if (declared.application.length === 0) return undefined;\n const calls = declared.all;\n\n const identities = new Set<string>();\n\n for (const operation of lastResponse.toolOperations) {\n if (\n identities.has(operation.toolCallId) ||\n !declared.application.some(\n (call) => call.id === operation.toolCallId && call.name === operation.toolName,\n )\n )\n return yield* RunJournalError.make({\n message: \"Operation evidence differs from the declared Tool batch\",\n });\n identities.add(operation.toolCallId);\n }\n if (identities.size !== declared.application.length)\n return yield* RunJournalError.make({\n message: \"Declared Tool batch has incomplete operation evidence\",\n });\n\n for (const part of declared.providerResults) {\n const result = yield* decodePersisted(part.result).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({ message: `Invalid canonical provider result ${part.id}`, cause }),\n ),\n );\n\n settledByCallId.set(part.id, { result, isFailure: part.isFailure });\n }\n\n const settled: Array<{\n id: string;\n result: PersistedJson;\n isFailure: boolean;\n budgetRejected?: true;\n toolSelection?: Selection | undefined;\n }> = [];\n\n for (const call of calls) {\n const recorded = settledByCallId.get(call.id);\n\n if (call.providerExecuted === true && recorded === undefined) {\n return yield* RunJournalError.make({\n message: `Pending Turn lacks canonical provider result for ${call.id}`,\n });\n }\n if (recorded !== undefined) {\n const { recordId, toolName, ...result } = recorded;\n\n if (\n call.providerExecuted !== true &&\n (toolName !== call.name ||\n recordId !==\n toolCallSettledRecordId(\n runId,\n lastResponse.turn,\n Schema.decodeSync(ToolCallId)(call.id),\n ))\n )\n return yield* RunJournalError.make({\n message: `Settled Tool ${call.id} differs from its original declaration`,\n });\n settled.push({ id: call.id, ...result });\n }\n }\n\n const completionCall = declared.application[0];\n\n const projectSettledCompletion =\n declared.application.length === 1 &&\n completionCall !== undefined &&\n completionTools.includes(completionCall.name) &&\n settledByCallId.get(completionCall.id)?.isFailure === false &&\n !records.some(\n ({ record }) => record.payload._tag === \"RunCompleted\" && record.payload.runId === runId,\n );\n\n if (settled.length >= calls.length && !projectSettledCompletion) return undefined;\n\n return {\n turn: lastResponse.turn,\n turnId: turnIdForRun(runId, lastResponse.turn),\n calls,\n settled,\n declaredIds: new Set(calls.map((call) => call.id)),\n responseRecordId: modelResponseRecordId(runId, lastResponse.turn),\n messages: lastResponse.messages,\n toolParameterRejections: lastResponse.toolParameterRejections,\n toolOperations: lastResponse.toolOperations,\n toolResultMaxBytes: lastResponse.toolResultMaxBytes,\n ...(lastResponse.toolExposure === undefined\n ? {}\n : { toolExposure: lastResponse.toolExposure }),\n };\n });\n\n /**\n * Records without the pending Turn's response and its partial results: the resumed Attempt's\n * canonical prompt boundary sits BEFORE the pending Turn, whose messages re-enter official\n * history through the engine's batch-resume continuation.\n */\n const withoutPendingBatch = <E>(\n records: Stream.Stream<JournalRecordEnvelope, E>,\n pending: PendingToolBatch,\n runId: ReturnType<typeof runIdForSubmission>,\n ): Stream.Stream<JournalRecordEnvelope, E> =>\n records.pipe(\n Stream.filter((envelope) => {\n if (envelope.record.recordId === pending.responseRecordId) return false;\n const payload = envelope.record.payload;\n\n return !(\n payload._tag === \"ToolCallSettled\" &&\n payload.runId === runId &&\n pending.declaredIds.has(payload.toolCallId)\n );\n }),\n );\n\n const materializeThread = (threadId: ThreadId) =>\n store.materialize(ThreadMaterialization.make({ threadId }));\n\n const ensureThreadCreated = (\n threadId: ThreadId,\n agentId: AgentId,\n definitions: DefinitionDigests,\n ) =>\n ThreadInitialization.ensureThreadCreated(\n { producerId: config.producerId, deploymentId: config.deploymentId },\n threadId,\n agentId,\n definitions,\n ).pipe(Effect.provideService(ThreadStore, store), Effect.provideService(WakeScheduler, wake));\n\n type ProgressWriter = Effect.Success<ReturnType<typeof makeProgressWriter>>;\n const progressWriters = new WeakMap<RunWriter, ProgressWriter>();\n\n const activeProgress = new Map<ThreadId, { readonly writer: ProgressWriter }>();\n\n const withProgress = Effect.fnUntraced(function* (writer: RunWriter) {\n const active = activeProgress.get(writer.threadId);\n\n const progress =\n active?.writer ??\n (yield* makeProgressWriter(writer.threadId, config.deploymentId).pipe(\n Effect.provideContext(journalServices),\n ));\n\n const owned: RunWriter = {\n ...writer,\n append: (batch) =>\n progress.commit(batch).pipe(\n Effect.provideService(CurrentRunWriter, writer),\n // A replaced owner may observe retired progress before it reaches the append gate.\n Effect.tapError(() => writer.checkActive),\n ),\n };\n\n progressWriters.set(owned, progress);\n\n return { owned, progress };\n });\n\n const attemptContextAtTail = (threadId: ThreadId) =>\n makeRunWriter(threadId).pipe(\n Effect.provideService(ThreadStore, store),\n Effect.provideService(StorageOwner, storageOwner),\n Effect.flatMap(withProgress),\n Effect.map(({ owned }) => owned),\n );\n\n const withProgressSession = Effect.fnUntraced(function* (\n session: RunStorageSession,\n originalInput?: () => InitialContextInput | undefined,\n ) {\n const { owned, progress } = yield* withProgress(session);\n\n activeProgress.set(session.threadId, { writer: progress });\n yield* Effect.addFinalizer(() =>\n Effect.sync(() => {\n if (activeProgress.get(session.threadId)?.writer === progress)\n activeProgress.delete(session.threadId);\n }),\n );\n\n const inputWriter =\n session.appendInput === undefined\n ? undefined\n : {\n ...session,\n append: session.appendInput,\n };\n\n const wrapped: RunStorageSession = {\n ...session,\n append: owned.append,\n ...(inputWriter === undefined\n ? {}\n : {\n appendInput: (batch: CommitBatch) =>\n storageOwner.withProgress(\n session.threadId,\n storageOwner.withMutation(\n Effect.gen(function* () {\n yield* session.checkActive;\n // The captured empty canonical prefix is enforced again by the append tail and\n // checkpoint revision-zero CAS. It is not a cache entry across preparation IO.\n const original = originalInput?.();\n const commit = progress.commit(batch);\n\n return yield* (\n original === undefined\n ? commit\n : progress.withVerifiedEmptyRun(\n runIdForSubmission(session.claim.submissionId),\n CanonicalSequence.make(original.sequence - 1),\n commit,\n )\n ).pipe(Effect.provideService(CurrentRunWriter, inputWriter));\n }),\n ),\n ),\n }),\n publishSettlement: (batch) =>\n progress.publish(batch).pipe(Effect.provideService(CurrentRunSettlement, session)),\n };\n\n progressWriters.set(wrapped, progress);\n\n return wrapped;\n });\n\n // Preparations and emitted updates use the same progress gate as their active Run. This\n // also covers a destination handoff written before dispatch or after Run settlement.\n const progressStore = ThreadStore.of({\n ...store,\n append: Effect.fnUntraced(function* (request) {\n const active = activeProgress.get(request.threadId);\n\n const progress =\n active?.writer ??\n (yield* makeProgressWriter(request.threadId, config.deploymentId).pipe(\n Effect.provideContext(journalServices),\n ));\n\n let tail = {\n sequence: request.expectedTailSequence,\n };\n\n return yield* progress.commit(request.batch).pipe(\n Effect.provideService(CurrentRunWriter, {\n threadId: request.threadId,\n tail: Effect.sync(() => tail),\n withProgress: (effect) => storageOwner.withProgress(request.threadId, effect),\n append: (batch, executions) =>\n store\n .append(\n AppendRequest.make({\n ...request,\n expectedTailSequence: tail.sequence,\n\n batch,\n executions,\n }),\n )\n .pipe(\n Effect.tapErrorTag(\"AppendConflict\", (conflict) =>\n Effect.sync(() => {\n if (conflict.reason === \"tail\" && conflict.actualTailSequence !== undefined)\n tail = {\n sequence: conflict.actualTailSequence,\n };\n }),\n ),\n ),\n }),\n );\n }),\n });\n\n const appendBatch = (ctx: Pick<RunWriter, \"threadId\" | \"append\">, batch: CanonicalBatch) =>\n ctx.append(batch).pipe(Effect.tap(() => wake.notify(ctx.threadId, \"progress\")));\n\n const publicationFor =\n (\n ctx: AttemptAppendContext,\n submissionId: SubmissionId,\n authority: SettlementPublicationAuthority,\n ): PublishSettlement =>\n (batch) =>\n Effect.suspend(() => {\n const progress = progressWriters.get(ctx);\n\n if (progress === undefined)\n return Effect.fail(\n ThreadStoreError.make({\n operation: \"publish Run continuation\",\n message: \"Settlement has no scoped progress writer\",\n }),\n );\n\n return progress.publish(batch).pipe(\n Effect.provideService(CurrentRunSettlement, {\n threadId: ctx.threadId,\n tail: ctx.tail,\n withProgress: ctx.withProgress,\n publishSettlement: Effect.fnUntraced(function* (prepared, executions) {\n let tail = yield* ctx.tail;\n\n for (let retries = 0; ; retries++) {\n const result = yield* runStorage\n .publishSettlement(\n SettlementPublication.make({\n submissionId,\n authority,\n append: AppendRequest.make({\n threadId: ctx.threadId,\n expectedTailSequence: tail.sequence,\n\n batch: prepared,\n executions,\n }),\n }),\n )\n .pipe(\n (effect) => storageOwner.withMutation(Effect.andThen(ctx.checkActive, effect)),\n Effect.catchTag(\"AppendConflict\", (conflict) => {\n if (\n conflict.reason !== \"tail\" ||\n conflict.actualTailSequence === undefined ||\n retries >= 8\n )\n return Effect.fail(conflict);\n tail = {\n sequence: conflict.actualTailSequence,\n };\n\n if (executions !== undefined && executions.length > 0)\n return ctx.refresh.pipe(Effect.andThen(Effect.fail(conflict)));\n\n return Effect.succeed(undefined);\n }),\n );\n\n if (result === undefined) continue;\n\n return result;\n }\n }),\n }),\n );\n });\n\n /** Append the canonical `AbortRequested` record; an identity conflict means it already exists. */\n const appendAbortRecord = Effect.fnUntraced(function* (\n ctx: AttemptAppendContext,\n intent: AbortIntent,\n ) {\n const envelope = yield* makeEnvelope(\n submissionAbortRecordId(intent.submissionId),\n AbortRequested.make({\n submissionId: intent.submissionId,\n author: intent.author,\n reason: intent.reason,\n }),\n );\n\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: submissionAbortBatchId(intent.submissionId),\n producerId: config.producerId,\n records: [envelope],\n }),\n ).pipe(\n Effect.catchTag(\"AppendConflict\", () => Effect.void),\n Effect.asVoid,\n );\n });\n\n /**\n * Append the canonical `ToolCallUnknown` audit records for the given open calls, grouped into\n * one batch per Turn (batch `mark-unknown:{sid}:{turn}`). Canonical-only: the operational\n * ledger marking is a separate step so abort settlement can record the uncertainty WITHOUT\n * blocking the lane (durability §13: abort never asserts external rollback).\n */\n const appendUnknownRecords = Effect.fnUntraced(function* (\n ctx: AttemptAppendContext,\n submissionId: SubmissionId,\n knownIds: Set<string>,\n calls: ReadonlyArray<OpenToolCallEvidence>,\n reason: string,\n ): Effect.fn.Return<void, DurableWorkerFailure> {\n const runId = runIdForSubmission(submissionId);\n const byTurn = new Map<number, Array<OpenToolCallEvidence>>();\n\n for (const call of calls) {\n const group = byTurn.get(call.turn);\n\n if (group === undefined) byTurn.set(call.turn, [call]);\n else group.push(call);\n }\n for (const [turn, group] of byTurn) {\n const missing = group.filter(\n (call) => !knownIds.has(toolCallUnknownRecordId(runId, turn, call.toolCallId)),\n );\n\n const first = missing[0];\n\n if (first === undefined) continue;\n const envelopes: Array<RecordEnvelope> = [];\n\n for (const call of missing) {\n envelopes.push(\n yield* makeEnvelope(\n toolCallUnknownRecordId(runId, turn, call.toolCallId),\n ToolCallUnknown.make({\n runId,\n turn: call.turn,\n toolCallId: call.toolCallId,\n toolName: call.toolName,\n reason,\n }),\n ),\n );\n }\n const head = envelopes[0];\n\n if (head === undefined) continue;\n // An identity conflict means another pass already recorded the same uncertainty.\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: markUnknownBatchId(submissionId, turn),\n producerId: config.producerId,\n records: [head, ...envelopes.slice(1)],\n }),\n ).pipe(\n Effect.catchTag(\"AppendConflict\", () => Effect.void),\n Effect.asVoid,\n );\n for (const call of missing) {\n knownIds.add(toolCallUnknownRecordId(runId, turn, call.toolCallId));\n }\n }\n });\n\n /**\n * Close the result and its resolution audit in one canonical commit. Removing operation\n * membership cannot strand the accepted resolution between two independent appends.\n */\n const appendClosedCall = Effect.fnUntraced(function* (\n ctx: AttemptAppendContext,\n submissionId: SubmissionId,\n knownIds: Set<string>,\n call: OpenToolCallEvidence,\n closure: {\n readonly result?: { readonly value: PersistedJson; readonly isFailure: boolean } | undefined;\n readonly resolution: ToolCallResolution;\n readonly author: string;\n readonly reason: string;\n },\n ): Effect.fn.Return<void, DurableWorkerFailure> {\n const runId = runIdForSubmission(submissionId);\n\n const envelopes: Array<RecordEnvelope> = [];\n const settledId = toolCallSettledRecordId(runId, call.turn, call.toolCallId);\n\n if (closure.result !== undefined) {\n if (!knownIds.has(settledId)) {\n envelopes.push(\n yield* makeEnvelope(\n settledId,\n ToolCallSettled.make({\n runId,\n toolCallId: call.toolCallId,\n toolName: call.toolName,\n result: closure.result.value,\n isFailure: closure.result.isFailure,\n }),\n ),\n );\n }\n }\n const resolvedId = toolCallResolvedRecordId(runId, call.turn, call.toolCallId);\n\n if (!knownIds.has(resolvedId)) {\n envelopes.push(\n yield* makeEnvelope(\n resolvedId,\n ToolCallResolved.make({\n runId,\n toolCallId: call.toolCallId,\n resolution: closure.resolution,\n author: closure.author,\n reason: closure.reason,\n }),\n ),\n );\n }\n const [first, ...rest] = envelopes;\n\n if (first === undefined) return;\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: envelopes.some(({ recordId }) => recordId === settledId)\n ? toolCallResultBatchId(runId, call.turn, call.toolCallId)\n : toolCallResolutionBatchId(submissionId, call.toolCallId),\n producerId: config.producerId,\n records: [first, ...rest],\n }),\n ).pipe(\n Effect.catchTag(\"AppendConflict\", () =>\n Effect.forEach(\n envelopes,\n (expected) =>\n getRecord({ threadId: ctx.threadId, recordId: expected.recordId }).pipe(\n Effect.provideService(ThreadReader, reader),\n Effect.flatMap((actual) =>\n Option.isSome(actual) &&\n Schema.toEquivalence(RecordEnvelope.fields.payload)(\n actual.value.record.payload,\n expected.payload,\n )\n ? Effect.void\n : ThreadStoreError.make({\n operation: \"resolve operation\",\n message: \"The factual closure did not commit under its original identity\",\n }),\n ),\n ),\n { discard: true },\n ),\n ),\n Effect.asVoid,\n );\n for (const envelope of envelopes) knownIds.add(envelope.recordId);\n });\n\n /**\n * Reconcile-then-mark (durability §10, DUR-009) over one Submission's open ordinary Tool Calls.\n *\n * Per open call, in order of authority: a durable DUR-017 resolution intent is applied\n * canonically (recovered results settle without execution; never-happened/safe-retry authorize\n * re-execution through the batch resume); a declared `idempotent` execution class is the\n * external idempotency contract and needs no proof; otherwise the registered `ToolReconciler`\n * is consulted — `NeverStarted`/`SafeToRetry` are point-in-time proofs (nothing is recorded;\n * every later pass re-proves them), `CompletedWithResult` becomes canonical supplier truth,\n * `Uncertain` collects for Unknown marking, and a reconciler FAILURE is no proof at all (the\n * call stays open and blocked without being marked). Nothing here ever executes a handler.\n */\n const reconcileOpenCalls = Effect.fnUntraced(function* (\n ctx: AttemptAppendContext,\n submission: SubmissionSnapshot,\n snapshot: RecoverySnapshot,\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n openCalls: ReadonlyArray<OpenToolCallEvidence>,\n knownIds: Set<string>,\n current?: {\n readonly definition: Agent.AnyDefinition;\n readonly contracts: Readonly<Record<string, Digest>>;\n },\n ): Effect.fn.Return<OpenCallReview, DurableWorkerFailure> {\n const submissionId = submission.submissionId;\n const runId = runIdForSubmission(submissionId);\n\n yield* pendingToolBatchFor(records, runId);\n const operations = operationsFor(records, runId);\n\n const declaredByCallId = yield* declaredCallsFor(\n records,\n runId,\n new Set(openCalls.map((call) => call.toolCallId)),\n );\n\n for (const call of openCalls) {\n const declared = declaredByCallId.get(call.toolCallId);\n\n if (\n declared === undefined ||\n declared.turn !== call.turn ||\n declared.toolName !== call.toolName\n )\n return yield* RunJournalError.make({\n message: `Tool ${call.toolCallId} has no unique original declaration`,\n });\n }\n\n const intents = resolutionIntentsFor(snapshot);\n\n const review: OpenCallReview = { uncertain: [], unproven: [], retryable: [], recovered: 0 };\n let recovered = 0;\n\n for (const call of openCalls) {\n const declared = declaredByCallId.get(call.toolCallId);\n const operation = operations.get(call.toolCallId);\n\n const supported = supportsOperation(call, operation, current);\n\n const intent = intents.get(call.toolCallId);\n const author = intent?.author ?? RECONCILER_AUTHOR;\n\n const reason =\n intent?.reason ?? \"A registered reconciliation policy recovered the external outcome\";\n\n const neverStarted = Effect.gen(function* () {\n if (current === undefined) {\n // Low-level drivers supply their current Agent only when claiming. Missing metadata\n // cannot prove retirement or authorize execution; the claimant checks the contract.\n review.unproven.push(call);\n\n return;\n }\n if (supported) {\n review.retryable.push(call);\n\n return;\n }\n\n const unavailable = yield* Schema.encodeEffect(ToolUnavailable)(\n ToolUnavailable.make({\n toolName: call.toolName,\n execution: \"not-executed\",\n message:\n \"This operation never started and its original implementation is unavailable. Continue with the current tools.\",\n }),\n ).pipe(Effect.flatMap(decodePersisted), Effect.orDie);\n\n yield* hit(\"tools:before-unavailable-append\");\n yield* appendClosedCall(ctx, submissionId, knownIds, call, {\n result: { value: unavailable, isFailure: true },\n resolution: \"never-started\",\n author,\n reason,\n });\n yield* hit(\"tools:after-unavailable-append\");\n recovered += 1;\n });\n\n // Retry permission cannot mask a recorded outcome or require a runnable old binding.\n // Explicit factual resolutions and abort instructions retain their own handling below.\n if (\n (intent === undefined || intent.resolution._tag === \"SafeToRetry\") &&\n declared !== undefined &&\n nativeUpdateAccepted(submission, declared, records)\n ) {\n yield* appendClosedCall(ctx, submissionId, knownIds, call, {\n result: { value: { emitted: true }, isFailure: false },\n resolution: \"completed-with-result\",\n author: RECONCILER_AUTHOR,\n reason: \"The exact native update was canonically accepted\",\n });\n recovered += 1;\n continue;\n }\n if (intent !== undefined) {\n switch (intent.resolution._tag) {\n case \"AbortSubmission\":\n continue;\n case \"CompletedWithResult\": {\n yield* appendClosedCall(ctx, submissionId, knownIds, call, {\n result: { value: intent.resolution.result, isFailure: intent.resolution.isFailure },\n resolution: intent.resolution.isFailure\n ? \"failed-with-error\"\n : \"completed-with-result\",\n author,\n reason,\n });\n recovered += 1;\n continue;\n }\n case \"NeverHappened\": {\n yield* neverStarted;\n continue;\n }\n case \"SafeToRetry\": {\n // Permission to repeat the original operation is not proof it never happened.\n if (current === undefined) review.unproven.push(call);\n else if (supported) review.retryable.push(call);\n else review.uncertain.push(call);\n continue;\n }\n }\n }\n const tool = current?.definition.toolkit.tools[call.toolName];\n\n if (current === undefined && operation?.executionClass === \"idempotent\") {\n review.unproven.push(call);\n continue;\n }\n if (supported && tool !== undefined && getToolExecutionClass(tool) === \"idempotent\") {\n review.retryable.push(call);\n continue;\n }\n if (declared === undefined) {\n review.unproven.push(call);\n continue;\n }\n\n const reconciled = yield* reconciler\n .reconcile(\n DeclaredToolCallEvidence.make({\n threadId: submission.threadId,\n submissionId,\n ...declared,\n }),\n )\n .pipe(\n Effect.map(Option.some),\n Effect.catchTag(\"ToolReconcilerError\", () => Effect.succeed(Option.none())),\n );\n\n if (Option.isNone(reconciled)) {\n review.unproven.push(call);\n continue;\n }\n const decision = reconciled.value;\n\n switch (decision._tag) {\n case \"CompletedWithResult\": {\n yield* appendClosedCall(ctx, submissionId, knownIds, call, {\n result: { value: decision.result, isFailure: decision.isFailure },\n resolution: decision.isFailure ? \"failed-with-error\" : \"completed-with-result\",\n author,\n reason,\n });\n recovered += 1;\n continue;\n }\n case \"NeverStarted\": {\n yield* neverStarted;\n continue;\n }\n case \"SafeToRetry\": {\n if (current === undefined) review.unproven.push(call);\n else if (supported) review.retryable.push(call);\n else review.uncertain.push(call);\n continue;\n }\n case \"Uncertain\": {\n review.uncertain.push(call);\n continue;\n }\n }\n }\n\n return { ...review, recovered };\n });\n\n /**\n * Record the Unknown Outcomes durably: canonical `ToolCallUnknown` audit records FIRST\n * (history is the recovery truth, DUR-015), then the ownership-free ledger marking that blocks\n * the lane until the authorized DUR-017 resolution path covers every marked call.\n */\n const markCallsUnknown = Effect.fnUntraced(function* (\n ctx: AttemptAppendContext,\n submissionId: SubmissionId,\n knownIds: Set<string>,\n calls: ReadonlyArray<OpenToolCallEvidence>,\n reason: string,\n ): Effect.fn.Return<void, DurableWorkerFailure> {\n const first = calls[0];\n\n if (first === undefined) return;\n yield* appendUnknownRecords(ctx, submissionId, knownIds, calls, reason);\n yield* ledger.markUnknown(\n MarkUnknownRequest.make({\n submissionId,\n toolCallIds: [first.toolCallId, ...calls.slice(1).map((call) => call.toolCallId)],\n reason,\n }),\n );\n });\n\n const prepareOriginalInput = (submission: SubmissionSnapshot) =>\n makeEnvelope(\n submissionInputRecordId(submission.submissionId),\n UserInputRecorded.make({\n submissionId: submission.submissionId,\n kind: \"user\",\n runId: runIdForSubmission(submission.submissionId),\n input: submission.inputPayload,\n ...(submission.messageAdmission === undefined\n ? {}\n : { messageAdmission: submission.messageAdmission }),\n }),\n );\n\n /**\n * Plan step 2: append the deterministic `UserInputRecorded` record (batch idempotency makes it\n * exactly-once canonical, DUR-007) and mark it applied. When canonical history already carries\n * the record — an earlier Attempt crashed after its append — only the ledger marker is repaired\n * (DUR-015/DUR-016).\n */\n const applyCanonicalInput = Effect.fnUntraced(function* (\n ctx: AttemptAppendContext,\n submission: SubmissionSnapshot,\n ownership: RunOwnership,\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n inputApplied: RecoverySnapshot[\"inputApplied\"],\n ) {\n const submissionId = submission.submissionId;\n const recordId = submissionInputRecordId(submissionId);\n const existing = records.find((envelope) => envelope.record.recordId === recordId);\n\n if (existing !== undefined) {\n if (inputApplied === undefined) {\n yield* ownership.markInputApplied({ recordId, sequence: existing.sequence });\n }\n\n return;\n }\n\n const envelope = yield* prepareOriginalInput(submission);\n\n const result = yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: submissionInputBatchId(submissionId),\n producerId: config.producerId,\n records: [envelope],\n }),\n );\n\n yield* hit(\"input:after-canonical-append\");\n yield* ownership.markInputApplied({ recordId, sequence: result.firstSequence });\n });\n\n const readRunStart = Effect.fnUntraced(function* (\n threadId: ThreadId,\n runId: RunId,\n operational?: ReadonlyArray<RecordEnvelope>,\n ) {\n if (operational === undefined) {\n const loaded = yield* reader\n .readExecution({ threadId, runId })\n .pipe(Effect.catchTag(\"ThreadNotMaterialized\", () => Effect.succeed(Option.none())));\n\n if (Option.isNone(loaded)) return undefined;\n operational = loaded.value.operational;\n }\n\n const recordId = runStartedRecordId(runId);\n const starts = operational.filter(({ payload }) => payload._tag === \"RunStarted\");\n const existing = operational.find((record) => record.recordId === recordId);\n\n if (\n starts.length > 1 ||\n (starts.length === 1 && starts[0]?.recordId !== recordId) ||\n (existing !== undefined &&\n (existing.payload._tag !== \"RunStarted\" || existing.payload.runId !== runId))\n )\n return yield* RunJournalError.make({\n message: `Run ${runId} has conflicting active start state`,\n });\n\n return existing;\n });\n\n const makeRunStart = Effect.fnUntraced(function* (\n submission: SubmissionSnapshot,\n maxDurationMillis: number,\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n operational: ReadonlyArray<RecordEnvelope>,\n input?: RecordEnvelope,\n ) {\n const writer = yield* CurrentRunWriter;\n const append = input === undefined ? writer.append : writer.appendInput;\n\n if (append === undefined)\n return yield* RunJournalError.make({ message: \"Fresh startup requires an input publisher\" });\n const runId = runIdForSubmission(submission.submissionId);\n const recordId = runStartedRecordId(runId);\n const existing = yield* readRunStart(submission.threadId, runId, operational);\n let start: RecordEnvelope;\n let allowance = maxDurationMillis;\n let committed = existing !== undefined;\n\n if (existing !== undefined && existing.payload._tag === \"RunStarted\") {\n allowance = existing.payload.maxDurationMillis;\n start = existing;\n } else {\n const executionStarted = records.some(\n ({ record: { payload } }) =>\n payload._tag !== \"UserInputRecorded\" &&\n payload._tag !== \"RunContinuation\" &&\n \"runId\" in payload &&\n payload.runId === runId,\n );\n\n if (executionStarted) {\n return yield* RunJournalError.make({\n message: `Run ${runId} has execution records but no canonical start; retain the request for evidence repair`,\n });\n }\n start = yield* makeEnvelope(\n recordId,\n RunStartedRecord.make({ runId, maxDurationMillis, policyAccountingVersion: 1 }),\n );\n }\n\n // The first model dispatch commits start and evaluated context in one existing boundary.\n // If preparation fails first, terminal handling still publishes the start exactly once.\n const commit = Effect.fnUntraced(function* (context?: RecordEnvelope) {\n if (committed) {\n if (context !== undefined)\n yield* appendBatch(\n writer,\n CanonicalBatch.make({\n batchId: decodeBatchIdSync(context.recordId),\n producerId: config.producerId,\n records: [context],\n }),\n );\n\n return;\n }\n yield* hit(\"run:before-start-append\");\n yield* appendBatch(\n { threadId: writer.threadId, append },\n CanonicalBatch.make({\n batchId:\n input === undefined\n ? runStartedBatchId(runId)\n : submissionInputBatchId(submission.submissionId),\n producerId: config.producerId,\n records: [\n input ?? start,\n ...(input === undefined ? [] : [start]),\n ...(context === undefined ? [] : [context]),\n ],\n }),\n );\n if (input !== undefined) yield* hit(\"input:after-canonical-append\");\n committed = true;\n yield* hit(\"run:after-start-append\");\n });\n\n return {\n publication: CurrentRunStart.of({ commit }),\n timing: {\n startedAt: start.createdAt,\n // Downtime is not execution. Reuse the original per-Attempt allowance without\n // moving the Run start or resetting journaled turn, Tool or cost accounting.\n deadline: records.some(\n ({ record }) =>\n record.payload._tag === \"RunDurationExhausted\" && record.payload.runId === runId,\n )\n ? start.createdAt\n : DateTime.addDuration(yield* DateTime.now, Duration.millis(allowance)),\n } satisfies RunTiming,\n };\n });\n\n /**\n * Cross-lane drive-forward after one child Submission settles (spec §12 step 10): the child's\n * canonical Settlement is already durable, so the idempotent `recordChildSettled` wake is the\n * durable notification — `suspended(WaitingForChild) → input-applied` once every listed child\n * settled — and the parent-lane wake hint is liveness only. Invoked after the exact canonical\n * append but BEFORE child ledger finalization: once a child may become terminal, its parent's\n * durable marker and maintenance generation already exist. Finalization replays the same\n * notification for single-store parent re-suspension races; `ResumeWaitingParent` remains the\n * repair for older data and any already-recorded canonical settlement.\n */\n const notifyParentOfChildSettlement = Effect.fnUntraced(function* (\n submission: SubmissionSnapshot,\n record: RecordEnvelope,\n ): Effect.fn.Return<void, LedgerError> {\n const admission = submission.messageAdmission;\n const worker = submission.workerAdmission;\n\n const key =\n admission === undefined\n ? worker === undefined\n ? undefined\n : {\n ownerThreadId: worker.origin.source.threadId,\n messageId: worker.messageId,\n }\n : Schema.is(MessageAdmission)(admission)\n ? admission.message\n : {\n ownerThreadId:\n admission._tag === \"WorkerCompletion\"\n ? admission.report.worker.threadId\n : admission.worker.threadId,\n messageId: submission.idempotencyKey,\n };\n\n // Commit the destination's exact canonical acknowledgement at the source before\n // making the ledger terminal. A failed/lost response is replayed during recovery.\n if (key !== undefined && Option.isSome(deliveries)) {\n const settled = yield* settlementPayloadFromRecord(record, submission.submissionId);\n\n yield* deliveries.value\n .change(key, {\n _tag: \"Complete\",\n nowMillis: yield* Clock.currentTimeMillis,\n admissionKey: submission.idempotencyKey,\n inputDigest: submission.inputDigest,\n receipt: Receipt.make({\n threadId: submission.threadId,\n submissionId: submission.submissionId,\n receiptId: submission.receiptId,\n queueSequence: submission.queueSequence,\n }),\n settlement: Settlement.make({\n submissionId: settled.submissionId,\n receiptId: settled.receiptId,\n settlementId: settled.settlementId,\n outcome: settled.outcome,\n settledAt: record.createdAt,\n ...(settled.outcome === \"failed\" ? { failure: settled.result } : {}),\n ...(settled.usageSummary === undefined ? {} : { usageSummary: settled.usageSummary }),\n ...(settled.runDisposition === undefined\n ? {}\n : { runDisposition: settled.runDisposition }),\n }),\n })\n .pipe(\n Effect.catchCause((cause) =>\n Effect.failCause(\n Cause.map(cause, (error) =>\n LedgerError.make({\n operation: \"delivery-completion\",\n message: \"Destination acknowledgement remains pending\",\n cause: error,\n }),\n ),\n ),\n ),\n );\n }\n if (submission.workerAdmission?.origin.reporting?.mode === \"standard\")\n yield* updateRuntime.repairRun(submission.threadId, submission.submissionId).pipe(\n Effect.mapError(() =>\n LedgerError.make({\n operation: \"update-delivery\",\n message: \"Update delivery remains pending\",\n }),\n ),\n );\n yield* workerRuntime\n .completeInput(submission)\n .pipe(\n Effect.mapError((cause) =>\n LedgerError.make({ operation: \"worker-completion\", message: cause.reason, cause }),\n ),\n );\n const linkage = submission.parentLinkage;\n\n if (linkage === undefined) return;\n\n const outcome = yield* ledger.recordChildSettled(\n ChildSettledNotification.make({\n parentSubmissionId: linkage.parentSubmissionId,\n childSubmissionId: submission.submissionId,\n }),\n );\n\n if (outcome === \"still-waiting\") return;\n\n const parent = yield* ledger.lookup(\n SubmissionLookupById.make({ submissionId: linkage.parentSubmissionId }),\n );\n\n if (Option.isSome(parent)) {\n yield* wake.notify(parent.value.threadId);\n }\n });\n\n const settleOneJoined = Effect.fnUntraced(function* (\n ctx: AttemptAppendContext,\n hostSettlement: SubmissionSettledRecord,\n joined: RecoverySnapshot,\n ): Effect.fn.Return<Settlement, DurableWorkerFailure> {\n const hostSubmissionId = hostSettlement.submissionId;\n const outcome = hostSettlement.outcome;\n const submission = joined.submission;\n const submissionId = submission.submissionId;\n const settlementId = submissionSettlementId(submissionId);\n\n const payload = yield* Schema.decodeEffect(SubmissionSettledRecord)(\n SubmissionSettled.make({\n submissionId,\n settlementId,\n receiptId: submission.receiptId,\n outcome,\n runId: runIdForSubmission(hostSubmissionId),\n ...(hostSettlement.outcome === \"failed\" ? { result: hostSettlement.result } : {}),\n }),\n ).pipe(Effect.orDie);\n\n const envelope = yield* makeEnvelope(submissionSettlementRecordId(submissionId), payload);\n\n yield* hit(\"terminalize:before-publication\");\n\n const published = yield* publicationFor(ctx, submissionId, {\n _tag: \"Joined\",\n hostSubmissionId,\n })(\n CanonicalBatch.make({\n batchId: submissionSettlementBatchId(submissionId),\n producerId: config.producerId,\n records: [envelope],\n }),\n );\n\n const record = published.record;\n\n yield* wake.notify(ctx.threadId, \"progress\");\n yield* hit(\"terminalize:after-canonical-append\");\n yield* notifyParentOfChildSettlement(submission, record);\n\n const settlement = yield* ledger.finalizeSettlement(\n SettlementFinalization.make({ submissionId, settlementId }),\n );\n\n yield* wake.notify(submission.threadId);\n yield* notifyParentOfChildSettlement(submission, record);\n\n return settlement;\n });\n\n /** Every joined receipt publishes the host outcome; canonical history repairs any lost finalization. */\n const settleJoinedSubmissions = Effect.fnUntraced(function* (\n ctx: AttemptAppendContext,\n hostSettlement: SubmissionSettledRecord,\n ): Effect.fn.Return<void, DurableWorkerFailure> {\n const hostSubmissionId = hostSettlement.submissionId;\n\n const snapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: hostSubmissionId }),\n );\n\n for (const join of snapshot.joins) {\n if (join.state !== \"joined\") continue;\n\n const joinedSnapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: join.submissionId }),\n );\n\n if (joinedSnapshot.submission.state === \"settled\") continue;\n yield* settleOneJoined(ctx, hostSettlement, joinedSnapshot);\n }\n });\n\n /**\n * Terminalization: publish the single canonical settlement, complete notifications, then\n * finalize its ledger projection, release the lane, and hint waiters.\n * Submissions joined to this host Run settle with the host outcome immediately after\n * (plan §2.5); recovery completes any prefix of that loop.\n */\n const terminalize = Effect.fnUntraced(function* (\n ctx: AttemptAppendContext,\n submission: SubmissionSnapshot,\n publishSettlement: PublishSettlement,\n outcome: AttemptOutcome,\n includeRunId: boolean,\n afterCanonical?: Effect.Effect<void, DurableWorkerFailure>,\n ): Effect.fn.Return<Settlement, DurableWorkerFailure> {\n const submissionId = submission.submissionId;\n const settlementId = submissionSettlementId(submissionId);\n\n const payload = yield* Schema.decodeEffect(SubmissionSettledRecord)(\n SubmissionSettled.make({\n submissionId,\n settlementId,\n receiptId: submission.receiptId,\n outcome: outcome._tag,\n ...(includeRunId ? { runId: runIdForSubmission(submissionId) } : {}),\n ...(outcome._tag === \"aborted\" ? {} : { result: outcome.result }),\n ...(includeRunId &&\n outcome._tag === \"completed\" &&\n outcome.finishReason === undefined &&\n outcome.runDisposition !== undefined\n ? { runDisposition: outcome.runDisposition }\n : {}),\n ...(outcome._tag === \"completed\" && outcome.finishReason !== undefined\n ? { finishReason: outcome.finishReason }\n : {}),\n ...(outcome._tag === \"completed\" && outcome.exhausted !== undefined\n ? { exhausted: outcome.exhausted }\n : {}),\n ...(outcome._tag === \"failed\" && outcome.policyLimit !== undefined\n ? { policyLimit: outcome.policyLimit }\n : {}),\n ...(outcome.usageSummary === undefined ? {} : { usageSummary: outcome.usageSummary }),\n ...(includeRunId &&\n outcome.uncommittedModelUsage !== undefined &&\n outcome.uncommittedModelUsage.length > 0\n ? { uncommittedModelUsage: outcome.uncommittedModelUsage }\n : {}),\n }),\n ).pipe(Effect.orDie);\n\n const record = yield* makeEnvelope(submissionSettlementRecordId(submissionId), payload);\n\n yield* hit(\"terminalize:before-publication\");\n\n const published = yield* publishSettlement(\n CanonicalBatch.make({\n batchId: submissionSettlementBatchId(submissionId),\n producerId: config.producerId,\n records: [record],\n }),\n );\n\n yield* wake.notify(ctx.threadId, \"progress\");\n yield* hit(\"terminalize:after-canonical-append\");\n const canonicalSettlement = yield* settlementPayloadFromRecord(published.record, submissionId);\n\n yield* notifyParentOfChildSettlement(submission, published.record);\n if (afterCanonical !== undefined && canonicalSettlement.outcome === \"completed\")\n yield* afterCanonical;\n\n const settlement = yield* ledger.finalizeSettlement(\n SettlementFinalization.make({ submissionId, settlementId }),\n );\n\n yield* wake.notify(submission.threadId);\n yield* notifyParentOfChildSettlement(submission, published.record);\n yield* settleJoinedSubmissions(\n yield* attemptContextAtTail(submission.threadId),\n canonicalSettlement,\n );\n\n return materializeSettlement(settlement, published.record);\n });\n\n /** Canonical settlement exists: rebuild the ledger from history, never the reverse (DUR-015). */\n const finalizeFromHistory = Effect.fnUntraced(function* (\n submission: SubmissionSnapshot,\n record: RecordEnvelope,\n ): Effect.fn.Return<Settlement, LedgerError | SettlementConflict> {\n const canonicalSettlement = yield* settlementPayloadFromRecord(record, submission.submissionId);\n\n yield* notifyParentOfChildSettlement(submission, record);\n\n const settlement = yield* ledger.finalizeSettlement(\n SettlementFinalization.make({\n submissionId: submission.submissionId,\n settlementId: canonicalSettlement.settlementId,\n }),\n );\n\n yield* wake.notify(submission.threadId);\n yield* notifyParentOfChildSettlement(submission, record);\n\n return materializeSettlement(settlement, record);\n });\n\n /**\n * Durable abort of owned work: canonical `AbortRequested` first, then `ToolCallUnknown` audit\n * records for every open ordinary Tool Call (abort settles the obligation but never asserts\n * external rollback, durability §13), then settle aborted.\n */\n const settleAborted = Effect.fnUntraced(function* (\n ctx: AttemptAppendContext,\n submission: SubmissionSnapshot,\n publishSettlement: PublishSettlement,\n intent: AbortIntent,\n evidence: RecoveryEvidence,\n knownIds: Set<string>,\n ): Effect.fn.Return<Settlement, DurableWorkerFailure> {\n if (!evidence.abortRecorded) {\n yield* appendAbortRecord(ctx, intent);\n }\n if (evidence.openToolCalls.length > 0) {\n yield* appendUnknownRecords(\n ctx,\n submission.submissionId,\n knownIds,\n evidence.openToolCalls,\n \"The Submission was aborted while this ordinary Tool call had no canonical outcome; abort never asserts external rollback\",\n );\n }\n\n return yield* terminalize(\n ctx,\n submission,\n publishSettlement,\n { _tag: \"aborted\" },\n evidence.inputRecorded,\n );\n });\n\n /** Map a ledger conflict outside `DurableWorkerFailure` into the coordinator failure family. */\n const conflictToLedgerError =\n (operation: string) =>\n (conflict: { readonly _tag: string; readonly message?: string }): LedgerError =>\n LedgerError.make({\n operation,\n message: `${conflict._tag}${conflict.message === undefined ? \"\" : `: ${conflict.message}`}`,\n cause: conflict,\n });\n\n /**\n * Append the child Thread's immutable lineage record (spec §12 step 6, §11): its own\n * single-record batch under `subagent-lineage:{childThreadId}` so the generic\n * `thread-created:{cid}` batch identity is never contradicted. Idempotent by record\n * identity; a racing append is re-proved from the log. A claim of the admitted child may\n * advance only its fence, so bounded retries acquire the current tail before appending.\n */\n const ensureChildLineage = Effect.fnUntraced(\n function* (\n parent: SubmissionSnapshot,\n request: SubagentRequested,\n childRecords: ReadonlyArray<CanonicalRecordEnvelope>,\n ): Effect.fn.Return<void, DurableWorkerFailure> {\n const recordId = subagentLineageRecordId(request.childThreadId);\n\n if (childRecords.some((envelope) => envelope.record.recordId === recordId)) return;\n\n const envelope = yield* makeEnvelope(\n recordId,\n SubagentLineageRecorded.make({\n parentLink: SubagentParentLink.make({\n delegationId: request.delegationId,\n parentAgentId: parent.agentId,\n parentThreadId: parent.threadId,\n parentRunId: request.runId,\n parentToolCallId: request.toolCallId,\n depth: request.depth ?? CHILD_DELEGATION_DEPTH,\n }),\n parentSubmissionId: parent.submissionId,\n childDefinitionDigests: request.targetDigests,\n childInputDigest: request.childInputDigest,\n grantDigest: request.grantDigest,\n ...(request.toolCallAllowance === undefined\n ? {}\n : { toolCallAllowance: request.toolCallAllowance }),\n ...(request.policy === undefined ? {} : { policy: request.policy }),\n ...(request.budget === undefined ? {} : { budget: request.budget }),\n ...(request.grant === undefined ? {} : { grant: request.grant }),\n }),\n );\n\n const tail = yield* store.inspectTail(\n ThreadTailRequest.make({ threadId: request.childThreadId }),\n );\n\n yield* store\n .append(\n AppendRequest.make({\n threadId: request.childThreadId,\n batch: CanonicalBatch.make({\n batchId: subagentLineageBatchId(request.childThreadId),\n producerId: config.producerId,\n records: [envelope],\n }),\n expectedTailSequence: tail.tailSequence,\n }),\n )\n .pipe(\n Effect.catchTag(\"AppendConflict\", (error) =>\n // A racing establishment pass (or the child's own claimed worker) advanced the\n // log; the deterministic identity means the record either exists or the next\n // pass re-proves it — verify instead of trusting the race blindly.\n readControl(request.childThreadId, []).pipe(\n Effect.flatMap((current) =>\n current.some((candidate) => candidate.record.recordId === recordId)\n ? Effect.void\n : Effect.fail(error),\n ),\n ),\n ),\n Effect.andThen(wake.notify(request.childThreadId)),\n Effect.asVoid,\n );\n },\n (effect) =>\n effect.pipe(\n Effect.retry({\n times: 7,\n while: (error) => error._tag === \"AppendConflict\",\n }),\n ),\n );\n\n /** Where one idempotent child admission pass ended (spec §12 steps 4-8). */\n type ChildAdmissionOutcome =\n | {\n readonly _tag: \"established\";\n readonly childSubmissionId: SubmissionId;\n readonly receiptId: ReceiptId;\n }\n | { readonly _tag: \"indeterminate\"; readonly reason: string };\n\n /**\n * Complete (or replay) the child-admission half of establishment from the canonical\n * `SubagentRequested` payload alone — no live delegation handler is required (D3): the\n * `resolveAdmission` tri-state gate (SUB-031), the idempotency-keyed `admit` with immutable\n * parent linkage, child Thread materialization plus the immutable lineage record, and\n * readiness. Every step is get-or-create; a replay converges on the one existing child\n * (SUB-016) and an `indeterminate` answer NEVER admits a second child.\n */\n const establishChildFromRequest = Effect.fnUntraced(function* (\n parent: SubmissionSnapshot,\n request: SubagentRequested,\n allowAdmission = true,\n ): Effect.fn.Return<ChildAdmissionOutcome, DurableWorkerFailure> {\n const principal = decodePrincipalSync(request.childPrincipal);\n const idempotencyKey = decodeIdempotencyKeySync(request.childIdempotencyKey);\n\n const resolution = yield* ledger.resolveAdmission(\n SubmissionLookupByKey.make({\n threadId: request.childThreadId,\n principal,\n idempotencyKey,\n }),\n );\n\n let childSubmissionId: SubmissionId;\n let receiptId: ReceiptId;\n\n switch (resolution._tag) {\n case \"Indeterminate\": {\n return { _tag: \"indeterminate\", reason: resolution.reason };\n }\n case \"NotAdmitted\": {\n if (!allowAdmission) {\n return {\n _tag: \"indeterminate\",\n reason: \"The expired parent cannot admit a new child\",\n };\n }\n\n const admitted: AdmissionResult = yield* ledger\n .admit(\n AdmissionRequest.make({\n threadId: request.childThreadId,\n principal,\n idempotencyKey,\n agentId: request.targetAgentId,\n agentDigests: request.targetDigests,\n deploymentId: config.deploymentId,\n inputPayload: request.childInput,\n inputDigest: request.childInputDigest,\n parentLinkage: ParentLinkage.make({\n parentSubmissionId: parent.submissionId,\n parentToolCallId: request.toolCallId,\n }),\n }),\n )\n .pipe(\n Effect.catchTag(\n \"AdmissionConflict\",\n conflictToLedgerError(\"establishChildFromRequest\"),\n ),\n );\n\n childSubmissionId = admitted.submissionId;\n receiptId = admitted.receiptId;\n break;\n }\n case \"Admitted\": {\n // The one existing child: verify the immutable admission facts against the canonical\n // request before reattaching — a divergent row can never be \"the same child\"\n // (fail-closed; identifiers are never capabilities, D10).\n const child = resolution.submission;\n const linkage = child.parentLinkage;\n\n if (\n child.agentId !== request.targetAgentId ||\n !definitionDigestsEqual(child.agentDigests, request.targetDigests) ||\n child.inputDigest !== request.childInputDigest ||\n linkage === undefined ||\n linkage.parentSubmissionId !== parent.submissionId ||\n linkage.parentToolCallId !== request.toolCallId\n ) {\n return yield* LedgerError.make({\n operation: \"establishChildFromRequest\",\n message: `The admitted child ${child.submissionId} diverges from the canonical SubagentRequested record for Tool Call ${request.toolCallId}; establishment fails closed (SUB-016)`,\n });\n }\n childSubmissionId = child.submissionId;\n receiptId = child.receiptId;\n break;\n }\n }\n yield* hit(\"subagent:after-admit\");\n yield* materializeThread(request.childThreadId);\n yield* ensureThreadCreated(request.childThreadId, request.targetAgentId, request.targetDigests);\n const childRead = yield* readAllTolerant(request.childThreadId, []);\n\n yield* ensureChildLineage(parent, request, childRead.records);\n yield* ledger.markReady(MarkReadyRequest.make({ submissionId: childSubmissionId }));\n yield* hit(\"subagent:after-child-ready\");\n yield* wake.notify(request.childThreadId);\n\n return { _tag: \"established\", childSubmissionId, receiptId };\n });\n\n /**\n * Bounded usage summary rebuilt from canonical child evidence (D11 structural dimensions).\n * The two finite counters always satisfy the persistence bounds, so a decode failure is a\n * defect (`orDie`), matching the file's `annotateRepair` pattern for provably-valid inputs.\n */\n const childUsageSummaryOf = (\n childRecords: ReadonlyArray<CanonicalRecordEnvelope>,\n childRunId: RunId,\n ): Effect.Effect<PersistedJson> => {\n let turns = 0;\n let toolCalls = 0;\n\n for (const envelope of childRecords) {\n const payload = envelope.record.payload;\n\n if (payload._tag === \"ModelResponseRecorded\" && payload.runId === childRunId) turns += 1;\n if (payload._tag === \"ToolCallSettled\" && payload.runId === childRunId) toolCalls += 1;\n }\n\n return decodePersisted({ turns, toolCalls }).pipe(Effect.orDie);\n };\n\n /** The coordinator's bounded `{errorTag, message}` projection of a non-completed child. */\n const boundedChildFailureResult = (\n payload: SubmissionSettledRecord,\n childSubmissionId: SubmissionId,\n ): Effect.Effect<PersistedJson> => {\n if (payload.outcome === \"failed\") {\n return Effect.succeed(payload.result);\n }\n\n return decodePersisted({\n errorTag: \"SubagentAborted\",\n message: `Attached child ${childSubmissionId} settled aborted`,\n }).pipe(Effect.orDie);\n };\n\n /** One verified child Settlement, ready to join (spec §12 join steps 1-3). */\n interface VerifiedChildSettlement {\n readonly outcome: SettlementOutcome;\n /** Child terminal output for `completed`; the bounded `{errorTag, message}` projection otherwise. */\n readonly encodedResult: PersistedJson;\n readonly settlement: SubmissionSettledRecord;\n readonly childRecords: ReadonlyArray<CanonicalRecordEnvelope>;\n }\n\n const verifiedChildUsage = Effect.fnUntraced(function* (\n verified: VerifiedChildSettlement,\n childRunId: RunId,\n ) {\n const reports = childUsageReportsOf(subagentRecordsOf(verified.childRecords, childRunId));\n\n const delegatedUsage = yield* sumRunTotals(\n reports.flatMap(({ report }) => [report.usage, report.delegatedUsage]),\n ).pipe(Effect.catchTag(\"UsageAggregationError\", () => Effect.succeed(unknownRunTotals())));\n\n return RunUsageReport.make({\n usage:\n verified.settlement.usageSummary === undefined\n ? unknownRunTotals()\n : runTotalsFromSummary(verified.settlement.usageSummary),\n delegatedUsage,\n });\n });\n\n type ChildVerification =\n | { readonly _tag: \"verified\"; readonly value: VerifiedChildSettlement }\n | { readonly _tag: \"mismatch\"; readonly message: string };\n\n /**\n * §1.6 join verification, fail-closed (SUB-019/SUB-023, D10): the child's CANONICAL\n * Settlement and lineage records are read from the child Thread Log — cached ledger\n * state never fabricates a Settlement — and every identity/digest is checked against the\n * canonical `SubagentRequested` payload: Parent Link identity, target agent, stored\n * definition digests, input/grant digests, settlement identity, and the settlement record\n * digest pinned by the child's reservation. Any mismatch is a typed verification failure.\n */\n const verifySettledChild = Effect.fnUntraced(function* (\n parent: SubmissionSnapshot,\n request: SubagentRequested,\n childSubmissionId: SubmissionId,\n ): Effect.fn.Return<ChildVerification, DurableWorkerFailure> {\n const mismatch = (message: string): ChildVerification => ({ _tag: \"mismatch\", message });\n\n // The child's lane state crosses the store boundary through `lookup` — a status check on\n // the child's owning ledger — because recovery snapshots are lane-local by construction:\n // on Cloudflare the child Thread lives in a different Durable Object whose\n // operational rows are not readable across the boundary (deployment §11). The child's\n // CANONICAL Settlement, read below from its Thread Log, remains the only\n // cross-lane verification authority (spec §12 join step 1, SUB-019, DUR-015).\n const childLookup = yield* ledger.lookup(\n SubmissionLookupById.make({ submissionId: childSubmissionId }),\n );\n\n if (Option.isNone(childLookup)) {\n return yield* LedgerError.make({\n operation: \"verifySettledChild\",\n message: `Attached child ${childSubmissionId} is unknown to its owning Submission Ledger`,\n });\n }\n const child = childLookup.value;\n\n if (child.threadId !== request.childThreadId) {\n return mismatch(\"The child Thread does not match the intended child identity\");\n }\n if (child.agentId !== request.targetAgentId) {\n return mismatch(\"The child Agent identity does not match the declared delegation target\");\n }\n if (!definitionDigestsEqual(child.agentDigests, request.targetDigests)) {\n return mismatch(\"The child definition digests do not match the stored target digests\");\n }\n if (child.inputDigest !== request.childInputDigest) {\n return mismatch(\"The child input digest does not match the canonical request\");\n }\n const linkage = child.parentLinkage;\n\n if (\n linkage === undefined ||\n linkage.parentSubmissionId !== parent.submissionId ||\n linkage.parentToolCallId !== request.toolCallId\n ) {\n return mismatch(\"The child admission linkage does not name this parent Tool Call\");\n }\n const childRecords = yield* readControl(request.childThreadId, [child.submissionId]);\n\n const lineageEnvelope = childRecords.find(\n (envelope) => envelope.record.recordId === subagentLineageRecordId(request.childThreadId),\n );\n\n const lineage = lineageEnvelope?.record.payload;\n\n if (lineage === undefined || lineage._tag !== \"SubagentLineageRecorded\") {\n return mismatch(\"The child Thread carries no immutable lineage record\");\n }\n if (\n lineage.parentLink.delegationId !== request.delegationId ||\n lineage.parentLink.parentAgentId !== parent.agentId ||\n lineage.parentLink.parentThreadId !== parent.threadId ||\n lineage.parentLink.parentRunId !== request.runId ||\n lineage.parentLink.parentToolCallId !== request.toolCallId ||\n lineage.parentLink.depth !== (request.depth ?? CHILD_DELEGATION_DEPTH) ||\n lineage.parentSubmissionId !== parent.submissionId\n ) {\n return mismatch(\"The child Parent Link does not name exactly this parent Run and Tool Call\");\n }\n if (\n !definitionDigestsEqual(lineage.childDefinitionDigests, request.targetDigests) ||\n lineage.childInputDigest !== request.childInputDigest ||\n lineage.grantDigest !== request.grantDigest ||\n lineage.toolCallAllowance !== request.toolCallAllowance ||\n !Equal.equals(lineage.policy, request.policy) ||\n !Equal.equals(lineage.budget, request.budget) ||\n !Equal.equals(lineage.grant, request.grant)\n ) {\n return mismatch(\"The child lineage digests or allowance do not match the canonical request\");\n }\n\n const settlementEnvelope = childRecords.find(\n (envelope) => envelope.record.recordId === submissionSettlementRecordId(childSubmissionId),\n );\n\n const settlement = settlementEnvelope?.record.payload;\n\n if (settlement === undefined || settlement._tag !== \"SubmissionSettled\") {\n return mismatch(\"The child has no canonical Settlement record\");\n }\n if (\n settlement.submissionId !== childSubmissionId ||\n settlement.settlementId !== submissionSettlementId(childSubmissionId) ||\n settlement.receiptId !== child.receiptId\n ) {\n return mismatch(\"The child Settlement identity does not match the child Receipt\");\n }\n // No parent-side crosscheck against the child's settlement RESERVATION row exists here:\n // the reservation lives in the child's own store, invisible across the Object boundary on\n // Cloudflare, and its byte-identity with the canonical record is the child store's own\n // conformance-tested reserve→append→finalize invariant (DUR-011) — never a parent\n // obligation. The canonical Settlement verified above is the sole cross-lane authority.\n if (settlement.outcome === \"completed\" && settlement.result === undefined) {\n return mismatch(\"The completed child Settlement carries no terminal output\");\n }\n\n const encodedResult =\n settlement.outcome === \"completed\" && settlement.result !== undefined\n ? settlement.result\n : yield* boundedChildFailureResult(settlement, childSubmissionId);\n\n return {\n _tag: \"verified\",\n value: { outcome: settlement.outcome, encodedResult, settlement, childRecords },\n };\n });\n\n /**\n * Apply the frozen accounting decision to one reservation (spec §12 join step 6, DUR-015):\n * `beginChildBudgetRelease` freezes it exactly once (an identical replay is a no-op) and\n * `releaseChildBudget` applies it exactly once — budget stays unavailable until repair, never\n * available twice.\n */\n const completeWorkHandoff = Effect.fnUntraced(function* (\n threadId: ThreadId,\n preparationId: RecordId,\n ownerId = workId(\"handoff\", preparationId),\n ): Effect.fn.Return<void, DurableWorkerFailure> {\n const id = decodeRecordId(`work-handoff-completed:${preparationId}`);\n\n for (let attempt = 0; attempt < 16; attempt++) {\n const existing = yield* getRecord({ threadId, recordId: id }).pipe(\n Effect.provideService(ThreadReader, reader),\n );\n\n if (Option.isSome(existing)) {\n const payload = existing.value.record.payload;\n\n if (\n payload._tag !== \"WorkHandoffCompleted\" ||\n payload.preparationId !== preparationId ||\n payload.ownerId !== ownerId\n )\n return yield* ThreadStoreError.make({\n operation: \"complete work handoff\",\n message: \"The closure identity conflicts with its owner\",\n });\n\n return;\n }\n const ctx = yield* attemptContextAtTail(threadId);\n\n const envelope = yield* makeEnvelope(\n id,\n WorkHandoffCompleted.make({ preparationId, ownerId }),\n );\n\n const committed = yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: decodeBatchId(`work-handoff-completed:${preparationId}`),\n producerId: config.producerId,\n records: [envelope],\n }),\n ).pipe(\n Effect.as(true),\n Effect.catchTag(\"AppendConflict\", () => Effect.succeed(false)),\n );\n\n if (committed) return;\n }\n\n return yield* ThreadStoreError.make({\n operation: \"complete work handoff\",\n message: \"The canonical tail remained contended\",\n });\n });\n\n const applyReservationRelease = Effect.fnUntraced(function* (\n reservationId: ChildReservationId,\n accounting: PersistedJson,\n joinedOwner?: {\n readonly threadId: ThreadId;\n readonly runId: RunId;\n readonly toolCallId: ToolCallId;\n },\n ): Effect.fn.Return<void, DurableWorkerFailure> {\n yield* ledger\n .beginChildBudgetRelease(BeginChildBudgetReleaseRequest.make({ reservationId, accounting }))\n .pipe(\n Effect.catchTag(\n \"ChildReservationConflict\",\n conflictToLedgerError(\"beginChildBudgetRelease\"),\n ),\n );\n yield* hit(\"subagent:after-release-pending\");\n yield* ledger\n .releaseChildBudget(ReleaseChildBudgetRequest.make({ reservationId }))\n .pipe(\n Effect.catchTag(\"ChildReservationConflict\", conflictToLedgerError(\"releaseChildBudget\")),\n );\n yield* hit(\"subagent:after-release\");\n if (joinedOwner !== undefined) {\n const preparationId = subagentJoinedRecordId(joinedOwner.runId, joinedOwner.toolCallId);\n\n const joined = yield* getRecord({\n threadId: joinedOwner.threadId,\n recordId: preparationId,\n }).pipe(Effect.provideService(ThreadReader, reader));\n\n if (Option.isSome(joined)) {\n if (joined.value.record.payload._tag !== \"SubagentJoined\")\n return yield* RunJournalError.make({ message: \"Child accounting has no canonical join\" });\n yield* completeWorkHandoff(joinedOwner.threadId, preparationId);\n }\n }\n });\n\n /**\n * Release a provably-childless reservation exactly once (spec §13 \"reservation exists,\n * request absent\"): freeze the deterministic zero-consumed decision — a conflict means a\n * different decision already froze first, and the release below applies THAT frozen decision.\n */\n const releaseOrphanReservation = Effect.fnUntraced(function* (\n reservationId: ChildReservationId,\n ): Effect.fn.Return<void, DurableWorkerFailure> {\n yield* ledger\n .beginChildBudgetRelease(\n BeginChildBudgetReleaseRequest.make({\n reservationId,\n accounting: ORPHAN_ZERO_CONSUMED_ACCOUNTING,\n }),\n )\n .pipe(\n Effect.catchTag(\"ChildReservationConflict\", () => Effect.void),\n Effect.asVoid,\n );\n yield* hit(\"subagent:after-release-pending\");\n yield* ledger\n .releaseChildBudget(ReleaseChildBudgetRequest.make({ reservationId }))\n .pipe(\n Effect.catchTag(\"ChildReservationConflict\", conflictToLedgerError(\"releaseChildBudget\")),\n );\n yield* hit(\"subagent:after-release\");\n });\n\n /**\n * Join a settled child after parent abort or expiry without running application handlers.\n * The canonical child outcome stays intact; the parent result records why it cannot continue.\n */\n const joinSettledChildWithoutHandler = Effect.fnUntraced(function* (\n ctx: AttemptAppendContext,\n parent: SubmissionSnapshot,\n knownIds: Set<string>,\n subagent: SubagentCallRecords,\n reservation: ChildBudgetReservationSnapshot,\n toolCallId: ToolCallId,\n childSubmissionId: SubmissionId,\n reason: \"aborted\" | \"duration\" | \"unavailable\",\n ): Effect.fn.Return<void, DurableWorkerFailure> {\n const runId = runIdForSubmission(parent.submissionId);\n const request = subagent.requested.get(toolCallId);\n\n if (request === undefined) {\n return yield* LedgerError.make({\n operation: \"joinSettledChildWithoutHandler\",\n message: `Tool Call ${toolCallId} has an attached child but no canonical SubagentRequested record`,\n });\n }\n const joinedRecordId = subagentJoinedRecordId(runId, toolCallId);\n let finalAccounting: PersistedJson;\n const existing = subagent.joined.get(toolCallId);\n\n if (existing !== undefined) {\n finalAccounting = existing.finalAccounting;\n } else {\n const verification = yield* verifySettledChild(parent, request, childSubmissionId);\n\n if (verification._tag === \"mismatch\") {\n return yield* LedgerError.make({\n operation: \"joinSettledChildWithoutHandler\",\n message: `Child Settlement verification failed for Tool Call ${toolCallId}: ${verification.message}`,\n });\n }\n const verified = verification.value;\n\n // The child's actual outcome and usage remain authoritative even when the parent can\n // no longer project it with the original delegation implementation.\n const boundedResult = yield* decodePersisted(\n reason === \"unavailable\"\n ? {\n _tag: \"ToolUnavailable\",\n toolName: subagent.declaredNames.get(toolCallId) ?? request.delegationId,\n execution: \"unavailable\",\n message: `The original delegation implementation is unavailable. Its original child settled ${verified.outcome}; no replacement child was started.`,\n }\n : {\n errorTag:\n reason === \"aborted\" ? \"SubagentParentAborted\" : \"SubagentParentDurationExceeded\",\n message: boundedText(\n `The parent Submission ${reason === \"aborted\" ? \"aborted\" : \"exceeded its duration\"}; attached child ${childSubmissionId} settled ${verified.outcome}`,\n ),\n },\n ).pipe(Effect.orDie);\n\n finalAccounting = yield* decodePersisted({\n basis: `${reason}-conservative`,\n allocation: reservation.allocation,\n }).pipe(Effect.orDie);\n const childRunId = runIdForSubmission(childSubmissionId);\n\n yield* hit(\"subagent:before-join-append\");\n\n const joinedPayload = SubagentJoined.make({\n runId,\n toolCallId,\n childSubmissionId,\n childSettlementId: verified.settlement.settlementId,\n childOutcome: verified.outcome,\n usageSummary: yield* childUsageSummaryOf(verified.childRecords, childRunId),\n ...(yield* verifiedChildUsage(verified, childRunId)),\n reservationId: reservation.reservationId,\n finalAccounting,\n });\n\n const settledRecordId = toolCallSettledRecordId(runId, request.turn, toolCallId);\n const joinedEnvelope = yield* makeEnvelope(joinedRecordId, joinedPayload);\n\n const settledEnvelope = yield* makeEnvelope(\n settledRecordId,\n ToolCallSettled.make({\n runId,\n toolCallId,\n toolName: subagent.declaredNames.get(toolCallId) ?? request.delegationId,\n result: boundedResult,\n isFailure: true,\n }),\n );\n\n if (!knownIds.has(joinedRecordId)) {\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: subagentJoinBatchId(runId, toolCallId),\n producerId: config.producerId,\n records: [joinedEnvelope, settledEnvelope],\n }),\n ).pipe(\n Effect.catchTag(\"AppendConflict\", () => Effect.void),\n Effect.asVoid,\n );\n knownIds.add(joinedRecordId);\n knownIds.add(settledRecordId);\n subagent.joined.set(toolCallId, joinedPayload);\n yield* hit(\"subagent:after-join-append\");\n }\n }\n yield* applyReservationRelease(reservation.reservationId, finalAccounting, {\n threadId: parent.threadId,\n runId,\n toolCallId,\n });\n });\n\n /**\n * Complete every joined-but-unreleased reservation BEFORE the parent settles (spec §12 join\n * step 6): the canonical `SubagentJoined` accounting authorizes the release (DUR-015), and a\n * parent that settled first would strand the repair — a settled lane classifies `NoAction`.\n * Returns whether any reservation remains unreleased (a reserved row without a canonical\n * join), which must block the settlement (spec §13: a parent never settles across an open\n * child obligation).\n */\n const completeJoinedReleases = Effect.fnUntraced(function* (\n submission: SubmissionSnapshot,\n ): Effect.fn.Return<boolean, DurableWorkerFailure> {\n const snapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: submission.submissionId }),\n );\n\n if (snapshot.childReservations.length === 0) return false;\n const records = yield* readControl(submission.threadId, [submission.submissionId]);\n const subagent = subagentRecordsOf(records, runIdForSubmission(submission.submissionId));\n let open = false;\n\n for (const reservation of snapshot.childReservations) {\n if (reservation.status === \"released\") continue;\n const joined = subagent.joined.get(reservation.parentToolCallId);\n\n if (joined !== undefined) {\n yield* applyReservationRelease(reservation.reservationId, joined.finalAccounting, {\n threadId: submission.threadId,\n runId: runIdForSubmission(submission.submissionId),\n toolCallId: reservation.parentToolCallId,\n });\n continue;\n }\n if (reservation.status === \"releasePending\" && reservation.accounting !== undefined) {\n yield* applyReservationRelease(reservation.reservationId, reservation.accounting, {\n threadId: submission.threadId,\n runId: runIdForSubmission(submission.submissionId),\n toolCallId: reservation.parentToolCallId,\n });\n continue;\n }\n open = true;\n }\n\n return open;\n });\n\n /** Release unused reservations or repair and join existing children, never admit new work. */\n const reconcileRetainedChildren = Effect.fnUntraced(function* (\n ctx: AttemptAppendContext,\n parent: SubmissionSnapshot,\n ownership: RunOwnership,\n unavailableCalls?: ReadonlySet<ToolCallId>,\n ) {\n const snapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: parent.submissionId }),\n );\n\n const records = yield* readControl(parent.threadId, [parent.submissionId]);\n const runId = runIdForSubmission(parent.submissionId);\n const pending = yield* pendingToolBatchFor(records, runId);\n const knownIds = knownRecordIdsOf(records);\n const subagent = subagentRecordsOf(records, runId);\n\n const notExecuted = new Set<ToolCallId>();\n const waiting: Array<WaitingChild> = [];\n const indeterminate = new Set<ToolCallId>();\n\n for (const toolCallId of unavailableCalls ?? []) {\n if (\n snapshot.childReservations.some(\n (reservation) => reservation.parentToolCallId === toolCallId,\n )\n )\n continue;\n if (subagent.requested.has(toolCallId) || subagent.started.has(toolCallId))\n return yield* LedgerError.make({\n operation: \"reconcileRetainedChildren\",\n message: \"Child request has no original reservation\",\n });\n notExecuted.add(toolCallId);\n }\n for (const reservation of snapshot.childReservations) {\n const toolCallId = reservation.parentToolCallId;\n\n if (unavailableCalls !== undefined && !unavailableCalls.has(toolCallId)) continue;\n const joined = subagent.joined.get(toolCallId);\n\n if (joined !== undefined) {\n yield* applyReservationRelease(reservation.reservationId, joined.finalAccounting, {\n threadId: parent.threadId,\n runId,\n toolCallId,\n });\n continue;\n }\n if (reservation.status !== \"reserved\") {\n if (reservation.accounting !== undefined)\n yield* applyReservationRelease(reservation.reservationId, reservation.accounting, {\n threadId: parent.threadId,\n runId,\n toolCallId,\n });\n // An orphan release proves non-admission; it never hides an attached child.\n if (reservation.childSubmissionId !== undefined || subagent.started.has(toolCallId))\n return yield* LedgerError.make({\n operation: \"reconcileRetainedChildren\",\n message: \"Unjoined child reservation was already released\",\n });\n notExecuted.add(toolCallId);\n continue;\n }\n let started = subagent.started.get(toolCallId);\n const request = subagent.requested.get(toolCallId);\n\n if (\n started === undefined &&\n request === undefined &&\n reservation.childSubmissionId === undefined\n ) {\n yield* releaseOrphanReservation(reservation.reservationId);\n notExecuted.add(toolCallId);\n continue;\n }\n const call = pending?.calls.find((candidate) => candidate.id === toolCallId);\n\n if (\n pending === undefined ||\n call === undefined ||\n request === undefined ||\n subagent.declaredNames.get(toolCallId) !== call.name ||\n request.delegationId !== call.name ||\n reservation.parentSubmissionId !== parent.submissionId ||\n request.reservationId !== reservation.reservationId ||\n request.reservationDigest !== reservation.allocationDigest ||\n request.turn !== pending.turn ||\n request.turnId !== pending.turnId\n ) {\n return yield* LedgerError.make({\n operation: \"reconcileRetainedChildren\",\n message: `Tool Call ${toolCallId} has inconsistent canonical child request evidence`,\n });\n }\n if (started === undefined) {\n const resolution = yield* ledger.resolveAdmission(\n SubmissionLookupByKey.make({\n threadId: request.childThreadId,\n principal: decodePrincipalSync(request.childPrincipal),\n idempotencyKey: decodeIdempotencyKeySync(request.childIdempotencyKey),\n }),\n );\n\n if (resolution._tag === \"Indeterminate\") {\n indeterminate.add(toolCallId);\n continue;\n }\n if (resolution._tag === \"NotAdmitted\") {\n if (reservation.childSubmissionId !== undefined) {\n return yield* LedgerError.make({\n operation: \"reconcileRetainedChildren\",\n message: `Tool Call ${toolCallId} has an attachment but no admitted child`,\n });\n }\n if (unavailableCalls === undefined) {\n yield* releaseOrphanReservation(reservation.reservationId);\n notExecuted.add(toolCallId);\n continue;\n }\n }\n\n // A canonical request already authorized this exact idempotent admission. Finish it\n // when its handler is unavailable: a stale admission can still arrive after the lookup,\n // so NotAdmitted cannot justify releasing its reservation. Expiry keeps admission closed.\n const admission = yield* establishChildFromRequest(\n parent,\n request,\n unavailableCalls !== undefined,\n );\n\n if (admission._tag === \"indeterminate\") {\n indeterminate.add(toolCallId);\n continue;\n }\n started = SubagentStarted.make({\n runId,\n toolCallId,\n childThreadId: request.childThreadId,\n childSubmissionId: admission.childSubmissionId,\n childReceiptId: admission.receiptId,\n childRunId: runIdForSubmission(admission.childSubmissionId),\n });\n const startRecordId = subagentStartedRecordId(runId, toolCallId);\n const envelope = yield* makeEnvelope(startRecordId, started);\n\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: subagentStartedBatchId(runId, toolCallId),\n producerId: config.producerId,\n records: [envelope],\n }),\n );\n knownIds.add(startRecordId);\n subagent.started.set(toolCallId, started);\n yield* hit(\"subagent:after-start-append\");\n }\n\n const child = yield* ledger.lookup(\n SubmissionLookupById.make({ submissionId: started.childSubmissionId }),\n );\n\n if (\n Option.isNone(child) ||\n (reservation.childSubmissionId !== undefined &&\n reservation.childSubmissionId !== started.childSubmissionId) ||\n request.childThreadId !== started.childThreadId ||\n started.childThreadId !== child.value.threadId ||\n started.childReceiptId !== child.value.receiptId ||\n started.childRunId !== runIdForSubmission(started.childSubmissionId)\n ) {\n return yield* LedgerError.make({\n operation: \"reconcileRetainedChildren\",\n message: `Tool Call ${call.id} has inconsistent canonical child attachment evidence`,\n });\n }\n yield* ownership\n .attachChildToReservation({\n reservationId: reservation.reservationId,\n childSubmissionId: started.childSubmissionId,\n })\n .pipe(\n Effect.catchTag(\n \"ChildReservationConflict\",\n conflictToLedgerError(\"attachChildToReservation\"),\n ),\n );\n if (child.value.state !== \"settled\") {\n waiting.push(\n WaitingChild.make({ toolCallId, childSubmissionId: started.childSubmissionId }),\n );\n yield* wake.notify(child.value.threadId);\n continue;\n }\n yield* joinSettledChildWithoutHandler(\n ctx,\n parent,\n knownIds,\n subagent,\n reservation,\n started.toolCallId,\n started.childSubmissionId,\n unavailableCalls === undefined ? \"duration\" : \"unavailable\",\n );\n }\n\n return { notExecuted, waiting, indeterminate };\n });\n\n /** Where the request-abort-and-join pass over attached children ended (spec §13.1). */\n type ChildAbortDisposition = \"clear\" | \"waiting\" | \"blocked\";\n\n /**\n * Request-abort-and-join over every attached child of an aborting parent (spec §13.1,\n * SUB-022): joined-but-unreleased reservations finish their idempotent release; settled\n * children join coordinator-side; nonterminal children receive the ONE idempotent durable\n * abort command (the recorded `AbortIntent` row IS the propagation marker, DUR-012) and the\n * parent suspends `waitingForChild` for their joins; an admitted-but-unlinked child is\n * reattached first; a provably-childless reservation releases exactly once; an indeterminate\n * admission blocks honestly — never a second admission, never a fabricated settlement.\n */\n const abortAttachedChildren = Effect.fnUntraced(function* (\n ctx: AttemptAppendContext,\n parent: SubmissionSnapshot,\n ownership: RunOwnership,\n knownIds: Set<string>,\n ): Effect.fn.Return<ChildAbortDisposition, DurableWorkerFailure> {\n const submissionId = parent.submissionId;\n const runId = runIdForSubmission(submissionId);\n\n while (true) {\n const snapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId }),\n );\n\n if (snapshot.childReservations.length === 0) return \"clear\";\n const records = yield* readControl(parent.threadId, [parent.submissionId]);\n\n for (const envelope of records) knownIds.add(envelope.record.recordId);\n const subagent = subagentRecordsOf(records, runId);\n const waiting: Array<WaitingChild> = [];\n let blocked = false;\n\n for (const reservation of snapshot.childReservations) {\n if (reservation.status === \"released\") continue;\n const toolCallId = reservation.parentToolCallId;\n const joined = subagent.joined.get(toolCallId);\n\n if (joined !== undefined) {\n yield* applyReservationRelease(reservation.reservationId, joined.finalAccounting, {\n threadId: parent.threadId,\n runId,\n toolCallId,\n });\n continue;\n }\n if (reservation.status === \"releasePending\") {\n // The decision is already frozen (join or orphan): finish the idempotent release —\n // NEVER re-freeze, a divergent second decision would conflict.\n yield* applyReservationRelease(\n reservation.reservationId,\n reservation.accounting ?? ORPHAN_ZERO_CONSUMED_ACCOUNTING,\n { threadId: parent.threadId, runId, toolCallId },\n );\n continue;\n }\n const request = subagent.requested.get(toolCallId);\n\n let childSubmissionId =\n subagent.started.get(toolCallId)?.childSubmissionId ?? reservation.childSubmissionId;\n\n if (childSubmissionId === undefined) {\n if (request === undefined) {\n // Reservation without a canonical request under abort: provably childless —\n // release the unused allocation exactly once (spec §13/§14).\n yield* releaseOrphanReservation(reservation.reservationId);\n continue;\n }\n const admission = yield* establishChildFromRequest(parent, request);\n\n if (admission._tag === \"indeterminate\") {\n // A child may exist: never release, settle, or re-admit until the authoritative\n // owner answers (SUB-031).\n blocked = true;\n continue;\n }\n childSubmissionId = admission.childSubmissionId;\n }\n\n const child = yield* ledger.lookup(\n SubmissionLookupById.make({ submissionId: childSubmissionId }),\n );\n\n if (Option.isNone(child)) {\n return yield* LedgerError.make({\n operation: \"abortAttachedChildren\",\n message: `Attached child ${childSubmissionId} is unknown to the ledger`,\n });\n }\n if (child.value.state === \"settled\") {\n yield* joinSettledChildWithoutHandler(\n ctx,\n parent,\n knownIds,\n subagent,\n reservation,\n toolCallId,\n childSubmissionId,\n \"aborted\",\n );\n continue;\n }\n yield* ledger\n .requestAbort(\n AbortCommand.make({\n submissionId: childSubmissionId,\n author: SUBAGENT_ABORT_AUTHOR,\n reason: SUBAGENT_ABORT_REASON,\n }),\n )\n .pipe(\n // The child settled concurrently: the one winning Settlement joins on the next\n // pass of this loop (spec §13 \"child terminal races abort\").\n Effect.catchTags({\n SettlementConflict: () => Effect.void,\n JoinedToHost: conflictToLedgerError(\"abortAttachedChildren\"),\n }),\n Effect.asVoid,\n );\n yield* hit(\"subagent:after-child-abort-intent\");\n yield* wake.notify(child.value.threadId);\n waiting.push(WaitingChild.make({ toolCallId, childSubmissionId }));\n }\n if (blocked) return \"blocked\";\n const first = waiting[0];\n\n if (first === undefined) return \"clear\";\n\n const suspension = yield* ownership.suspend(\n WaitingForChildSuspension.make({ children: [first, ...waiting.slice(1)] }),\n );\n\n yield* hit(\"subagent:after-suspend\");\n if (suspension === \"suspended\") return \"waiting\";\n // Every listed child settled before the suspend committed: loop to join the winners.\n }\n });\n\n const failureOutcome = (\n error: unknown,\n cause: Cause.Cause<unknown>,\n context: FailureDiagnostic.Context,\n ): Effect.Effect<AttemptOutcome> =>\n Schema.decodeEffect(SettlementFailureDiagnostic)({\n errorTag: errorTagOf(error).slice(0, 256) || \"UnknownError\",\n message: errorMessageOf(error).slice(0, MAX_FAILURE_MESSAGE_LENGTH),\n diagnostic: FailureDiagnostic.capture(cause),\n context: FailureDiagnostic.captureContext(context),\n }).pipe(\n // The exact diagnostic Schema admits only causal fields, never arbitrary provider payloads.\n Effect.orDie,\n Effect.map((result) => ({\n _tag: \"failed\" as const,\n // Full private diagnostics are optional. A fixed bounded summary always fits the\n // space retained before dispatch; the original live Cause was already logged.\n result:\n utf8ByteLength(JSON.stringify(result)) <= 64 * 1024\n ? result\n : SettlementFailureDiagnostic.make({\n errorTag: result.errorTag,\n message: result.message.slice(0, 1_024),\n ...(result.context === undefined ? {} : { context: result.context }),\n }),\n // A hard-rail policy failure keeps its typed limit durable (RUN-011):\n // the bounded message stays diagnostic, never the dimension authority.\n ...Option.match(decodePolicyFailureSafely(error), {\n onNone: () => ({}),\n onSome: ({ limit }) => ({ policyLimit: limit }),\n }),\n })),\n );\n\n const halt = <A, R>(\n effect: Effect.Effect<A, DurableWorkerFailure, R>,\n ): Effect.Effect<A, CoordinatorHalt, R> =>\n Effect.catchCause(effect, (cause) =>\n Effect.failCause(Cause.map(cause, (failure) => new CoordinatorHalt(failure))),\n );\n\n /**\n * Record incomplete provider accounting once before recovery can repeat inference. A saved\n * input without a settled Run may have lost a response; no Attempt history is needed.\n */\n const appendInterruptedAudit = Effect.fnUntraced(function* (\n ctx: AttemptAppendContext,\n runId: ReturnType<typeof runIdForSubmission>,\n knownIds: Set<string>,\n ): Effect.fn.Return<void, DurableWorkerFailure> {\n const recordId = modelResponseInterruptedRecordId(runId);\n\n if (knownIds.has(recordId)) return;\n\n const envelope = yield* makeEnvelope(\n recordId,\n ModelResponseInterrupted.make({\n runId,\n }),\n );\n\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: modelResponseInterruptedBatchId(runId),\n producerId: config.producerId,\n records: [envelope],\n }),\n ).pipe(\n Effect.catchTag(\"AppendConflict\", () => Effect.void),\n Effect.asVoid,\n );\n knownIds.add(recordId);\n });\n\n const runModel = Effect.fnUntraced(\n /**\n * Drive the shared interpreter Effect with history rebuilt by the run journal, commit\n * each Turn under the local owner, and watch for durable abort intent. Engine Run failures settle `failed`; coordinator failures abort the\n * Attempt cleanly with the obligation still owed.\n *\n * The interpreter supplies validated response, closed Tool-result, and completion facts.\n * Responses precede approval and effectful dispatch; readonly responses may join their closed\n * results. Tool results precede input drains and the next Turn. A no-tool response and Run\n * completion share one batch. A completion Tool's result\n * precedes its terminal-only completion batch, so recovery can repeat a pure output projection\n * without replaying the handler. Pending batches resume from their canonical declarations.\n */\n function* <\n InputSchema extends Schema.Top,\n OutputSchema extends Schema.Top,\n Instructions,\n Tools extends Record<string, Tool.Any>,\n Provider,\n ModelProvides,\n ModelRequires,\n InstructionError = InstructionErrorOf<Instructions, InputSchema[\"Type\"]>,\n InstructionRequirements = InstructionRequirementsOf<Instructions, InputSchema[\"Type\"]>,\n RunDispositionValue extends\n | RunDispositionDeclaration<OutputSchema[\"Type\"], Schema.Top>\n | undefined = undefined,\n InputPromptValue extends\n | InputPromptSource<InputSchema[\"Type\"], unknown, unknown>\n | undefined = undefined,\n UpdatesSchema extends Schema.Top | undefined = undefined,\n >(\n agent: RuntimeBinding<\n InputSchema,\n OutputSchema,\n Instructions,\n Tools,\n Provider,\n ModelProvides,\n ModelRequires,\n InstructionError,\n InstructionRequirements,\n RunDispositionValue,\n InputPromptValue,\n UpdatesSchema\n >,\n ctx: AttemptAppendContext,\n submission: SubmissionSnapshot,\n session: RunStorageSession,\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n canonical: Stream.Stream<\n JournalRecordEnvelope,\n ThreadStoreError | ThreadNotMaterialized | RunJournalError\n >,\n initialJournal: InitialJournalSource | undefined,\n canonicalThrough: CanonicalSequence,\n progressThrough: CanonicalSequence | undefined,\n continuation: RunContinuation | undefined,\n priorContext: RunJournalContext | undefined,\n operational: ReadonlyArray<RecordEnvelope>,\n journalMetadata: JournalMetadata | undefined,\n lineage: AttemptLineage,\n approvalDecisions: ReadonlyArray<ApprovalDecisionIntent>,\n currentContracts: Readonly<Record<string, Digest>>,\n runTiming: RunTiming,\n yieldAfter?: DateTime.Utc,\n ) {\n const submissionId = submission.submissionId;\n\n const runId = runIdForSubmission(submissionId);\n const boundaries: Array<JournalBoundary> = [];\n\n const cached = projectedJournal;\n // Unrelated Thread traffic does not invalidate an already validated owner projection.\n const projectionThrough = Math.max(progressThrough ?? 0, records.at(-1)?.sequence ?? 0);\n\n const originalInput =\n initialJournal?.original ??\n records.find(\n ({ record: { payload } }) =>\n payload._tag === \"UserInputRecorded\" &&\n payload.kind === \"user\" &&\n payload.submissionId === submissionId,\n );\n\n if (originalInput === undefined)\n return yield* RunJournalError.make({ message: \"Run has no original context boundary\" });\n const historyEvidence = new Map<RecordId, JournalRecordEnvelope>();\n\n const retainHistory = (entry: JournalRecordEnvelope) => {\n if (priorContext === undefined && entry.sequence < originalInput.sequence)\n historyEvidence.set(entry.record.recordId, entry);\n };\n\n // An exact cache prefix followed only by this fresh input has no response,\n // policy reservation or context to replay. Keep recovery on the full projector.\n const freshPrefix =\n priorContext === undefined &&\n initialJournal?.prefix !== undefined &&\n initialJournal.records?.length === 1 &&\n initialJournal.records[0] === originalInput\n ? initialJournal.prefix.prompt\n : undefined;\n\n let journal =\n freshPrefix !== undefined\n ? initialRunJournal(freshPrefix)\n : cached !== undefined &&\n cached.threadId === ctx.threadId &&\n cached.through === projectionThrough &&\n cached.runId === runId &&\n cached.contextRecordId === priorContext?.recordId\n ? (boundaries.push(...cached.boundaries),\n cached.contextEvidence.forEach(retainHistory),\n cached.journal)\n : yield* projectRunJournalStream(\n canonical,\n runId,\n (boundary) => boundaries.push(boundary),\n priorContext,\n journalMetadata,\n priorContext === undefined ? retainHistory : undefined,\n );\n\n if (initialJournal?.prefix !== undefined) {\n const prompt = initialJournal.prefix.prompt;\n\n journal = { ...journal, prompt, historyBefore: prompt };\n }\n\n // Do not retain the metadata snapshot across model or Tool waits, including cache hits.\n // The projected prompt owns its needed context.\n journalMetadata = undefined;\n\n historyEvidence.forEach((entry, id) => {\n if (entry.sequence >= journal.historyFrom) historyEvidence.delete(id);\n });\n\n projectedJournal = {\n threadId: ctx.threadId,\n through: CanonicalSequence.make(projectionThrough),\n runId,\n contextRecordId: priorContext?.recordId,\n contextEvidence: [...historyEvidence.values()],\n journal,\n boundaries,\n };\n\n if (continuation !== undefined) {\n const accounting = continuation.accounting;\n\n const policyFields = [\n \"committedTurns\",\n \"toolCalls\",\n \"programmaticToolCalls\",\n \"consecutiveToolFailures\",\n \"finalizationUsed\",\n \"modelRestarts\",\n ] as const;\n\n const usageFields = [\n \"modelCalls\",\n \"inputTokens\",\n \"outputTokens\",\n \"lastInputTokens\",\n \"lastOutputTokens\",\n \"costMicrousd\",\n ] as const;\n\n if (\n policyFields.some((field) => (journal.policyUsage[field] ?? 0) !== accounting[field]) ||\n usageFields.some((field) => journal.usage[field] !== accounting[field]) ||\n (journal.usage.unobservedModelCalls ?? 0) !== accounting.unobservedModelCalls\n )\n return yield* RunJournalError.make({\n message: \"Canonical continuation accounting differs from its exact execution evidence\",\n });\n }\n\n const childLineage = records.find(\n ({ record }) => record.recordId === subagentLineageRecordId(submission.threadId),\n )?.record.payload;\n\n const inheritedGrant =\n submission.workerAdmission?.origin.grant ??\n (childLineage?._tag === \"SubagentLineageRecorded\" ? childLineage.grant : undefined);\n\n const delegationDepth =\n submission.workerAdmission?.origin.depth ??\n (childLineage?._tag === \"SubagentLineageRecorded\" ? childLineage.parentLink.depth : 0);\n\n // worker-run origins supply a frozen ceiling, not usage credit. Only this native\n // host Run's journal owns usage; joined inputs and replacement Attempts keep its RunId.\n const inheritedBudget =\n submission.workerAdmission?.origin.budget ??\n (childLineage?._tag === \"SubagentLineageRecorded\" ? childLineage.budget : undefined);\n\n if (\n submission.parentLinkage !== undefined &&\n (childLineage?._tag !== \"SubagentLineageRecorded\" ||\n childLineage.parentSubmissionId !== submission.parentLinkage.parentSubmissionId ||\n childLineage.parentLink.parentToolCallId !== submission.parentLinkage.parentToolCallId ||\n !definitionDigestsEqual(childLineage.childDefinitionDigests, submission.agentDigests) ||\n childLineage.childInputDigest !== submission.inputDigest)\n ) {\n return yield* RunJournalError.make({\n message: \"The child Run has no matching canonical lineage and execution bounds\",\n });\n }\n\n const completionTools = [\n ...(agent.definition.completion === undefined ? [] : [agent.definition.completion.tool]),\n ...(agent.definition.completionFromTools?.map((declaration) => declaration.tool) ?? []),\n ];\n\n const pending = yield* pendingToolBatchFor(records, runId, completionTools);\n\n const resumeProjection =\n pending === undefined\n ? journal\n : yield* projectRunJournalStream(\n withoutPendingBatch(canonical, pending, runId),\n runId,\n undefined,\n priorContext,\n );\n\n if (\n initialJournal !== undefined &&\n (journal.committedTurns !== 0 ||\n journal.historyFrom !== 1 ||\n journal.contextWindowId !== undefined ||\n historyEvidence.size !== 0 ||\n pending !== undefined ||\n boundaries.some((boundary) => boundary.incomplete))\n )\n initialJournal.cacheable = false;\n\n if (initialJournal?.cacheable)\n initialJournal.history =\n initialJournal.prefix ?? preparePromptHistory(journal.historyBefore);\n\n // All startup passes (including cache hits) are complete. Release the startup source;\n // later compaction can reread the exact prefix.\n if (initialJournal !== undefined) initialJournal.records = undefined;\n\n const rolloverOperation =\n journal.pendingContextToolCallId === undefined\n ? undefined\n : operationsFor(records, runId).get(journal.pendingContextToolCallId);\n\n const rolloverTool =\n rolloverOperation === undefined\n ? undefined\n : agent.definition.toolkit.tools[rolloverOperation.toolName];\n\n // A current annotation cannot reinterpret a formerly ordinary settled result as control.\n const pendingContextToolCallId =\n rolloverOperation !== undefined &&\n rolloverTool !== undefined &&\n Context.get(rolloverTool.annotations, ContextRolloverTool) &&\n currentContracts[rolloverOperation.toolName] === rolloverOperation.replay\n ? journal.pendingContextToolCallId\n : undefined;\n\n const applicationCalls = pending?.calls.filter((call) => !call.providerExecuted);\n\n // A single successful completion call can have its result committed before the terminal\n // marker. Reuse that result for either completion mode, after verifying its original\n // operation contract; no handler or provider call is needed to repeat output projection.\n const completionCandidate =\n applicationCalls?.length === 1 &&\n completionTools.some((tool) => tool === applicationCalls[0]?.name) &&\n pending?.settled.some(\n (result) => result.id === applicationCalls[0]?.id && !result.isFailure,\n )\n ? applicationCalls[0]\n : undefined;\n\n const settledCompletion =\n pending !== undefined &&\n completionCandidate !== undefined &&\n supportsOperation(\n OpenToolCallEvidence.make({\n toolCallId: Schema.decodeSync(ToolCallId)(completionCandidate.id),\n toolName: completionCandidate.name,\n turn: pending.turn,\n }),\n pending.toolOperations.find(\n (operation) => operation.toolCallId === completionCandidate.id,\n ),\n { definition: agent.definition, contracts: currentContracts },\n )\n ? Schema.decodeSync(ToolCallId)(completionCandidate.id)\n : undefined;\n\n const knownIds = knownRecordIdsOf(records);\n const stepOutputs = new Map<string, PersistedJson>();\n\n // Derive replay identity from the recorded tuple, never from its historical ID format.\n // This preserves committed Step outputs when reading legacy colon-separated record IDs.\n for (const envelope of records) {\n const payload = envelope.record.payload;\n\n if (payload._tag === \"ToolStepSettled\" && payload.runId === runId) {\n stepOutputs.set(\n toolStepSettledRecordId(runId, payload.toolCallId, payload.stepName),\n payload.output,\n );\n }\n }\n // Recorded approval authority (plan §2.6): canonical `ToolApprovalDecided` records are the\n // deterministic decision source across Attempts; durable `resolveApproval` intents become\n // canonical before they are honored; requested Turns pin the Turn-shared approval batch\n // identity so a later append never contradicts a committed batch.\n const canonicalApprovalDecisions = new Map<string, ApprovalDecision>();\n const approvalRequestedTurns = new Set<number>();\n\n for (const envelope of records) {\n const payload = envelope.record.payload;\n\n if (payload._tag === \"ToolApprovalDecided\" && payload.runId === runId) {\n canonicalApprovalDecisions.set(payload.toolCallId, payload.decision);\n } else if (payload._tag === \"ToolApprovalRequested\" && payload.runId === runId) {\n approvalRequestedTurns.add(payload.turn);\n }\n }\n const approvalIntents = new Map<string, ApprovalDecisionIntent>();\n\n for (const intent of approvalDecisions) {\n approvalIntents.set(intent.toolCallId, intent);\n }\n // Joined queued input (plan §2.5): canonical facts for the prompt-coverage rule, computed\n // once per Attempt from the same strongly consistent read as the journal. A joined\n // `input:{sid}` record is prompt-covered iff a host `ModelResponseRecorded` committed\n // after it — commit 1 of every later Turn carries all pending steering (D8 extension), so\n // covered inputs are already inside the journal prompt and must never re-deliver.\n const joinedInputEnvelopes = new Map<string, CanonicalRecordEnvelope>();\n let lastHostResponseSequence: CanonicalSequence | undefined;\n\n for (const envelope of records) {\n const payload = envelope.record.payload;\n\n if (\n payload._tag === \"UserInputRecorded\" &&\n payload.runId === runId &&\n payload.submissionId !== undefined &&\n payload.submissionId !== submissionId\n ) {\n joinedInputEnvelopes.set(payload.submissionId, envelope);\n } else if (payload._tag === \"ModelResponseRecorded\" && payload.runId === runId) {\n if (\n lastHostResponseSequence === undefined ||\n envelope.sequence > lastHostResponseSequence\n ) {\n lastHostResponseSequence = envelope.sequence;\n }\n }\n }\n\n // RUN-023: per-Turn usage staged by the engine's `noteTurnUsage` for the\n // Turn's canonical response record (keyed by CANONICAL turn number).\n const stagedUsage = new Map<\n number,\n {\n readonly inputTokens: number;\n readonly outputTokens: number;\n readonly costMicrousd: number;\n readonly modelUsage: ReadonlyArray<ModelCallUsage>;\n }\n >();\n\n // Staging also backs the cumulative summary; keep it intact and track canonical prefixes.\n const committedUsageLengths = new Map<number, number>();\n const committedUnobservedCalls = new Map<number, number>();\n\n const usageForCommit = (turn: number) => {\n const staged = stagedUsage.get(turn);\n\n if (staged === undefined) return undefined;\n const modelUsage = staged.modelUsage.slice(committedUsageLengths.get(turn) ?? 0);\n\n if (modelUsage.length === 0) return undefined;\n\n return {\n modelUsage,\n inputTokens: modelUsage.reduce((sum, call) => sum + call.inputTokens.total, 0),\n outputTokens: modelUsage.reduce((sum, call) => sum + call.outputTokens.total, 0),\n costMicrousd: modelUsage.reduce((sum, call) => sum + call.costMicrousd, 0),\n };\n };\n\n const unobservedForCommit = (turn: number) =>\n (stagedUnobservedCalls.get(turn) ?? 0) - (committedUnobservedCalls.get(turn) ?? 0);\n\n const recordCommittedUsage = (batch: CanonicalBatch) => {\n for (const record of batch.records) {\n if (\n record.payload._tag !== \"ModelResponseRecorded\" &&\n record.payload._tag !== \"ModelCallAborted\"\n )\n continue;\n const payload = record.payload;\n\n committedUsageLengths.set(\n payload.turn,\n (committedUsageLengths.get(payload.turn) ?? 0) + (payload.modelUsage?.length ?? 0),\n );\n committedUnobservedCalls.set(\n payload.turn,\n (committedUnobservedCalls.get(payload.turn) ?? 0) + (payload.unobservedModelCalls ?? 0),\n );\n }\n progressWriters.get(ctx)?.stageUsage(runId, terminalUsageCharge(uncommittedModelUsage()));\n };\n\n const uncommittedModelUsage = () =>\n [...stagedUsage.entries()].flatMap(([turn, usage]) =>\n usage.modelUsage.slice(committedUsageLengths.get(turn) ?? 0),\n );\n\n // Like stagedUsage, these counts remain relative to the initial journal snapshot.\n const stagedUnobservedCalls = new Map<number, number>();\n\n let interruptedUsage = records.some(\n ({ record }) =>\n record.payload._tag === \"ModelResponseInterrupted\" && record.payload.runId === runId,\n );\n\n const checkedUsageTotal = (\n field: string,\n value: number,\n ): Effect.Effect<number, RunJournalError> =>\n decodeUsageTotal(value).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: `Run usage summary exceeds safe-integer bounds at ${field}`,\n cause,\n }),\n ),\n );\n\n const subtractUsageTotal = (field: string, left: number, right: number) =>\n checkedUsageTotal(field, left - right);\n\n const currentUsageSummary = (): Effect.Effect<RunUsageSummary, RunJournalError> =>\n Effect.gen(function* () {\n const stagedCalls = [...stagedUsage.values()].flatMap((usage) => usage.modelUsage);\n let unobservedModelCalls = journal.usage.unobservedModelCalls ?? 0;\n\n for (const count of stagedUnobservedCalls.values()) {\n unobservedModelCalls += count;\n }\n const detailedCalls = [...journal.usage.modelUsage, ...stagedCalls];\n\n const detailed = yield* summarizeModelUsage(\n detailedCalls,\n journal.usage.summarizedModelUsage,\n ).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: \"Run detailed usage exceeds safe-integer accounting bounds\",\n cause,\n }),\n ),\n );\n\n let inputTokens = journal.usage.inputTokens;\n let outputTokens = journal.usage.outputTokens;\n let costMicrousd = journal.usage.costMicrousd;\n\n for (const usage of stagedUsage.values()) {\n inputTokens += usage.inputTokens;\n outputTokens += usage.outputTokens;\n costMicrousd += usage.costMicrousd;\n }\n\n const modelCalls = journal.usage.modelCalls + stagedCalls.length;\n\n // Reconciliation must reject negative legacy deltas independently of\n // the final summary's complete safe-integer and additive checks.\n const legacyCalls = yield* subtractUsageTotal(\n \"legacy.modelCalls\",\n modelCalls,\n detailed.modelCalls,\n );\n\n const legacyInput = yield* subtractUsageTotal(\n \"legacy.inputTokens\",\n inputTokens,\n detailed.inputTokens.total,\n );\n\n const legacyOutput = yield* subtractUsageTotal(\n \"legacy.outputTokens\",\n outputTokens,\n detailed.outputTokens.total,\n );\n\n const legacyCost = yield* subtractUsageTotal(\n \"legacy.costMicrousd\",\n costMicrousd,\n detailed.costMicrousd,\n );\n\n if (legacyCalls === 0 && (legacyInput !== 0 || legacyOutput !== 0 || legacyCost !== 0)) {\n return yield* RunJournalError.make({\n message: \"Run aggregate usage has legacy totals without a legacy model call\",\n });\n }\n const byModel = [...detailed.byModel];\n\n if (legacyCalls > 0) {\n const existingIndex = byModel.findIndex(\n (group) =>\n group.provider === \"unknown\" &&\n group.model === \"legacy-record\" &&\n group.responseModel === undefined &&\n group.serviceTier === undefined &&\n group.pricingVersion === undefined,\n );\n\n const existing = existingIndex < 0 ? undefined : byModel[existingIndex];\n\n const legacyGroup = yield* ModelUsageGroup.makeEffect({\n provider: \"unknown\",\n model: \"legacy-record\",\n modelCalls: (existing?.modelCalls ?? 0) + legacyCalls,\n inputTokens: {\n total: (existing?.inputTokens.total ?? 0) + legacyInput,\n uncached: (existing?.inputTokens.uncached ?? 0) + legacyInput,\n cacheRead: existing?.inputTokens.cacheRead ?? 0,\n cacheWrite: existing?.inputTokens.cacheWrite ?? 0,\n },\n outputTokens: {\n total: (existing?.outputTokens.total ?? 0) + legacyOutput,\n text: (existing?.outputTokens.text ?? 0) + legacyOutput,\n reasoning: existing?.outputTokens.reasoning ?? 0,\n },\n costMicrousd: (existing?.costMicrousd ?? 0) + legacyCost,\n }).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: \"Run legacy usage exceeds safe-integer accounting bounds\",\n cause,\n }),\n ),\n );\n\n if (existingIndex < 0) byModel.push(legacyGroup);\n else byModel[existingIndex] = legacyGroup;\n }\n\n return yield* RunUsageSummary.makeEffect({\n ...(legacyCalls === 0 && detailed.webSearchCalls !== undefined\n ? { webSearchCalls: detailed.webSearchCalls }\n : {}),\n modelCalls,\n inputTokens: {\n total: inputTokens,\n // Legacy aggregate inputs are conservatively classified as uncached.\n uncached: detailed.inputTokens.uncached + legacyInput,\n cacheRead: detailed.inputTokens.cacheRead,\n cacheWrite: detailed.inputTokens.cacheWrite,\n },\n outputTokens: {\n total: outputTokens,\n text: detailed.outputTokens.text + legacyOutput,\n reasoning: detailed.outputTokens.reasoning,\n },\n costMicrousd,\n byModel,\n unobservedModelCalls,\n usageStatus:\n legacyCalls > 0 || unobservedModelCalls > 0 || interruptedUsage\n ? detailed.usageStatus === \"unknown\"\n ? \"unknown\"\n : \"partial\"\n : detailed.usageStatus,\n pricingStatus:\n legacyCalls > 0 || unobservedModelCalls > 0 || interruptedUsage\n ? detailed.pricingStatus === \"unknown\"\n ? \"unknown\"\n : \"partial\"\n : detailed.pricingStatus,\n }).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: \"Run usage summary exceeds safe-integer accounting bounds\",\n cause,\n }),\n ),\n );\n });\n\n const recordedCompletion = operational.find(\n (record) => record.recordId === runCompletedRecordId(runId),\n )?.payload;\n\n if (recordedCompletion !== undefined) {\n if (recordedCompletion._tag !== \"RunCompleted\" || recordedCompletion.runId !== runId) {\n return yield* RunJournalError.make({\n message: `Run ${runId} has an invalid terminal completion marker`,\n });\n }\n\n const response = [...records]\n .reverse()\n .find(\n (envelope) =>\n envelope.record.payload._tag === \"ModelResponseRecorded\" &&\n envelope.record.payload.runId === runId,\n )?.record.payload;\n\n if (response?._tag !== \"ModelResponseRecorded\") {\n return yield* RunJournalError.make({\n message: `Run ${runId} has a terminal completion marker without a response`,\n });\n }\n const declared = yield* declaredToolCalls(response.messages);\n const calls = declared.application;\n\n if (calls.length > 0) {\n const call = calls[0];\n\n const settled =\n call === undefined\n ? undefined\n : records.find(\n ({ record }) =>\n record.payload._tag === \"ToolCallSettled\" &&\n record.payload.runId === runId &&\n record.payload.toolCallId === call.id,\n )?.record.payload;\n\n if (\n calls.length !== 1 ||\n call === undefined ||\n settled?._tag !== \"ToolCallSettled\" ||\n settled.toolName !== call.name ||\n settled.isFailure\n ) {\n return yield* RunJournalError.make({\n message: `Run ${runId} has a terminal completion marker without one successful declared Tool result`,\n });\n }\n }\n // Output and disposition were validated before the atomic RunCompleted commit.\n // Future application codecs and completion functions have no authority to reinterpret it.\n\n return {\n _tag: \"completed\" as const,\n result: recordedCompletion.output,\n ...(recordedCompletion.runDisposition === undefined\n ? {}\n : { runDisposition: recordedCompletion.runDisposition }),\n ...(recordedCompletion.finishReason === undefined\n ? {}\n : { finishReason: recordedCompletion.finishReason }),\n ...(recordedCompletion.exhausted === undefined\n ? {}\n : { exhausted: recordedCompletion.exhausted }),\n usageSummary: yield* currentUsageSummary(),\n };\n }\n\n /** Only canonical joined inputs can require restoration from an earlier Attempt. */\n let joinBacklog: ReadonlyArray<JoinSnapshot> | undefined =\n joinedInputEnvelopes.size === 0 ? [] : undefined;\n\n /** Joined inputs already handed to the engine during THIS Attempt (never re-deliver). */\n const deliveredJoinInputs = new Set<string>();\n // Canonical encoded parameters per declared call, for the approval request digest: seeded\n // by the direct response commit before approval preflight and by the resumed batch.\n const encodedParamsByCallId = new Map<string, unknown>();\n // Subagent joins append their atomic settlement outside the ordinary results commit.\n // Their Tool names come from canonical responses or the newly committed declaration.\n const declaredNamesByCallId = new Map<string, string>();\n // Canonical subagent lifecycle state of this Run (SUB-016): seeded from canonical records,\n // advanced by the establish/join hook closures below, and consulted on every replay so an\n // identical establishment converges on the one existing child.\n const subagentState = subagentRecordsOf(records, runId);\n\n const declaredToolIds = new Set(subagentState.declaredNames.keys());\n\n if (declaredToolIds.size > MAX_RUN_TOOL_CALL_IDENTITIES)\n return yield* RunJournalError.make({\n message: `Run exceeds the ${MAX_RUN_TOOL_CALL_IDENTITIES} Tool Call identity limit`,\n });\n\n for (const [callId, name] of subagentState.declaredNames) {\n declaredNamesByCallId.set(callId, name);\n }\n if (pending !== undefined) {\n for (const call of pending.calls) {\n encodedParamsByCallId.set(call.id, call.params);\n declaredNamesByCallId.set(call.id, call.name);\n }\n }\n // Task #12 (WP1 `resume.leadingMessages`): the pending canonical response's messages\n // BEFORE its first assistant message — Turn-1 evaluated instructions + input, or steering\n // committed inside the pending record — re-enter official history through the engine so\n // the resumed live model context does not silently drop them.\n let resumeLeadingMessages: Prompt.Prompt | undefined;\n let resumeResponseMessages: Prompt.Prompt | undefined;\n\n if (pending !== undefined) {\n const pendingMessages = yield* decodePrompt(pending.messages).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message:\n \"Pending ModelResponseRecorded messages are not Schema-encoded Prompt messages\",\n cause,\n }),\n ),\n );\n\n const firstAssistant = pendingMessages.content.findIndex(\n (message) => message.role === \"assistant\",\n );\n\n if (firstAssistant > 0) {\n resumeLeadingMessages = Prompt.fromMessages(\n pendingMessages.content\n .slice(0, firstAssistant)\n .filter((message) => message.role !== \"system\"),\n );\n }\n if (firstAssistant >= 0) {\n resumeResponseMessages = Prompt.fromMessages(\n pendingMessages.content.slice(firstAssistant),\n );\n }\n }\n\n // A canonical initial blocker proves no dispatch preceded this Attempt. Carry that\n // proof across sequential approvals until the fence, as for a newly committed response.\n // Resumption, retry permission and parameter rejection alone provide no such proof.\n const initialDispatchProofTurns = new Set(initialDispatchBlockedTurns(records, runId));\n\n let currentToolTurn: { readonly turn: number; readonly turnId: TurnId } | undefined =\n pending === undefined ? undefined : { turn: pending.turn, turnId: pending.turnId };\n\n // Step-hook coordinator failures are re-wrapped by the engine as `DurableStepError` in the\n // handler channel; this side channel preserves the original failure so the Attempt aborts\n // (obligation still owed) instead of settling the Run `failed` on an infrastructure fault.\n const haltRef = yield* Ref.make<DurableWorkerFailure | undefined>(undefined);\n const yieldSignal = yield* Deferred.make<SubmissionId | undefined>();\n\n const recordHalt = <A, R>(\n effect: Effect.Effect<A, DurableWorkerFailure, R>,\n ): Effect.Effect<A, CoordinatorHalt | AgentPersistenceCapacityError, R> =>\n Effect.catchCause(effect, (cause) => {\n const first = Cause.findErrorOption(cause);\n\n const failure = Effect.failCause(\n Cause.map(cause, (error) =>\n error instanceof ThreadStoreError &&\n error.cause instanceof AgentPersistenceCapacityError\n ? error.cause\n : new CoordinatorHalt(error),\n ),\n );\n\n return Option.isNone(first) ||\n (first.value instanceof ThreadStoreError &&\n first.value.cause instanceof AgentPersistenceCapacityError)\n ? failure\n : Effect.andThen(Ref.set(haltRef, first.value), failure);\n });\n\n // Infrastructure errors can be wrapped by broker/Tool APIs. The interpreter checks this\n // authority before semantic work; progress delivery is not a coordinator checkpoint.\n const progress = progressWriters.get(ctx);\n\n const checkProgress =\n progress === undefined\n ? Effect.void\n : progress.check(runId).pipe(Effect.provideService(CurrentRunWriter, ctx));\n\n const checkpoint = recordHalt(\n Effect.flatMap(Ref.get(haltRef), (failure) =>\n failure === undefined ? checkProgress : Effect.fail(failure),\n ),\n );\n\n // One readonly Turn may own its response without publishing it. Promotion and settlement\n // share this gate so concurrent Steps or updates cannot publish the response twice.\n const responseGate = yield* Semaphore.make(1);\n\n let deferredResponse:\n | { readonly turn: number; readonly turnId: TurnId; readonly batch: CanonicalBatch }\n | undefined;\n\n const acceptResponseDeclarations = (batch: CanonicalBatch) => {\n for (const record of batch.records) {\n if (record.payload._tag !== \"ModelResponseRecorded\") continue;\n for (const call of record.payload.toolOperations) {\n declaredToolIds.add(call.toolCallId);\n declaredNamesByCallId.set(call.toolCallId, call.toolName);\n }\n }\n };\n\n const promoteResponse = Effect.gen(function* () {\n const halted = yield* Ref.get(haltRef);\n\n if (halted !== undefined) return yield* halted;\n const deferred = deferredResponse;\n\n if (deferred === undefined) return;\n const record = deferred.batch.records[0];\n\n if (record?.payload._tag !== \"ModelResponseRecorded\")\n return yield* RunJournalError.make({ message: \"Deferred Turn has no owned response\" });\n const calls = yield* declaredToolCalls(record.payload.messages);\n\n const batch = CanonicalBatch.make({\n ...deferred.batch,\n batchId: turnResponseBatchId(runId, deferred.turn),\n });\n\n yield* appendBatch(ctx, batch);\n acceptResponseDeclarations(batch);\n for (const call of calls.application) encodedParamsByCallId.set(call.id, call.params);\n recordCommittedUsage(batch);\n for (const entry of batch.records) knownIds.add(entry.recordId);\n deferredResponse = undefined;\n // Readonly handlers may already have started; promotion does not prove initial dispatch.\n yield* hit(\"turn:after-response-append\");\n });\n\n const flushDeferredResponse = promoteResponse.pipe(\n // Retain failure before releasing the permit; a waiting capability must not retry it.\n Effect.tapError((failure) =>\n failure instanceof ThreadStoreError &&\n failure.cause instanceof AgentPersistenceCapacityError\n ? Effect.void\n : Ref.set(haltRef, failure),\n ),\n responseGate.withPermits(1),\n );\n\n // Initial instruction metadata supports resumed context and compaction. The engine\n // owns all subsequent history boundaries and supplies complete commit facts directly.\n let initialHistoryLength = 0;\n let initialInstructions: ReadonlyArray<Prompt.Message> = [];\n\n const completionState: {\n committed?: NonNullable<TurnCommitInput[\"runCompletion\"]>;\n } = {};\n\n const turnCounter = yield* Ref.make(\n journal.committedTurns + (journal.policyUsage.modelRestarts ?? 0),\n );\n\n const idGenerator: (typeof IdGenerator)[\"Service\"] = {\n nextThreadId: Effect.succeed(submission.threadId),\n nextRunId: Effect.succeed(runId),\n nextTurnId: Ref.modify(turnCounter, (turn) => [turnIdForRun(runId, turn + 1), turn + 1]),\n };\n\n // Original evaluated instructions and input survive changes of ownership and Binding.\n // The pending Turn re-enters through its native batch without duplicating that input.\n // Retained immediate history can contain system messages. Its prefix stays untouched;\n // only this Run's instruction slots receive the freshly evaluated instructions.\n const instructionView = (\n messages: ReadonlyArray<Prompt.Message>,\n instructions: ReadonlyArray<Prompt.Message>,\n insertWhenAbsent: boolean,\n priorRunPrefixLength: number,\n ) => {\n const projected: Array<Prompt.Message> = [];\n const lengths = [0];\n let inserted = false;\n\n for (const [index, message] of messages.entries()) {\n if (index >= priorRunPrefixLength && message.role === \"system\") {\n if (!inserted) projected.push(...instructions);\n inserted = true;\n } else projected.push(message);\n lengths.push(projected.length);\n }\n if (!inserted && insertWhenAbsent) projected.push(...instructions);\n\n return {\n messages: projected,\n prefixLength: (length: number) => lengths[length] ?? projected.length,\n };\n };\n\n const resumeContext = {\n prepare: ({ source }: { readonly source: Prompt.Prompt }) =>\n Effect.sync(() => {\n // A compaction can commit before the first response owns this Run's input messages.\n const prefix =\n journal.committedTurns === 0 && priorContext !== undefined\n ? priorContext.prompt.content.slice(priorContext.priorHistoryLength)\n : [];\n\n const priorRunPrefixLength =\n journal.committedTurns === 0\n ? resumeProjection.prompt.content.length\n : resumeProjection.historyBefore.content.length;\n\n const view = instructionView(\n prefix.length === 0\n ? resumeProjection.prompt.content\n : [...resumeProjection.prompt.content, ...prefix],\n initialInstructions,\n true,\n priorRunPrefixLength,\n );\n\n return {\n prompt: Prompt.fromMessages([\n ...view.messages,\n ...source.content.slice(initialHistoryLength),\n ]),\n priorRunPrefixLength: view.prefixLength(priorRunPrefixLength),\n };\n }),\n } satisfies RunContextHook<never, never>;\n\n const externalContext = runContextPreparation.hook;\n const needsContextReplay = priorContext !== undefined || journal.committedTurns > 0;\n\n const preparedContext: RunContextHook<RunContextPreparationError, never> | undefined =\n externalContext === undefined\n ? needsContextReplay\n ? resumeContext\n : undefined\n : {\n prepare: (request) =>\n (needsContextReplay\n ? resumeContext.prepare(request)\n : Effect.succeed({\n prompt: request.source,\n priorRunPrefixLength: journal.historyBefore.content.length,\n })\n ).pipe(\n Effect.flatMap(({ prompt, priorRunPrefixLength }) =>\n externalContext.prepare({\n ...request,\n source: prompt,\n priorRunPrefixLength,\n }),\n ),\n Effect.map((prepared) => {\n if (\n prepared.rollover === undefined ||\n !knownIds.has(compactionRecordId(runId, request.turn, \"rollover\"))\n )\n return prepared;\n // The committed rollover, not a reevaluated hook, owns this Turn's reset.\n const { rollover: _, ...retained } = prepared;\n\n return retained;\n }),\n ),\n };\n\n const durability: RunDurabilityHook<\n CoordinatorHalt | AgentPersistenceCapacityError | CompactionError,\n CurrentRunStart\n > = {\n toolResultMaxBytes: MAX_PERSISTED_JSON_BYTES,\n checkpoint,\n initialize: ({ initialHistory, priorHistoryLength }) =>\n recordHalt(\n Effect.gen(function* () {\n initialHistoryLength = initialHistory.content.length;\n initialInstructions = initialHistory.content\n .slice(priorHistoryLength)\n .filter((message) => message.role === \"system\");\n if (priorContext !== undefined) return;\n const recordId = decodeRecordIdSync(JSON.stringify([\"run-context@1\", runId]));\n\n const prompt = yield* Schema.encodeEffect(Prompt.Prompt)(\n Prompt.fromMessages(initialHistory.content.slice(priorHistoryLength)),\n ).pipe(\n Effect.flatMap(decodePersisted),\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: \"Original Run context exceeds persistence bounds\",\n cause,\n }),\n ),\n );\n\n const history = Prompt.fromMessages(\n initialHistory.content.slice(0, priorHistoryLength),\n );\n\n const historyDigest = yield* withCrypto(\n digestPromptHistory(history, initialJournal?.history),\n );\n\n const retained = yield* Effect.forEach(\n [...historyEvidence.values()]\n .filter((entry) => entry.sequence < journal.historyFrom)\n .sort((left, right) => left.sequence - right.sequence),\n (entry) =>\n Effect.gen(function* () {\n const full = yield* getRecord({\n threadId: ctx.threadId,\n recordId: entry.record.recordId,\n });\n\n if (Option.isNone(full) || full.value.sequence !== entry.sequence)\n return yield* RunJournalError.make({\n message: \"Retained history has no exact canonical fact\",\n });\n\n return {\n ...(yield* withCrypto(reference(full.value.record))),\n sequence: entry.sequence,\n };\n }).pipe(Effect.provideService(ThreadReader, reader)),\n );\n\n const payload = yield* RunContextRecorded.makeEffect({\n version: 1,\n runId,\n runScopedInput: prompt,\n historyFrom: journal.historyFrom,\n historyThrough: CanonicalSequence.make(originalInput.sequence - 1),\n retained,\n historyDigest,\n priorHistoryLength,\n ...(journal.contextWindowId === undefined\n ? {}\n : { contextWindowId: journal.contextWindowId }),\n }).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: \"Original Run context mapping exceeds its bounds\",\n cause,\n }),\n ),\n );\n\n const start = yield* CurrentRunStart;\n\n yield* start.commit(yield* makeEnvelope(recordId, payload));\n knownIds.add(originalInput.record.recordId);\n knownIds.add(runStartedRecordId(runId));\n knownIds.add(recordId);\n historyEvidence.clear();\n projectedJournal = undefined;\n }),\n ),\n commitModelRestart: (restart) =>\n recordHalt(\n Effect.gen(function* () {\n if (knownIds.has(modelResponseRecordId(runId, restart.turn)))\n return yield* RunJournalError.make({\n message: \"Cannot restart a canonical model response\",\n });\n const recordId = decodeRecordIdSync(`model-aborted:${runId}:${restart.restart}`);\n\n const record = yield* makeEnvelope(\n recordId,\n ModelCallAborted.make({\n runId,\n ...restart,\n reason: \"joined-input\",\n modelUsage: usageForCommit(restart.turn)?.modelUsage ?? [],\n unobservedModelCalls: unobservedForCommit(restart.turn),\n }),\n );\n\n const batch = CanonicalBatch.make({\n batchId: decodeBatchIdSync(recordId),\n producerId: config.producerId,\n records: [record],\n });\n\n yield* appendBatch(ctx, batch);\n recordCommittedUsage(batch);\n knownIds.add(recordId);\n }),\n ),\n reservePolicyUsage: (usage) =>\n recordHalt(\n Effect.gen(function* () {\n yield* flushDeferredResponse;\n\n const recordId = decodeRecordIdSync(\n `policy:${runId}:${usage.programmaticToolCalls}:${usage.finalizationUsed}`,\n );\n\n if (knownIds.has(recordId)) return;\n\n const record = yield* makeEnvelope(\n recordId,\n RunPolicyUsageReserved.make({ runId, ...usage }),\n );\n\n yield* hit(\"policy:before-reservation-append\");\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: decodeBatchIdSync(recordId),\n producerId: config.producerId,\n records: [record],\n }),\n );\n knownIds.add(recordId);\n yield* hit(\"policy:after-reservation-append\");\n }),\n ),\n commitTurn: (commit) =>\n recordHalt(\n Effect.gen(function* () {\n const halted = yield* Ref.get(haltRef);\n\n if (halted !== undefined) return yield* halted;\n if (\n deferredResponse !== undefined &&\n (deferredResponse.turn !== commit.turn || deferredResponse.turnId !== commit.turnId)\n )\n return yield* RunJournalError.make({\n message: \"A new Turn preceded settlement of its deferred response\",\n });\n if (commit._tag === \"Partial\") yield* promoteResponse;\n const deferred = deferredResponse;\n\n if (commit._tag === \"Response\" && deferred !== undefined)\n return yield* RunJournalError.make({\n message: \"Turn response was already deferred\",\n });\n const responseId = modelResponseRecordId(runId, commit.turn);\n const suppliedResponse = commit._tag === \"Partial\" ? undefined : commit.response;\n\n const response =\n knownIds.has(responseId) || deferred !== undefined ? undefined : suppliedResponse;\n\n if (suppliedResponse !== undefined)\n currentToolTurn = { turn: commit.turn, turnId: commit.turnId };\n if (commit._tag === \"Response\" && response === undefined) return \"committed\" as const;\n\n const toolOperations: Array<ToolOperation> = [];\n const responseToolIds = new Set<ToolCallId>();\n\n for (const call of response?.calls ?? []) {\n if (declaredToolIds.has(call.toolCallId) || responseToolIds.has(call.toolCallId))\n return yield* RunJournalError.make({\n message: \"Tool Call identity is reused within a Run\",\n });\n // Preserve every prior identity across compaction and recovery. Refuse the\n // whole response before dispatch if adding this call exceeds the inclusive bound.\n if (declaredToolIds.size + responseToolIds.size + 1 > MAX_RUN_TOOL_CALL_IDENTITIES)\n return yield* RunJournalError.make({\n message: `Run exceeds the ${MAX_RUN_TOOL_CALL_IDENTITIES} Tool Call identity limit`,\n });\n const replay = currentContracts[call.toolName];\n\n if (replay === undefined)\n return yield* RunJournalError.make({\n message: \"Canonical Tool declaration has no original operation contract\",\n });\n toolOperations.push(\n ToolOperation.make({\n toolCallId: call.toolCallId,\n toolName: call.toolName,\n executionClass: call.executionClass,\n executionKind: call.executionKind,\n replay,\n }),\n );\n responseToolIds.add(call.toolCallId);\n }\n\n const toolResults =\n commit._tag === \"Response\"\n ? []\n : commit.results.filter(\n (result) =>\n !knownIds.has(\n toolCallSettledRecordId(runId, commit.turn, result.toolCallId),\n ),\n );\n\n let runCompletion: NonNullable<TurnCommitInput[\"runCompletion\"]> | undefined;\n\n if (commit._tag === \"Settled\" && commit.completion !== undefined) {\n const completion = commit.completion;\n\n const output = yield* decodePersisted(completion.output).pipe(\n Effect.mapError((cause) =>\n LedgerError.make({\n operation: \"recordCompleted\",\n message: \"Run output exceeds canonical persistence bounds\",\n cause,\n }),\n ),\n );\n\n if (\n completion.finishReason === \"budget-exhausted\" &&\n completion.runDisposition !== undefined\n )\n return yield* LedgerError.make({\n operation: \"recordCompleted\",\n message: \"A budget-exhausted Run cannot declare an application run disposition\",\n });\n\n const runDisposition =\n completion.runDisposition === undefined\n ? undefined\n : yield* decodePersisted(completion.runDisposition).pipe(\n Effect.mapError((cause) =>\n LedgerError.make({\n operation: \"recordCompleted\",\n message: \"Run disposition exceeds canonical persistence bounds\",\n cause,\n }),\n ),\n );\n\n runCompletion = {\n output,\n ...(runDisposition === undefined ? {} : { runDisposition }),\n ...(completion.finishReason === \"budget-exhausted\"\n ? {\n finishReason: completion.finishReason,\n ...(completion.exhausted === undefined\n ? {}\n : { exhausted: completion.exhausted }),\n }\n : {}),\n };\n }\n if (\n response === undefined &&\n deferred === undefined &&\n toolResults.length === 0 &&\n runCompletion === undefined\n )\n return \"committed\" as const;\n if (response === undefined && deferred === undefined && !knownIds.has(responseId))\n return yield* RunJournalError.make({\n message: \"Tool results or completion preceded the canonical response\",\n });\n\n const input: TurnCommitInput = {\n toolResultMaxBytes: Math.min(\n agent.definition.policy.toolResultBounds.maxBytes,\n MAX_PERSISTED_JSON_BYTES,\n ),\n toolSelectionMaxBytes: utf8ByteLength(\n JSON.stringify({ toolSelection: { toolNames: Object.keys(currentContracts) } }),\n ),\n runId,\n turn: commit.turn,\n turnId: commit.turnId,\n responseMessages: response?.messages ?? [],\n toolResults,\n toolOperations,\n toolExposure: response?.toolExposure,\n toolParameterRejections: response?.toolParameterRejections,\n runScopedPrefixLength: response?.runScopedPrefixLength,\n producerId: config.producerId,\n deploymentId: config.deploymentId,\n createdAt: yield* nowUtc,\n runCompletion,\n usage: usageForCommit(commit.turn),\n unobservedModelCalls: unobservedForCommit(commit.turn),\n };\n\n if (commit._tag === \"Partial\") {\n // The interpreter supplies only closed siblings, in declaration order.\n // Per-call identities retain each result before the child suspension.\n for (const result of toolResults) {\n const batch = yield* turnResultsBatch({ ...input, toolResults: [result] });\n\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n ...batch,\n batchId: toolCallResultBatchId(runId, commit.turn, result.toolCallId),\n }),\n );\n for (const record of batch.records) knownIds.add(record.recordId);\n yield* hit(\"subagent:after-sibling-settle\");\n }\n\n return \"committed\" as const;\n }\n\n if (commit._tag === \"Response\" && commit.defer === true) {\n if (\n toolOperations.length === 0 ||\n toolOperations.some(\n (call) =>\n call.executionClass !== \"readonly\" || call.executionKind !== \"ordinary\",\n )\n )\n return yield* RunJournalError.make({\n message: \"Only ordinary readonly Tool responses may be deferred\",\n });\n\n const candidate = {\n turn: commit.turn,\n turnId: commit.turnId,\n // The journal owns encoded messages. Detach the remaining small metadata\n // trees too: Schema validation alone is not an ownership transfer.\n batch: yield* turnCanonicalBatch({\n ...input,\n toolParameterRejections: input.toolParameterRejections?.map((rejection) => ({\n ...rejection,\n parameters: copyJson(rejection.parameters),\n error: { ...rejection.error, reason: { ...rejection.error.reason } },\n })),\n toolExposure:\n input.toolExposure === undefined\n ? undefined\n : Snapshot.make({\n exposedToolNames: [...input.toolExposure.exposedToolNames],\n ...(input.toolExposure.selection === undefined\n ? {}\n : {\n selection: Selection.make({\n toolNames: [...input.toolExposure.selection.toolNames],\n }),\n }),\n }),\n usage:\n input.usage === undefined\n ? undefined\n : {\n ...input.usage,\n modelUsage: input.usage.modelUsage?.map((usage) =>\n ModelCallUsage.make({\n ...usage,\n ...(usage.response === undefined\n ? {}\n : {\n response: ModelResponseIdentity.make({ ...usage.response }),\n }),\n inputTokens: InputTokenUsage.make({ ...usage.inputTokens }),\n outputTokens: OutputTokenUsage.make({ ...usage.outputTokens }),\n }),\n ),\n },\n }),\n };\n\n const progress = progressWriters.get(ctx);\n\n if (progress === undefined)\n return yield* ThreadStoreError.make({\n operation: \"reserve readonly dispatch\",\n message: \"Dispatch has no scoped progress writer\",\n });\n\n const batch = yield* progress\n .defer(candidate.batch)\n .pipe(Effect.provideService(CurrentRunWriter, ctx));\n\n deferredResponse = { ...candidate, batch };\n\n return \"deferred\" as const;\n }\n\n let batch: CanonicalBatch;\n\n if (deferred === undefined) {\n batch = yield* commit._tag === \"Response\"\n ? turnResponseBatch(input)\n : response === undefined\n ? turnResultsBatch(input)\n : turnCanonicalBatch(input);\n } else if (toolResults.length === 0 && runCompletion === undefined) {\n batch = deferred.batch;\n } else {\n const results = yield* turnResultsBatch(input);\n\n batch = CanonicalBatch.make({\n ...deferred.batch,\n records: [...deferred.batch.records, ...results.records],\n });\n }\n\n yield* appendBatch(ctx, batch);\n for (const call of response?.calls ?? []) {\n declaredToolIds.add(call.toolCallId);\n encodedParamsByCallId.set(call.toolCallId, call.parameters);\n declaredNamesByCallId.set(call.toolCallId, call.toolName);\n }\n if (deferred !== undefined) {\n acceptResponseDeclarations(batch);\n deferredResponse = undefined;\n }\n if (commit._tag === \"Response\") initialDispatchProofTurns.add(commit.turn);\n recordCommittedUsage(batch);\n for (const record of batch.records) knownIds.add(record.recordId);\n if (runCompletion !== undefined) completionState.committed = runCompletion;\n yield* hit(\n commit._tag === \"Response\"\n ? \"turn:after-response-append\"\n : response === undefined && deferred === undefined\n ? \"turn:after-results-append\"\n : \"turn:after-canonical-append\",\n );\n\n return \"committed\" as const;\n }).pipe(responseGate.withPermits(1)),\n ),\n checkToolDispatch: recordHalt(\n Effect.gen(function* () {\n if (currentToolTurn === undefined)\n return yield* RunJournalError.make({\n message: \"Tool dispatch preceded its canonical response\",\n });\n yield* hit(\"tools:before-dispatch-fence\");\n yield* ctx.checkActive;\n initialDispatchProofTurns.delete(currentToolTurn.turn);\n yield* hit(\"tools:after-dispatch-fence\");\n }),\n ),\n step: {\n lookup: (key) =>\n recordHalt(\n Effect.gen(function* () {\n yield* flushDeferredResponse;\n\n const output = stepOutputs.get(\n toolStepSettledRecordId(runId, key.toolCallId, key.stepName),\n );\n\n return output === undefined\n ? Option.none()\n : Option.some({ encodedOutput: output });\n }),\n ),\n reserve: (key) =>\n recordHalt(\n Effect.gen(function* () {\n yield* flushDeferredResponse;\n const recordId = toolStepSettledRecordId(runId, key.toolCallId, key.stepName);\n\n const template = yield* makeEnvelope(\n recordId,\n yield* ToolStepSettled.makeEffect({\n runId,\n toolCallId: key.toolCallId,\n stepName: key.stepName,\n output: null,\n outputDigest: yield* withCrypto(digestJson(null)),\n }).pipe(\n Effect.mapError(() =>\n ThreadStoreError.make({\n operation: \"reserve Step dispatch\",\n message: \"Durable Step identity exceeds canonical persistence bounds\",\n cause: AgentPersistenceCapacityError.make({\n message: \"Durable Step identity exceeds canonical persistence bounds\",\n }),\n }),\n ),\n ),\n );\n\n const progress = progressWriters.get(ctx);\n\n if (progress === undefined)\n return yield* ThreadStoreError.make({\n operation: \"reserve Step dispatch\",\n message: \"Dispatch has no scoped progress writer\",\n });\n\n return yield* progress\n .reserve(\n runId,\n CanonicalBatch.make({\n batchId: decodeBatchIdSync(recordId),\n producerId: config.producerId,\n records: [template],\n }),\n canonicalRecordBytes(template) +\n MAX_PERSISTED_JSON_BYTES +\n MAX_RUN_CONTINUATION_BYTES,\n )\n .pipe(Effect.provideService(CurrentRunWriter, ctx));\n }),\n ),\n commit: (key, encodedOutput) =>\n recordHalt(\n Effect.gen(function* () {\n yield* flushDeferredResponse;\n const recordId = toolStepSettledRecordId(runId, key.toolCallId, key.stepName);\n\n if (knownIds.has(recordId)) return;\n\n const output = yield* decodePersisted(encodedOutput).pipe(\n Effect.mapError(() =>\n ThreadStoreError.make({\n operation: \"commit Step result\",\n message: \"Durable Step output exceeds canonical persistence bounds\",\n cause: AgentPersistenceCapacityError.make({\n message: \"Durable Step output exceeds canonical persistence bounds\",\n }),\n }),\n ),\n );\n\n const outputDigest = yield* withCrypto(digestJson(output));\n\n const envelope = yield* makeEnvelope(\n recordId,\n ToolStepSettled.make({\n runId,\n toolCallId: key.toolCallId,\n stepName: key.stepName,\n output,\n outputDigest,\n }),\n );\n\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: toolStepSettledBatchId(runId, key.toolCallId, key.stepName),\n producerId: config.producerId,\n records: [envelope],\n }),\n );\n knownIds.add(recordId);\n stepOutputs.set(recordId, output);\n yield* hit(\"step:after-step-append\");\n }),\n ),\n },\n noteTurnUsage: (usage) =>\n Effect.sync(() => {\n // Accumulate, never replace: a compaction summarizer and the\n // Turn's own response stage into the same canonical Turn.\n const key = usage.turn;\n const prior = stagedUsage.get(key);\n\n stagedUsage.set(key, {\n inputTokens: (prior?.inputTokens ?? 0) + usage.usage.inputTokens.total,\n outputTokens: (prior?.outputTokens ?? 0) + usage.usage.outputTokens.total,\n costMicrousd: (prior?.costMicrousd ?? 0) + usage.usage.costMicrousd,\n modelUsage: [...(prior?.modelUsage ?? []), usage.usage],\n });\n progressWriters\n .get(ctx)\n ?.stageUsage(runId, terminalUsageCharge(uncommittedModelUsage()));\n }),\n commitCompaction: Effect.fnUntraced(function* (commit) {\n const canonicalTurn = commit.turn;\n const recordId = compactionRecordId(runId, canonicalTurn, commit.kind);\n\n if (knownIds.has(recordId)) {\n return yield* CompactionError.make({\n message: \"Compaction is already committed for this Turn and kind\",\n });\n }\n\n let sourceJournal = journal;\n let sourceBoundaries = boundaries;\n\n if (initialJournal !== undefined) {\n initialJournal.cacheable = false;\n initialJournal.history = undefined;\n }\n if (commit.kind !== \"summarize\" || initialJournal?.prefix !== undefined) {\n // Results must be canonical before pruning or rollover can cover them. Newly committed\n // compactions remain overlays on this Attempt's append-only source, so omit those\n // overlays while reconstructing the exact source-to-record mapping.\n const tail = yield* ctx.tail;\n\n const source =\n initialJournal === undefined\n ? canonical\n : Stream.fromIterable(\n yield* recordHalt(\n readInitialJournal(initialJournal.original, initialJournal.suffix),\n ),\n );\n\n sourceBoundaries = [];\n sourceJournal = yield* recordHalt(\n projectRunJournalStream(\n Stream.concat(\n source,\n Stream.fromIterable(\n yield* recordHalt(\n selectedRange(ctx.threadId, [submissionId], tail.sequence, canonicalThrough),\n ),\n ),\n ).pipe(\n Stream.filter(\n (envelope) =>\n envelope.record.payload._tag !== \"CompactionCreated\" ||\n envelope.sequence <= canonicalThrough,\n ),\n ),\n runId,\n (boundary) => sourceBoundaries.push(boundary),\n priorContext,\n ),\n );\n }\n\n // The validated original input bounds summaries even when startup deferred its append.\n // Pruning and rollover also admit complete current-Run canonical boundaries.\n const coverable = sourceBoundaries.filter(\n (boundary) => commit.kind !== \"summarize\" || boundary.sequence < originalInput.sequence,\n );\n\n if (coverable.length === 0) {\n return yield* CompactionError.make({\n message:\n commit.kind === \"rollover\"\n ? \"Durable rollover requires complete canonical records\"\n : \"Durable compaction requires eligible canonical records\",\n });\n }\n\n const comparisonView = instructionView(\n sourceJournal.prompt.content,\n initialInstructions,\n false,\n sourceJournal.historyBefore.content.length,\n );\n\n // Compare each visible message once. A transformed source can authorize only its\n // exact canonical prefix; no per-candidate rereads or full encoded Prompt copies.\n let matchingPrefix = 0;\n let requiredThrough = 0;\n const comparisonLimit = Math.min(comparisonView.messages.length, commit.through);\n\n for (let index = 0; index < commit.through; index += 1) {\n const message = commit.source.content[index];\n\n if (\n message !== undefined &&\n (commit.kind === \"clear-tool-results\"\n ? message.role === \"tool\"\n : message.role !== \"system\")\n )\n requiredThrough = index + 1;\n if (index >= comparisonLimit || index !== matchingPrefix || message === undefined)\n continue;\n const canonicalMessage = comparisonView.messages[index];\n\n if (canonicalMessage === undefined) continue;\n\n // Preserve Prompt's JSON projection while ignoring persisted object-key order.\n const encode = (entry: Prompt.Message) =>\n encodeCompactionMessageJson(entry).pipe(\n Effect.flatMap(decodeCompactionMessageJson),\n Effect.map(canonicalJson),\n Effect.mapError((cause) =>\n CompactionError.make({\n message: \"Could not encode the canonical compaction prefix\",\n cause,\n }),\n ),\n );\n\n const left = yield* encode(canonicalMessage);\n const right = yield* encode(message);\n\n if (left === right) matchingPrefix += 1;\n }\n\n let lastCovered: JournalBoundary | undefined;\n\n for (let index = 0; index < coverable.length; index += 1) {\n const candidate = coverable[index];\n\n if (candidate === undefined) continue;\n const following = coverable[index + 1];\n\n if (following?.tag === \"ToolCallSettled\") continue;\n\n const length = comparisonView.prefixLength(candidate.promptLength);\n\n if (length === 0 || length > commit.through) continue;\n if (length < requiredThrough || length > matchingPrefix) continue;\n lastCovered = candidate;\n }\n if (lastCovered === undefined) {\n return yield* CompactionError.make({\n message:\n commit.kind === \"rollover\"\n ? \"Rollover coverage cannot be mapped to complete canonical records\"\n : \"Compaction coverage cannot be mapped to complete canonical records\",\n });\n }\n const coveredSequence = lastCovered.sequence;\n\n if (\n commit.kind !== \"summarize\" &&\n sourceBoundaries.some(\n (boundary) =>\n boundary.incomplete === true &&\n boundary.terminalPriorRun !== true &&\n boundary.sequence <= coveredSequence,\n )\n ) {\n return yield* CompactionError.make({\n message: \"Compaction cannot cover an incomplete Tool batch\",\n });\n }\n if (commit.kind === \"summarize\" && (commit.summary ?? \"\").trim().length === 0) {\n return yield* CompactionError.make({\n message: \"A summarize compaction commit carried no summary\",\n });\n }\n\n const payload = yield* Schema.decodeEffect(CompactionCreated)({\n _tag: \"CompactionCreated\",\n runId,\n turn: canonicalTurn,\n kind: commit.kind,\n coversThrough: lastCovered.sequence,\n ...(commit.kind === \"summarize\" ? { summary: commit.summary } : {}),\n ...(commit.kind === \"rollover\" && commit.handoff !== undefined\n ? { handoff: commit.handoff }\n : {}),\n }).pipe(\n Effect.mapError((cause) =>\n CompactionError.make({\n message: \"Compaction decision exceeds canonical persistence bounds\",\n cause,\n }),\n ),\n );\n\n const envelope = yield* recordHalt(makeEnvelope(recordId, payload));\n\n yield* recordHalt(hit(\"compaction:before-canonical-append\"));\n yield* recordHalt(\n appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: compactionBatchId(runId, canonicalTurn, commit.kind),\n producerId: config.producerId,\n records: [envelope],\n }),\n ),\n );\n knownIds.add(recordId);\n yield* recordHalt(hit(\"compaction:after-canonical-append\"));\n }),\n };\n\n /** Digest of one declared call's canonical encoded parameters (the original normalized wire). */\n const approvalParametersDigest = (\n toolCallId: string,\n ): Effect.Effect<Digest, DurableWorkerFailure> =>\n Effect.gen(function* () {\n if (!encodedParamsByCallId.has(toolCallId)) {\n return yield* RunJournalError.make({\n message: `Tool Call ${toolCallId} requested approval before its response commit`,\n });\n }\n\n const parameters = yield* decodePersisted(encodedParamsByCallId.get(toolCallId)).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: `Tool Call ${toolCallId} parameters exceed canonical persistence bounds`,\n cause,\n }),\n ),\n );\n\n return yield* withCrypto(digestJson(parameters));\n });\n\n /**\n * Append the canonical approval records for one declared call: the `ToolApprovalRequested`\n * record — plus the immediate `ToolApprovalDecided` for a policy-auto or intent-backed\n * decision, one atomic batch — or the decision alone when the request is already canonical.\n * Batch identity: the Turn's FIRST canonical approval append owns\n * `turn-approvals:{runId}:{turn}`; later appends of the same Turn (across suspension\n * cycles) use deterministic per-call batches so committed batch content is never\n * contradicted; decision-only appends use `approval-decision:{sid}:{toolCallId}`. Record\n * identity dedupes every replay; an identity conflict means another pass already committed\n * the same records.\n */\n const appendApprovalRecords = (\n turnInfo: { readonly turn: number; readonly turnId: TurnId },\n toolCallId: ToolCallId,\n toolName: string,\n decided:\n | {\n readonly decision: ApprovalDecision;\n readonly resolver: string;\n readonly reason: string;\n }\n | undefined,\n ): Effect.Effect<void, DurableWorkerFailure> =>\n Effect.gen(function* () {\n const requestRecordId = toolApprovalRequestRecordId(runId, turnInfo.turn, toolCallId);\n const decisionRecordId = toolApprovalDecisionRecordId(runId, turnInfo.turn, toolCallId);\n const envelopes: Array<RecordEnvelope> = [];\n const appendRequest = !knownIds.has(requestRecordId);\n\n if (appendRequest) {\n const parametersDigest = yield* approvalParametersDigest(toolCallId);\n\n envelopes.push(\n yield* makeEnvelope(\n requestRecordId,\n ToolApprovalRequested.make({\n blocksInitialDispatch: initialDispatchProofTurns.has(turnInfo.turn),\n runId,\n turnId: turnInfo.turnId,\n turn: turnInfo.turn,\n toolCallId,\n toolName,\n parametersDigest,\n }),\n ),\n );\n }\n if (decided !== undefined && !knownIds.has(decisionRecordId)) {\n envelopes.push(\n yield* makeEnvelope(\n decisionRecordId,\n ToolApprovalDecided.make({\n runId,\n turn: turnInfo.turn,\n toolCallId,\n decision: decided.decision,\n resolver: decided.resolver,\n reason: decided.reason,\n }),\n ),\n );\n }\n const head = envelopes[0];\n\n if (head !== undefined) {\n const batchId = appendRequest\n ? approvalRequestedTurns.has(turnInfo.turn)\n ? decodeBatchId(`approval-request:${runId}:${turnInfo.turn}:${toolCallId}`)\n : turnApprovalsBatchId(runId, turnInfo.turn)\n : approvalDecisionBatchId(submissionId, toolCallId);\n\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId,\n producerId: config.producerId,\n records: [head, ...envelopes.slice(1)],\n }),\n ).pipe(\n Effect.catchTag(\"AppendConflict\", () => Effect.void),\n Effect.asVoid,\n );\n for (const record of envelopes) knownIds.add(record.recordId);\n }\n if (appendRequest) {\n approvalRequestedTurns.add(turnInfo.turn);\n yield* hit(\"approval:after-request-append\");\n }\n if (decided !== undefined) {\n canonicalApprovalDecisions.set(toolCallId, decided.decision);\n }\n });\n\n /**\n * Retain every required request before any decision can remove initial-dispatch proof.\n * Policy preparation shares the engine deadline; canonical acceptance is a separate,\n * fenced commit. Canonical decisions and accepted resolver intents keep their audit.\n */\n const approval: RunApprovalHook<CoordinatorHalt | AgentPersistenceCapacityError, never> = {\n prepareBatch: (requests) =>\n recordHalt(\n Effect.gen(function* () {\n if (requests.length === 0) return;\n yield* flushDeferredResponse;\n const turnInfo = currentToolTurn;\n\n if (turnInfo === undefined)\n return yield* RunJournalError.make({\n message: \"Approval preparation preceded its canonical response\",\n });\n for (const request of requests) {\n if (\n request.threadId !== submission.threadId ||\n request.runId !== runId ||\n request.turnId !== turnInfo.turnId ||\n declaredNamesByCallId.get(request.toolCallId) !== request.toolName\n )\n return yield* RunJournalError.make({\n message: \"Approval preparation does not match its original declaration\",\n });\n yield* appendApprovalRecords(\n turnInfo,\n request.toolCallId,\n request.toolName,\n undefined,\n );\n }\n }),\n ),\n request: (request) =>\n recordHalt(\n Effect.gen(function* () {\n const canonical = canonicalApprovalDecisions.get(request.toolCallId);\n\n if (canonical !== undefined)\n return canonical === \"approved\"\n ? { _tag: \"approved\" as const }\n : { _tag: \"denied\" as const };\n const intent = approvalIntents.get(request.toolCallId);\n\n if (intent !== undefined)\n return intent.decision === \"approved\"\n ? { _tag: \"approved\" as const, reason: intent.reason }\n : { _tag: \"denied\" as const, reason: intent.reason };\n\n return approvalResolver === undefined\n ? { _tag: \"unresolved\" as const }\n : yield* approvalResolver.request(request);\n }),\n ),\n commit: (request, decision) =>\n recordHalt(\n Effect.gen(function* () {\n const turnInfo = currentToolTurn;\n\n if (\n turnInfo === undefined ||\n request.threadId !== submission.threadId ||\n request.runId !== runId ||\n request.turnId !== turnInfo.turnId ||\n declaredNamesByCallId.get(request.toolCallId) !== request.toolName\n )\n return yield* RunJournalError.make({\n message: \"Approval acceptance does not match its original declaration\",\n });\n const canonical = canonicalApprovalDecisions.get(request.toolCallId);\n\n if (canonical !== undefined) {\n if (decision._tag !== canonical)\n return yield* RunJournalError.make({\n message: \"Approval preparation disagrees with its canonical decision\",\n });\n\n return;\n }\n const intent = approvalIntents.get(request.toolCallId);\n\n if (intent !== undefined && decision._tag !== intent.decision)\n return yield* RunJournalError.make({\n message: \"Approval preparation disagrees with its accepted intent\",\n });\n yield* appendApprovalRecords(\n turnInfo,\n request.toolCallId,\n request.toolName,\n intent !== undefined\n ? { decision: intent.decision, resolver: intent.resolver, reason: intent.reason }\n : decision._tag === \"unresolved\"\n ? undefined\n : {\n decision: decision._tag,\n resolver: APPROVAL_POLICY_RESOLVER,\n reason: boundedApprovalReason(\n decision.reason,\n \"The configured approval policy decided immediately\",\n ),\n },\n );\n }),\n ),\n };\n\n /**\n * Joining/Joined queued input hook (plan §2.5, DUR-016). At every engine drain seam:\n *\n * 1. Reattach first — pre-existing joins whose canonical `input:{sid}` record is not yet\n * prompt-covered re-deliver WITHOUT re-appending (record identity is the dedupe);\n * covered inputs are already inside the journal prompt. A `joining` row whose input is\n * canonical only lost its marker: it is repaired from history under the host's live\n * ownership (DUR-015). A `joining` row WITHOUT canonical input was never consumed and\n * is recovery's to revert — the hook never guesses at it (fail-closed).\n * 2. Claim fresh — `claimJoining` atomically transitions the contiguous ready prefix of\n * strictly-later queue sequences to `joining` under the host's local generation (an\n * admitted-not-ready row breaks the prefix). Per fresh claim: honor a\n * pre-consumption abort intent by reverting (revert-then-abort), else append the\n * deterministic `UserInputRecorded` (batch `submission-input:{sid}`, record\n * `input:{sid}`, `runId` = host Run, kind `steering`) → `join:after-canonical-append`\n * → `markJoined` → hand the engine the `RunInputCommand`.\n *\n * Delivered input is `steering`: the engine appends it to official history at the seam,\n * so the next Turn's response commit makes it model-visible canonically — exactly the\n * prompt-coverage rule recovery relies on.\n */\n const renderJoinedInput = Effect.fnUntraced(function* (\n encodedInput: UserInputRecorded[\"input\"],\n messageAdmission: UserInputRecorded[\"messageAdmission\"],\n ) {\n if (Schema.is(FrameworkMessage)(messageAdmission))\n return yield* Schema.encodeEffect(Schema.fromJsonString(FrameworkMessage))(\n messageAdmission,\n ).pipe(\n Effect.mapError(() =>\n AgentInputError.make({ message: \"Invalid worker completion message\" }),\n ),\n );\n const inputPrompt = agent.definition.inputPrompt;\n\n if (inputPrompt === undefined) {\n return yield* renderInputPrompt(undefined, encodedInput, encodedInput);\n }\n\n const decodedInput = yield* Schema.decodeEffect(agent.definition.input)(encodedInput).pipe(\n Effect.mapError((cause) =>\n AgentInputDecodeError.make({\n message: cause.message,\n }),\n ),\n );\n\n return yield* renderInputPrompt(inputPrompt, decodedInput, encodedInput);\n });\n\n // Claims are authority, wakes are hints. A cancelled waiter retains every claim\n // for the seam drain; it never appends input while an old response can still commit.\n type PreparedJoin = {\n readonly claim: JoiningClaim;\n readonly input: Pick<UserInputRecorded, \"input\" | \"messageAdmission\">;\n readonly rendered: Prompt.RawInput;\n };\n\n const pendingJoinClaims: Array<{ readonly claim: JoiningClaim; prepared?: PreparedJoin }> =\n [];\n\n const claimInputs = Effect.fnUntraced(function* (maxCount: number) {\n const claims = yield* session.claimJoining(maxCount);\n\n pendingJoinClaims.push(...claims.map((claim) => ({ claim })));\n\n return claims.length;\n }, Effect.uninterruptible);\n\n const revertClaims = Effect.fnUntraced(function* (\n claims: ReadonlyArray<(typeof pendingJoinClaims)[number]>,\n ) {\n for (const pending of claims) {\n yield* session.revertJoining(pending.claim.submissionId);\n pendingJoinClaims.splice(pendingJoinClaims.indexOf(pending), 1);\n }\n }, Effect.uninterruptible);\n\n // Preparation remains interruptible; a completed render stays with its claim so\n // cancellation of the waiter cannot lose it or invoke the callback again at the seam.\n const prepareInputs = Effect.fnUntraced(function* (limit: number, firstReady = false) {\n if (\n pendingJoinClaims.length < limit &&\n (yield* claimInputs(limit - pendingJoinClaims.length)) > 0\n )\n yield* hit(\"join:after-claim\");\n const prepared: Array<PreparedJoin> = [];\n\n for (const pending of pendingJoinClaims.slice(0, limit)) {\n const claim = pending.claim;\n\n const snapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: claim.submissionId }),\n );\n\n if (snapshot.abortIntent !== undefined) {\n yield* revertClaims([pending]);\n continue;\n }\n if (pending.prepared === undefined) {\n const input = {\n input: claim.inputPayload,\n ...(snapshot.submission.messageAdmission === undefined\n ? {}\n : { messageAdmission: snapshot.submission.messageAdmission }),\n };\n\n const rendered = yield* Effect.result(\n renderJoinedInput(input.input, input.messageAdmission),\n );\n\n if (Result.isFailure(rendered)) {\n // A rejected prompt and its suffix retain their own Runs in queue order.\n yield* revertClaims(pendingJoinClaims.slice(pendingJoinClaims.indexOf(pending)));\n break;\n }\n pending.prepared = { claim, input, rendered: rendered.success };\n }\n prepared.push(pending.prepared);\n if (firstReady) break;\n }\n\n return prepared;\n });\n\n const awaitJoin = recordHalt(\n Effect.gen(function* () {\n while (true) {\n const ready = yield* Effect.scoped(\n Effect.gen(function* () {\n const notified = yield* wake.subscribe(submission.threadId);\n\n if ((yield* prepareInputs(MAX_JOIN_DRAIN, true)).length > 0) return true;\n yield* notified;\n\n return false;\n }),\n );\n\n if (ready) return;\n }\n }),\n );\n\n const input: RunInputHook<\n CoordinatorHalt | AgentPersistenceCapacityError | Agent.Failure<typeof agent>,\n Agent.DefinitionRequirements<(typeof agent)[\"definition\"]>\n > = {\n awaitJoin,\n drain: Effect.fnUntraced(function* (policy) {\n const joinedInputs = yield* recordHalt(\n Effect.gen(function* () {\n const limit = policy === \"one\" ? 1 : MAX_JOIN_DRAIN;\n\n const joinedInputs: Array<\n Pick<UserInputRecorded, \"input\" | \"messageAdmission\"> & {\n readonly rendered?: Prompt.RawInput;\n }\n > = [];\n\n if (joinBacklog === undefined) {\n const hostSnapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId }),\n );\n\n joinBacklog = hostSnapshot.joins;\n }\n // These inputs were already consumed by an earlier attempt. Restore the\n // entire uncovered prompt; only fresh claims are subject to the drain bound.\n for (const join of joinBacklog) {\n const joinId = join.submissionId;\n\n if (deliveredJoinInputs.has(joinId)) continue;\n if (join.state !== \"joining\" && join.state !== \"joined\") continue;\n const existing = joinedInputEnvelopes.get(joinId);\n\n if (existing === undefined) continue;\n if (join.state === \"joining\") {\n // Canonical input without its joined marker (crash between the append and\n // `markJoined`): repair the marker from history before reattaching.\n yield* session.markJoined(joinId, {\n recordId: existing.record.recordId,\n sequence: existing.sequence,\n });\n }\n deliveredJoinInputs.add(joinId);\n if (\n lastHostResponseSequence !== undefined &&\n lastHostResponseSequence > existing.sequence\n ) {\n continue;\n }\n const payload = existing.record.payload;\n\n if (payload._tag !== \"UserInputRecorded\") continue;\n joinedInputs.push(payload);\n }\n const claims = yield* prepareInputs(limit);\n\n pendingJoinClaims.splice(0, claims.length);\n for (const { claim, input: payload, rendered } of claims) {\n const recordId = submissionInputRecordId(claim.submissionId);\n let sequence: CanonicalSequence;\n const existing = joinedInputEnvelopes.get(claim.submissionId);\n\n if (existing !== undefined) {\n // Defensive reattach: the exact record is already canonical, so only the\n // marker and the delivery remain (DUR-016 — never a duplicate append).\n sequence = existing.sequence;\n } else {\n const envelope = yield* makeEnvelope(\n recordId,\n UserInputRecorded.make({\n submissionId: claim.submissionId,\n kind: \"steering\",\n runId,\n input: claim.inputPayload,\n ...(payload.messageAdmission === undefined\n ? {}\n : { messageAdmission: payload.messageAdmission }),\n }),\n );\n\n const result = yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: submissionInputBatchId(claim.submissionId),\n producerId: config.producerId,\n records: [envelope],\n }),\n );\n\n sequence = result.firstSequence;\n knownIds.add(recordId);\n yield* hit(\"join:after-canonical-append\");\n }\n yield* session.markJoined(claim.submissionId, { recordId, sequence });\n deliveredJoinInputs.add(claim.submissionId);\n joinedInputs.push({\n ...payload,\n rendered,\n });\n }\n\n return joinedInputs;\n }),\n );\n\n return yield* Effect.forEach(joinedInputs, (joinedInput) =>\n (joinedInput.rendered === undefined\n ? renderJoinedInput(joinedInput.input, joinedInput.messageAdmission)\n : Effect.succeed(joinedInput.rendered)\n ).pipe(\n Effect.map((input): RunInputCommand => ({\n kind: \"steering\",\n input,\n })),\n ),\n );\n }),\n };\n\n /**\n * Durable child establishment: `establish` performs or replays\n * the idempotent get-or-create establishment protocol under the\n * parent's ownership fence and reports where the one child stands; `join` appends the\n * atomic `[SubagentJoined, ToolCallSettled]` settlement batch (SUB-019) and applies the\n * reservation release. Both use the halt side channel exactly like the durability/step\n * hooks: the engine wraps a `CoordinatorHalt` into `SubagentDurabilityError` in the\n * handler channel while the Attempt aborts with the original infrastructure failure.\n */\n const establishmentGate = yield* Semaphore.make(1);\n\n const establishSubagent = (\n request: RunSubagentEstablishRequest,\n ): Effect.Effect<ChildEstablishStatus, CoordinatorHalt | AgentPersistenceCapacityError> =>\n recordHalt(\n Effect.gen(function* () {\n const toolCallId = request.toolCallId;\n const turnInfo = currentToolTurn;\n\n if (turnInfo === undefined) {\n return yield* RunJournalError.make({\n message: `Delegation Tool Call ${toolCallId} established before any canonical response commit`,\n });\n }\n\n const denied = (errorTag: string, message: string): ChildEstablishStatus => ({\n _tag: \"denied\",\n errorTag,\n message: boundedText(message),\n });\n\n let requestedPayload = subagentState.requested.get(toolCallId);\n\n if (requestedPayload === undefined) {\n // FIRST establishment of this call: fix every digest fail-closed BEFORE any\n // durable mutation, then reserve → append the canonical request (spec §12\n // steps 2-3). Replays below proceed from the canonical record instead — the\n // recorded request, not the re-computed handler values, is the establishment\n // authority (SUB-016/SUB-018).\n if (request.depth !== delegationDepth + 1) {\n return denied(\n \"SubagentDepthUnsupported\",\n `The child depth must be exactly one greater than its source depth ${delegationDepth}`,\n );\n }\n\n // Resolve the exact declaration through ordinary host registration. Recovery\n // below uses the already-persisted request, never a newer registration.\n let targetDigests = request.targetDigests;\n\n if (request.target !== undefined) {\n if (request.target.id !== request.targetAgentId) {\n return denied(\n \"SubagentBindingUnavailable\",\n \"The child target identity differs from its Definition\",\n );\n }\n\n const binding = yield* resolveDefinitionBinding(\n registeredBindings,\n request.target,\n ).pipe(Effect.result);\n\n if (binding._tag === \"Failure\") {\n return denied(\"SubagentBindingUnavailable\", binding.failure.message);\n }\n if (\n targetDigests !== undefined &&\n (targetDigests.agent !== binding.success.digests.agent ||\n targetDigests.model !== binding.success.digests.model ||\n targetDigests.tools !== binding.success.digests.tools)\n ) {\n return denied(\n \"SubagentDigestsInvalid\",\n \"The explicit child digests differ from its exact registration\",\n );\n }\n targetDigests = binding.success.digests;\n }\n\n const decodedDigests = yield* decodeDefinitionDigests(targetDigests).pipe(\n Effect.option,\n );\n\n if (Option.isNone(decodedDigests)) {\n return denied(\n \"SubagentDigestsInvalid\",\n \"The declared child Binding digests are not valid stored digests\",\n );\n }\n\n const childInput = yield* decodePersisted(request.encodedChildInput).pipe(\n Effect.option,\n );\n\n if (Option.isNone(childInput)) {\n return denied(\n \"SubagentInputUnpersistable\",\n \"The prepared child input does not satisfy the canonical persistence bounds\",\n );\n }\n const grant = yield* decodePersisted(request.encodedGrant).pipe(Effect.option);\n\n const allocation = yield* decodePersisted(request.encodedAllocation).pipe(\n Effect.option,\n );\n\n if (Option.isNone(grant) || Option.isNone(allocation)) {\n return denied(\n \"SubagentDeclarationUnpersistable\",\n \"The delegation grant or allocation does not satisfy the canonical persistence bounds\",\n );\n }\n const decodedGrant = Schema.decodeUnknownOption(SubagentGrant)(grant.value);\n\n if (Option.isNone(decodedGrant))\n return denied(\"SubagentGrantInvalid\", \"The child authority grant is invalid\");\n if (request.policy === undefined || request.budget === undefined)\n return denied(\n \"SubagentBudgetInvalid\",\n \"New durable children require their full execution policy and subtree allocation\",\n );\n if (\n request.toolCallAllowance !== undefined &&\n !Schema.is(SubagentRequested.fields.toolCallAllowance)(request.toolCallAllowance)\n ) {\n return denied(\n \"SubagentAllowanceInvalid\",\n \"The child Tool Call allowance must be a positive integer\",\n );\n }\n if (request.policy !== undefined && !Schema.is(AgentPolicy)(request.policy)) {\n return denied(\"SubagentPolicyInvalid\", \"The resolved child policy is invalid\");\n }\n if (request.budget !== undefined) {\n if (!Schema.is(SubagentBudgetReservation)(request.budget)) {\n return denied(\"SubagentBudgetInvalid\", \"The shared delegation budget is invalid\");\n }\n\n const decodedAllocation = Schema.decodeUnknownOption(SubagentReservationAmounts)(\n allocation.value,\n );\n\n if (\n Option.isNone(decodedAllocation) ||\n !Equal.equals(decodedAllocation.value, request.budget.allocation)\n ) {\n return denied(\n \"SubagentBudgetInvalid\",\n \"The reserved allocation differs from its budget declaration\",\n );\n }\n const { caps, allocation: requested } = request.budget;\n const prior = [...subagentState.requested.values()];\n\n if (\n prior.some(\n (entry) => entry.budget === undefined || !Equal.equals(entry.budget.caps, caps),\n )\n ) {\n return denied(\n \"SubagentParentBudgetConflict\",\n \"Delegations in one parent Run must share the same caps\",\n );\n }\n if (\n caps.maxTotalChildInvocations !== undefined &&\n prior.reduce(\n (sum, entry) => sum + 1 + (entry.budget?.descendantInvocations ?? 0),\n 1 + (request.budget.descendantInvocations ?? 0),\n ) > caps.maxTotalChildInvocations\n ) {\n return denied(\n \"SubagentBudgetExhausted\",\n \"The parent Run exhausted its child invocation budget\",\n );\n }\n const active = prior.filter((entry) => !subagentState.joined.has(entry.toolCallId));\n\n if (\n caps.maxConcurrentChildren !== undefined &&\n active.length >= caps.maxConcurrentChildren\n ) {\n return denied(\n \"SubagentBudgetExhausted\",\n \"The parent Run exhausted its concurrent child budget\",\n );\n }\n\n const dimensions = [\n [\"turns\", \"maxTurns\"],\n [\"toolCalls\", \"maxToolCalls\"],\n [\"durationMillis\", \"maxDurationMillis\"],\n [\"inputTokens\", \"maxInputTokens\"],\n [\"outputTokens\", \"maxOutputTokens\"],\n [\"costMicrousd\", \"maxCostMicrousd\"],\n [\"resultBytes\", \"maxResultBytes\"],\n ] as const;\n\n const accounting = Schema.Struct({ consumed: SubagentReservationAmounts });\n\n for (const [amount, cap] of dimensions) {\n const limit = caps[cap];\n\n if (limit === undefined) continue;\n let consumed = requested[amount];\n\n for (const entry of prior) {\n const joined = subagentState.joined.get(entry.toolCallId);\n\n const observed =\n joined === undefined\n ? Option.none()\n : Schema.decodeUnknownOption(accounting)(joined.finalAccounting);\n\n consumed += Option.isSome(observed)\n ? observed.value.consumed[amount]\n : (entry.budget?.allocation[amount] ?? limit);\n }\n if (consumed > limit) {\n return denied(\n \"SubagentBudgetExhausted\",\n `The parent Run exhausted its shared ${amount} budget`,\n );\n }\n }\n }\n const childInputDigest = yield* withCrypto(digestJson(childInput.value));\n const grantDigest = yield* withCrypto(digestJson(grant.value));\n const allocationDigest = yield* withCrypto(digestJson(allocation.value));\n const reservationId = childReservationIdFor(runId, toolCallId);\n\n // Top-level attached declarations retain their independent explicit pool. A\n // child with an ancestor allocation shares its residual with both lifetimes.\n const subtree =\n delegationDepth === 0\n ? undefined\n : yield* workerRuntime\n .reserveSubtree(\n submission.threadId,\n SubtreeBudgetReserved.make({\n reservationId,\n executionRunId: runId,\n sourceSubmissionId: submissionId,\n childThreadId: childThreadIdFor(submissionId, toolCallId),\n lifetime: \"attached\",\n depth: request.depth,\n policy: request.policy,\n grant: decodedGrant.value,\n budget: request.budget,\n }),\n )\n .pipe(Effect.result);\n\n if (subtree?._tag === \"Failure\") {\n if (subtree.failure.reason === \"storage\")\n return yield* LedgerError.make({\n operation: \"reserve-subtree\",\n message: \"Subtree reservation is unavailable\",\n });\n\n return denied(\n \"SubagentBudgetExhausted\",\n `The subtree reservation was refused: ${subtree.failure.reason}`,\n );\n }\n\n yield* session\n .reserveChildBudget({\n reservationId,\n parentToolCallId: toolCallId,\n allocation: allocation.value,\n allocationDigest,\n })\n .pipe(\n Effect.catchTag(\n \"ChildReservationConflict\",\n conflictToLedgerError(\"reserveChildBudget\"),\n ),\n );\n yield* hit(\"subagent:after-reserve\");\n requestedPayload = SubagentRequested.make({\n runId,\n turnId: turnInfo.turnId,\n turn: turnInfo.turn,\n toolCallId,\n delegationId: request.delegationId,\n targetAgentId: request.targetAgentId,\n targetDigests: decodedDigests.value,\n childInput: childInput.value,\n childInputDigest,\n grantDigest,\n grant: decodedGrant.value,\n depth: request.depth,\n reservationId,\n reservationDigest: allocationDigest,\n childThreadId: childThreadIdFor(submissionId, toolCallId),\n childPrincipal: submission.principal,\n childIdempotencyKey: childIdempotencyKeyFor(runId, toolCallId),\n ...(request.toolCallAllowance === undefined\n ? {}\n : { toolCallAllowance: request.toolCallAllowance }),\n ...(request.policy === undefined ? {} : { policy: request.policy }),\n ...(request.budget === undefined ? {} : { budget: request.budget }),\n });\n const requestRecordId = subagentRequestedRecordId(runId, toolCallId);\n\n if (!knownIds.has(requestRecordId)) {\n const envelope = yield* makeEnvelope(requestRecordId, requestedPayload);\n\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: subagentRequestedBatchId(runId, toolCallId),\n producerId: config.producerId,\n records: [envelope],\n }),\n ).pipe(\n Effect.catchTag(\"AppendConflict\", () => Effect.void),\n Effect.asVoid,\n );\n knownIds.add(requestRecordId);\n }\n subagentState.requested.set(toolCallId, requestedPayload);\n yield* hit(\"subagent:after-request-append\");\n }\n // Steps 4-8: resolveAdmission-gated admission with immutable parent linkage,\n // child materialization + lineage, readiness, Receipt (SUB-016/SUB-017/SUB-031).\n const admission = yield* establishChildFromRequest(submission, requestedPayload);\n\n if (admission._tag === \"indeterminate\") {\n // Wait-and-retry, never a second admission: the Attempt aborts with the\n // obligation still owed and the next pass re-queries the authoritative owner.\n return yield* LedgerError.make({\n operation: \"establishSubagent\",\n message: `Child admission for Tool Call ${toolCallId} is indeterminate (${admission.reason}); retrying without a second admission (SUB-031)`,\n });\n }\n const childRunId = runIdForSubmission(admission.childSubmissionId);\n // Step 9: the start link is appended only after the child Receipt exists (SUB-017).\n let startedPayload = subagentState.started.get(toolCallId);\n\n if (startedPayload === undefined) {\n startedPayload = SubagentStarted.make({\n runId,\n toolCallId,\n childThreadId: requestedPayload.childThreadId,\n childSubmissionId: admission.childSubmissionId,\n childReceiptId: admission.receiptId,\n childRunId,\n });\n const startRecordId = subagentStartedRecordId(runId, toolCallId);\n\n if (!knownIds.has(startRecordId)) {\n const envelope = yield* makeEnvelope(startRecordId, startedPayload);\n\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: subagentStartedBatchId(runId, toolCallId),\n producerId: config.producerId,\n records: [envelope],\n }),\n ).pipe(\n Effect.catchTag(\"AppendConflict\", () => Effect.void),\n Effect.asVoid,\n );\n knownIds.add(startRecordId);\n }\n subagentState.started.set(toolCallId, startedPayload);\n yield* hit(\"subagent:after-start-append\");\n } else if (startedPayload.childSubmissionId !== admission.childSubmissionId) {\n return yield* LedgerError.make({\n operation: \"establishSubagent\",\n message: `The canonical SubagentStarted record names child ${startedPayload.childSubmissionId} but admission resolved ${admission.childSubmissionId}; establishment fails closed (SUB-016)`,\n });\n }\n yield* session\n .attachChildToReservation({\n reservationId: decodeChildReservationIdSync(requestedPayload.reservationId),\n childSubmissionId: startedPayload.childSubmissionId,\n })\n .pipe(\n Effect.catchTag(\n \"ChildReservationConflict\",\n conflictToLedgerError(\"attachChildToReservation\"),\n ),\n );\n\n const identity = {\n childThreadId: startedPayload.childThreadId,\n childSubmissionId: startedPayload.childSubmissionId,\n childRunId: startedPayload.childRunId,\n receiptId: startedPayload.childReceiptId,\n };\n\n const child = yield* ledger.lookup(\n SubmissionLookupById.make({ submissionId: startedPayload.childSubmissionId }),\n );\n\n if (Option.isNone(child)) {\n return yield* LedgerError.make({\n operation: \"establishSubagent\",\n message: `Established child ${startedPayload.childSubmissionId} is unknown to the ledger`,\n });\n }\n if (child.value.state !== \"settled\") {\n return { _tag: \"waiting\" as const, ...identity };\n }\n\n // §1.6: the child already settled — verify Parent Link, target, digests, and the\n // settlement record fail-closed before handing the outcome to the handler.\n const verification = yield* verifySettledChild(\n submission,\n requestedPayload,\n startedPayload.childSubmissionId,\n );\n\n if (verification._tag === \"mismatch\") {\n return denied(\"SubagentVerificationFailed\", verification.message);\n }\n\n return {\n _tag: \"settled\" as const,\n ...identity,\n outcome: verification.value.outcome,\n encodedResult: verification.value.encodedResult,\n ...(yield* verifiedChildUsage(verification.value, startedPayload.childRunId)),\n // The child Settlement's honest exhaustion marker (RUN-018)\n // rides to the parent handler so the delegation can surface a\n // budget-truncated partial to the orchestrator (SUB-034).\n ...(verification.value.settlement.finishReason === undefined\n ? {}\n : { finishReason: verification.value.settlement.finishReason }),\n };\n }).pipe(establishmentGate.withPermits(1)),\n );\n\n const joinSubagent = (\n request: RunSubagentJoinRequest,\n ): Effect.Effect<void, CoordinatorHalt | AgentPersistenceCapacityError> =>\n recordHalt(\n Effect.gen(function* () {\n const toolCallId = request.toolCallId;\n const turnInfo = currentToolTurn;\n\n if (turnInfo === undefined) {\n return yield* RunJournalError.make({\n message: `Delegation Tool Call ${toolCallId} joined before any canonical response commit`,\n });\n }\n const requestedPayload = subagentState.requested.get(toolCallId);\n const startedPayload = subagentState.started.get(toolCallId);\n\n if (requestedPayload === undefined || startedPayload === undefined) {\n return yield* RunJournalError.make({\n message: `Delegation Tool Call ${toolCallId} joined without canonical establishment records`,\n });\n }\n const reservationId = decodeChildReservationIdSync(requestedPayload.reservationId);\n const joinedRecordId = subagentJoinedRecordId(runId, toolCallId);\n let finalAccounting: PersistedJson;\n const existingJoined = subagentState.joined.get(toolCallId);\n\n if (existingJoined !== undefined) {\n // The atomic join batch is already canonical: only the reservation release below\n // may remain (spec §12 join step 6 — the canonical record is the replay source).\n finalAccounting = existingJoined.finalAccounting;\n } else {\n const encodedResult = yield* decodePersisted(request.encodedResult).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: `The projected result of Tool Call ${toolCallId} exceeds canonical persistence bounds`,\n cause,\n }),\n ),\n );\n\n const accounting = yield* decodePersisted(request.encodedAccounting).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: `The join accounting of Tool Call ${toolCallId} exceeds canonical persistence bounds`,\n cause,\n }),\n ),\n );\n\n const verification = yield* verifySettledChild(\n submission,\n requestedPayload,\n startedPayload.childSubmissionId,\n );\n\n if (verification._tag === \"mismatch\") {\n return yield* LedgerError.make({\n operation: \"joinSubagent\",\n message: `Child Settlement verification failed for Tool Call ${toolCallId}: ${verification.message}`,\n });\n }\n const verified = verification.value;\n const toolName = declaredNamesByCallId.get(toolCallId);\n\n if (toolName === undefined) {\n return yield* RunJournalError.make({\n message: `Delegation Tool Call ${toolCallId} joined without a declared Tool name`,\n });\n }\n\n yield* hit(\"subagent:before-join-append\");\n\n const joinedPayload = SubagentJoined.make({\n runId,\n toolCallId,\n childSubmissionId: startedPayload.childSubmissionId,\n childSettlementId: verified.settlement.settlementId,\n childOutcome: verified.outcome,\n usageSummary: yield* childUsageSummaryOf(\n verified.childRecords,\n startedPayload.childRunId,\n ),\n ...(yield* verifiedChildUsage(verified, startedPayload.childRunId)),\n reservationId: requestedPayload.reservationId,\n finalAccounting: accounting,\n });\n\n const settledRecordId = toolCallSettledRecordId(runId, turnInfo.turn, toolCallId);\n const joinedEnvelope = yield* makeEnvelope(joinedRecordId, joinedPayload);\n\n const settledEnvelope = yield* makeEnvelope(\n settledRecordId,\n ToolCallSettled.make({\n runId,\n toolCallId,\n toolName,\n result: encodedResult,\n isFailure: request.isFailure,\n }),\n );\n\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: subagentJoinBatchId(runId, toolCallId),\n producerId: config.producerId,\n records: [joinedEnvelope, settledEnvelope],\n }),\n ).pipe(\n Effect.catchTag(\"AppendConflict\", () => Effect.void),\n Effect.asVoid,\n );\n knownIds.add(joinedRecordId);\n knownIds.add(settledRecordId);\n subagentState.joined.set(toolCallId, joinedPayload);\n finalAccounting = accounting;\n yield* hit(\"subagent:after-join-append\");\n }\n yield* applyReservationRelease(reservationId, finalAccounting, {\n threadId: submission.threadId,\n runId,\n toolCallId,\n });\n }),\n );\n\n const subagent: RunSubagentHook<CoordinatorHalt | AgentPersistenceCapacityError, never> = {\n establish: establishSubagent,\n join: joinSubagent,\n };\n\n const toolAuthorization: RunToolAuthorizationHook<AgentToolAuthorizationCheckError> =\n inheritedGrant === undefined && runToolAuthorization === RunToolAuthorization.allowAllPolicy\n ? runToolAuthorization\n : {\n authorize: (request: RunToolAuthorizationRequest) =>\n inheritedGrant !== undefined &&\n !inheritedGrant.allowedToolNames.includes(request.call.toolName)\n ? Effect.succeed({\n _tag: \"denied\",\n reason: \"Tool exceeds the worker's immutable grant\",\n })\n : runToolAuthorization.authorize({\n ...request,\n // Preserve the admitted wire value even when an Agent Schema's decode/encode\n // pair normalizes differently on a second pass.\n input: submission.inputPayload,\n ...(Schema.is(FrameworkMessage)(submission.messageAdmission)\n ? { frameworkMessage: submission.messageAdmission }\n : {}),\n }),\n };\n\n const options: RunOptions<\n | CoordinatorHalt\n | AgentPersistenceCapacityError\n | AgentToolAuthorizationCheckError\n | CompactionError\n | RunContextPreparationError\n | Agent.Failure<typeof agent>,\n Agent.DefinitionRequirements<(typeof agent)[\"definition\"]>\n > = {\n threadId: submission.threadId,\n runId,\n history: pending === undefined ? journal.historyBefore : resumeProjection.historyBefore,\n input,\n // Ready corrections share the next model Turn, bounded by MAX_JOIN_DRAIN.\n commandDrainPolicy: \"all\",\n ...(priorContext !== undefined ||\n journal.committedTurns > 0 ||\n Schema.is(FrameworkMessage)(submission.messageAdmission)\n ? { retainedInput: submission.inputPayload }\n : {}),\n ...(priorContext === undefined\n ? {}\n : {\n retainedContext: Prompt.fromMessages(\n priorContext.prompt.content.slice(priorContext.priorHistoryLength),\n ),\n }),\n ...(Schema.is(FrameworkMessage)(submission.messageAdmission)\n ? { frameworkMessage: submission.messageAdmission }\n : {}),\n approval,\n toolAuthorization,\n ...(journal.toolSelection === undefined\n ? {}\n : {\n toolSelection: {\n // A settled discovery receipt survives deployment; its selection only\n // names current tools. Keep validation of fresh selections fail-closed.\n toolNames: journal.toolSelection.toolNames.filter((name) =>\n Object.hasOwn(agent.definition.toolkit.tools, name),\n ),\n },\n }),\n durability,\n subagent,\n delegationDepth,\n ...(inheritedGrant === undefined ? {} : { subagentGrant: inheritedGrant }),\n ...(inheritedBudget === undefined ? {} : { subagentBudget: inheritedBudget }),\n ...(submission.workerAdmission?.origin.budgetScope === undefined\n ? {}\n : { subagentBudgetScope: submission.workerAdmission.origin.budgetScope }),\n runStartedAt: runTiming.startedAt,\n durationDeadline: runTiming.deadline,\n ...(submission.workerAdmission === undefined\n ? {}\n : {\n toolCallAllowance: submission.workerAdmission.origin.toolCallAllowance,\n }),\n ...(submission.parentLinkage !== undefined &&\n childLineage?._tag === \"SubagentLineageRecorded\"\n ? { toolCallAllowance: childLineage.toolCallAllowance }\n : {}),\n ...(pending === undefined\n ? {}\n : {\n resume: {\n ...(settledCompletion === undefined ? {} : { settledCompletion }),\n turn: pending.turn,\n toolResultMaxBytes: pending.toolResultMaxBytes,\n turnId: pending.turnId,\n calls: pending.calls,\n toolParameterRejections: pending.toolParameterRejections,\n settled: pending.settled,\n // Legacy eager requests have no exposure snapshot. Their validated canonical\n // declarations establish the minimal original exposure needed for batch resume.\n toolExposure:\n pending.toolExposure ??\n Snapshot.make({\n exposedToolNames: [...new Set(pending.calls.map((call) => call.name))],\n }),\n ...(resumeLeadingMessages === undefined\n ? {}\n : { leadingMessages: resumeLeadingMessages }),\n ...(resumeResponseMessages === undefined\n ? {}\n : { responseMessages: resumeResponseMessages }),\n },\n }),\n ...(preparedContext === undefined ? {} : { context: preparedContext }),\n beforeTurn: Effect.fnUntraced(function* () {\n if (\n yieldAfter !== undefined &&\n (yield* Clock.currentTimeMillis) >= DateTime.toEpochMillis(yieldAfter)\n ) {\n yield* Deferred.succeed(yieldSignal, undefined);\n\n // The successful signal wins the outer race and closes the execution Scope;\n // no synthetic engine RunFailed event or terminal Settlement is produced.\n return yield* Effect.never;\n }\n if (submissionScheduling.yieldTo !== undefined && (yield* Ref.get(turnCounter)) > 0) {\n const candidate = yield* recordHalt(\n eligibleThreadHead(submission.threadId, submission.queueSequence),\n );\n\n if (\n Option.isSome(candidate) &&\n (candidate.value.state === \"ready\" || candidate.value.state === \"input-applied\")\n ) {\n const next = yield* recordHalt(\n ledger.lookup(\n SubmissionLookupById.make({\n submissionId: candidate.value.submissionId,\n }),\n ),\n );\n\n if (\n Option.isSome(next) &&\n next.value.agentId === submission.agentId &&\n (next.value.state === \"ready\" || next.value.state === \"input-applied\") &&\n (yield* recordHalt(\n submissionScheduling.yieldTo({ active: submission, next: next.value }),\n ))\n ) {\n yield* Deferred.succeed(yieldSignal, next.value.submissionId);\n\n return yield* Effect.never;\n }\n }\n }\n }),\n ...(runContextPreparation.transientContext === undefined\n ? {}\n : { transientContext: runContextPreparation.transientContext }),\n ...(config.estimateCostMicrousd === undefined\n ? {}\n : { estimateCostMicrousd: config.estimateCostMicrousd }),\n // An exact committed history prefix followed only by this input creates the\n // initial journal above. There is no resumed accounting to reconstruct or decode.\n ...(freshPrefix !== undefined && continuation === undefined\n ? {}\n : {\n resumeUsage: {\n ...journal.usage,\n ...journal.policyUsage,\n ...(journal.usage.modelCalls === 0 &&\n (journal.usage.unobservedModelCalls ?? 0) === 0 &&\n !records.some(\n ({ record }) =>\n record.payload._tag === \"ModelResponseInterrupted\" &&\n record.payload.runId === runId,\n )\n ? emptyRunTotals()\n : runTotalsFromSummary(yield* currentUsageSummary())),\n children: childUsageReportsOf(subagentState),\n },\n }),\n ...(journal.contextWindowId === undefined\n ? {}\n : { initialContextWindowId: journal.contextWindowId }),\n ...(journal.protectedContext === undefined\n ? {}\n : { protectedContext: journal.protectedContext }),\n ...(pendingContextToolCallId === undefined ? {} : { pendingContextToolCallId }),\n };\n\n // Mark incomplete usage before recovery repeats inference. A batch resume already has\n // its response and does not re-invoke the model for the pending Turn.\n if (pending === undefined && lineage.inputWasRecorded) {\n yield* appendInterruptedAudit(ctx, runId, knownIds);\n interruptedUsage = true;\n }\n\n const consume = AgentRuntime.executeWithUsageAccountingUnknown(\n agent,\n submission.inputPayload,\n options,\n ).pipe(\n Effect.provideService(AgentUpdateAcceptance, {\n accept: (update) =>\n flushDeferredResponse.pipe(\n Effect.catch((failure) =>\n Ref.set(haltRef, failure).pipe(\n Effect.andThen(Effect.fail(UpdateError.make({ reason: \"storage\" }))),\n ),\n ),\n Effect.andThen(() =>\n updateRuntime\n .emit({\n updateId: update.updateId,\n value: update.value,\n submission,\n runId,\n definitions: submission.agentDigests,\n })\n .pipe(Effect.provideService(CurrentRunWriter, ctx)),\n ),\n Effect.catchTag([\"LedgerError\", \"DurableRuntimeFailpointError\"], (failure) =>\n // Preserve the original infrastructure failure at the coordinator boundary;\n // the next semantic checkpoint must not commit this Tool failure as an outcome.\n Ref.set(haltRef, failure).pipe(\n Effect.andThen(Effect.fail(UpdateError.make({ reason: \"storage\" }))),\n ),\n ),\n ),\n }),\n Effect.provideService(ModelUsageAccounting, {\n noteIncompleteUsage: (turn) =>\n Effect.sync(() => {\n stagedUnobservedCalls.set(turn, (stagedUnobservedCalls.get(turn) ?? 0) + 1);\n }),\n }),\n (body) =>\n body.pipe(\n Effect.provideServiceEffect(ThreadHistory, ThreadHistory.makeFromStore),\n Effect.provideServiceEffect(ConversationStore, makeMemoryStore),\n Effect.scoped,\n ),\n Effect.provideContext(\n runServices.pipe(\n Context.add(SubagentHost.forTool, (source) =>\n source.threadId !== submission.threadId ||\n source.agentId !== submission.agentId ||\n source.runId !== runId\n ? SubagentHost.unavailable\n : workerRuntime.facet(\n {\n source,\n policy: agent.definition.policy,\n depth: delegationDepth,\n ...(inheritedGrant === undefined ? {} : { grant: inheritedGrant }),\n },\n submission.principal,\n submission.submissionId,\n ),\n ),\n Context.add(MessagingHost.forTool, (source) =>\n source.threadId !== submission.threadId ||\n source.agentId !== submission.agentId ||\n source.runId !== runId\n ? MessagingHost.unavailable\n : messagingRuntime.forTool(source, submission.principal),\n ),\n ),\n ),\n Effect.andThen(checkpoint),\n // A wrapped Tool/approval failure cannot outrank retained infrastructure authority.\n // Preserve independent defects, interruptions and already-marked coordinator failures.\n Effect.catchCause((cause) =>\n Ref.get(haltRef).pipe(\n Effect.flatMap((failure) =>\n failure === undefined\n ? Effect.failCause(cause)\n : Effect.failCause(\n Cause.map(cause, (error) =>\n error instanceof CoordinatorHalt ? error : new CoordinatorHalt(failure),\n ),\n ),\n ),\n ),\n ),\n // Retain while the Attempt's services, local ownership and abort watcher are still live.\n // A failed retention halts the coordinator; it is not a failed Tool or a safe suspension.\n Effect.tapCause((cause) =>\n Option.isSome(agentApprovalPendingOption(cause)) &&\n cause.reasons.every(Cause.isFailReason)\n ? Effect.flatMap(DurableApprovalSuspension, (retain) =>\n retain === undefined ? Effect.void : halt(retain),\n )\n : Effect.void,\n ),\n Effect.as({ _tag: \"run\" as const }),\n );\n\n // Durable §13: the abort command becomes canonical (serialized on the append gate) BEFORE\n // the Run fiber is interrupted by losing the race.\n const abortWatcher = halt(\n Effect.gen(function* () {\n while (true) {\n yield* Effect.sleep(config.abortPollInterval);\n\n const intent = yield* ledger.readAbortIntent(AbortIntentRequest.make({ submissionId }));\n\n if (intent === undefined) continue;\n yield* appendAbortRecord(ctx, intent);\n\n return { _tag: \"aborted\" as const };\n }\n }),\n );\n\n const raced = Effect.raceAllFirst([\n consume,\n abortWatcher,\n ...(yieldAfter === undefined && submissionScheduling.yieldTo === undefined\n ? []\n : [\n Deferred.await(yieldSignal).pipe(\n Effect.map((nextSubmissionId) => ({\n _tag: \"yielded\" as const,\n ...(nextSubmissionId === undefined ? {} : { nextSubmissionId }),\n })),\n ),\n ]),\n ]).pipe(Effect.provideService(IdGenerator, idGenerator));\n\n const result = yield* raced.pipe(\n Effect.catchCauseFilter(\n Cause.findError,\n (\n error,\n cause,\n ): Effect.Effect<\n | { readonly _tag: \"failedRun\"; readonly outcome: AttemptOutcome }\n | { readonly _tag: \"aborted\" }\n | { readonly _tag: \"suspendedRun\"; readonly toolCallId: ToolCallId }\n | {\n readonly _tag: \"suspendedChildRun\";\n readonly children: AgentChildPending[\"children\"];\n },\n DurableWorkerFailure | DurableBindingFailure\n > => {\n if (isCoordinatorHaltCause(cause)) {\n return Effect.failCause(Cause.map(cause, (halt) => halt.failure));\n }\n if (\n cause.reasons.some(\n (reason) => reason._tag === \"Fail\" && reason.error instanceof AgentInputDecodeError,\n )\n ) {\n // Accepted input is still owed. A current codec refusal is a Binding problem,\n // while coexisting defects/interruption remain in their original Cause channels.\n return Effect.failCause(\n Cause.map(cause, () =>\n BindingUnavailable.make({\n agentId: agent.definition.id,\n message: \"The current Binding cannot decode accepted input\",\n }),\n ),\n );\n }\n const approvalPending = agentApprovalPendingOption(cause);\n\n if (Option.isSome(approvalPending)) {\n // The canonical request preserves the pending control marker. A coexisting defect\n // or interruption must escape intact, without retention or a safe suspension.\n const residual = Cause.fromReasons<never>(\n cause.reasons.filter(\n (reason): reason is Cause.Die | Cause.Interrupt => reason._tag !== \"Fail\",\n ),\n );\n\n if (residual.reasons.length > 0) return Effect.failCause(residual);\n\n // Durable approval suspension (plan §2.6): the approval hook already made the\n // request canonical; `runAttempt` owns the ledger transition. The engine decoded\n // the declared call id before raising the suspension, so a failure is a defect.\n return decodeToolCallIdUnknown(approvalPending.value.toolCallId).pipe(\n Effect.orDie,\n Effect.map((toolCallId) => ({ _tag: \"suspendedRun\" as const, toolCallId })),\n );\n }\n const childPending = agentChildPendingOption(error);\n\n if (Option.isSome(childPending)) {\n // The interpreter committed every closed sibling before reporting suspension.\n // The Attempt now owns only the ledger transition.\n return Effect.succeed({\n _tag: \"suspendedChildRun\" as const,\n children: childPending.value.children,\n });\n }\n\n return Effect.gen(function* () {\n // A recorded halt means a coordinator mutation failed inside a Tool handler\n // (the engine re-wraps step-hook and subagent-hook errors): abort the Attempt\n // with the original infrastructure failure instead of settling the Run failed.\n const halted = yield* Ref.get(haltRef);\n\n if (halted !== undefined) {\n return yield* halted;\n }\n // A semantic failure retains the validated response and its usage. Ownership loss\n // and coordinator faults escape above without retrying a failed canonical append.\n yield* flushDeferredResponse;\n\n // Host authorization can observe cancellation before the abort watcher ticks.\n // Only an authorization denial with this Submission's durable intent is an abort.\n if (error instanceof AgentToolAuthorizationDenied) {\n const intent = yield* ledger.readAbortIntent(\n AbortIntentRequest.make({ submissionId }),\n );\n\n if (intent !== undefined) {\n yield* appendAbortRecord(ctx, intent);\n\n return { _tag: \"aborted\" as const };\n }\n }\n\n // Report the original live Cause here, before its private diagnostic projection,\n // after excluding suspensions, so hosts retain its cause and stack exactly\n // once per failed Run; reading or retrying its receipt never reports again.\n if (\n cause.reasons.some(\n (reason) =>\n reason._tag === \"Die\" ||\n (reason._tag === \"Fail\" &&\n !(reason.error instanceof AgentApprovalDenied) &&\n !(reason.error instanceof AgentToolAuthorizationDenied)),\n )\n )\n yield* Effect.logError(\"Agent run failed\", cause).pipe(\n Effect.annotateLogs({\n agentId: agent.definition.id,\n runId,\n threadId: ctx.threadId,\n submissionId,\n attemptId: lineage.attemptId,\n }),\n );\n\n return {\n _tag: \"failedRun\" as const,\n outcome: yield* failureOutcome(error, cause, {\n agentId: agent.definition.id,\n runId,\n threadId: ctx.threadId,\n submissionId,\n attemptId: lineage.attemptId,\n }),\n };\n });\n },\n ),\n );\n\n if (result._tag === \"yielded\") return result;\n if (result._tag === \"suspendedRun\") return approvalSuspension(result.toolCallId);\n if (result._tag === \"suspendedChildRun\") return childSuspension(result.children);\n if (result._tag === \"aborted\") {\n yield* flushDeferredResponse;\n\n return {\n ...abortedRunPhase(yield* currentUsageSummary()),\n uncommittedModelUsage: uncommittedModelUsage(),\n };\n }\n if (result._tag === \"failedRun\") {\n const failed: RunPhaseOutcome = {\n ...result.outcome,\n usageSummary: yield* currentUsageSummary(),\n uncommittedModelUsage: uncommittedModelUsage(),\n };\n\n return failed;\n }\n const committedCompletion = completionState.committed;\n\n if (committedCompletion === undefined) {\n return yield* LedgerError.make({\n operation: \"runModel\",\n message: \"Agent Run ended without a committed completion\",\n });\n }\n\n const completed: RunPhaseOutcome = {\n _tag: \"completed\",\n result: committedCompletion.output,\n ...(committedCompletion.runDisposition === undefined\n ? {}\n : { runDisposition: committedCompletion.runDisposition }),\n ...(committedCompletion.finishReason === undefined\n ? {}\n : { finishReason: committedCompletion.finishReason }),\n ...(committedCompletion.exhausted === undefined\n ? {}\n : { exhausted: committedCompletion.exhausted }),\n usageSummary: yield* currentUsageSummary(),\n uncommittedModelUsage: uncommittedModelUsage(),\n };\n\n return completed;\n },\n );\n\n /**\n * One ownership period over the claimed lane head. The step order mirrors the pure recovery\n * classifier's decision table, so a fresh Attempt and a recovering Attempt take the same path\n * through the same idempotent steps. Returns `Option.none` when the lane is durably blocked\n * (Unknown Outcomes, or a durable approval suspension) — no settlement occurs and the\n * obligation stays owed.\n */\n const runAttempt = Effect.fnUntraced(\n function* <\n InputSchema extends Schema.Top,\n OutputSchema extends Schema.Top,\n Instructions,\n Tools extends Record<string, Tool.Any>,\n Provider,\n ModelProvides,\n ModelRequires,\n InstructionError = InstructionErrorOf<Instructions, InputSchema[\"Type\"]>,\n InstructionRequirements = InstructionRequirementsOf<Instructions, InputSchema[\"Type\"]>,\n RunDispositionValue extends\n | RunDispositionDeclaration<OutputSchema[\"Type\"], Schema.Top>\n | undefined = undefined,\n InputPromptValue extends\n | InputPromptSource<InputSchema[\"Type\"], unknown, unknown>\n | undefined = undefined,\n UpdatesSchema extends Schema.Top | undefined = undefined,\n >(\n registeredAgent: RuntimeBinding<\n InputSchema,\n OutputSchema,\n Instructions,\n Tools,\n Provider,\n ModelProvides,\n ModelRequires,\n InstructionError,\n InstructionRequirements,\n RunDispositionValue,\n InputPromptValue,\n UpdatesSchema\n >,\n session: RunStorageSession,\n resumeAfterRetention: () => void,\n onHandoff: (nextSubmissionId: SubmissionId) => void,\n yieldAfter?: DateTime.Utc,\n freshlyAdmitted = false,\n ) {\n // Recheck ownership outside the disposable cache's failure recovery.\n yield* session.checkActive;\n\n const checkpointPrompt = yield* promptHistory\n .take({ threadId: session.threadId })\n .pipe(Effect.provideService(ThreadStore, store), Effect.provideContext(journalServices));\n\n // withProgressSession exposes only progress.commit/publish. Their prepare step owns and\n // freezes each canonical fact before reaching this raw writer. Snapshot the private array\n // before suspension; only acknowledged ranges enter this Attempt's disposable suffix.\n let committedPromptSuffix: CommittedPromptSuffix | undefined;\n const storageSession = session;\n let pendingOriginal: InitialContextInput | undefined;\n\n yield* Effect.addFinalizer(() =>\n Effect.sync(() => {\n committedPromptSuffix?.discard();\n committedPromptSuffix = undefined;\n }),\n );\n\n const promptSession: RunStorageSession = {\n ...storageSession,\n ...(storageSession.appendInput === undefined\n ? {}\n : {\n appendInput: (batch: CommitBatch, executions?: ReadonlyArray<ExecutionUpdate>) =>\n storageSession.appendInput!(batch, executions).pipe(\n Effect.tap((result) =>\n Effect.sync(() => {\n if (\n pendingOriginal !== undefined &&\n !result.replayed &&\n result.firstSequence === pendingOriginal.sequence\n )\n committedPromptSuffix = makeCommittedPromptSuffix({\n threadId: storageSession.threadId,\n sequence: result.firstSequence,\n record: batch.records[0]!,\n });\n }),\n ),\n ),\n }),\n append: (batch, executions) => {\n const suffix = committedPromptSuffix;\n const append = storageSession.append(batch, executions);\n\n if (suffix === undefined) return append;\n const facts = batch.records.slice();\n\n return append.pipe(\n Effect.tap((result) => Effect.sync(() => suffix.append(facts, result))),\n Effect.tapCause(() => Effect.sync(() => suffix.discard())),\n );\n },\n publishSettlement: (batch, executions) => {\n const suffix = committedPromptSuffix;\n const publish = storageSession.publishSettlement(batch, executions);\n\n if (suffix === undefined) return publish;\n\n return publish.pipe(\n Effect.tap((result) =>\n Effect.sync(() =>\n // Publication returns the winning fact after progress amended historyRecordCount.\n // Any extra retained facts or a replay fail the collector's consecutive range check.\n suffix.append([result.record], {\n firstSequence: result.tailSequence,\n lastSequence: result.tailSequence,\n replayed: result.replayed,\n }),\n ),\n ),\n Effect.tapCause(() => Effect.sync(() => suffix.discard())),\n );\n },\n };\n\n session = yield* withProgressSession(promptSession, () => pendingOriginal);\n const { claim, threadId } = session;\n const submissionId = claim.submissionId;\n\n // The hint selects a read under the existing owner. Only exact empty-Run evidence\n // permits startup; the initial commit still checks its tail and revision-zero CAS.\n const preparation = freshlyAdmitted ? yield* session.prepareStart ?? Effect.void : undefined;\n\n let prepared:\n | {\n snapshot: RecoverySnapshot;\n through: CanonicalSequence;\n view: Omit<Effect.Success<ReturnType<typeof recoveryView>>, \"records\"> & {\n readonly records: ReadonlyArray<CanonicalRecordEnvelope>;\n };\n start: Effect.Success<ReturnType<typeof makeRunStart>>;\n input: InitialContextInput;\n }\n | undefined;\n\n if (preparation !== undefined) {\n const { snapshot, identity } = preparation;\n const before = identity.tailSequence;\n\n const captured = yield* Effect.fromResult(\n captureRecord(yield* prepareOriginalInput(snapshot.submission)),\n ).pipe(\n Effect.mapError((cause) =>\n ThreadStoreError.make({\n operation: \"capture startup input\",\n message: cause.message,\n cause,\n }),\n ),\n );\n\n const record = captured.canonical;\n\n if (!isOriginalInputRecord(record))\n return yield* RunJournalError.make({ message: \"Captured startup has no original input\" });\n pendingOriginal = {\n threadId,\n sequence: CanonicalSequence.make(before + 1),\n record,\n };\n\n const view = {\n records: identity.records,\n context: undefined,\n progress: undefined,\n progressThrough: undefined,\n operational: [],\n };\n\n const start = yield* makeRunStart(\n snapshot.submission,\n Duration.toMillis(registeredAgent.definition.policy.maxDuration),\n view.records,\n view.operational,\n record,\n ).pipe(Effect.provideService(CurrentRunWriter, session));\n\n prepared = { snapshot, through: before, view, start, input: pendingOriginal };\n }\n\n const preparedInput = prepared !== undefined;\n\n const snapshot =\n prepared?.snapshot ??\n (yield* ledger.loadRecoverySnapshot(RecoverySnapshotRequest.make({ submissionId })));\n\n const submission = snapshot.submission;\n\n if (prepared === undefined)\n yield* ensureThreadCreated(threadId, submission.agentId, submission.agentDigests);\n if (submission.workerAdmission?.origin.reporting?.mode === \"standard\")\n yield* updateRuntime.repairRun(threadId, submissionId);\n if (submission.workerAdmission !== undefined) {\n yield* workerRuntime\n .ensureOrigin(submission.workerAdmission.origin)\n .pipe(\n Effect.mapError((cause) =>\n LedgerError.make({ operation: \"worker-origin\", message: cause.reason, cause }),\n ),\n );\n }\n if (submission.state === \"admitted\") {\n yield* ledger.markReady(MarkReadyRequest.make({ submissionId }));\n }\n if (prepared === undefined) yield* session.refresh;\n const ctx: AttemptAppendContext = session;\n let controlThrough = prepared?.through ?? (yield* session.tail).sequence;\n\n const initialThrough = controlThrough;\n\n const initialView =\n prepared?.view ??\n (yield* recoveryView(\n threadId,\n initialThrough,\n [submissionId],\n runIdForSubmission(submissionId),\n ));\n\n let journalMetadata: ReturnType<typeof makeJournalMetadata> | undefined;\n\n const retainControl = controlRecords([submissionId]);\n\n const collectControl = (record: CanonicalRecordEnvelope): boolean => {\n journalMetadata?.add(record);\n\n return retainControl(record);\n };\n\n const takeJournalMetadata = (): JournalMetadata | undefined => {\n const metadata = journalMetadata?.finish();\n\n // Release admission metadata before model or Tool waits; it is not a warm context cache.\n journalMetadata = undefined;\n\n return metadata;\n };\n\n let records: ReadonlyArray<CanonicalRecordEnvelope> =\n initialView.records.filter(collectControl);\n\n // The append-only prefix remains valid for this Attempt. Retain only this Run's control\n // evidence and validate each newly visible suffix against its own captured tail.\n const refreshControl = Effect.fnUntraced(function* (throughSequence?: CanonicalSequence) {\n const through =\n throughSequence ??\n (yield* store.inspectTail(ThreadTailRequest.make({ threadId }))).tailSequence;\n\n if (through > controlThrough) {\n const suffix = yield* selectedRange(\n threadId,\n [submissionId],\n through,\n controlThrough,\n ).pipe(Effect.map((entries) => entries.filter(collectControl)));\n\n records = [...records, ...suffix];\n controlThrough = through;\n }\n\n return records;\n });\n\n const workerOrigin = records\n .map((envelope) => envelope.record.payload)\n .find((payload) => payload._tag === \"WorkerOriginRecorded\")?.origin;\n\n if (\n workerOrigin !== undefined &&\n (submission.workerAdmission === undefined ||\n !Schema.toEquivalence(WorkerAdmission.fields.origin)(\n workerOrigin,\n submission.workerAdmission.origin,\n ))\n ) {\n return yield* RunJournalError.make({\n message: \"Worker input does not match its immutable Thread origin\",\n });\n }\n\n const childPolicy =\n workerOrigin?.policy ??\n records\n .map((envelope) => envelope.record.payload)\n .find((payload) => payload._tag === \"SubagentLineageRecorded\")?.policy;\n\n const agent =\n childPolicy === undefined\n ? registeredAgent\n : {\n ...registeredAgent,\n definition: { ...registeredAgent.definition, policy: childPolicy },\n };\n\n // Restoring the accepted child policy changes no Tool declarations. Retain the\n // selected registration's contracts instead of resolving the copied Definition.\n const currentContracts = yield* contractsFor(registeredAgent.definition);\n\n const evidence = yield* evidenceFor(records, submissionId, true, snapshot.hostSubmissionId);\n const knownIds = knownRecordIdsOf(records);\n\n if (evidence.recordedSettlementOutcome !== undefined) {\n const record = yield* canonicalSettlementRecord(records, submissionId);\n const settlement = yield* finalizeFromHistory(submission, record);\n const canonicalSettlement = yield* settlementPayloadFromRecord(record, submissionId);\n\n yield* settleJoinedSubmissions(\n yield* attemptContextAtTail(submission.threadId),\n canonicalSettlement,\n );\n\n return Option.some(settlement);\n }\n if (snapshot.abortIntent !== undefined) {\n // request-abort-and-join (spec §13.1, SUB-022): propagate the durable abort to every\n // nonterminal attached child, join every settled child coordinator-side, and settle\n // aborted ONLY once no child obligation stays open. A waiting/blocked disposition ends\n // the ownership period without settling — the obligation stays owed.\n const disposition = yield* abortAttachedChildren(ctx, submission, session, knownIds);\n\n if (disposition === \"waiting\") {\n return Option.none<Settlement>();\n }\n if (disposition === \"blocked\") {\n yield* session.release;\n\n return Option.none<Settlement>();\n }\n\n return Option.some(\n yield* settleAborted(\n ctx,\n submission,\n session.publishSettlement,\n snapshot.abortIntent,\n evidence,\n knownIds,\n ),\n );\n }\n if (prepared === undefined)\n yield* applyCanonicalInput(ctx, submission, session, records, snapshot.inputApplied);\n\n const start =\n prepared?.start ??\n (yield* makeRunStart(\n submission,\n Duration.toMillis(agent.definition.policy.maxDuration),\n yield* refreshControl(),\n initialView.operational,\n ).pipe(Effect.provideService(CurrentRunWriter, ctx)));\n\n const savedRunTiming = start.timing;\n\n const commitStart = Effect.flatMap(CurrentRunStart, (publication) =>\n publication.commit(),\n ).pipe(Effect.provideService(CurrentRunStart, start.publication));\n\n const runTiming =\n workerOrigin === undefined\n ? savedRunTiming\n : {\n ...savedRunTiming,\n deadline: DateTime.makeUnsafe(\n Math.min(\n DateTime.toEpochMillis(savedRunTiming.deadline),\n workerOrigin.expiresAtMillis,\n ),\n ),\n };\n\n let expiredChildObligation = false;\n let preparedControl = prepared !== undefined;\n\n if ((yield* Clock.currentTimeMillis) >= DateTime.toEpochMillis(runTiming.deadline)) {\n prepared = undefined;\n preparedControl = false;\n yield* commitStart;\n yield* reconcileRetainedChildren(ctx, submission, session);\n expiredChildObligation = yield* completeJoinedReleases(submission);\n }\n\n // Recheck after duration interruption too: that Attempt may have declared new ordinary calls.\n const ordinaryCallsResolved = Effect.gen(function* () {\n const reconciliationRecords = preparedControl ? records : yield* refreshControl();\n\n preparedControl = false;\n\n const reconciliationEvidence = yield* evidenceFor(\n reconciliationRecords,\n submissionId,\n true,\n snapshot.hostSubmissionId,\n );\n\n if (reconciliationEvidence.openToolCalls.length === 0) return true;\n\n const reconciliationSnapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId }),\n );\n\n for (const envelope of reconciliationRecords) knownIds.add(envelope.record.recordId);\n\n const review = yield* reconcileOpenCalls(\n ctx,\n submission,\n reconciliationSnapshot,\n reconciliationRecords,\n reconciliationEvidence.openToolCalls,\n knownIds,\n { definition: agent.definition, contracts: currentContracts },\n );\n\n if (review.uncertain.length > 0 || review.unproven.length > 0) {\n if (review.uncertain.length > 0) {\n yield* markCallsUnknown(\n ctx,\n submissionId,\n knownIds,\n review.uncertain,\n \"An ordinary Tool call may have executed without a canonical outcome\",\n );\n }\n // This Submission is parked (marked Unknown, or reconciliation itself failed):\n // release the claim without settling — the accepted-work obligation stays owed.\n yield* session.release;\n\n return false;\n }\n\n return true;\n });\n\n if (!expiredChildObligation && !(yield* ordinaryCallsResolved))\n return Option.none<Settlement>();\n\n const continuationRecords = prepared === undefined ? yield* refreshControl() : records;\n\n const continuation = yield* pendingToolBatchFor(\n continuationRecords,\n runIdForSubmission(submissionId),\n );\n\n if (continuation !== undefined) {\n const current = {\n definition: agent.definition,\n contracts: currentContracts,\n };\n\n const operations = operationsFor(continuationRecords, runIdForSubmission(submissionId));\n const settled = new Set(continuation.settled.map((call) => call.id));\n\n const rejected = new Set(\n continuation.toolParameterRejections?.map((call) => call.toolCallId),\n );\n\n const unsupported: Array<OpenToolCallEvidence> = [];\n const unavailableDelegations = new Set<ToolCallId>();\n\n const operationStates = toolOperationStates(\n continuationRecords,\n runIdForSubmission(submissionId),\n );\n\n for (const call of continuation.calls) {\n const operation = operations.get(call.id);\n\n if (\n operation?.executionKind === \"delegation\" &&\n !settled.has(call.id) &&\n !supportsOperation(\n OpenToolCallEvidence.make({\n toolCallId: operation.toolCallId,\n toolName: operation.toolName,\n turn: continuation.turn,\n }),\n operation,\n current,\n )\n )\n unavailableDelegations.add(operation.toolCallId);\n }\n\n const children =\n unavailableDelegations.size === 0\n ? undefined\n : yield* reconcileRetainedChildren(ctx, submission, session, unavailableDelegations);\n\n for (const envelope of yield* refreshControl()) knownIds.add(envelope.record.recordId);\n\n for (const call of continuation.calls) {\n if (\n call.providerExecuted ||\n settled.has(call.id) ||\n rejected.has(Schema.decodeSync(ToolCallId)(call.id))\n )\n continue;\n\n const evidence = OpenToolCallEvidence.make({\n toolCallId: Schema.decodeSync(ToolCallId)(call.id),\n toolName: call.name,\n turn: continuation.turn,\n });\n\n const operation = operations.get(call.id);\n\n if (supportsOperation(evidence, operation, current)) continue;\n\n const blocked =\n operationStates.find(\n (state) =>\n state.turn === continuation.turn &&\n state.operation.toolCallId === evidence.toolCallId,\n )?.dispatchBlocked === true;\n\n const notExecuted = blocked || children?.notExecuted.has(evidence.toolCallId) === true;\n\n const readonly =\n operation?.executionClass === \"readonly\" && operation.executionKind === \"ordinary\";\n\n if (!notExecuted && !readonly) {\n if (!unavailableDelegations.has(evidence.toolCallId)) unsupported.push(evidence);\n continue;\n }\n const execution = notExecuted ? \"not-executed\" : \"unavailable\";\n\n const result = yield* Schema.encodeEffect(ToolUnavailable)(\n ToolUnavailable.make({\n toolName: call.name,\n execution,\n message:\n execution === \"not-executed\"\n ? \"This operation was not executed and its original implementation is unavailable. Continue with the current tools.\"\n : \"The original readonly operation is unavailable and may have run without a recorded result.\",\n }),\n ).pipe(Effect.flatMap(decodePersisted), Effect.orDie);\n\n yield* hit(\"tools:before-unavailable-append\");\n yield* appendClosedCall(ctx, submissionId, knownIds, evidence, {\n result: { value: result, isFailure: true },\n resolution: execution === \"not-executed\" ? \"never-started\" : \"failed-with-error\",\n author: \"runtime\",\n reason: \"The declared operation cannot execute under its original contract\",\n });\n yield* hit(\"tools:after-unavailable-append\");\n }\n const firstWaiting = children?.waiting[0];\n\n if (children !== undefined && firstWaiting !== undefined) {\n const disposition = yield* session.suspend(\n WaitingForChildSuspension.make({\n children: [firstWaiting, ...children.waiting.slice(1)],\n }),\n );\n\n yield* hit(\"subagent:after-suspend\");\n if (disposition === \"resume-immediately\") yield* wake.notify(threadId);\n\n return Option.none<Settlement>();\n }\n if ((children?.indeterminate.size ?? 0) > 0) return Option.none<Settlement>();\n if (unsupported.length > 0) {\n yield* markCallsUnknown(\n ctx,\n submissionId,\n knownIds,\n unsupported,\n \"The unfinished operation has no supported recovery implementation; its original identity and evidence remain unresolved\",\n );\n\n return Option.none<Settlement>();\n }\n }\n\n const lineage: AttemptLineage = {\n attemptId: claim.attemptId,\n inputWasRecorded: !preparedInput && evidence.inputRecorded,\n };\n\n let approvalDecisionIntents = snapshot.approvalDecisions;\n\n while (true) {\n const initialization = prepared;\n\n prepared = undefined;\n if (initialization === undefined) yield* session.refresh;\n const tail = yield* session.tail;\n\n const currentRecords =\n initialization === undefined ? yield* refreshControl(tail.sequence) : records;\n\n const view =\n initialization?.view ??\n (yield* recoveryView(\n threadId,\n tail.sequence,\n [submissionId],\n runIdForSubmission(submissionId),\n currentRecords,\n ));\n\n let canonical: Stream.Stream<\n JournalRecordEnvelope,\n ThreadStoreError | ThreadNotMaterialized | RunJournalError\n > = Stream.fromIterable(view.records);\n\n let initialJournal: InitialJournalSource | undefined;\n\n if (view.context === undefined) {\n const original =\n initialization?.input ??\n currentRecords.find(\n ({ record }) =>\n record.payload._tag === \"UserInputRecorded\" &&\n record.payload.kind === \"user\" &&\n record.payload.submissionId === submissionId,\n );\n\n if (original === undefined)\n return yield* RunJournalError.make({\n message: \"Run has no exact original input context boundary\",\n });\n\n const suffix = currentRecords.filter((entry) => entry.sequence > original.sequence);\n\n const fresh =\n initialization?.input !== undefined ||\n (!lineage.inputWasRecorded &&\n tail.sequence === original.sequence &&\n suffix.length === 0);\n\n // Every replay stays bounded at the ORIGINAL admission, never the later Thread tail.\n const source: InitialJournalSource = yield* Effect.gen(function* () {\n if (\n checkpointPrompt !== undefined &&\n fresh &&\n original.sequence === checkpointPrompt.through + 1\n ) {\n const records = [original, ...suffix];\n\n journalMetadata = makeJournalMetadata(runIdForSubmission(submissionId));\n for (const entry of records) journalMetadata.add(entry);\n\n return { records, original, suffix, prefix: checkpointPrompt, cacheable: true };\n }\n const history = yield* readInitialJournal(original, suffix);\n let cacheable = fresh;\n\n journalMetadata = makeJournalMetadata(runIdForSubmission(submissionId));\n for (const entry of history) {\n journalMetadata.add(entry);\n if (\n entry.record.payload._tag === \"CompactionCreated\" ||\n entry.record.payload._tag === \"ModelCompleted\"\n )\n cacheable = false;\n }\n\n return { records: history, original, suffix, cacheable };\n });\n\n initialJournal = source;\n canonical = Stream.fromIterableEffect(\n Effect.suspend(() =>\n source.records === undefined\n ? readInitialJournal(source.original, source.suffix)\n : Effect.succeed(source.records),\n ),\n );\n }\n\n committedPromptSuffix?.discard();\n committedPromptSuffix =\n initialJournal?.cacheable && initialization?.input === undefined\n ? makeCommittedPromptSuffix(initialJournal.original)\n : undefined;\n\n const outcome = yield* runModel(\n agent,\n ctx,\n submission,\n session,\n currentRecords,\n canonical,\n initialJournal,\n initialization?.input?.sequence ?? tail.sequence,\n view.progressThrough,\n view.progress,\n view.context,\n view.operational,\n takeJournalMetadata(),\n lineage,\n approvalDecisionIntents,\n currentContracts,\n runTiming,\n yieldAfter,\n ).pipe(\n Effect.provideService(CurrentRunStart, start.publication),\n Effect.ensuring(\n Effect.sync(() => {\n if (initialJournal !== undefined) initialJournal.records = undefined;\n }),\n ),\n );\n\n if (outcome._tag === \"yielded\") {\n if (outcome.nextSubmissionId !== undefined) onHandoff(outcome.nextSubmissionId);\n\n return Option.none();\n }\n if (outcome._tag === \"suspendedChild\") {\n // Durable waitingForChild suspension (spec §12 step 10, SUB-030): the sibling\n // late-settles are already canonical; the ledger transition ends the ownership\n // period WITHOUT settling and the lane consumes no worker permit while each listed\n // child runs on its own Thread lane. A child settlement racing ahead of the\n // suspend transaction returns `resume-immediately`: the declared batch replays under\n // this same claim and the handler joins the settled child.\n const [firstChild, ...restChildren] = outcome.children;\n\n const waitingChildren: readonly [WaitingChild, ...Array<WaitingChild>] = [\n WaitingChild.make({\n toolCallId: firstChild.toolCallId,\n childSubmissionId: firstChild.childSubmissionId,\n }),\n ...restChildren.map((child) =>\n WaitingChild.make({\n toolCallId: child.toolCallId,\n childSubmissionId: child.childSubmissionId,\n }),\n ),\n ];\n\n const suspension = yield* session.suspend(\n WaitingForChildSuspension.make({ children: waitingChildren }),\n );\n\n yield* hit(\"subagent:after-suspend\");\n for (const child of outcome.children) {\n yield* wake.notify(child.childThreadId);\n }\n if (suspension === \"suspended\") {\n return Option.none<Settlement>();\n }\n continue;\n }\n if (outcome._tag === \"suspended\") {\n // Durable approval suspension (plan §2.6): the ledger transition ends the ownership\n // period WITHOUT settling — the accepted-work obligation stays owed while the lane\n // consumes no worker permit. A decision that raced ahead of the suspend transaction\n // returns `resume-immediately`. Retained resources require a fresh Attempt; otherwise\n // the declared batch replays under this claim with the fresh decision intents.\n const suspension = yield* session.suspend(\n ApprovalPendingSuspension.make({ toolCallIds: [outcome.toolCallId] }),\n );\n\n yield* hit(\"approval:after-suspend\");\n if (suspension === \"suspended\") {\n return Option.none<Settlement>();\n }\n if ((yield* DurableApprovalSuspension) !== undefined) {\n // Retention completed inside runModel. Leave both the service and claim scopes\n // before reacquiring: a transferred attachment cannot execute the approved batch.\n resumeAfterRetention();\n\n return Option.none<Settlement>();\n }\n approvalDecisionIntents = (yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId }),\n )).approvalDecisions;\n continue;\n }\n yield* commitStart;\n if (outcome._tag === \"aborted\") {\n // Durable abort ended the Run while attached children may still be open:\n // request-abort-and-join before the aborted settlement (spec §13.1).\n const disposition = yield* abortAttachedChildren(ctx, submission, session, knownIds);\n\n if (disposition === \"waiting\") {\n return Option.none<Settlement>();\n }\n if (disposition === \"blocked\") {\n yield* session.release;\n\n return Option.none<Settlement>();\n }\n\n return Option.some(\n yield* terminalize(ctx, submission, session.publishSettlement, outcome, true),\n );\n }\n // Canonical joins drive their reservation release BEFORE the parent settles (a settled\n // lane would strand the repair); a reserved row WITHOUT a canonical join is an open\n // attached-child obligation and the parent never settles across it (spec §13).\n if (outcome._tag === \"failed\" && outcome.policyLimit === \"duration\") {\n const exhaustedId = runDurationRecordId(runIdForSubmission(submissionId));\n\n if (!(yield* refreshControl()).some(({ record }) => record.recordId === exhaustedId)) {\n yield* hit(\"run:before-duration-append\");\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: runDurationBatchId(runIdForSubmission(submissionId)),\n producerId: config.producerId,\n records: [\n yield* makeEnvelope(\n exhaustedId,\n RunDurationExhausted.make({\n runId: runIdForSubmission(submissionId),\n }),\n ),\n ],\n }),\n );\n yield* hit(\"run:after-duration-append\");\n }\n yield* reconcileRetainedChildren(ctx, submission, session);\n }\n const openObligation = yield* completeJoinedReleases(submission);\n\n if (openObligation) {\n if (outcome._tag === \"failed\") {\n // Release the claim and leave the lane to recovery classification.\n yield* session.release;\n\n return Option.none<Settlement>();\n }\n\n // A completed Run with an unjoined reservation is structurally unreachable (the\n // delegation Tool Call settles only through the atomic join batch): fail closed\n // with the obligation visibly owed instead of settling across it.\n return yield* LedgerError.make({\n operation: \"runAttempt\",\n message: `Submission ${submissionId} completed with an unjoined child budget reservation; the settlement is withheld fail-closed (spec 13)`,\n });\n }\n if (\n outcome._tag === \"failed\" &&\n outcome.policyLimit === \"duration\" &&\n !(yield* ordinaryCallsResolved)\n ) {\n return Option.none<Settlement>();\n }\n\n const settlement = yield* terminalize(\n ctx,\n submission,\n session.publishSettlement,\n outcome,\n true,\n );\n\n if (\n outcome._tag === \"completed\" &&\n initialJournal?.cacheable &&\n initialJournal.history !== undefined\n )\n yield* promptHistory\n .complete(\n { threadId: session.threadId },\n initialJournal.original,\n initialJournal.history,\n committedPromptSuffix,\n )\n .pipe(\n Effect.provideService(CurrentRunWriter, session),\n Effect.provideService(ThreadStore, store),\n Effect.provideService(ThreadReader, reader),\n );\n\n return Option.some(settlement);\n }\n },\n (effect) => effect.pipe(Effect.scoped),\n );\n\n /** A missing current binding leaves both roots and children owed, with their claims released. */\n type CapturedWorkerBinding = Effect.Success<ReturnType<typeof makeLegacyWorkerBinding>>;\n\n const acquireAdministrativeClaim = (threadId: ThreadId, handoff?: ClaimHandoff) =>\n runStorage\n .claim(\n ClaimRequest.make({\n threadId,\n ...(handoff === undefined ? {} : { handoff }),\n }),\n )\n .pipe(\n Effect.flatMap((claimed) =>\n Option.isNone(claimed)\n ? Effect.succeed(Option.none<RunStorageSession>())\n : withProgressSession(claimed.value).pipe(Effect.map(Option.some)),\n ),\n );\n\n const processThreadHead = (\n resolve: (\n submission: SubmissionSnapshot,\n ) => Effect.Effect<CapturedWorkerBinding, DurableBindingFailure | DurableWorkerFailure>,\n threadId: ThreadId,\n options?: { readonly yieldAfter?: DateTime.Utc },\n ): Effect.Effect<\n {\n readonly settlement: Option.Option<Settlement>;\n readonly firstClaimedSubmissionId: SubmissionId | undefined;\n },\n DurableWorkerFailure | DurableBindingFailure\n > =>\n Effect.gen(function* () {\n let resumeAfterRetention = false;\n let handoff: ClaimHandoff | undefined;\n let nextHandoff: ClaimHandoff | undefined;\n let firstClaimedSubmissionId: SubmissionId | undefined;\n\n const attempt = Effect.scoped(\n Effect.gen(function* () {\n const claimed = yield* runStorage.claim(\n ClaimRequest.make({\n threadId,\n ...(handoff === undefined ? {} : { handoff }),\n }),\n );\n\n if (Option.isNone(claimed)) return Option.none();\n const session = claimed.value;\n const { claim } = session;\n\n const freshlyAdmitted = unclaimedAdmissions.get(claim.submissionId) === threadId;\n\n unclaimedAdmissions.delete(claim.submissionId);\n firstClaimedSubmissionId ??= claim.submissionId;\n\n const attributes = {\n threadId,\n submissionId: claim.submissionId,\n attemptId: claim.attemptId,\n };\n\n yield* Effect.annotateCurrentSpan(attributes);\n yield* Effect.annotateLogsScoped(attributes);\n yield* hit(\"claim:after-claim\");\n\n const found = yield* ledger.lookup(\n SubmissionLookupById.make({ submissionId: claim.submissionId }),\n );\n\n if (Option.isNone(found)) {\n return yield* LedgerError.make({\n operation: \"processThreadHead\",\n message: `Claimed unknown Submission ${claim.submissionId}`,\n });\n }\n const submission = found.value;\n\n // The claim head rule legally grants an `admitted` head, so the worker path\n // enforces the same AwaitParentEstablishment discipline as the recovery classifier —\n // a parent-linked child whose Thread lacks its canonical lineage record is not\n // runnable yet (the parent's idempotent establishment appends lineage BEFORE\n // readiness, SUB-016).\n // Release the claim, nudge the parent lane, and leave the child to establishment.\n if (submission.parentLinkage !== undefined && submission.state === \"admitted\") {\n const read = yield* readAllTolerant(threadId, []);\n\n const lineageRecorded = read.records.some(\n (envelope) => envelope.record.payload._tag === \"SubagentLineageRecorded\",\n );\n\n if (!lineageRecorded) {\n yield* session.release;\n\n const parent = yield* ledger.lookup(\n SubmissionLookupById.make({\n submissionId: submission.parentLinkage.parentSubmissionId,\n }),\n );\n\n if (Option.isSome(parent)) {\n yield* wake.notify(parent.value.threadId);\n }\n\n return Option.none();\n }\n }\n\n const resolution = yield* resolve(submission).pipe(\n Effect.map((binding) => ({ _tag: \"resolved\" as const, binding })),\n Effect.catchTags({\n BindingUnavailable: (failure) =>\n Effect.succeed({ _tag: \"refused\" as const, failure }),\n }),\n );\n\n if (resolution._tag === \"refused\") {\n return yield* resolution.failure;\n }\n\n return yield* resolution.binding.attempt(\n (agent) =>\n runAttempt(\n agent,\n session,\n () => {\n resumeAfterRetention = true;\n },\n (nextSubmissionId) => {\n nextHandoff = ClaimHandoff.make({\n deferredSubmissionIds: [\n ...(handoff?.deferredSubmissionIds ?? []),\n claim.submissionId,\n ],\n submissionId: nextSubmissionId,\n });\n },\n options?.yieldAfter,\n freshlyAdmitted,\n ),\n threadId,\n claim,\n );\n }),\n );\n\n while (true) {\n resumeAfterRetention = false;\n nextHandoff = undefined;\n const settlement = yield* attempt;\n\n // The previous Attempt's entire Scope has closed before the next authority is built.\n if (nextHandoff !== undefined) {\n handoff = nextHandoff;\n continue;\n }\n if (!resumeAfterRetention) return { settlement, firstClaimedSubmissionId };\n }\n }).pipe(withThreadHeadSpan);\n\n const eligibleThreadHead = (threadId: ThreadId, afterQueueSequence?: number) =>\n Stream.runHead(\n ledger.scanNonterminal.pipe(\n Stream.filter(\n (entry) =>\n entry.threadId === threadId &&\n (afterQueueSequence === undefined || entry.queueSequence > afterQueueSequence),\n ),\n Stream.filterEffect((entry) =>\n entry.state !== \"unknown\"\n ? Effect.succeed(true)\n : ledger\n .loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: entry.submissionId }),\n )\n .pipe(Effect.map((snapshot) => snapshot.abortIntent !== undefined)),\n ),\n ),\n );\n\n const drainThread = (\n resolve: (\n submission: SubmissionSnapshot,\n ) => Effect.Effect<CapturedWorkerBinding, DurableBindingFailure | DurableWorkerFailure>,\n threadId: ThreadId,\n ): Effect.Effect<ReadonlyArray<Settlement>, DurableWorkerFailure | DurableBindingFailure> =>\n Effect.gen(function* () {\n const settlements: Array<Settlement> = [];\n\n while (true) {\n const { settlement, firstClaimedSubmissionId } = yield* processThreadHead(\n resolve,\n threadId,\n );\n\n if (Option.isNone(settlement)) {\n if (firstClaimedSubmissionId === undefined) return settlements;\n const after = yield* eligibleThreadHead(threadId);\n\n // Parking an unknown operation exposes later runnable work. Other suspensions,\n // live ownership and a transiently unproven operation retain the existing barrier.\n // Keep the first claim across handoffs: its unfinished lane may still be the head.\n if (Option.isSome(after) && firstClaimedSubmissionId !== after.value.submissionId)\n continue;\n\n return settlements;\n }\n settlements.push(settlement.value);\n }\n }).pipe((body) => withProcessing(threadId, body));\n\n const processThreadImpl = Effect.fnUntraced(function* <\n InputSchema extends Schema.Top,\n OutputSchema extends Schema.Top,\n Instructions,\n Tools extends Record<string, Tool.Any>,\n Provider,\n ModelProvides,\n ModelRequires,\n InstructionError = InstructionErrorOf<Instructions, InputSchema[\"Type\"]>,\n InstructionRequirements = InstructionRequirementsOf<Instructions, InputSchema[\"Type\"]>,\n RunDispositionValue extends\n | RunDispositionDeclaration<OutputSchema[\"Type\"], Schema.Top>\n | undefined = undefined,\n InputPromptValue extends InputPromptSource<InputSchema[\"Type\"], unknown, unknown> | undefined =\n undefined,\n UpdatesSchema extends Schema.Top | undefined = undefined,\n >(\n agent: RuntimeBinding<\n InputSchema,\n OutputSchema,\n Instructions,\n Tools,\n Provider,\n ModelProvides,\n ModelRequires,\n InstructionError,\n InstructionRequirements,\n RunDispositionValue,\n InputPromptValue,\n UpdatesSchema\n >,\n threadId: ThreadId,\n ) {\n // The legacy single-binding worker is a singleton resolver (plan §1.7): identity-exact —\n // a claimed head with a different Agent never runs against this binding (the latent P4\n // gap) — and digest-transparent, because this call site registers no digest authority.\n const binding = yield* makeLegacyWorkerBinding(agent);\n\n return yield* drainThread(\n (submission) =>\n submission.agentId === binding.agentId\n ? Effect.succeed(binding)\n : Effect.fail(\n BindingUnavailable.make({\n agentId: submission.agentId,\n message: `This worker is bound to Agent ${binding.agentId}; the claimed head belongs to Agent ${submission.agentId} (SUB-023)`,\n }),\n ),\n threadId,\n );\n });\n\n const processThreadResolvedImpl = (\n threadId: ThreadId,\n ): Effect.Effect<ReadonlyArray<Settlement>, DurableWorkerFailure | DurableBindingFailure> =>\n drainThread(resolveCurrentBinding, threadId);\n\n const processThreadHeadImpl = (\n threadId: ThreadId,\n options?: { readonly yieldAfter?: DateTime.Utc },\n ): Effect.Effect<Option.Option<Settlement>, DurableWorkerFailure | DurableBindingFailure> =>\n processThreadHead(resolveCurrentBinding, threadId, options).pipe(\n Effect.map(({ settlement }) => settlement),\n (body) => withProcessing(threadId, body),\n );\n\n const claimFor = Effect.fnUntraced(function* (\n submission: SubmissionSnapshot,\n decision: RecoveryDecision,\n ): Effect.fn.Return<Option.Option<RunStorageSession>, DurableWorkerFailure, Scope.Scope> {\n const head = yield* eligibleThreadHead(submission.threadId);\n\n if (Option.isNone(head) || head.value.submissionId !== submission.submissionId)\n return Option.none();\n const claimed = yield* acquireAdministrativeClaim(submission.threadId);\n\n if (Option.isNone(claimed)) return Option.none();\n const session = claimed.value;\n\n if (session.claim.submissionId !== submission.submissionId) {\n yield* session.release;\n\n return Option.none();\n }\n yield* annotateRepair(session, decision);\n\n return Option.some(session);\n });\n\n /** Repair annotations use the captured session, never authority reconstructed from history. */\n const annotateRepair = (\n session: RunStorageSession,\n decision: RecoveryDecision,\n ): Effect.Effect<void> =>\n Effect.gen(function* () {\n if ((yield* session.tail).sequence === ZERO_SEQUENCE) return;\n\n const encodedDecision = yield* Schema.encodeEffect(RecoveryDecision)(decision).pipe(\n Effect.orDie,\n );\n\n const details = yield* Schema.decodeEffect(PersistedJson)(encodedDecision).pipe(Effect.orDie);\n\n const envelope = yield* makeEnvelope(\n recoveryRepairRecordId(decision.submissionId, decision._tag),\n RepairAnnotated.make({ reason: `recovery:${decision._tag}`, details }),\n );\n\n yield* session.append(\n CanonicalBatch.make({\n batchId: recoveryRepairBatchId(decision.submissionId, decision._tag),\n producerId: config.producerId,\n records: [envelope],\n }),\n );\n }).pipe(Effect.ignore);\n\n const settleAbortedForRecovery = Effect.fnUntraced(function* (\n snapshot: RecoverySnapshot,\n evidence: RecoveryEvidence,\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n decision: SettleAbortedDecision,\n ): Effect.fn.Return<\"repaired\" | \"deferred\", DurableWorkerFailure, Scope.Scope> {\n const intent = snapshot.abortIntent;\n\n if (intent === undefined) return \"deferred\";\n const submission = snapshot.submission;\n\n if (submission.state === \"suspended\" && snapshot.suspension !== undefined) {\n if (snapshot.suspension.reason._tag === \"WaitingForChild\") {\n // The classifier reaches SettleAborted only when every attached-child obligation is\n // closed (open ones route to PropagateChildAbort/ResumeWaitingParent, spec §13.1), so\n // every listed child is provably settled: replay the idempotent wake to make the\n // suspended lane claimable, then settle aborted below. A wake the adapter cannot yet\n // verify defers honestly instead of guessing.\n const woken = yield* Effect.gen(function* () {\n for (const child of snapshot.suspension?.reason._tag === \"WaitingForChild\"\n ? snapshot.suspension.reason.children\n : []) {\n yield* ledger.recordChildSettled(\n ChildSettledNotification.make({\n parentSubmissionId: submission.submissionId,\n childSubmissionId: child.childSubmissionId,\n }),\n );\n }\n\n return true;\n }).pipe(Effect.catchTag(\"LedgerError\", () => Effect.succeed(false)));\n\n if (!woken) return \"deferred\";\n } else {\n // A suspended head is never worker-claimable (WP2 claim rule), so the aborted\n // settlement first closes the suspension: every undecided call of the stored reason\n // gets a durable DENIED decision, which wakes the lane (`suspended → input-applied`)\n // without ever resuming the batch — the abort intent settles the Submission before\n // any Run resumes. A raced real decision also covers the reason, so its conflict is\n // absorbed.\n const decided = new Set(snapshot.approvalDecisions.map((decision) => decision.toolCallId));\n\n for (const toolCallId of snapshot.suspension.reason.toolCallIds) {\n if (decided.has(toolCallId)) continue;\n yield* ledger\n .recordApprovalDecision(\n ApprovalDecisionCommand.make({\n submissionId: submission.submissionId,\n toolCallId,\n decision: \"denied\",\n resolver: RECOVERY_RESOLVER,\n reason:\n \"The Submission was aborted while durably suspended; the pending approval closes denied so the aborted settlement can commit\",\n }),\n )\n .pipe(\n Effect.catchTag(\"ApprovalConflict\", () => Effect.void),\n Effect.asVoid,\n );\n }\n }\n }\n const claimed = yield* claimFor(submission, decision);\n\n if (Option.isNone(claimed)) {\n // P7 §7(c): an aborted, never-claimed, still-queued `ready` Submission settles NOW\n // instead of waiting to head the lane — settlement order of never-run work is not\n // execution order (DUR-004 bounds execution; DUR-012 allows settling inactive\n // accepted work without an Attempt). The appends run at the current tail with the\n // durable abort intent as publication authority; any racing owner's fence\n // advance (or a concurrent joining claim) defers honestly to the next pass.\n if (submission.state === \"ready\" && !snapshot.hasOwner) {\n return yield* Effect.gen(function* () {\n yield* materializeThread(submission.threadId);\n yield* ensureThreadCreated(\n submission.threadId,\n submission.agentId,\n submission.agentDigests,\n );\n const ctx = yield* attemptContextAtTail(submission.threadId);\n\n yield* settleAborted(\n ctx,\n submission,\n publicationFor(ctx, submission.submissionId, { _tag: \"QueuedAbort\" }),\n intent,\n evidence,\n knownRecordIdsOf(records),\n );\n\n return \"repaired\" as const;\n }).pipe(\n Effect.catchTags({\n AppendConflict: () => Effect.succeed(\"deferred\" as const),\n OwnershipLost: () => Effect.succeed(\"deferred\" as const),\n }),\n );\n }\n\n return \"deferred\";\n }\n const session = claimed.value;\n\n yield* store.materialize(\n ThreadMaterialization.make({\n threadId: submission.threadId,\n }),\n );\n yield* ensureThreadCreated(submission.threadId, submission.agentId, submission.agentDigests);\n const ctx = session;\n\n yield* settleAborted(\n ctx,\n submission,\n publicationFor(ctx, submission.submissionId, {\n _tag: \"Owned\",\n }),\n intent,\n evidence,\n knownRecordIdsOf(records),\n );\n\n return \"repaired\";\n });\n\n /**\n * Execute the reconcile-then-mark flow for a `MarkUnknown` decision (plan §2.2). Current\n * registration metadata checks retry support when available. Low-level drivers supply their\n * Agent at claim time, so retry proofs defer that check without permitting execution. Calls\n * without a durable intent, original idempotent declaration, or reconciler proof stay uncertain.\n * Closed calls report `repaired`; deferred checks report `deferred`; uncertain calls become Unknown.\n */\n const markUnknownForRecovery = Effect.fnUntraced(function* (\n snapshot: RecoverySnapshot,\n evidence: RecoveryEvidence,\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n decision: MarkUnknownDecision,\n ): Effect.fn.Return<\"repaired\" | \"deferred\" | \"unknown\", DurableWorkerFailure, Scope.Scope> {\n const submission = snapshot.submission;\n const claimed = yield* claimFor(submission, decision);\n\n if (Option.isNone(claimed)) return \"deferred\";\n const session = claimed.value;\n\n yield* store.materialize(\n ThreadMaterialization.make({\n threadId: submission.threadId,\n }),\n );\n const ctx = session;\n const knownIds = knownRecordIdsOf(records);\n // The classifier's decision lists ONLY ordinary open calls (S2: an open delegation call\n // never marks Unknown — its establishment is idempotent and routes through the Subagent\n // rows), so reconciliation is scoped to exactly those ids.\n const markableIds = new Set<string>(decision.openToolCallIds);\n\n const review = yield* reconcileOpenCalls(\n ctx,\n submission,\n snapshot,\n records,\n evidence.openToolCalls.filter((call) => markableIds.has(call.toolCallId)),\n knownIds,\n yield* currentOperationsFor(submission),\n );\n\n let disposition: \"repaired\" | \"deferred\" | \"unknown\";\n\n if (review.uncertain.length > 0) {\n yield* markCallsUnknown(\n ctx,\n submission.submissionId,\n knownIds,\n review.uncertain,\n decision.reason,\n );\n disposition = \"unknown\";\n } else if (review.unproven.length > 0 || review.retryable.length > 0) {\n disposition = \"deferred\";\n } else {\n disposition = \"repaired\";\n }\n yield* session.release;\n\n return disposition;\n });\n\n /** A retry intent permits only the saved operation under its supported current contract. */\n const hasUnsupportedRetry = Effect.fnUntraced(function* (\n snapshot: RecoverySnapshot,\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n ) {\n const intents = [...resolutionIntentsFor(snapshot).values()].filter(\n (intent) => intent.resolution._tag === \"SafeToRetry\",\n );\n\n if (intents.length === 0) return false;\n const submission = snapshot.submission;\n const current = yield* currentOperationsFor(submission);\n const operations = operationsFor(records, runIdForSubmission(submission.submissionId));\n\n const declared = yield* declaredCallsFor(\n records,\n runIdForSubmission(submission.submissionId),\n new Set(intents.map((intent) => intent.toolCallId)),\n );\n\n for (const intent of intents) {\n const original = declared.get(intent.toolCallId);\n\n if (original !== undefined && nativeUpdateAccepted(submission, original, records)) continue;\n\n if (\n original === undefined ||\n (current !== undefined &&\n !supportsOperation(\n OpenToolCallEvidence.make(original),\n operations.get(intent.toolCallId),\n current,\n ))\n )\n return true;\n }\n\n return false;\n });\n\n /**\n * Replay covering resolution intents as state-only wakes. Canonical outcomes wait for an\n * actual claim, so resolving an older request cannot append using a later writer's epoch.\n */\n const applyUnknownResolutionsForRecovery = Effect.fnUntraced(function* (\n snapshot: RecoverySnapshot,\n _evidence: RecoveryEvidence,\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n ): Effect.fn.Return<\"repaired\" | \"deferred\" | \"unknown\", DurableWorkerFailure> {\n if (yield* hasUnsupportedRetry(snapshot, records)) return \"unknown\";\n const submission = snapshot.submission;\n\n for (const intent of resolutionIntentsFor(snapshot).values()) {\n yield* ledger\n .recordUnknownResolution(\n UnknownResolutionCommand.make({\n submissionId: intent.submissionId,\n toolCallId: intent.toolCallId,\n author: intent.author,\n reason: intent.reason,\n resolution: intent.resolution,\n }),\n )\n .pipe(\n Effect.catchTag(\"UnknownResolutionConflict\", (error) =>\n LedgerError.make({\n operation: \"applyUnknownResolutions\",\n message: `Replaying the stored resolution intent for ${error.toolCallId} diverged`,\n cause: error,\n }),\n ),\n );\n }\n // Canonical outcomes are applied by the next claim. A wake never takes an active epoch.\n yield* wake.notify(submission.threadId);\n\n return \"repaired\";\n });\n\n /**\n * Repair a lost durable suspension from canonical history (plan §2.6, crash between the\n * canonical `ToolApprovalRequested` append and the ledger `suspend` transition): the lane is\n * claimable but the Run cannot proceed without a decision, so the executor claims it and moves\n * it to `suspended` — the ledger op ends the ownership period itself — reporting `repaired`.\n * Nothing executes and nothing settles. A lane that is already suspended has nothing to\n * repair: it waits durably for the authorized `resolveApproval` path, consuming no worker\n * permit, and stays `deferred`. Decisions that raced ahead of the repair leave the lane to a\n * worker's batch resume (`deferred`).\n */\n const awaitApprovalForRecovery = Effect.fnUntraced(function* (\n snapshot: RecoverySnapshot,\n evidence: RecoveryEvidence,\n decision: RecoveryDecision,\n ): Effect.fn.Return<\"repaired\" | \"deferred\", DurableWorkerFailure, Scope.Scope> {\n const submission = snapshot.submission;\n\n if (submission.state === \"suspended\") return \"deferred\";\n const first = pendingApprovalForRecovery(snapshot, evidence);\n\n if (first === undefined) return \"deferred\";\n const claimed = yield* claimFor(submission, decision);\n\n if (Option.isNone(claimed)) return \"deferred\";\n const session = claimed.value;\n\n const outcome = yield* session.suspend(\n ApprovalPendingSuspension.make({ toolCallIds: [first.toolCallId] }),\n );\n\n yield* hit(\"approval:after-suspend\");\n if (outcome === \"resume-immediately\") {\n // Decisions raced in between the snapshot read and the suspend transaction: nothing to\n // repair — release the claim so a worker resumes the declared batch.\n yield* session.release;\n\n return \"deferred\";\n }\n\n return \"repaired\";\n });\n\n /**\n * Defensive branch for a `suspended` lane whose canonical approval requests are all decided\n * (the classifier's `ResumeSuspended`). Under this coordinator the state is unreachable: the\n * covering `recordApprovalDecision` wakes the lane atomically inside the adapter (WP2), and a\n * decision racing ahead of `suspend` returns `resume-immediately` without ever suspending. The\n * executor therefore only re-hints the lane and reports `deferred`, keeping the obligation\n * visible instead of guessing at a wake the ledger port does not offer.\n */\n const resumeSuspendedForRecovery = Effect.fnUntraced(function* (\n snapshot: RecoverySnapshot,\n ): Effect.fn.Return<\"deferred\", DurableWorkerFailure> {\n yield* wake.notify(snapshot.submission.threadId);\n\n return \"deferred\";\n });\n\n const executeRecoveryDecision = Effect.fnUntraced(function* (\n snapshot: RecoverySnapshot,\n evidence: RecoveryEvidence,\n decision: RecoveryDecision,\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n history: RecoveryHistorySnapshot,\n ): Effect.fn.Return<\n \"repaired\" | \"deferred\" | \"none\" | \"unknown\",\n DurableWorkerFailure,\n Scope.Scope\n > {\n const submission = snapshot.submission;\n const runId = runIdForSubmission(submission.submissionId);\n const start = yield* readRunStart(submission.threadId, runId);\n\n if (\n start?.payload._tag === \"RunStarted\" &&\n start.payload.runId === runId &&\n (records.some(\n ({ record }) =>\n record.payload._tag === \"RunDurationExhausted\" && record.payload.runId === runId,\n ) ||\n (submission.workerAdmission !== undefined &&\n (yield* Clock.currentTimeMillis) >= submission.workerAdmission.origin.expiresAtMillis)) &&\n (decision._tag === \"CompleteChildAdmission\" ||\n decision._tag === \"RepairSubagentStartLink\" ||\n decision._tag === \"AwaitChildAdmissionResolution\" ||\n (decision._tag === \"MarkUnknown\" &&\n snapshot.childReservations.some((reservation) => reservation.status !== \"released\")))\n ) {\n // A closed admission window must release provably-unused reservations or restore the\n // existing child's link. Do this before ordinary Unknown Outcomes make the lane\n // unclaimable, and never let binding-free recovery admit new work after expiry.\n const claimed = yield* claimFor(submission, decision);\n\n if (Option.isNone(claimed)) return \"deferred\";\n const session = claimed.value;\n\n yield* store.materialize(\n ThreadMaterialization.make({\n threadId: submission.threadId,\n }),\n );\n const ctx = session;\n\n yield* reconcileRetainedChildren(ctx, submission, session);\n const open = yield* completeJoinedReleases(submission);\n\n yield* session.release;\n\n return open ? \"deferred\" : \"repaired\";\n }\n switch (decision._tag) {\n case \"NoAction\": {\n return \"none\";\n }\n case \"ResumeFromTurnBoundary\":\n case \"ResumePendingToolBatch\": {\n // Resumption needs the Agent Binding: a claiming worker resumes from the committed\n // boundary (the declared batch resumes without model re-invocation, durability §15).\n return \"deferred\";\n }\n case \"MarkUnknown\": {\n return yield* markUnknownForRecovery(snapshot, evidence, records, decision);\n }\n case \"ApplyUnknownResolutions\": {\n return yield* applyUnknownResolutionsForRecovery(snapshot, evidence, records);\n }\n case \"AwaitUnknownResolution\": {\n // Older Attempts may already have marked a native update unknown. Its exact\n // canonical acceptance is a factual resolution, never permission to retry an\n // external operation. The ledger wakes only when every unknown call is covered;\n // the next owner appends closure under the original call identity.\n const declared = yield* declaredCallsFor(\n records,\n runId,\n new Set(evidence.openToolCalls.map((call) => call.toolCallId)),\n );\n\n let repaired = false;\n\n for (const call of declared.values()) {\n if (\n snapshot.unknownResolutions.some((intent) => intent.toolCallId === call.toolCallId) ||\n !nativeUpdateAccepted(submission, call, records)\n )\n continue;\n yield* ledger\n .recordUnknownResolution(\n UnknownResolutionCommand.make({\n submissionId: submission.submissionId,\n toolCallId: call.toolCallId,\n author: RECONCILER_AUTHOR,\n reason: \"The exact native update was canonically accepted\",\n resolution: {\n _tag: \"CompletedWithResult\",\n result: { emitted: true },\n isFailure: false,\n },\n }),\n )\n .pipe(\n Effect.catchTag(\"UnknownResolutionConflict\", (cause) =>\n LedgerError.make({\n operation: \"recover native update\",\n message: \"Native acceptance conflicts with a retained resolution\",\n cause,\n }),\n ),\n );\n repaired = true;\n }\n if (repaired) yield* wake.notify(submission.threadId);\n\n return repaired ? \"repaired\" : \"unknown\";\n }\n case \"AwaitApprovalDecision\": {\n return yield* awaitApprovalForRecovery(snapshot, evidence, decision);\n }\n case \"ResumeSuspended\": {\n return yield* resumeSuspendedForRecovery(snapshot);\n }\n case \"RevertJoining\":\n case \"RepairJoinMarker\": {\n const hostSubmissionId = snapshot.hostSubmissionId;\n\n if (hostSubmissionId === undefined) return \"deferred\";\n\n const host = yield* ledger.lookup(\n SubmissionLookupById.make({ submissionId: hostSubmissionId }),\n );\n\n if (Option.isNone(host)) return \"deferred\";\n\n // Joining belongs to the host's ownership period, including the interval before\n // its input append. Recovery must not revert claims a live host is still consuming.\n const claimed =\n host.value.state === \"settled\"\n ? Option.none<RunStorageSession>()\n : yield* claimFor(host.value, decision);\n\n if (host.value.state !== \"settled\" && Option.isNone(claimed)) return \"deferred\";\n if (Option.isSome(claimed))\n yield* store.materialize(\n ThreadMaterialization.make({\n threadId: submission.threadId,\n }),\n );\n\n // The previous owner may have appended after the pass snapshot, before this claim.\n // Re-read that suffix and the join link before deciding whether the input is absent.\n const currentRecords = yield* refreshRecoveryHistory(\n submission.threadId,\n records,\n history.throughSequence,\n history.submissionIds,\n );\n\n const current = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: submission.submissionId }),\n );\n\n if (current.submission.state !== \"joining\" || current.hostSubmissionId !== hostSubmissionId)\n return \"deferred\";\n\n const currentEvidence = yield* evidenceFor(\n currentRecords,\n submission.submissionId,\n history.materialized,\n hostSubmissionId,\n );\n\n const inputEnvelope = currentRecords.find(\n (envelope) =>\n envelope.record.recordId === submissionInputRecordId(submission.submissionId),\n );\n\n if (currentEvidence.hostSettlementOutcome !== undefined) {\n // A covered terminal input stays visible: markJoined must precede delivery, so\n // recovery cannot guess at that unreachable prefix. Uncovered input returns ready.\n if (currentEvidence.joinedInputCovered) return \"deferred\";\n } else if (Option.isNone(claimed)) {\n // A ledger-settled host without canonical settlement evidence is not repair authority.\n return \"deferred\";\n } else if (inputEnvelope !== undefined) {\n yield* claimed.value.markJoined(submission.submissionId, {\n recordId: inputEnvelope.record.recordId,\n sequence: inputEnvelope.sequence,\n });\n }\n if (currentEvidence.hostSettlementOutcome !== undefined || inputEnvelope === undefined)\n yield* Option.isSome(claimed)\n ? claimed.value.revertJoining(submission.submissionId)\n : ledger.revertJoining(\n RevertJoiningRequest.make({\n submissionId: submission.submissionId,\n guard: { hostSubmissionId },\n }),\n );\n if (Option.isSome(claimed)) yield* claimed.value.release;\n yield* wake.notify(submission.threadId);\n\n return \"repaired\";\n }\n case \"SettleJoinedWithHost\": {\n const hostSubmissionId = snapshot.hostSubmissionId;\n\n if (hostSubmissionId === undefined) return \"deferred\";\n const hostRecord = yield* canonicalSettlementRecord(records, hostSubmissionId);\n const hostSettlement = yield* settlementPayloadFromRecord(hostRecord, hostSubmissionId);\n // Canonical host settlement and the durable join link authorize this repair after\n // the host generation closes. The shared administrative gate protects its append.\n const ctx = yield* attemptContextAtTail(submission.threadId);\n\n const applied = yield* settleOneJoined(ctx, hostSettlement, snapshot).pipe(\n Effect.as(true),\n Effect.catchTag(\"OwnershipLost\", () => Effect.succeed(false)),\n );\n\n return applied ? \"repaired\" : \"deferred\";\n }\n case \"AwaitHostSettlement\": {\n // The joined input reattaches through the host Run's resume (prompt-coverage rule);\n // hint the shared lane and keep the obligation visible.\n yield* wake.notify(submission.threadId);\n\n return \"deferred\";\n }\n case \"CompleteMaterialization\":\n case \"RepairReadiness\": {\n yield* materializeThread(submission.threadId);\n yield* ensureThreadCreated(\n submission.threadId,\n submission.agentId,\n submission.agentDigests,\n );\n if (submission.workerAdmission !== undefined) {\n yield* workerRuntime\n .ensureOrigin(submission.workerAdmission.origin)\n .pipe(\n Effect.mapError((cause) =>\n LedgerError.make({ operation: \"worker-origin\", message: cause.reason, cause }),\n ),\n );\n }\n yield* ledger.markReady(MarkReadyRequest.make({ submissionId: submission.submissionId }));\n\n return \"repaired\";\n }\n case \"ApplyInput\":\n case \"RepairInputMarker\": {\n const claimed = yield* claimFor(submission, decision);\n\n if (Option.isNone(claimed)) return \"deferred\";\n const session = claimed.value;\n\n yield* store.materialize(\n ThreadMaterialization.make({\n threadId: submission.threadId,\n }),\n );\n yield* ensureThreadCreated(\n submission.threadId,\n submission.agentId,\n submission.agentDigests,\n );\n const ctx = session;\n\n const ownership = session;\n\n const currentRecords = yield* refreshRecoveryHistory(\n submission.threadId,\n records,\n history.throughSequence,\n history.submissionIds,\n );\n\n yield* applyCanonicalInput(\n ctx,\n submission,\n ownership,\n currentRecords,\n snapshot.inputApplied,\n );\n yield* session.release;\n\n return \"repaired\";\n }\n case \"FinalizeLedgerFromHistory\": {\n const record = yield* canonicalSettlementRecord(records, submission.submissionId);\n\n yield* finalizeFromHistory(submission, record);\n\n return \"repaired\";\n }\n case \"SettleAborted\": {\n return yield* settleAbortedForRecovery(snapshot, evidence, records, decision);\n }\n case \"CompleteChildAdmission\": {\n // Binding-free (D3): the canonical `SubagentRequested` payload carries the encoded\n // child input, intended identity, and every digest, so admission completes without a\n // live delegation handler — one child, same Receipt on every replay (SUB-016).\n const subagent = subagentRecordsOf(records, runIdForSubmission(submission.submissionId));\n const requestedPayload = subagent.requested.get(decision.toolCallId);\n\n if (requestedPayload === undefined) return \"deferred\";\n const admission = yield* establishChildFromRequest(submission, requestedPayload);\n\n return admission._tag === \"indeterminate\" ? \"deferred\" : \"repaired\";\n }\n case \"RepairSubagentStartLink\": {\n // Resolve the SAME child by its deterministic idempotency key, complete any missing\n // materialization/lineage/readiness, then append the exact deterministic\n // `SubagentStarted` link and reattach the reservation under the parent fence\n // (spec §13, SUB-016/SUB-017).\n const runId = runIdForSubmission(submission.submissionId);\n const subagent = subagentRecordsOf(records, runId);\n const requestedPayload = subagent.requested.get(decision.toolCallId);\n\n if (requestedPayload === undefined) return \"deferred\";\n const admission = yield* establishChildFromRequest(submission, requestedPayload);\n\n if (admission._tag === \"indeterminate\") return \"deferred\";\n const claimed = yield* claimFor(submission, decision);\n\n if (Option.isNone(claimed)) return \"deferred\";\n const session = claimed.value;\n\n yield* store.materialize(\n ThreadMaterialization.make({\n threadId: submission.threadId,\n }),\n );\n const ctx = session;\n const knownIds = knownRecordIdsOf(records);\n const startRecordId = subagentStartedRecordId(runId, decision.toolCallId);\n\n if (!knownIds.has(startRecordId)) {\n const envelope = yield* makeEnvelope(\n startRecordId,\n SubagentStarted.make({\n runId,\n toolCallId: decision.toolCallId,\n childThreadId: requestedPayload.childThreadId,\n childSubmissionId: admission.childSubmissionId,\n childReceiptId: admission.receiptId,\n childRunId: runIdForSubmission(admission.childSubmissionId),\n }),\n );\n\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: subagentStartedBatchId(runId, decision.toolCallId),\n producerId: config.producerId,\n records: [envelope],\n }),\n ).pipe(\n Effect.catchTag(\"AppendConflict\", () => Effect.void),\n Effect.asVoid,\n );\n yield* hit(\"subagent:after-start-append\");\n }\n yield* session\n .attachChildToReservation({\n reservationId: decodeChildReservationIdSync(requestedPayload.reservationId),\n childSubmissionId: admission.childSubmissionId,\n })\n .pipe(\n Effect.catchTag(\n \"ChildReservationConflict\",\n conflictToLedgerError(\"attachChildToReservation\"),\n ),\n );\n yield* session.release;\n yield* wake.notify(requestedPayload.childThreadId);\n yield* wake.notify(submission.threadId);\n\n return \"repaired\";\n }\n case \"EnsureWaitingForChild\": {\n // Restore the lost `waitingForChild` checkpoint (spec §14 \"after parent start, before\n // waitingForChild checkpoint\"): claim the lane and suspend it — the ledger op ends the\n // ownership period itself, so the lane holds no worker permit while each child runs\n // on its own lane. Never spawns a replacement invocation (SUB-018/SUB-030).\n const claimed = yield* claimFor(submission, decision);\n\n if (Option.isNone(claimed)) return \"deferred\";\n const session = claimed.value;\n\n const suspension = yield* session.suspend(\n WaitingForChildSuspension.make({ children: decision.children }),\n );\n\n yield* hit(\"subagent:after-suspend\");\n if (suspension === \"resume-immediately\") {\n // Every listed child already settled: leave the joins to a claiming worker's batch\n // resume (they need the parent Binding and its result projection).\n yield* session.release;\n\n return \"deferred\";\n }\n\n return \"repaired\";\n }\n case \"ResumeWaitingParent\": {\n // Every relevant child is provably settled: replay the idempotent ownership-free wake\n // (a dropped wake is never a lost obligation) so a claiming worker resumes the\n // declared batch and joins each child's canonical Settlement (spec §13).\n for (const child of decision.children) {\n yield* ledger.recordChildSettled(\n ChildSettledNotification.make({\n parentSubmissionId: submission.submissionId,\n childSubmissionId: child.childSubmissionId,\n }),\n );\n }\n yield* wake.notify(submission.threadId);\n\n return \"repaired\";\n }\n case \"ApplyJoinAccounting\": {\n // Budget release incomplete after a canonical join: replay the accounting decision\n // FROM the canonical `SubagentJoined` record — budget stays unavailable until repair,\n // never available twice (spec §12 join step 6, DUR-015).\n const reservation = snapshot.childReservations.find(\n (row) => row.reservationId === decision.reservationId,\n );\n\n if (reservation === undefined) return \"deferred\";\n if (reservation.status === \"released\") return \"repaired\";\n const subagent = subagentRecordsOf(records, runIdForSubmission(submission.submissionId));\n const joinedPayload = subagent.joined.get(decision.toolCallId);\n\n if (joinedPayload !== undefined) {\n yield* applyReservationRelease(decision.reservationId, joinedPayload.finalAccounting, {\n threadId: submission.threadId,\n runId: runIdForSubmission(submission.submissionId),\n toolCallId: decision.toolCallId,\n });\n\n return \"repaired\";\n }\n if (reservation.status === \"releasePending\" && reservation.accounting !== undefined) {\n // The decision is already frozen: finish the idempotent release — never re-freeze.\n yield* applyReservationRelease(decision.reservationId, reservation.accounting, {\n threadId: submission.threadId,\n runId: runIdForSubmission(submission.submissionId),\n toolCallId: decision.toolCallId,\n });\n\n return \"repaired\";\n }\n\n return \"deferred\";\n }\n case \"PropagateChildAbort\": {\n // Request-abort-and-join (spec §13.1): the ONE idempotent durable abort command per\n // nonterminal child — the recorded child `AbortIntent` row IS the propagation marker,\n // so the replayed command returns it unchanged (DUR-012) — while the parent stays (or\n // becomes) suspended `waitingForChild` for the joins.\n for (const child of decision.children) {\n yield* ledger\n .requestAbort(\n AbortCommand.make({\n submissionId: child.childSubmissionId,\n author: SUBAGENT_ABORT_AUTHOR,\n reason: SUBAGENT_ABORT_REASON,\n }),\n )\n .pipe(\n // The child settled concurrently: its one winning Settlement joins next pass.\n Effect.catchTags({\n SettlementConflict: () => Effect.void,\n JoinedToHost: conflictToLedgerError(\"PropagateChildAbort\"),\n }),\n Effect.asVoid,\n );\n yield* hit(\"subagent:after-child-abort-intent\");\n\n const childRow = yield* ledger.lookup(\n SubmissionLookupById.make({ submissionId: child.childSubmissionId }),\n );\n\n if (Option.isSome(childRow)) {\n yield* wake.notify(childRow.value.threadId);\n }\n }\n if (submission.state !== \"suspended\") {\n const claimed = yield* claimFor(submission, decision);\n\n if (Option.isNone(claimed)) return \"deferred\";\n const session = claimed.value;\n\n const suspension = yield* session.suspend(\n WaitingForChildSuspension.make({ children: decision.children }),\n );\n\n yield* hit(\"subagent:after-suspend\");\n if (suspension === \"resume-immediately\") {\n // Every child settled while suspending: the next pass joins the winners.\n yield* session.release;\n }\n }\n\n return \"repaired\";\n }\n case \"ReleaseOrphanChildReservation\": {\n // Provably childless reservations release exactly once (spec §13/§14): freeze the\n // deterministic zero-consumed decision, then apply it idempotently.\n for (const reservationId of decision.reservationIds) {\n yield* releaseOrphanReservation(reservationId);\n }\n\n return \"repaired\";\n }\n case \"AwaitChildAdmissionResolution\": {\n // Wait-and-retry (SUB-031): the evidence assembler re-queries the authoritative owner\n // with the deterministic idempotency key on every recovery pass; an indeterminate\n // answer never permits a second admission and holds no worker permit.\n return \"deferred\";\n }\n case \"AwaitChildSettlement\": {\n // The parent lane stays dormant `waitingForChild` (SUB-030): the child's Settlement\n // wakes it durably through `recordChildSettled`; an unresolved ordinary Tool inside\n // the child keeps the parent here honestly with the obligation visible (SUB-021).\n return \"deferred\";\n }\n case \"AwaitParentEstablishment\": {\n // The child lane defers its own materialization/readiness repair until the\n // parent's idempotent establishment appends the immutable lineage record — a child\n // never runs a Turn before its lineage is canonical. A droppable wake hint nudges the\n // parent lane, whose own recovery re-drives establishment (CompleteChildAdmission /\n // RepairSubagentStartLink); the deterministic child identity makes every replay\n // converge on this one child (SUB-016).\n const parent = yield* ledger.lookup(\n SubmissionLookupById.make({ submissionId: decision.parentSubmissionId }),\n );\n\n if (Option.isSome(parent)) {\n yield* wake.notify(parent.value.threadId);\n }\n\n return \"deferred\";\n }\n }\n });\n\n const recoverSnapshot = Effect.fnUntraced(function* (\n submission: SubmissionSnapshot,\n history: RecoveryHistorySnapshot,\n ): Effect.fn.Return<RecoveryReport, DurableWorkerFailure> {\n const snapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: submission.submissionId }),\n );\n\n // A racing steering link can name a host outside the pass's nonterminal group. Read that\n // host from the same verified prefix, without changing this snapshot's visibility.\n if (\n snapshot.hostSubmissionId !== undefined &&\n !history.submissionIds.includes(snapshot.hostSubmissionId)\n ) {\n const hostId = snapshot.hostSubmissionId;\n const hostView = yield* recoveryView(submission.threadId, history.throughSequence, [hostId]);\n\n const hostRecords = hostView.records.filter(controlRecords([hostId]));\n\n const merged = new Map(history.records.map((entry) => [entry.sequence, entry]));\n\n for (const entry of hostRecords) merged.set(entry.sequence, entry);\n history = {\n ...history,\n records: [...merged.values()].sort((left, right) => left.sequence - right.sequence),\n submissionIds: [...history.submissionIds, snapshot.hostSubmissionId],\n };\n }\n\n const evidence = yield* evidenceFor(\n history.records,\n submission.submissionId,\n history.materialized,\n snapshot.hostSubmissionId,\n );\n\n const decision = classifyRecovery(snapshot, evidence);\n\n // Untouched ready input belongs to the worker's first claim. Running attempts and\n // canonical appends with a missing marker still take their classified repair path.\n const disposition =\n decision._tag === \"ApplyInput\" && snapshot.submission.state === \"ready\"\n ? \"deferred\"\n : yield* Effect.scoped(\n executeRecoveryDecision(snapshot, evidence, decision, history.records, history),\n );\n\n return RecoveryReport.make({\n submissionId: submission.submissionId,\n threadId: submission.threadId,\n decision,\n disposition,\n });\n });\n\n const recoverSubmission = Effect.fn(\"DurableAgentRuntime.recoverSubmission\")(function* (\n submissionId: SubmissionId,\n ): Effect.fn.Return<RecoveryReport, DurableWorkerFailure> {\n const found = yield* ledger.lookup(SubmissionLookupById.make({ submissionId }));\n\n if (Option.isNone(found)) {\n return yield* LedgerError.make({\n operation: \"recoverSubmission\",\n message: `Unknown Submission ${submissionId}`,\n });\n }\n\n if (found.value.state === \"settled\")\n yield* workerRuntime.completeInput(found.value).pipe(\n Effect.mapError((cause) =>\n LedgerError.make({\n operation: \"recoverSubmission\",\n message: \"Worker completion repair failed\",\n cause,\n }),\n ),\n );\n const history = yield* readRecoveryHistory(found.value.threadId, [submissionId]);\n\n if (history.materialized && found.value.workerAdmission?.origin.reporting?.mode === \"standard\")\n yield* updateRuntime.repairRun(found.value.threadId, submissionId);\n\n return yield* recoverSnapshot(found.value, history);\n });\n\n const discoverWork = Effect.fn(\"DurableAgentRuntime.discoverWork\")(function* (\n request: ThreadWorkRequest,\n ): Effect.fn.Return<ThreadWorkPage, ThreadStoreError | WorkDiscoveryUnavailable> {\n const decoded = yield* Schema.decodeEffect(ThreadWorkRequest)(request).pipe(\n Effect.mapError((cause) =>\n ThreadStoreError.make({\n operation: \"discover work\",\n message: \"Invalid work page request\",\n cause,\n }),\n ),\n );\n\n return yield* validateWorkPage(yield* workDiscovery.page(decoded), decoded.limit);\n });\n\n const rebuildWorkIndex = workDiscovery.rebuild;\n const discoverWorkThreads = workDiscovery.threads;\n\n const originalSubmission = Effect.fnUntraced(function* (threadId: ThreadId, runId: RunId) {\n const input = yield* getRunInput({ threadId, runId }).pipe(\n Effect.provideService(ThreadReader, reader),\n );\n\n const payload = Option.isSome(input) ? input.value.record.payload : undefined;\n\n if (\n payload?._tag !== \"UserInputRecorded\" ||\n payload.submissionId === undefined ||\n runIdForSubmission(payload.submissionId) !== runId ||\n (Option.isSome(input) &&\n input.value.record.recordId !== submissionInputRecordId(payload.submissionId))\n )\n return yield* ThreadStoreError.make({\n operation: \"recover work\",\n message: \"The original Run input is missing or incompatible\",\n });\n const submission = yield* lookupKnownSubmission(\"recover work\", payload.submissionId);\n\n if (submission.threadId !== threadId)\n return yield* ThreadStoreError.make({\n operation: \"recover work\",\n message: \"The original admission belongs to another Thread\",\n });\n\n return submission;\n });\n\n const readOperation = Effect.fnUntraced(function* (threadId: ThreadId, entry: ThreadWorkEntry) {\n if (entry.owner._tag !== \"Operation\" || entry.originRecordId === undefined)\n return yield* ThreadStoreError.make({\n operation: \"recover operation\",\n message: \"The original declaration reference is missing\",\n });\n const owner = entry.owner;\n\n const current = yield* withCrypto(\n resolveWorkEvidence(threadId, entry).pipe(Effect.provideService(ThreadReader, reader)),\n );\n\n const origin = yield* withCrypto(\n resolveEvidence(threadId, {\n recordId: entry.originRecordId,\n }).pipe(Effect.provideService(ThreadReader, reader)),\n );\n\n const declaration = origin.record.payload;\n\n if (\n declaration._tag !== \"ModelResponseRecorded\" ||\n declaration.runId !== owner.runId ||\n !declaration.toolOperations.some((call) => call.toolCallId === owner.toolCallId) ||\n current.sequence < origin.sequence\n )\n return yield* ThreadStoreError.make({\n operation: \"recover operation\",\n message: \"The selected operation does not match its declaration\",\n });\n const tail = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n\n const records = yield* Stream.runCollect(\n operationEvidence(threadId, owner, entry.originRecordId, tail.tailSequence, declaration),\n ).pipe(Effect.provideService(ThreadReader, reader));\n\n if (\n !records.some(({ record }) => record.recordId === origin.record.recordId) ||\n !records.some(({ record }) => record.recordId === current.record.recordId)\n )\n return yield* ThreadStoreError.make({\n operation: \"recover operation\",\n message: \"Selected operation evidence is incomplete\",\n });\n\n const declared = (yield* declaredCallsFor(\n records,\n owner.runId,\n new Set([owner.toolCallId]),\n )).get(owner.toolCallId);\n\n if (declared === undefined)\n return yield* RunJournalError.make({\n message: \"The selected call has no original parameters and replay contract\",\n });\n\n const state = toolOperationStates(records, owner.runId).find(\n (state) => state.operation.toolCallId === owner.toolCallId,\n );\n\n if (state === undefined)\n return yield* RunJournalError.make({ message: \"Selected operation state is missing\" });\n\n return { records, declared, state, declaration };\n });\n\n const recoverTerminalOperation = Effect.fnUntraced(function* (\n threadId: ThreadId,\n entry: ThreadWorkEntry,\n submission: SubmissionSnapshot,\n ): Effect.fn.Return<WorkRecoveryReport[\"disposition\"], DurableWorkerFailure> {\n const selected = yield* readOperation(threadId, entry);\n\n if (selected.state.settled || selected.state.resolved) return \"none\";\n\n const snapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: submission.submissionId }),\n );\n\n const intent = snapshot.unknownResolutions.find(\n (intent) =>\n intent.toolCallId === selected.declared.toolCallId &&\n unknownResolutionKind(intent.resolution) === \"factual\",\n );\n\n const factual = intent?.resolution;\n\n const acceptedNative =\n factual === undefined && (yield* updateRuntime.accepted(submission, selected.declared));\n\n const reconciliation =\n factual === undefined && !acceptedNative && selected.declared.executionKind === \"ordinary\"\n ? yield* reconciler\n .reconcile(\n DeclaredToolCallEvidence.make({\n threadId,\n submissionId: submission.submissionId,\n ...selected.declared,\n }),\n )\n .pipe(\n Effect.map(Option.some),\n Effect.catchTag(\"ToolReconcilerError\", () => Effect.succeed(Option.none())),\n )\n : Option.none();\n\n const completed =\n factual?._tag === \"CompletedWithResult\"\n ? factual\n : acceptedNative\n ? { result: { emitted: true }, isFailure: false }\n : Option.isSome(reconciliation) && reconciliation.value._tag === \"CompletedWithResult\"\n ? reconciliation.value\n : undefined;\n\n const neverStarted =\n factual?._tag === \"NeverHappened\" ||\n selected.state.dispatchBlocked ||\n (Option.isSome(reconciliation) && reconciliation.value._tag === \"NeverStarted\");\n\n if (completed === undefined && !neverStarted) return \"unknown\";\n\n const result =\n completed === undefined\n ? yield* Schema.encodeEffect(ToolUnavailable)(\n ToolUnavailable.make({\n toolName: selected.declared.toolName,\n execution: \"not-executed\",\n message: \"The Run is terminal and this original operation did not execute.\",\n }),\n ).pipe(Effect.flatMap(decodePersisted), Effect.orDie)\n : completed.result;\n\n if (utf8ByteLength(JSON.stringify(result)) > selected.declaration.toolResultMaxBytes)\n return yield* RunJournalError.make({\n message: \"The recovered result exceeds the original operation's result bound\",\n });\n const ctx = yield* attemptContextAtTail(threadId);\n\n yield* appendClosedCall(\n ctx,\n submission.submissionId,\n new Set(selected.records.map(({ record }) => record.recordId)),\n OpenToolCallEvidence.make({\n toolCallId: selected.declared.toolCallId,\n toolName: selected.declared.toolName,\n turn: selected.declared.turn,\n }),\n {\n result: { value: result, isFailure: completed?.isFailure ?? true },\n resolution:\n completed === undefined\n ? \"never-started\"\n : completed.isFailure\n ? \"failed-with-error\"\n : \"completed-with-result\",\n author: intent?.author ?? RECONCILER_AUTHOR,\n reason:\n intent?.reason ??\n \"Original operation evidence established the factual outcome after Run closure\",\n },\n );\n yield* workerRuntime.completeInput(submission).pipe(\n Effect.mapError((cause) =>\n LedgerError.make({\n operation: \"recover operation\",\n message: \"Worker effect acknowledgement remains unavailable\",\n cause,\n }),\n ),\n );\n\n return \"repaired\";\n });\n\n const repairFrozenDelivery = Effect.fnUntraced(function* (\n threadId: ThreadId,\n frozen: {\n readonly messageId: IdempotencyKey;\n readonly envelope: PersistedJson;\n readonly createdAtMillis: number;\n readonly deadlineAtMillis: number;\n readonly predecessor?: IdempotencyKey;\n },\n ) {\n if (Option.isNone(deliveries))\n return yield* ThreadStoreError.make({\n operation: \"recover delivery\",\n message: \"The owning delivery port is unavailable\",\n });\n\n const envelope = yield* Schema.decodeUnknownEffect(PreparedInput)(frozen.envelope).pipe(\n Effect.mapError((cause) =>\n ThreadStoreError.make({\n operation: \"recover delivery\",\n message: \"Frozen delivery evidence is incompatible\",\n cause,\n }),\n ),\n );\n\n const record = yield* withCrypto(\n prepareMessageDelivery({\n key: { ownerThreadId: threadId, messageId: frozen.messageId },\n envelope,\n createdAtMillis: frozen.createdAtMillis,\n deadlineAtMillis: frozen.deadlineAtMillis,\n ...(frozen.predecessor === undefined ? {} : { predecessor: frozen.predecessor }),\n }),\n ).pipe(\n Effect.mapError((cause) =>\n ThreadStoreError.make({\n operation: \"recover delivery\",\n message: \"Frozen delivery cannot be prepared\",\n cause,\n }),\n ),\n );\n\n yield* deliveries.value.insert(record).pipe(\n Effect.mapError((cause) =>\n ThreadStoreError.make({\n operation: \"recover delivery\",\n message: \"The durable handoff remains owed\",\n cause,\n }),\n ),\n );\n });\n\n const recoverOwnedWork = Effect.fnUntraced(function* (\n request: WorkRecoveryRequest,\n recoveredAdmissions = new Map<SubmissionId, RecoveryReport>(),\n deferUnclaimedAdmissions = false,\n ): Effect.fn.Return<WorkRecoveryReport, DurableWorkerFailure> {\n const { threadId, work: entry } = yield* Schema.decodeEffect(WorkRecoveryRequest)(request).pipe(\n Effect.mapError((cause) =>\n ThreadStoreError.make({\n operation: \"recover work\",\n message: \"Invalid selected work\",\n cause,\n }),\n ),\n );\n\n const owner = entry.owner;\n\n const recoverAdmission = Effect.fnUntraced(function* (submissionId: SubmissionId) {\n const recovered = recoveredAdmissions.get(submissionId);\n\n if (recovered !== undefined) return recovered;\n const report = yield* recoverSubmission(submissionId);\n\n recoveredAdmissions.set(submissionId, report);\n\n return report;\n });\n\n const report = (\n disposition: WorkRecoveryReport[\"disposition\"],\n submission?: RecoveryReport,\n retryAtMillis?: number,\n ) =>\n WorkRecoveryReport.make({\n threadId,\n workId: entry.id,\n disposition,\n ...(submission === undefined ? {} : { submission }),\n ...(retryAtMillis === undefined ? {} : { retryAtMillis: Math.ceil(retryAtMillis) }),\n });\n\n const invalid = () =>\n ThreadStoreError.make({\n operation: \"recover work\",\n message: \"The selected owner does not match its state reference\",\n });\n\n if (owner._tag === \"Admission\") {\n if (\n entry.id !== workId(\"admission\", owner.submissionId) ||\n entry.stateReference._tag !== \"Submission\" ||\n entry.stateReference.submissionId !== owner.submissionId\n )\n return yield* invalid();\n const original = yield* lookupKnownSubmission(\"recover work\", owner.submissionId);\n\n if (original.threadId !== threadId) return yield* invalid();\n if (\n deferUnclaimedAdmissions &&\n unclaimedAdmissions.get(owner.submissionId) === threadId &&\n original.state === \"ready\" &&\n !storageOwner.hasOwner(threadId) &&\n (yield* ledger.readAbortIntent(\n AbortIntentRequest.make({ submissionId: owner.submissionId }),\n )) === undefined\n ) {\n // The worker's first scoped claim performs the authoritative control/journal\n // read. This hint skips only a redundant pre-claim recovery traversal; it grants\n // no claim, synthesizes no decision, and supplies no model-visible facts.\n return report(\"deferred\");\n }\n unclaimedAdmissions.delete(owner.submissionId);\n const submission = yield* recoverAdmission(owner.submissionId);\n\n return report(submission.disposition, submission);\n }\n if (owner._tag === \"Delivery\") {\n if (\n entry.id !== workId(\"delivery\", owner.messageId) ||\n entry.stateReference._tag !== \"Delivery\" ||\n entry.stateReference.messageId !== owner.messageId\n )\n return yield* invalid();\n if (Option.isNone(deliveries))\n return yield* WorkDiscoveryUnavailable.make({ threadId, reason: \"unsupported\" });\n\n const delivery = yield* deliveries.value\n .get({ ownerThreadId: threadId, messageId: owner.messageId })\n .pipe(\n Effect.mapError((cause) =>\n ThreadStoreError.make({\n operation: \"recover work\",\n message: \"The owning delivery is unavailable\",\n cause,\n }),\n ),\n );\n\n if (\n delivery === null ||\n delivery.key.ownerThreadId !== threadId ||\n delivery.key.messageId !== owner.messageId ||\n delivery.version < entry.stateReference.version\n )\n return yield* invalid();\n\n // The delivery driver owns due-time, claim, retry, destination authorization and parking.\n return report(\n delivery.status === \"processed\" || delivery.status === \"refused\" ? \"none\" : \"deferred\",\n );\n }\n\n const evidence = yield* withCrypto(\n resolveWorkEvidence(threadId, entry).pipe(Effect.provideService(ThreadReader, reader)),\n );\n\n const payload = evidence.record.payload;\n\n if (owner._tag === \"Operation\") {\n if (entry.id !== workId(\"operation\", owner.runId, owner.toolCallId)) return yield* invalid();\n const submission = yield* originalSubmission(threadId, owner.runId);\n\n if (submission.state === \"settled\")\n return report(yield* recoverTerminalOperation(threadId, entry, submission));\n const recovered = yield* recoverAdmission(submission.submissionId);\n\n return report(recovered.disposition, recovered);\n }\n if (owner._tag === \"WorkerInput\") {\n if (\n entry.id !== workId(\"worker-input\", owner.messageId) ||\n payload._tag !== \"WorkerInputRequested\" ||\n payload.admission.messageId !== owner.messageId ||\n payload.admission.origin.worker.threadId !== owner.workerThreadId ||\n (payload.admission.reportKind === \"update\") !== owner.update ||\n payload.admission.origin.source.threadId !== threadId\n )\n return yield* invalid();\n\n const repair = yield* workerRuntime.repairInput(threadId, payload).pipe(\n Effect.mapError((cause) =>\n ThreadStoreError.make({\n operation: \"recover worker input\",\n message: \"Worker effect evidence remains owed\",\n cause,\n }),\n ),\n );\n\n // A processed delivery no longer owns retry. Keep source acknowledgement recovery due\n // until the child publishes its factual evidence; remote wake hints may be lost.\n return report(\n repair === \"repaired\" ? \"repaired\" : \"deferred\",\n undefined,\n repair === \"awaiting-effects\"\n ? (yield* Clock.currentTimeMillis) + Duration.toMillis(config.settlementPollInterval)\n : undefined,\n );\n }\n if (owner._tag === \"WorkerEffects\") {\n if (\n entry.id !== workId(\"worker-effects\", owner.submissionId) ||\n payload._tag !== \"SubmissionSettled\" ||\n payload.submissionId !== owner.submissionId\n )\n return yield* invalid();\n const submission = yield* lookupKnownSubmission(\"recover worker effects\", owner.submissionId);\n const admission = submission.workerAdmission;\n\n if (\n submission.threadId !== threadId ||\n admission === undefined ||\n admission.origin.worker.threadId !== threadId ||\n payload.receiptId !== submission.receiptId\n )\n return yield* invalid();\n yield* workerRuntime.completeInput(submission).pipe(\n Effect.mapError((cause) =>\n ThreadStoreError.make({\n operation: \"recover worker effects\",\n message: \"The owning worker acknowledgement remains owed\",\n cause,\n }),\n ),\n );\n\n const acknowledgement = Option.getOrUndefined(\n yield* getRecord({\n threadId,\n recordId: RecordId.make(`worker-effects-resolved:${admission.messageId}`),\n }).pipe(Effect.provideService(ThreadReader, reader)),\n )?.record.payload;\n\n if (acknowledgement === undefined) return report(\"unknown\");\n if (\n acknowledgement._tag !== \"WorkerInputCompleted\" ||\n acknowledgement.effectsResolved !== true ||\n acknowledgement.submissionId !== submission.submissionId ||\n acknowledgement.receiptId !== submission.receiptId ||\n acknowledgement.settlementId !== payload.settlementId ||\n acknowledgement.workerThreadId !== threadId ||\n acknowledgement.messageId !== admission.messageId\n )\n return yield* invalid();\n\n return report(\"repaired\");\n }\n if (owner._tag === \"Report\") {\n if (\n entry.id !== workId(\"report\", owner.runId) ||\n payload._tag !== \"SubmissionSettled\" ||\n payload.runId !== owner.runId\n )\n return yield* invalid();\n const submission = yield* originalSubmission(threadId, owner.runId);\n\n if (submission.state !== \"settled\") return report(\"deferred\");\n if (submission.workerAdmission?.origin.reporting?.mode !== \"standard\")\n return yield* invalid();\n yield* workerRuntime.completeInput(submission).pipe(\n Effect.mapError((cause) =>\n ThreadStoreError.make({\n operation: \"recover report\",\n message: \"The report obligation remains owed\",\n cause,\n }),\n ),\n );\n\n return report(\"repaired\");\n }\n if (owner._tag === \"Child\") {\n if (\n entry.id !== workId(\"child\", owner.runId, owner.toolCallId) ||\n payload._tag !== \"SubagentRequested\" ||\n payload.runId !== owner.runId ||\n payload.toolCallId !== owner.toolCallId ||\n payload.childThreadId !== owner.childThreadId\n )\n return yield* invalid();\n const parent = yield* originalSubmission(threadId, owner.runId);\n\n if (parent.state !== \"settled\") {\n const recovered = yield* recoverAdmission(parent.submissionId);\n\n return report(recovered.disposition, recovered);\n }\n const tail = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n\n const records = yield* withCrypto(\n readRunEvidenceSnapshot(threadId, parent.submissionId, tail.tailSequence).pipe(\n Effect.provideService(ThreadReader, reader),\n ),\n );\n\n const snapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: parent.submissionId }),\n );\n\n const reservation = snapshot.childReservations.find(\n (row) =>\n row.reservationId === payload.reservationId && row.parentToolCallId === owner.toolCallId,\n );\n\n if (reservation === undefined) return yield* invalid();\n const subagent = subagentRecordsOf(records, owner.runId);\n const joined = subagent.joined.get(owner.toolCallId);\n\n if (joined !== undefined) {\n yield* applyReservationRelease(reservation.reservationId, joined.finalAccounting, {\n threadId,\n runId: owner.runId,\n toolCallId: owner.toolCallId,\n });\n\n return report(\"repaired\");\n }\n\n const childId =\n subagent.started.get(owner.toolCallId)?.childSubmissionId ?? reservation.childSubmissionId;\n\n if (childId === undefined) return report(\"deferred\");\n const child = yield* lookupKnownSubmission(\"recover child\", childId);\n\n if (\n child.threadId !== owner.childThreadId ||\n child.parentLinkage?.parentSubmissionId !== parent.submissionId ||\n child.parentLinkage.parentToolCallId !== owner.toolCallId\n )\n return yield* invalid();\n if (child.state === \"settled\") {\n yield* joinSettledChildWithoutHandler(\n yield* attemptContextAtTail(threadId),\n parent,\n new Set(records.map(({ record }) => record.recordId)),\n subagent,\n reservation,\n owner.toolCallId,\n childId,\n \"unavailable\",\n );\n\n return report(\"repaired\");\n }\n yield* ledger\n .requestAbort(\n AbortCommand.make({\n submissionId: childId,\n author: SUBAGENT_ABORT_AUTHOR,\n reason: SUBAGENT_ABORT_REASON,\n }),\n )\n .pipe(\n Effect.catchTags({\n SettlementConflict: () => Effect.void,\n JoinedToHost: conflictToLedgerError(\"recover child\"),\n }),\n );\n yield* wake.notify(child.threadId);\n\n return report(\"deferred\");\n }\n if (\n owner._tag !== \"Handoff\" ||\n owner.recordId !== evidence.record.recordId ||\n entry.id !==\n (owner.kind === \"reservation\"\n ? payload._tag === \"SubtreeBudgetReserved\"\n ? workId(\"reservation\", payload.reservationId)\n : \"\"\n : workId(\"handoff\", owner.recordId))\n )\n return yield* invalid();\n switch (owner.kind) {\n case \"peer\":\n if (\n payload._tag !== \"PeerMessagePrepared\" ||\n owner.messageId !== payload.messageId ||\n payload.source.threadId !== threadId\n )\n return yield* invalid();\n yield* repairFrozenDelivery(threadId, {\n messageId: payload.messageId,\n envelope: payload.encodedEnvelope,\n createdAtMillis: DateTime.toEpochMillis(evidence.record.createdAt),\n deadlineAtMillis: payload.deadlineAtMillis,\n });\n\n return report(\"repaired\");\n case \"report\":\n if (payload._tag !== \"WorkerReportPrepared\" || owner.messageId !== payload.messageId)\n return yield* invalid();\n yield* repairFrozenDelivery(threadId, payload);\n\n return report(\"repaired\");\n case \"update\":\n if (\n payload._tag !== \"AgentUpdateEmitted\" ||\n payload.delivery === undefined ||\n owner.messageId !== payload.delivery.messageId ||\n payload.update.threadId !== threadId\n )\n return yield* invalid();\n yield* repairFrozenDelivery(threadId, payload.delivery);\n\n return report(\"repaired\");\n case \"worker-stop\":\n if (\n payload._tag !== \"WorkerStopRequested\" ||\n owner.childThreadId !== payload.command.worker.threadId\n )\n return yield* invalid();\n\n const stopped = yield* workerRuntime.repairStop(threadId, owner.recordId, payload).pipe(\n Effect.mapError((cause) =>\n ThreadStoreError.make({\n operation: \"recover worker stop\",\n message: \"Destination sealing remains owed\",\n cause,\n }),\n ),\n );\n\n return report(\n stopped ? \"repaired\" : \"deferred\",\n undefined,\n stopped\n ? undefined\n : (yield* Clock.currentTimeMillis) + Duration.toMillis(config.settlementPollInterval),\n );\n case \"child-accounting\": {\n if (payload._tag !== \"SubagentJoined\") return yield* invalid();\n const parent = yield* originalSubmission(threadId, payload.runId);\n\n const snapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: parent.submissionId }),\n );\n\n const reservation = snapshot.childReservations.find(\n (row) =>\n row.reservationId === payload.reservationId &&\n row.parentToolCallId === payload.toolCallId,\n );\n\n if (\n reservation === undefined ||\n reservation.childSubmissionId !== payload.childSubmissionId\n )\n return yield* invalid();\n yield* applyReservationRelease(reservation.reservationId, payload.finalAccounting, {\n threadId,\n runId: payload.runId,\n toolCallId: payload.toolCallId,\n });\n\n return report(\"repaired\");\n }\n case \"reservation\": {\n if (\n payload._tag !== \"SubtreeBudgetReserved\" ||\n owner.childThreadId !== payload.childThreadId\n )\n return yield* invalid();\n if (payload.lifetime === \"background\") {\n const repaired = yield* workerRuntime.repairReservation(threadId, evidence).pipe(\n Effect.mapError((cause) =>\n ThreadStoreError.make({\n operation: \"recover background reservation\",\n message: \"Worker admission closure remains owed\",\n cause,\n }),\n ),\n );\n\n return report(repaired ? \"repaired\" : \"deferred\");\n }\n if (payload.executionRunId === null) return report(\"deferred\");\n const parent = yield* originalSubmission(threadId, payload.executionRunId);\n\n if (parent.state !== \"settled\") {\n const recovered = yield* recoverAdmission(parent.submissionId);\n\n return report(recovered.disposition, recovered);\n }\n const tail = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n\n const records = yield* withCrypto(\n readRunEvidenceSnapshot(threadId, parent.submissionId, tail.tailSequence).pipe(\n Effect.provideService(ThreadReader, reader),\n ),\n );\n\n if (\n records.some(\n ({ record: { payload: fact } }) =>\n fact._tag === \"SubagentRequested\" && fact.childThreadId === payload.childThreadId,\n )\n )\n return report(\"deferred\");\n // No dispatch remains owed by a terminal Run. The monotonic subtree charge is retained.\n yield* completeWorkHandoff(threadId, owner.recordId, entry.id);\n\n return report(\"repaired\");\n }\n }\n });\n\n const recoverWork = Effect.fn(\"DurableAgentRuntime.recoverWork\")((request: WorkRecoveryRequest) =>\n recoverOwnedWork(request),\n );\n\n const runRecovery = Effect.fn(\"DurableAgentRuntime.runRecovery\")(function* (\n options?: RecoverySweepOptions,\n ): Effect.fn.Return<RecoverySweepResult, DurableWorkerFailure> {\n const selected = options?.threadId;\n\n if (selected !== undefined && options?.cursor !== undefined)\n yield* withCrypto(\n decodeWorkCursor({\n threadId: selected,\n limit: MAX_RECOVERY_WORK_ITEMS,\n cursor: options.cursor,\n }),\n );\n\n const cursor =\n selected !== undefined || options?.cursor === undefined\n ? undefined\n : yield* Schema.decodeEffect(RecoveryCursor)(options.cursor).pipe(\n Effect.flatMap(Schema.decodeEffect(Schema.fromJsonString(RecoverySweepCursor))),\n Effect.mapError((cause) =>\n ThreadStoreError.make({\n operation: \"recover work cursor\",\n message: \"Invalid recovery cursor\",\n cause,\n }),\n ),\n );\n\n if (\n cursor !== undefined &&\n ((cursor.threadId === undefined) === (cursor.afterThreadId === undefined) ||\n (cursor.workCursor !== undefined && cursor.threadId === undefined))\n )\n return yield* ThreadStoreError.make({\n operation: \"recover work cursor\",\n message: \"Invalid global recovery position\",\n });\n const reports: Array<RecoveryReport> = [];\n const workReports: Array<WorkRecoveryReport> = [];\n const blocked: Array<RecoveryBlocked> = [];\n // Several native owners can point at one active Submission. Advance it only once per\n // bounded pass; terminal obligations still repair independently from their own evidence.\n const recoveredAdmissions = new Map<SubmissionId, RecoveryReport>();\n const reportedAdmissions = new Set<SubmissionId>();\n\n const page =\n selected === undefined\n ? yield* workDiscovery.threads({\n limit: cursor?.threadId === undefined ? 32 : 31,\n ...((cursor?.threadId ?? cursor?.afterThreadId) === undefined\n ? {}\n : { afterThreadId: cursor?.threadId ?? cursor?.afterThreadId }),\n })\n : { threadIds: [selected], afterThreadId: undefined };\n\n const threadIds =\n cursor?.threadId !== undefined && selected === undefined\n ? [cursor.threadId, ...page.threadIds]\n : page.threadIds;\n\n let continuation: string | undefined;\n\n for (let index = 0; index < threadIds.length; index++) {\n const threadId = threadIds[index];\n\n if (threadId === undefined) break;\n\n let workCursor =\n selected !== undefined\n ? options?.cursor\n : cursor?.threadId === threadId\n ? cursor.workCursor\n : undefined;\n\n let complete = false;\n let phase: RecoveryFailure[\"phase\"] = \"history\";\n\n const outcome = yield* isolateRecovery(\n Effect.gen(function* () {\n // This incarnation admitted the sole untouched root. The native snapshot proves\n // there is no old owner to repair; claim and live controls still run normally.\n // New source mutations retain their dirty generation for the next maintenance scan.\n if (\n workCursor === undefined &&\n options?.deferUnclaimedAdmissions === true &&\n workDiscovery.isOnlyFreshAdmission !== undefined &&\n !storageOwner.hasOwner(threadId)\n ) {\n const fresh = [...unclaimedAdmissions].find(([, owner]) => owner === threadId);\n\n if (\n fresh !== undefined &&\n (yield* workDiscovery.isOnlyFreshAdmission({\n threadId,\n submissionId: fresh[0],\n }))\n ) {\n complete = true;\n\n return;\n }\n }\n for (\n let pages = 0;\n pages < MAX_RECOVERY_PAGES && workReports.length < MAX_RECOVERY_WORK_ITEMS;\n pages++\n ) {\n phase = \"history\";\n\n const workPage: ThreadWorkPage = yield* discoverWork({\n threadId,\n limit: MAX_RECOVERY_WORK_ITEMS - workReports.length,\n ...(workCursor === undefined ? {} : { cursor: workCursor }),\n });\n\n phase = \"recovery\";\n for (const work of workPage.entries) {\n const repaired = yield* recoverOwnedWork(\n { threadId, work },\n recoveredAdmissions,\n options?.deferUnclaimedAdmissions === true,\n );\n\n workReports.push(repaired);\n if (\n repaired.submission !== undefined &&\n !reportedAdmissions.has(repaired.submission.submissionId)\n ) {\n reportedAdmissions.add(repaired.submission.submissionId);\n reports.push(repaired.submission);\n }\n }\n workCursor = workPage.cursor;\n if (workCursor === undefined) {\n complete = true;\n break;\n }\n }\n }),\n { timeout: config.recoveryTimeout, phase: () => phase, operation: \"recover Thread work\" },\n );\n\n if (Result.isFailure(outcome)) {\n blocked.push(RecoveryBlocked.make({ threadId, failure: outcome.failure }));\n complete = true;\n }\n if (!complete) {\n continuation =\n selected !== undefined\n ? workCursor\n : encodeRecoveryCursor({\n version: 2,\n threadId,\n ...(workCursor === undefined ? {} : { workCursor }),\n });\n break;\n }\n if (workReports.length >= MAX_RECOVERY_WORK_ITEMS || index === threadIds.length - 1) {\n if (\n selected === undefined &&\n (index < threadIds.length - 1 || page.afterThreadId !== undefined)\n )\n continuation = encodeRecoveryCursor({ version: 2, afterThreadId: threadId });\n break;\n }\n }\n\n return RecoverySweepResult.make({\n reports,\n blocked,\n workReports,\n ...(continuation === undefined ? {} : { cursor: continuation }),\n });\n });\n\n const submit = Effect.fnUntraced(function* <InputSchema extends Schema.Top>(\n agent: DurableSubmitAgent<InputSchema>,\n input: InputSchema[\"Type\"],\n options: DurableSubmitOptions,\n ): Effect.fn.Return<Receipt, DurableSubmitFailure, InputSchema[\"EncodingServices\"]> {\n const encodedInput = yield* Schema.encodeEffect(agent.definition.input)(input).pipe(\n Effect.mapError((cause) =>\n AgentInputError.make({ message: `Unable to encode Agent input: ${cause.message}` }),\n ),\n );\n\n const inputPayload = yield* Schema.decodeUnknownEffect(PersistedJson)(encodedInput).pipe(\n Effect.mapError(() =>\n AgentInputError.make({\n message: \"Agent input does not satisfy the canonical persistence bounds\",\n }),\n ),\n );\n\n const inputDigest = yield* withCrypto(digestJson(inputPayload));\n\n const workerAdmission =\n options.workerAdmission === undefined\n ? undefined\n : yield* workerRuntime\n .validateAdmission(\n options.workerAdmission,\n options,\n agent.definition.id,\n inputDigest,\n inputPayload,\n )\n .pipe(\n Effect.mapError((cause) =>\n AdmissionPolicyError.make({\n reason:\n cause.reason === \"storage\" || cause.reason === \"unavailable\"\n ? \"unavailable\"\n : cause.reason === \"capacity\" &&\n cause.retryable === true &&\n Schema.is(FrameworkMessage)(options.messageAdmission)\n ? \"occupied\"\n : \"refused\",\n code: `worker-${cause.reason}`,\n cause,\n }),\n ),\n );\n\n const pendingMessage = options.messageAdmission;\n\n const messageAdmission =\n pendingMessage === undefined\n ? undefined\n : yield* Effect.suspend((): Effect.Effect<InputMessage, MessagingError | WorkerError> =>\n Schema.is(MessageAdmission)(pendingMessage)\n ? messagingRuntime.validateAdmission(\n pendingMessage,\n options,\n agent.definition.id,\n inputDigest,\n )\n : workerRuntime.validateCompletion(\n pendingMessage,\n options,\n agent.definition.id,\n inputDigest,\n ),\n ).pipe(\n Effect.mapError((cause) =>\n AdmissionPolicyError.make({\n reason:\n cause.reason === \"storage\" || cause.reason === \"unavailable\"\n ? \"unavailable\"\n : \"refused\",\n code: `message-${cause.reason}`,\n cause,\n }),\n ),\n );\n\n // Replay metadata is registration authority, never a caller's compatibility assertion.\n // Frozen native deliveries already proved their original envelope above. Root retries may\n // reuse only the original row; a new root must name a host-owned contract.\n if (\n options.definitions.replay !== undefined &&\n workerAdmission === undefined &&\n messageAdmission === undefined &&\n !registeredBindings.some(\n (binding) =>\n binding.agentId === agent.definition.id &&\n definitionDigestsEqual(binding.digests, options.definitions),\n )\n ) {\n const retained = yield* ledger.lookup(\n SubmissionLookupByKey.make({\n threadId: options.threadId,\n principal: options.principal,\n idempotencyKey: options.idempotencyKey,\n }),\n );\n\n if (\n Option.isNone(retained) ||\n retained.value.agentId !== agent.definition.id ||\n !definitionDigestsEqual(retained.value.agentDigests, options.definitions)\n )\n return yield* AdmissionPolicyError.make({\n reason: \"refused\",\n code: \"unregistered-replay-contract\",\n });\n }\n\n const request = yield* Schema.decodeEffect(AdmissionRequest)({\n threadId: options.threadId,\n principal: options.principal,\n idempotencyKey: options.idempotencyKey,\n ...(options.admissionGroup === undefined ? {} : { admissionGroup: options.admissionGroup }),\n ...(options.admissionFence === undefined ? {} : { admissionFence: options.admissionFence }),\n agentId: agent.definition.id,\n agentDigests: options.definitions,\n deploymentId: config.deploymentId,\n inputPayload,\n inputDigest,\n ...(workerAdmission === undefined\n ? {}\n : {\n workerAdmission: yield* Schema.encodeEffect(WorkerAdmission)(workerAdmission).pipe(\n Effect.mapError(() =>\n LedgerError.make({\n operation: \"submit\",\n message: \"Worker admission cannot be encoded\",\n }),\n ),\n ),\n }),\n ...(messageAdmission === undefined ? {} : { messageAdmission }),\n }).pipe(\n Effect.mapError(() =>\n LedgerError.make({\n operation: \"submit\",\n message: \"Admission fields do not satisfy the ledger contract\",\n }),\n ),\n );\n\n if (workerAdmission !== undefined) {\n const admitted = yield* workerAdmissionPort\n .admit(\n WorkerAdmissionRequest.make({\n ...request,\n workerAdmission,\n producerId: config.producerId,\n }),\n )\n .pipe(\n Effect.provideService(SubmissionLedger, ledger),\n Effect.provideService(ThreadStore, store),\n Effect.provideService(ThreadReader, reader),\n Effect.provideService(WakeScheduler, wake),\n Effect.provideService(DurableRuntimeFailpoint, failpoint),\n );\n\n return Receipt.make({\n receiptId: admitted.receiptId,\n submissionId: admitted.submissionId,\n threadId: request.threadId,\n queueSequence: admitted.queueSequence,\n });\n }\n const admitted = yield* ledger.admit(request, { readyIfInitialized: true });\n\n yield* hit(\"submit:after-admit\");\n\n const receipt = Receipt.make({\n receiptId: admitted.receiptId,\n submissionId: admitted.submissionId,\n threadId: options.threadId,\n queueSequence: admitted.queueSequence,\n });\n\n // A replay of an already-ready Submission resumes by returning the original Receipt;\n // an admitted-but-not-ready Submission (ours or a crashed predecessor's) is completed here.\n if (admitted.replayed && admitted.state !== \"admitted\") {\n return receipt;\n }\n if (admitted.state === \"admitted\") {\n yield* materializeThread(options.threadId);\n yield* ensureThreadCreated(options.threadId, agent.definition.id, options.definitions);\n yield* hit(\"submit:after-materialize\");\n yield* ledger.markReady(MarkReadyRequest.make({ submissionId: admitted.submissionId }));\n }\n if (\n !admitted.replayed &&\n messageAdmission === undefined &&\n options.workerAdmission === undefined\n ) {\n unclaimedAdmissions.set(admitted.submissionId, options.threadId);\n if (unclaimedAdmissions.size > 128) {\n const oldest = unclaimedAdmissions.keys().next().value;\n\n if (oldest !== undefined) unclaimedAdmissions.delete(oldest);\n }\n }\n yield* wake.notify(options.threadId);\n\n return receipt;\n });\n\n const authorizeSettlement = (receipt: Receipt) =>\n operationAuthorizer.authorize(\n OperationAuthorizationRequest.make({\n operation: \"awaitSettlement\",\n threadId: receipt.threadId,\n submissionId: receipt.submissionId,\n }),\n );\n\n const submitRegistered = Effect.fnUntraced(function* <InputSchema extends Schema.Top>(\n agent: DurableSubmitAgent<InputSchema>,\n input: InputSchema[\"Type\"],\n options: Omit<DurableSubmitOptions, \"definitions\">,\n ) {\n const binding = yield* resolveDefinitionBinding(registeredBindings, agent.definition);\n\n return yield* submit(agent, input, { ...options, definitions: binding.digests });\n });\n\n const readFinalizedSubmission = Effect.fnUntraced(function* (receipt: Receipt): Effect.fn.Return<\n Option.Option<{\n readonly settlement: Settlement;\n readonly record: SubmissionSettledRecord;\n }>,\n DurableAwaitFailure\n > {\n const snapshot = yield* ledger.lookup(\n SubmissionLookupById.make({ submissionId: receipt.submissionId }),\n );\n\n if (Option.isNone(snapshot)) {\n return yield* LedgerError.make({\n operation: \"awaitSettlement\",\n message: `Unknown Submission ${receipt.submissionId}`,\n });\n }\n if (\n snapshot.value.threadId !== receipt.threadId ||\n snapshot.value.receiptId !== receipt.receiptId ||\n snapshot.value.queueSequence !== receipt.queueSequence\n ) {\n return yield* OperationDenied.make({\n operation: \"awaitSettlement\",\n reason: \"Receipt does not match the authorized Submission\",\n threadId: receipt.threadId,\n submissionId: receipt.submissionId,\n });\n }\n if (snapshot.value.state !== \"settled\") return Option.none();\n\n // Finalization replay reads the canonical outcome for adapters without finalized\n // metadata. Native projections already retain the first settledAt and exact record.\n const canonical = yield* getRecord({\n threadId: receipt.threadId,\n recordId: submissionSettlementRecordId(receipt.submissionId),\n }).pipe(\n Effect.provideService(ThreadReader, reader),\n Effect.mapError((cause) =>\n LedgerError.make({\n operation: \"awaitSettlement\",\n message: \"Cannot read the finalized canonical Settlement\",\n cause,\n }),\n ),\n );\n\n if (Option.isNone(canonical)) {\n return yield* LedgerError.make({\n operation: \"awaitSettlement\",\n message: \"Finalized Submission has no canonical Settlement\",\n });\n }\n\n const record = yield* settlementPayloadFromRecord(canonical.value.record, receipt.submissionId);\n const finalized = snapshot.value;\n\n const retainedFinalization =\n finalized.settledAt !== undefined &&\n finalized.settledRecordId !== undefined &&\n finalized.settledOutcome !== undefined;\n\n if (\n retainedFinalization &&\n (finalized.settledRecordId !== canonical.value.record.recordId ||\n finalized.settledOutcome !== record.outcome ||\n canonical.value.batchId !== submissionSettlementBatchId(receipt.submissionId))\n ) {\n return yield* LedgerError.make({\n operation: \"awaitSettlement\",\n message: \"Settled projection disagrees with its canonical Settlement\",\n });\n }\n\n const settlement = retainedFinalization\n ? Settlement.make({\n submissionId: receipt.submissionId,\n settlementId: record.settlementId,\n receiptId: record.receiptId,\n outcome: record.outcome,\n ...(record.outcome === \"failed\" ? { failure: record.result } : {}),\n settledAt: finalized.settledAt,\n })\n : yield* ledger.finalizeSettlement(\n SettlementFinalization.make({\n submissionId: receipt.submissionId,\n settlementId: submissionSettlementId(receipt.submissionId),\n }),\n );\n\n if (\n record.receiptId !== receipt.receiptId ||\n record.settlementId !== settlement.settlementId ||\n record.outcome !== settlement.outcome\n ) {\n return yield* LedgerError.make({\n operation: \"awaitSettlement\",\n message: \"Canonical Settlement disagrees with the receipt or finalized outcome\",\n });\n }\n\n return Option.some({\n settlement: materializeSettlement(settlement, canonical.value.record),\n record,\n });\n });\n\n const readSubmissionStatus = Effect.fnUntraced(function* (\n receipt: Receipt,\n ): Effect.fn.Return<SubmissionStatus, DurableAwaitFailure> {\n const finalized = yield* readFinalizedSubmission(receipt);\n\n return Option.isNone(finalized)\n ? PendingSubmission.make({})\n : SettledSubmission.make({ settlement: finalized.value.settlement });\n });\n\n const submissionStatus = Effect.fnUntraced(function* (\n receipt: Receipt,\n ): Effect.fn.Return<SubmissionStatus, DurableAwaitFailure> {\n yield* authorizeSettlement(receipt);\n\n return yield* readSubmissionStatus(receipt);\n });\n\n const settlementRecord = Effect.fnUntraced(function* (receipt: Receipt) {\n yield* authorizeSettlement(receipt);\n const finalized = yield* readFinalizedSubmission(receipt);\n\n if (Option.isNone(finalized)) {\n return yield* LedgerError.make({\n operation: \"settlementRecord\",\n message: \"Submission has not settled\",\n });\n }\n\n return finalized.value.record;\n });\n\n const awaitFinalizedSubmission = Effect.fnUntraced(function* (receipt: Receipt) {\n // Authorization lasts for this wait, as it does for one observe subscription.\n yield* authorizeSettlement(receipt);\n while (true) {\n const finalized = yield* Effect.scoped(\n Effect.gen(function* () {\n // Register before reading the ledger so settlement between the read and\n // parking cannot be lost. Hints never replace the authoritative re-read.\n const awaitHint = yield* wake.subscribe(receipt.threadId, \"settlement\");\n const finalized = yield* readFinalizedSubmission(receipt);\n\n if (Option.isNone(finalized))\n yield* Effect.raceFirst(awaitHint, Effect.sleep(config.settlementPollInterval));\n\n return finalized;\n }),\n );\n\n if (Option.isSome(finalized)) return finalized.value;\n }\n });\n\n const awaitSettlement = Effect.fnUntraced(function* (receipt: Receipt) {\n return (yield* awaitFinalizedSubmission(receipt)).settlement;\n });\n\n const awaitSettlementRecord = Effect.fnUntraced(function* (receipt: Receipt) {\n return (yield* awaitFinalizedSubmission(receipt)).record;\n });\n\n const awaitProgress = Effect.fnUntraced(function* (\n threadId: ThreadId,\n afterSequence: CanonicalSequence,\n ): Effect.fn.Return<void, DurableProgressFailure> {\n yield* operationAuthorizer.authorize(\n OperationAuthorizationRequest.make({\n operation: \"observe\",\n threadId,\n }),\n );\n yield* Effect.scoped(\n Effect.gen(function* () {\n // Registration MUST precede the authoritative read. A notify between this acquisition\n // and parking completes the returned one-shot Effect, so neither subscribe/check nor\n // check/park can lose progress.\n const awaitHint = yield* wake.subscribe(threadId);\n\n const committed = yield* Stream.runHead(\n store.read(\n ThreadRead.make({\n threadId,\n afterSequence,\n limit: 1,\n }),\n ),\n );\n\n if (Option.isSome(committed)) return;\n // A wake is only a hint. The caller re-reads canonical records after this returns.\n yield* awaitHint;\n }),\n );\n });\n\n const observe = (receipt: Receipt, options?: DurableObserveOptions) =>\n Stream.unwrap(\n operationAuthorizer\n .authorize(\n OperationAuthorizationRequest.make({\n operation: \"observe\",\n threadId: receipt.threadId,\n submissionId: receipt.submissionId,\n }),\n )\n .pipe(\n Effect.as(\n store.observe(\n ThreadObservation.make({\n threadId: receipt.threadId,\n ...(options?.after === undefined ? {} : { afterOffset: options.after }),\n }),\n ),\n ),\n ),\n );\n\n const abort = Effect.fnUntraced(function* (\n command: AbortCommand,\n ): Effect.fn.Return<AbortIntent, DurableAbortFailure> {\n yield* operationAuthorizer.authorize(\n OperationAuthorizationRequest.make({\n operation: \"abort\",\n submissionId: command.submissionId,\n }),\n );\n const intent = yield* ledger.requestAbort(command);\n\n yield* hit(\"abort:after-intent\");\n\n const snapshot = yield* ledger.lookup(\n SubmissionLookupById.make({ submissionId: command.submissionId }),\n );\n\n if (Option.isSome(snapshot)) {\n yield* wake.notify(snapshot.value.threadId);\n }\n\n return intent;\n });\n\n /**\n * DUR-017 resolution surface (abort-shaped, plan §2.2): the durable ledger intent commits\n * first; the canonical `ToolCallResolved` (+ `ToolCallSettled` for a recovered result) is\n * appended by the recovery pass or the next owning Attempt. An `AbortSubmission` resolution\n * routes into the existing abort path — the unknown calls stay recorded and abort never\n * asserts external rollback (durability §13). Possession of this service plus the mandatory\n * author/reason audit fields is the Phase 5 authorization boundary, identical to `abort`; the\n * authenticated operator surface is a P7 deliverable.\n */\n const resolveUnknown = Effect.fn(\"DurableAgentRuntime.resolveUnknown\")(function* (\n command: UnknownResolutionCommand,\n ): Effect.fn.Return<UnknownResolutionIntent, DurableResolveFailure | OperationDenied> {\n yield* operationAuthorizer.authorize(\n OperationAuthorizationRequest.make({\n operation: \"resolveUnknown\",\n submissionId: command.submissionId,\n }),\n );\n\n const original = yield* ledger.lookup(\n SubmissionLookupById.make({ submissionId: command.submissionId }),\n );\n\n if (\n Option.isSome(original) &&\n original.value.state === \"settled\" &&\n (command.resolution._tag === \"CompletedWithResult\" ||\n command.resolution._tag === \"NeverHappened\")\n ) {\n yield* Effect.gen(function* () {\n const submission = original.value;\n\n const snapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: command.submissionId }),\n );\n\n // Identical intent retries remain valid after the factual closure commits.\n if (\n snapshot.unknownResolutions.some(\n (intent) =>\n intent.toolCallId === command.toolCallId &&\n unknownResolutionKind(intent.resolution) === \"factual\",\n )\n )\n return;\n\n const tail = yield* store.inspectTail(\n ThreadTailRequest.make({ threadId: submission.threadId }),\n );\n\n const records = yield* withCrypto(\n readRunEvidenceSnapshot(\n submission.threadId,\n submission.submissionId,\n tail.tailSequence,\n ).pipe(Effect.provideService(ThreadReader, reader)),\n );\n\n const runId = runIdForSubmission(submission.submissionId);\n\n const state = toolOperationStates(records, runId).find(\n (state) => state.operation.toolCallId === command.toolCallId,\n );\n\n const declared = yield* declaredCallsFor(records, runId, new Set([command.toolCallId]));\n\n if (\n state === undefined ||\n state.settled ||\n state.resolved ||\n !declared.has(command.toolCallId)\n )\n return yield* LedgerError.make({\n operation: \"resolveUnknown\",\n message: \"No unresolved original operation exists on this terminal Run\",\n });\n\n const response = records.find(\n ({ record: { payload } }) =>\n payload._tag === \"ModelResponseRecorded\" &&\n payload.runId === runId &&\n payload.turn === state.turn,\n )?.record.payload;\n\n if (\n response?._tag !== \"ModelResponseRecorded\" ||\n (command.resolution._tag === \"CompletedWithResult\" &&\n utf8ByteLength(JSON.stringify(command.resolution.result)) > response.toolResultMaxBytes)\n )\n return yield* LedgerError.make({\n operation: \"resolveUnknown\",\n message: \"The factual result exceeds the original result contract\",\n });\n }).pipe(\n Effect.mapError((cause) =>\n cause._tag === \"LedgerError\"\n ? cause\n : LedgerError.make({\n operation: \"resolveUnknown\",\n message: \"Original operation evidence is unavailable\",\n cause,\n }),\n ),\n );\n }\n const intent = yield* ledger.recordUnknownResolution(command);\n\n yield* hit(\"resolve:after-intent\");\n if (command.resolution._tag === \"AbortSubmission\") {\n yield* ledger.requestAbort(\n AbortCommand.make({\n submissionId: command.submissionId,\n author: command.author,\n reason: command.reason,\n }),\n );\n }\n\n const snapshot = yield* ledger.lookup(\n SubmissionLookupById.make({ submissionId: command.submissionId }),\n );\n\n if (Option.isSome(snapshot)) {\n yield* wake.notify(snapshot.value.threadId);\n }\n\n return intent;\n });\n\n /**\n * Durable approval decision surface (plan §2.6, abort-shaped): the ledger intent commits\n * first — idempotent per (submission, tool call), with a typed `ApprovalConflict` on a\n * divergent re-decision — and the adapter transitions `suspended → input-applied` atomically\n * once every pending call of the stored suspension reason is decided; the wake hint then lets\n * a worker resume the declared batch through the batch-resume seam (no model re-invocation).\n * The canonical `ToolApprovalDecided` record is appended by the resuming Attempt's approval\n * hook before the decision is honored — never here. A denied decision fails the Run through\n * the engine's `AgentApprovalDenied` path (denial-terminal, P2 policy default). Possession of\n * this service plus the mandatory resolver/reason audit fields is the Phase 5 authorization\n * boundary, identical to `abort`; the authenticated operator surface is a P7 deliverable.\n */\n const resolveApproval = Effect.fn(\"DurableAgentRuntime.resolveApproval\")(function* (\n command: ApprovalDecisionCommand,\n ): Effect.fn.Return<ApprovalDecisionIntent, DurableApprovalFailure | OperationDenied> {\n yield* operationAuthorizer.authorize(\n OperationAuthorizationRequest.make({\n operation: \"resolveApproval\",\n submissionId: command.submissionId,\n }),\n );\n const intent = yield* ledger.recordApprovalDecision(command);\n\n const snapshot = yield* ledger.lookup(\n SubmissionLookupById.make({ submissionId: command.submissionId }),\n );\n\n if (Option.isSome(snapshot)) {\n yield* wake.notify(snapshot.value.threadId);\n }\n\n return intent;\n });\n\n // -------------------------------------------------------------------------\n // P7 administrative operations (plan §3): explain/verify/retry/wake/scanObligations over the\n // SAME two ports the coordinator already owns, so they behave identically on DN and DC.\n // -------------------------------------------------------------------------\n\n /** Whole non-negative seconds between a recorded instant and Effect Clock-now. */\n const ageSecondsSince = (instant: DateTime.Utc, nowMillis: number): number =>\n Math.max(0, Math.floor((nowMillis - DateTime.toEpochMillis(instant)) / 1_000));\n\n const lookupKnownSubmission = Effect.fnUntraced(function* (\n operation: string,\n submissionId: SubmissionId,\n ): Effect.fn.Return<SubmissionSnapshot, LedgerError> {\n const found = yield* ledger.lookup(SubmissionLookupById.make({ submissionId }));\n\n if (Option.isNone(found)) {\n return yield* LedgerError.make({\n operation,\n message: `Unknown Submission ${submissionId}`,\n });\n }\n\n return found.value;\n });\n\n /**\n * Read-only explanation of one Submission: the same snapshot + tolerant canonical read +\n * pure classification the recovery pass performs, packaged WITHOUT executing anything —\n * assembling it performs zero writes (P7 exit gate: operators explain recovery state without\n * editing storage).\n */\n const explainSubmission = Effect.fnUntraced(function* (\n submission: SubmissionSnapshot,\n ): Effect.fn.Return<RecoveryExplanation, LedgerError | ThreadStoreError | RunJournalError> {\n const snapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: submission.submissionId }),\n );\n\n const read = yield* readRecoveryHistory(submission.threadId, [\n submission.submissionId,\n ...(snapshot.hostSubmissionId === undefined ? [] : [snapshot.hostSubmissionId]),\n ]);\n\n const evidence = yield* evidenceFor(\n read.records,\n submission.submissionId,\n read.materialized,\n snapshot.hostSubmissionId,\n );\n\n const decision = classifyRecovery(snapshot, evidence);\n const nowMillis = yield* Clock.currentTimeMillis;\n const explainedAt = yield* nowUtc;\n const runId = runIdForSubmission(submission.submissionId);\n\n const resolvedIds = new Set(\n read.records.flatMap(({ record }) =>\n record.payload._tag === \"ToolCallSettled\" && record.payload.runId === runId\n ? [record.payload.toolCallId]\n : [],\n ),\n );\n\n const unknownCalls: Array<ExplainedUnknownCall> = [];\n\n for (const envelope of read.records) {\n const payload = envelope.record.payload;\n\n if (payload._tag !== \"ToolCallUnknown\" || payload.runId !== runId) continue;\n unknownCalls.push(\n ExplainedUnknownCall.make({\n toolCallId: payload.toolCallId,\n toolName: payload.toolName,\n reason: payload.reason,\n recordedAt: envelope.record.createdAt,\n resolved: resolvedIds.has(payload.toolCallId),\n }),\n );\n }\n\n const pendingIds = new Set(\n toolOperationStates(read.records, runId)\n .filter((state) => !state.settled && !state.resolved)\n .map((state) => state.operation.toolCallId),\n );\n\n const declared = yield* declaredCallsFor(read.records, runId, pendingIds);\n\n const row = snapshot.submission;\n\n return RecoveryExplanation.make({\n submission: ExplainedSubmission.make({\n submissionId: row.submissionId,\n threadId: row.threadId,\n state: row.state,\n queueSequence: row.queueSequence,\n createdAt: row.createdAt,\n ageSeconds: ageSecondsSince(row.createdAt, nowMillis),\n ...(row.readyAt === undefined\n ? {}\n : { readyAt: row.readyAt, readyAgeSeconds: ageSecondsSince(row.readyAt, nowMillis) }),\n ...(row.parentLinkage === undefined ? {} : { parentLinkage: row.parentLinkage }),\n }),\n evidence: ExplainedEvidence.make({\n threadMaterialized: evidence.threadMaterialized,\n inputRecorded: evidence.inputRecorded,\n abortRecorded: evidence.abortRecorded,\n openToolCalls: evidence.openToolCalls,\n pendingOperations: [...declared.values()],\n openDelegationCalls: evidence.openDelegationCalls,\n approvalsPending: evidence.approvalsPending,\n unknownCalls,\n approvalDecisions: snapshot.approvalDecisions,\n unknownResolutions: snapshot.unknownResolutions,\n childAttachments: snapshot.childAttachments,\n joins: snapshot.joins,\n ...(evidence.recordedSettlementOutcome === undefined\n ? {}\n : { recordedSettlementOutcome: evidence.recordedSettlementOutcome }),\n ...(snapshot.hostSubmissionId === undefined\n ? {}\n : { hostSubmissionId: snapshot.hostSubmissionId }),\n ...(snapshot.suspension === undefined ? {} : { suspension: snapshot.suspension }),\n ...(snapshot.abortIntent === undefined ? {} : { abortIntent: snapshot.abortIntent }),\n }),\n decision,\n decisionMeaning: recoveryDecisionMeaning(decision._tag),\n disposition:\n decision._tag === \"ApplyUnknownResolutions\" &&\n (yield* hasUnsupportedRetry(snapshot, read.records).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({ message: \"Cannot verify the pending retry contract\", cause }),\n ),\n ))\n ? \"unknown\"\n : predictRecoveryDisposition(decision, snapshot),\n explainedAt,\n });\n });\n\n const explain = Effect.fnUntraced(function* (\n submissionId: SubmissionId,\n ): Effect.fn.Return<RecoveryExplanation, DurableExplainFailure> {\n yield* operationAuthorizer.authorize(\n OperationAuthorizationRequest.make({ operation: \"explain\", submissionId }),\n );\n const submission = yield* lookupKnownSubmission(\"explain\", submissionId);\n\n return yield* explainSubmission(submission);\n });\n\n const explainThread = Effect.fnUntraced(function* (\n threadId: ThreadId,\n ): Effect.fn.Return<ReadonlyArray<RecoveryExplanation>, DurableExplainFailure> {\n yield* operationAuthorizer.authorize(\n OperationAuthorizationRequest.make({ operation: \"explain\", threadId }),\n );\n\n const nonterminal = yield* Stream.runCollect(\n ledger.scanNonterminal.pipe(Stream.filter((submission) => submission.threadId === threadId)),\n );\n\n const explanations: Array<RecoveryExplanation> = [];\n\n for (const submission of nonterminal) {\n if (submission.threadId !== threadId) continue;\n explanations.push(\n yield* explainSubmission(\n yield* lookupKnownSubmission(\"explain Thread\", submission.submissionId),\n ),\n );\n }\n\n return explanations;\n });\n\n const verifyImpl = Effect.fnUntraced(function* (\n threadId: ThreadId,\n ): Effect.fn.Return<IntegrityReport, DurableVerifyFailure> {\n yield* operationAuthorizer.authorize(\n OperationAuthorizationRequest.make({ operation: \"verify\", threadId }),\n );\n if (store.verification === undefined)\n return yield* ThreadStoreError.make({\n operation: \"verify Thread\",\n message: \"This adapter does not provide snapshot-bound streaming verification\",\n });\n\n return yield* store.verification.verify({ threadId });\n });\n\n /**\n * Safe re-drive of exactly one Submission's recovery decision (plan §3): classify, execute\n * the ONE repair the classifier names, annotate owned repair attempts with their actual\n * claim epoch (DUR-013), and wake the lane. Typed refusals\n * protect the paths that own their own operations: settled work (`NoAction`), requests parked\n * on Unknown Outcomes (`resolveUnknown`, DUR-017), and lanes awaiting approval decisions\n * (`resolveApproval`). The mandatory `author`/`reason` audit fields (SEC-011) annotate the\n * structured operator log.\n */\n const retryImpl = Effect.fn(\"DurableAgentRuntime.retry\")(function* (\n command: RetryCommand,\n ): Effect.fn.Return<RecoveryReport, DurableRetryFailure> {\n yield* operationAuthorizer.authorize(\n OperationAuthorizationRequest.make({\n operation: \"retry\",\n submissionId: command.submissionId,\n }),\n );\n const submission = yield* lookupKnownSubmission(\"retry\", command.submissionId);\n\n const snapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: command.submissionId }),\n );\n\n const read = yield* readRecoveryHistory(submission.threadId, [\n submission.submissionId,\n ...(snapshot.hostSubmissionId === undefined ? [] : [snapshot.hostSubmissionId]),\n ]);\n\n const evidence = yield* evidenceFor(\n read.records,\n command.submissionId,\n read.materialized,\n snapshot.hostSubmissionId,\n );\n\n const decision = classifyRecovery(snapshot, evidence);\n\n if (decision._tag === \"NoAction\") {\n return yield* RetryRefused.make({\n submissionId: command.submissionId,\n refusal: \"settled\",\n decisionTag: decision._tag,\n message: \"The Submission is settled; terminal outcomes are never revisited (DUR-002).\",\n });\n }\n if (decision._tag === \"AwaitUnknownResolution\") {\n return yield* RetryRefused.make({\n submissionId: command.submissionId,\n refusal: \"await-unknown-resolution\",\n decisionTag: decision._tag,\n message:\n \"This Submission is parked on Unknown Outcomes; resolve them through the authorized resolveUnknown path (DUR-017) instead of retrying.\",\n });\n }\n if (decision._tag === \"AwaitApprovalDecision\") {\n return yield* RetryRefused.make({\n submissionId: command.submissionId,\n refusal: \"await-approval-decision\",\n decisionTag: decision._tag,\n message:\n \"The lane is durably waiting for approval decisions; decide them through resolveApproval instead of retrying.\",\n });\n }\n yield* Effect.logInfo(\"DurableAgentRuntime.retry executed an operator re-drive\").pipe(\n Effect.annotateLogs({\n submissionId: command.submissionId,\n threadId: submission.threadId,\n author: command.author,\n reason: command.reason,\n decision: decision._tag,\n }),\n );\n\n const disposition = yield* Effect.scoped(\n executeRecoveryDecision(snapshot, evidence, decision, read.records, read),\n );\n\n yield* wake.notify(submission.threadId);\n\n return RecoveryReport.make({\n submissionId: command.submissionId,\n threadId: submission.threadId,\n decision,\n disposition,\n });\n });\n\n /** The documented operator liveness nudge: a droppable wake hint for one lane. */\n const wakeImpl = Effect.fnUntraced(function* (\n threadId: ThreadId,\n ): Effect.fn.Return<void, OperationDenied> {\n yield* operationAuthorizer.authorize(\n OperationAuthorizationRequest.make({ operation: \"wake\", threadId }),\n );\n yield* wake.notify(threadId);\n });\n\n /**\n * Scan-based DUR-017/OPS-001 obligation report — never a daemon: one ledger scan folded into\n * aged, severity-classified rows. Ages come from timestamps that already exist: `readyAt`/\n * `createdAt` for queued and running work, `suspendedAt` for durable suspensions, and the\n * oldest unresolved canonical `ToolCallUnknown` record for DUR-017 blocks (OPS-002).\n */\n const scanObligationsImpl = Effect.fnUntraced(function* (\n thresholds: ObligationThresholds,\n ): Effect.fn.Return<ObligationReport, DurableObligationFailure> {\n yield* operationAuthorizer.authorize(\n OperationAuthorizationRequest.make({ operation: \"scanObligations\" }),\n );\n const nonterminal = yield* Stream.runCollect(ledger.scanNonterminal);\n const nowMillis = yield* Clock.currentTimeMillis;\n const generatedAt = yield* nowUtc;\n const entries: Array<ObligationEntry> = [];\n\n for (const entry of nonterminal) {\n const snapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: entry.submissionId }),\n );\n\n const submission = snapshot.submission;\n\n let blockedOn: ObligationBlockedOn;\n let since: DateTime.Utc = submission.readyAt ?? submission.createdAt;\n\n switch (submission.state) {\n case \"unknown\": {\n blockedOn = \"unknown\";\n\n const records = (yield* readAllTolerant(submission.threadId, [submission.submissionId]))\n .records;\n\n const runId = runIdForSubmission(submission.submissionId);\n\n const resolvedIds = new Set(\n records.flatMap(({ record }) =>\n record.payload._tag === \"ToolCallSettled\" && record.payload.runId === runId\n ? [record.payload.toolCallId]\n : [],\n ),\n );\n\n let earliest: DateTime.Utc | undefined;\n\n for (const envelope of records) {\n const payload = envelope.record.payload;\n\n if (payload._tag !== \"ToolCallUnknown\" || payload.runId !== runId) continue;\n if (resolvedIds.has(payload.toolCallId)) continue;\n const recordedAt = envelope.record.createdAt;\n\n if (\n earliest === undefined ||\n DateTime.toEpochMillis(recordedAt) < DateTime.toEpochMillis(earliest)\n ) {\n earliest = recordedAt;\n }\n }\n since = earliest ?? snapshot.suspension?.suspendedAt ?? since;\n break;\n }\n case \"suspended\": {\n blockedOn =\n snapshot.suspension?.reason._tag === \"WaitingForChild\" ? \"waitingForChild\" : \"approval\";\n since = snapshot.suspension?.suspendedAt ?? since;\n break;\n }\n case \"admitted\":\n case \"ready\": {\n blockedOn = \"ready-aged\";\n break;\n }\n default: {\n blockedOn = \"running-aged\";\n break;\n }\n }\n const ageSeconds = ageSecondsSince(since, nowMillis);\n\n entries.push(\n ObligationEntry.make({\n submissionId: submission.submissionId,\n threadId: submission.threadId,\n state: submission.state,\n blockedOn,\n ageSeconds,\n severity: obligationSeverityOf(ageSeconds, thresholds),\n }),\n );\n }\n\n return ObligationReport.make({ thresholds, entries, generatedAt });\n });\n\n const runResolvedWorkerImpl = Effect.gen(function* () {\n // Each claimed head selects a current Binding by stable Agent ID and optional host routing.\n // Original per-operation replay contracts still govern unfinished handlers, while one worker\n // pool serves both parent and child lanes.\n const initial = Stream.paginate(undefined, (afterThreadId: ThreadId | undefined) =>\n workDiscovery\n .threads({ limit: 32, ...(afterThreadId === undefined ? {} : { afterThreadId }) })\n .pipe(\n Effect.map(\n (page): readonly [ReadonlyArray<ThreadId>, Option.Option<ThreadId | undefined>] => [\n page.threadIds,\n page.afterThreadId === undefined ? Option.none() : Option.some(page.afterThreadId),\n ],\n ),\n ),\n );\n\n yield* Stream.merge(initial, wake.wakes, { haltStrategy: \"right\" }).pipe(\n Stream.runForEach(\n Effect.fnUntraced(function* (threadId) {\n let cursor: string | undefined;\n\n do {\n const recovered = yield* runRecovery({\n threadId,\n ...(cursor === undefined ? {} : { cursor }),\n });\n\n const blocked = recovered.blocked[0];\n\n if (blocked !== undefined) return yield* blocked;\n cursor = recovered.cursor;\n yield* processThreadResolvedImpl(threadId);\n } while (cursor !== undefined);\n }),\n ),\n );\n });\n\n const messagingRuntime = yield* makeMessagingRuntime({\n bindings: registeredBindings,\n deploymentId: config.deploymentId,\n producerId: config.producerId,\n }).pipe(Effect.provideService(ThreadStore, progressStore));\n\n const workerRuntime = yield* makeWorkerRuntime({\n bindings: registeredBindings,\n deploymentId: config.deploymentId,\n producerId: config.producerId,\n settlementPollInterval: config.settlementPollInterval,\n }).pipe(\n Effect.provideService(ThreadStore, progressStore),\n Effect.provideService(WorkerInputControl, {\n status: readSubmissionStatus,\n abort,\n submit: (envelope) =>\n submit({ definition: { id: envelope.agentId, input: PersistedJson } }, envelope.input, {\n threadId: envelope.threadId,\n principal: envelope.deliveryPrincipal,\n idempotencyKey: envelope.admissionKey,\n definitions: envelope.definitions,\n ...(envelope.workerAdmission === undefined\n ? {}\n : { workerAdmission: envelope.workerAdmission }),\n ...(envelope.messageAdmission === undefined\n ? {}\n : { messageAdmission: envelope.messageAdmission }),\n }),\n }),\n );\n\n const updateRuntime = yield* makeAgentUpdateRuntime({\n deploymentId: config.deploymentId,\n producerId: config.producerId,\n }).pipe(\n Effect.provideService(WorkerRuntime, workerRuntime),\n Effect.provideService(ThreadStore, progressStore),\n );\n\n return DurableAgentRuntime.of({\n bindingRegistryKey: yield* withCrypto(\n digestJson({\n selection: bindingSelection?.key ?? null,\n bindings: (yield* Effect.forEach(registeredBindings, (binding) =>\n withCrypto(\n digestJson({\n agentId: binding.agentId,\n agent: binding.digests.agent,\n model: binding.digests.model,\n tools: binding.digests.tools,\n replay:\n binding.digests.replay === undefined\n ? null\n : {\n agent: binding.digests.replay.agent,\n agentBehavior: binding.digests.replay.agentBehavior ?? null,\n tools: binding.digests.replay.tools,\n },\n }),\n ),\n ).pipe(Effect.orDie)).sort(),\n }),\n ).pipe(Effect.orDie),\n workerHost: workerRuntime.acquire,\n messagingHost: messagingRuntime.acquire,\n submitRegistered,\n settlementRecord,\n submit,\n submissionStatus,\n inspectSubmissionStatus: readSubmissionStatus,\n awaitSettlement,\n awaitSettlementRecord,\n awaitProgress,\n observe,\n abort,\n resolveUnknown,\n resolveApproval,\n explain,\n explainThread,\n verify: verifyImpl,\n retry: retryImpl,\n wake: wakeImpl,\n scanObligations: scanObligationsImpl,\n processThread: processThreadImpl,\n processThreadResolved: processThreadResolvedImpl,\n processThreadHead: processThreadHeadImpl,\n runResolvedWorker: runResolvedWorkerImpl,\n runRecovery,\n recoverSubmission,\n discoverWork,\n discoverWorkThreads,\n rebuildWorkIndex,\n recoverWork,\n });\n});\n\n/**\n * Durable Agent Runtime coordinator (deployment class DN; D1/D2). It coordinates the\n * SubmissionLedger, ThreadStore, and WakeScheduler ports so that once `submit` returns a\n * Receipt, the Submission settles exactly once (DUR-001/DUR-002) while every external effect\n * remains at-least-once (DUR-003) — this runtime never claims exactly-once side effects.\n *\n * - `submit(agent, input, options)` — durable admission → Thread materialization →\n * `ThreadCreated` → readiness → Receipt, with failpoints between the steps; a retry with\n * the same (thread, principal, idempotencyKey) resumes and returns the same Receipt.\n * - `awaitSettlement(receipt)` — authorized once before the first ledger read, for the lifetime\n * of this wait; interrupting it detaches the caller only and never cancels accepted work.\n * - `observe(receipt, {after})` — canonical record observation from a stored offset.\n * - `abort(command)` — authorized before ledger access; durable idempotent abort intent; inactive work settles aborted through\n * recovery, an active worker makes the command canonical before interrupting its Run (§13),\n * settled work fails with `SettlementConflict` (DUR-012). A `joined` Submission fails with a\n * typed `JoinedToHost` conflict carrying the host identity — it settles with its host, so the\n * abort target is the host; aborting a `joining` Submission records the intent, honored only\n * if the host has not consumed the input (revert-then-abort, plan §2.5).\n * - `resolveUnknown(command)` — the authorized DUR-017 resolution path for Unknown Outcomes:\n * the durable intent is idempotent per (submission, tool call) and conflicts typed on\n * divergence; the canonical resolution records are applied by recovery or the next Attempt,\n * and the lane wakes once every marked call is covered.\n * - `resolveApproval(command)` — the durable approval decision path (plan §2.6): the intent is\n * idempotent per (submission, tool call) with a typed `ApprovalConflict` on divergence; once\n * every pending call of the suspension reason is decided the lane wakes\n * (`suspended → input-applied`) and the next Attempt resumes the declared batch without model\n * re-invocation, appending the canonical `ToolApprovalDecided` before honoring the decision.\n * - `processThread(agent, threadId)` — drain one lane: fenced FIFO-head claims,\n * canonical input apply, split response/results Turn commits (plan §2.1),\n * reconcile-then-mark for open ordinary Tool Calls (DUR-009, never an automatic replay),\n * declared-batch resume without model re-invocation (§15), and terminalization. An active\n * host Run claims the contiguous ready prefix of later queued Submissions at every safe Turn\n * seam (Joining/Joined, plan §2.5): the queued input becomes canonical (`input:{sid}`) before\n * the next model request, reattaches through the prompt-coverage rule after a crash, and the\n * joined Submissions settle with the host outcome (DUR-002/DUR-016).\n * - `processThreadResolved(threadId)` / `runResolvedWorker` — drain or continuously process\n * lanes using registrations owned by the runtime Layer: each stable `agentId` selects\n * one current Binding. Unfinished operation contracts gate handler execution independently\n * of immutable admission evidence; missing bindings release the claim with a typed refusal.\n * - `discoverWork()` / `discoverWorkThreads()` — enumerate native metadata without granting\n * execution authority. Missing or incomplete indexes fail explicitly; `rebuildWorkIndex()`\n * reconstructs them in bounded, resumable pages independently of ordinary recovery.\n * - `runRecovery()` — repair at most 32 native owners per pass, returning a cursor for remaining\n * work. Follow that cursor to finish the sweep. Selected admissions use `classifyRecovery`;\n * ready input and model work remain `deferred` for a fenced worker claim. Terminal Runs can\n * retain factual tool closures, frozen deliveries, child accounting and worker acknowledgements.\n * These repairs use original evidence and never invoke a Tool handler or reopen a settled Run.\n * - `explain`/`explainThread`, `verify`, `retry`, `wake`, `scanObligations` — the P7\n * administrative operations (plan §3) over the same two ports, identical on DN and DC.\n * `explain` and `verify` are strictly read-only; `retry` re-drives exactly one classified\n * repair with mandatory author/reason audit and typed refusals; `scanObligations` is the\n * scan-based DUR-017/OPS-001 obligation surface. Every one of them (plus `observe`,\n * `resolveUnknown`, `resolveApproval`) consults the `OperationAuthorizer` reference\n * fail-closed — the default Layer preserves the service-possession behavior, and a\n * host-supplied authorizer turns denials into the typed `OperationDenied`.\n */\nexport class DurableAgentRuntime extends Context.Service<\n DurableAgentRuntime,\n {\n /** Stable registration identity for hosts parking unavailable bindings; never an admission authority. */\n readonly bindingRegistryKey: string;\n /** Acquire an authenticated source Thread facet; its References confer no authority. */\n readonly workerHost: (request: {\n readonly sourceThreadId: ThreadId;\n readonly principal: Principal;\n /** Exact retained owner input for captured source policy; never selects the latest input. */\n readonly sourceSubmissionId?: SubmissionId;\n }) => Effect.Effect<SubagentHost[\"Service\"], WorkerError>;\n readonly messagingHost: (request: {\n readonly sourceThreadId: ThreadId;\n readonly principal: Principal;\n }) => Effect.Effect<MessagingHost[\"Service\"], MessagingError>;\n /** Admit the exact registered Definition instance; reject missing, ambiguous, or different definitions. */\n readonly submitRegistered: <InputSchema extends Schema.Top>(\n agent: DurableSubmitAgent<InputSchema>,\n input: InputSchema[\"Type\"],\n options: Omit<DurableSubmitOptions, \"definitions\">,\n ) => Effect.Effect<\n Receipt,\n DurableSubmitFailure | BindingUnavailable,\n InputSchema[\"EncodingServices\"]\n >;\n /** Authorized exact canonical terminal record, including the encoded output. Reject pending work. */\n readonly settlementRecord: (\n receipt: Receipt,\n ) => Effect.Effect<SubmissionSettledRecord, DurableAwaitFailure>;\n readonly submit: <InputSchema extends Schema.Top>(\n agent: DurableSubmitAgent<InputSchema>,\n input: InputSchema[\"Type\"],\n options: DurableSubmitOptions,\n ) => Effect.Effect<Receipt, DurableSubmitFailure, InputSchema[\"EncodingServices\"]>;\n readonly awaitSettlement: (receipt: Receipt) => Effect.Effect<Settlement, DurableAwaitFailure>;\n /** Wait under settlement authority for the exact canonical terminal record, including encoded output. */\n readonly awaitSettlementRecord: (\n receipt: Receipt,\n ) => Effect.Effect<SubmissionSettledRecord, DurableAwaitFailure>;\n /** Authorized, nonblocking read. Only the durable Settlement marks work complete. */\n readonly submissionStatus: (\n receipt: Receipt,\n ) => Effect.Effect<SubmissionStatus, DurableAwaitFailure>;\n /**\n * Trusted worker inspection under the same runtime authority as processThread/recoverSubmission.\n * Caller-facing observations must use submissionStatus or awaitSettlement for authorization.\n */\n readonly inspectSubmissionStatus: (\n receipt: Receipt,\n ) => Effect.Effect<SubmissionStatus, DurableAwaitFailure>;\n /**\n * Wait for an already-committed record or one incarnation-local progress hint after\n * `afterSequence`. Canonical records remain authoritative: callers re-read after return.\n */\n readonly awaitProgress: (\n threadId: ThreadId,\n afterSequence: CanonicalSequence,\n ) => Effect.Effect<void, DurableProgressFailure>;\n readonly observe: (\n receipt: Receipt,\n options?: DurableObserveOptions,\n ) => Stream.Stream<\n CanonicalRecordEnvelope,\n ThreadStoreError | ThreadNotMaterialized | OperationDenied\n >;\n readonly abort: (command: AbortCommand) => Effect.Effect<AbortIntent, DurableAbortFailure>;\n readonly resolveUnknown: (\n command: UnknownResolutionCommand,\n ) => Effect.Effect<UnknownResolutionIntent, DurableResolveFailure | OperationDenied>;\n readonly resolveApproval: (\n command: ApprovalDecisionCommand,\n ) => Effect.Effect<ApprovalDecisionIntent, DurableApprovalFailure | OperationDenied>;\n /**\n * Read-only recovery explanation of one Submission (P7 plan §3): snapshot + tolerant\n * canonical read + the pure classifier, packaged with the decision's operator meaning and\n * predicted disposition. Performs ZERO writes — the canonical log and every ledger row are\n * byte-identical before and after.\n */\n readonly explain: (\n submissionId: SubmissionId,\n ) => Effect.Effect<RecoveryExplanation, DurableExplainFailure>;\n /** `explain` for every nonterminal lane member of one Thread, in queue order. */\n readonly explainThread: (\n threadId: ThreadId,\n ) => Effect.Effect<ReadonlyArray<RecoveryExplanation>, DurableExplainFailure>;\n /**\n * Read-only integrity verification of one Thread (P7 plan §3): Schema round-trips,\n * record-identity uniqueness, sequence contiguity, FIFO input/settlement order,\n * ledger-terminal vs canonical-settlement agreement (DUR-015), and checkpoint binding —\n * typed per-check results, never a repair. Current exports carry the batch identities and\n * original record wire needed to recompute the digest chain. Older exports without those\n * identities report `skipped`; adapter-level `verifyOnOpen` audits storage directly.\n */\n readonly verify: (threadId: ThreadId) => Effect.Effect<IntegrityReport, DurableVerifyFailure>;\n /**\n * Safe re-drive of one Submission's recovery decision with mandatory author/reason audit\n * (SEC-011): executes exactly the repair the classifier names; owned repair attempts\n * append a best-effort `RepairAnnotated` with their actual claim epoch (DUR-013). Typed `RetryRefused`\n * for settled work and for lanes owned by the resolveUnknown/resolveApproval paths.\n */\n readonly retry: (command: RetryCommand) => Effect.Effect<RecoveryReport, DurableRetryFailure>;\n /** The documented operator liveness nudge: a droppable wake hint for one lane. */\n readonly wake: (threadId: ThreadId) => Effect.Effect<void, OperationDenied>;\n /**\n * Scan-based DUR-017/OPS-001 obligation report: every nonterminal Submission with what it\n * is visibly blocked on, its age, and a threshold-classified severity. Never a daemon —\n * hosts run it periodically and own the alert loop (OPS-002).\n */\n readonly scanObligations: (\n thresholds: ObligationThresholds,\n ) => Effect.Effect<ObligationReport, DurableObligationFailure>;\n /** Drain a Thread's claimable heads under the host's WakeScheduler processing boundary. */\n readonly processThread: <\n InputSchema extends Schema.Top,\n OutputSchema extends Schema.Top,\n Instructions,\n Tools extends Record<string, Tool.Any>,\n Provider,\n ModelProvides,\n ModelRequires,\n InstructionError = InstructionErrorOf<Instructions, InputSchema[\"Type\"]>,\n InstructionRequirements = InstructionRequirementsOf<Instructions, InputSchema[\"Type\"]>,\n RunDispositionValue extends\n | RunDispositionDeclaration<OutputSchema[\"Type\"], Schema.Top>\n | undefined = undefined,\n InputPromptValue extends\n | InputPromptSource<InputSchema[\"Type\"], unknown, unknown>\n | undefined = undefined,\n UpdatesSchema extends Schema.Top | undefined = undefined,\n >(\n agent: RuntimeBinding<\n InputSchema,\n OutputSchema,\n Instructions,\n Tools,\n Provider,\n ModelProvides,\n ModelRequires,\n InstructionError,\n InstructionRequirements,\n RunDispositionValue,\n InputPromptValue,\n UpdatesSchema\n >,\n threadId: ThreadId,\n ) => Effect.Effect<\n ReadonlyArray<Settlement>,\n DurableWorkerFailure | DurableBindingFailure,\n DurableWorkerRequirements<\n RuntimeBinding<\n InputSchema,\n OutputSchema,\n Instructions,\n Tools,\n Provider,\n ModelProvides,\n ModelRequires,\n InstructionError,\n InstructionRequirements,\n RunDispositionValue,\n InputPromptValue,\n UpdatesSchema\n >,\n InstructionRequirements\n >\n >;\n /** Drain a Thread using registered bindings under the same host processing boundary. */\n readonly processThreadResolved: (\n threadId: ThreadId,\n ) => Effect.Effect<ReadonlyArray<Settlement>, DurableWorkerFailure | DurableBindingFailure>;\n /**\n * Advance the FIFO head under the host's WakeScheduler processing boundary, closing its\n * Attempt resources before returning. With an opted-in SubmissionScheduling policy, a complete\n * Turn may hand off to the next same-Agent input;\n * the returned Settlement identifies the Submission actually completed. Each Attempt closes\n * before the next is claimed, and deferred Runs retain their original obligations. A vacant,\n * owned, unknown, or suspended head returns None and leaves accepted work pending.\n * Ready input may join this Run through the existing Turn seams and settle with its head.\n * Interruption ends only this Attempt; ownership cleanup uses its latest renewed token.\n * A trusted host may supply `yieldAfter` to return None before the next Turn's context\n * preparation, committing any completed Turn first. This releases ownership without settling or resetting the durable\n * Run deadline. It is a cooperative scheduling deadline, not a hard interruption timeout.\n */\n readonly processThreadHead: (\n threadId: ThreadId,\n options?: { readonly yieldAfter?: DateTime.Utc },\n ) => Effect.Effect<Option.Option<Settlement>, DurableWorkerFailure | DurableBindingFailure>;\n readonly runResolvedWorker: Effect.Effect<void, DurableWorkerFailure | DurableBindingFailure>;\n /**\n * Recover each pending Thread independently. History/child failures, defects and the\n * configured timeout return one RecoveryBlocked per Thread; hosts must retain visibility\n * outside execution history and exclude those Threads from claims. Ledger scan failures,\n * owner interruption and injected crash boundaries still fail the whole sweep.\n * Optional Thread selection lets a host recover its selected dispatch lane independently\n * of old cleanup. Unselected Threads are neither read nor reported by this call.\n */\n readonly runRecovery: (\n options?: RecoverySweepOptions,\n ) => Effect.Effect<RecoverySweepResult, DurableWorkerFailure>;\n /** Apply one recovery decision; untouched ready input is deferred to its worker claim. */\n readonly recoverSubmission: (\n submissionId: SubmissionId,\n ) => Effect.Effect<RecoveryReport, DurableWorkerFailure>;\n /** Trusted host inventory; discovery grants no execution or disclosure authority. */\n readonly discoverWork: (\n request: ThreadWorkRequest,\n ) => Effect.Effect<ThreadWorkPage, ThreadStoreError | WorkDiscoveryUnavailable>;\n readonly discoverWorkThreads: (\n request: WorkThreadsRequest,\n ) => Effect.Effect<WorkThreadsPage, ThreadStoreError>;\n /** Explicit, resumable maintenance. Missing indexes never trigger implicit history reads. */\n readonly rebuildWorkIndex: (\n request: WorkIndexRebuildRequest,\n ) => Effect.Effect<WorkIndexProgress, ThreadStoreError | WorkDiscoveryUnavailable>;\n readonly recoverWork: (\n request: WorkRecoveryRequest,\n ) => Effect.Effect<WorkRecoveryReport, DurableWorkerFailure>;\n }\n>()(\"@effect-agent/thread/DurableAgentRuntime\") {\n /**\n * Resolve typed registrations and capture their services once in the runtime's Layer Scope.\n * Every claimed head must select exactly one current registered Definition. Worker calls\n * cannot replace these registrations or their captured services. Tool authorization is required.\n */\n static layerRegistered<const Entries extends ReadonlyArray<AgentRegistration>>(\n registrations: Entries,\n ) {\n return Layer.effect(DurableAgentRuntime)(\n Effect.flatMap(compileRegistrations(registrations), make),\n );\n }\n\n /** Construct from precompiled registrations whose captured resources belong to the caller's Scope. */\n static layerWithBindings(bindings: ReadonlyArray<ResolvedBinding>) {\n return Layer.effect(DurableAgentRuntime)(make(bindings));\n }\n\n /** Captures optional context preparation; Tool authorization remains required in `R`. */\n static readonly layerWithServices: Layer.Layer<\n DurableAgentRuntime,\n never,\n | SubmissionLedger\n | ThreadStore\n | RunStorage\n | StorageOwner\n | WakeScheduler\n | DurableRuntimeFailpoint\n | DurableRuntimeConfig\n | ToolReconciler\n | RunToolAuthorization\n | Crypto.Crypto\n > = DurableAgentRuntime.layerWithBindings([]);\n\n /** Compatible defaults: no host prompt transformation and allow-all Tool authorization. */\n static readonly layer: Layer.Layer<\n DurableAgentRuntime,\n never,\n | SubmissionLedger\n | ThreadStore\n | RunStorage\n | StorageOwner\n | WakeScheduler\n | DurableRuntimeFailpoint\n | DurableRuntimeConfig\n | ToolReconciler\n | Crypto.Crypto\n > = DurableAgentRuntime.layerWithServices.pipe(\n Layer.provide([RunContextPreparationPassthrough, RunToolAuthorization.allowAll]),\n );\n}\n"],"mappings":"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"}