@yielded/agent 0.1.0-beta.182 → 0.1.0-beta.183
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{Admin-C4mPa0M2.d.mts → Admin-BgCHCGSl.d.mts} +5 -5
- package/dist/{AgentRuntime-CVsnQBPe.d.mts → AgentRuntime-DhRchFzv.d.mts} +4 -1
- package/dist/{AgentRuntime-1OjlOCa9.mjs → AgentRuntime-ILtyHuQG.mjs} +52 -40
- package/dist/AgentRuntime-ILtyHuQG.mjs.map +1 -0
- package/dist/{Digest-DjUgS5PG.d.mts → Digest-1iVcDLVm.d.mts} +2 -2
- package/dist/{Digest-ft4ku9pj.mjs → Digest-CzLJcsWv.mjs} +2 -2
- package/dist/{Digest-ft4ku9pj.mjs.map → Digest-CzLJcsWv.mjs.map} +1 -1
- package/dist/{DurableAgentRuntime-D2I_T2Yt.mjs → DurableAgentRuntime-Cj263rW9.mjs} +20 -55
- package/dist/DurableAgentRuntime-Cj263rW9.mjs.map +1 -0
- package/dist/{EventSource-gc82d-f6.d.mts → EventSource-CaA6RAtC.d.mts} +3 -3
- package/dist/{MessageDelivery-DrQKvh93.d.mts → MessageDelivery-rlLpakO8.d.mts} +43 -43
- package/dist/{PreparedInputAdmission-CrqdFUd8.d.mts → PreparedInputAdmission-DjbWz2lW.d.mts} +4 -4
- package/dist/{RecordFormat-BNiLpe43.d.mts → RecordFormat-CjMl0uu8.d.mts} +2 -2
- package/dist/{Records-BTnGRdcf.d.mts → Records-BP67Yz6n.d.mts} +20 -8
- package/dist/{Records-CZRedCE7.mjs → Records-bbGVHprv.mjs} +14 -10
- package/dist/Records-bbGVHprv.mjs.map +1 -0
- package/dist/{RunContinuation-DMbA81sZ.d.mts → RunContinuation-CIJRN_vC.d.mts} +4 -4
- package/dist/{RunContinuation-DWiO2K9D.mjs → RunContinuation-DJ6kkbQG.mjs} +17 -58
- package/dist/RunContinuation-DJ6kkbQG.mjs.map +1 -0
- package/dist/{RunJournal-oJLo-pjS.mjs → RunJournal-DQr2dUgg.mjs} +4 -7
- package/dist/RunJournal-DQr2dUgg.mjs.map +1 -0
- package/dist/{RunStorage-DlfvMfHM.mjs → RunStorage-DblN-cmM.mjs} +2 -2
- package/dist/{RunStorage-DlfvMfHM.mjs.map → RunStorage-DblN-cmM.mjs.map} +1 -1
- package/dist/{Schedule-CDgTz0vj.d.mts → Schedule-CVLtl5rP.d.mts} +2 -2
- package/dist/{Scheduling-BebkRVc2.mjs → Scheduling-B6l0lWdr.mjs} +3 -3
- package/dist/{Scheduling-BebkRVc2.mjs.map → Scheduling-B6l0lWdr.mjs.map} +1 -1
- package/dist/{Subagent-BRiDyUS4.mjs → Subagent-Bm842K7J.mjs} +43 -17
- package/dist/Subagent-Bm842K7J.mjs.map +1 -0
- package/dist/{Subagent-FypBXZP1.d.mts → Subagent-CWWmA1UQ.d.mts} +15 -3
- package/dist/{Subscription-Bx0LiX3x.d.mts → Subscription-BRsNy0TA.d.mts} +4 -4
- package/dist/{SubscriptionInput-CBFCfuOF.d.mts → SubscriptionInput-ClCaW_kX.d.mts} +3 -3
- package/dist/{ThreadImport-DlCLjRHK.mjs → ThreadImport-CkPAxXU5.mjs} +7 -7
- package/dist/{ThreadImport-DlCLjRHK.mjs.map → ThreadImport-CkPAxXU5.mjs.map} +1 -1
- package/dist/{ThreadImport-DTV_ario.d.mts → ThreadImport-DtRNoHIr.d.mts} +5 -5
- package/dist/{ThreadStore-D2rqtt7k.mjs → ThreadStore-C_ofHc7h.mjs} +4 -4
- package/dist/{ThreadStore-D2rqtt7k.mjs.map → ThreadStore-C_ofHc7h.mjs.map} +1 -1
- package/dist/{ThreadTransfer-BFolkpEp.mjs → ThreadTransfer-C_TRuo_9.mjs} +4 -4
- package/dist/{ThreadTransfer-BFolkpEp.mjs.map → ThreadTransfer-C_TRuo_9.mjs.map} +1 -1
- package/dist/{WorkerAdmission-Cxg_REhE.mjs → WorkerAdmission-9Ka3edXj.mjs} +5 -5
- package/dist/{WorkerAdmission-Cxg_REhE.mjs.map → WorkerAdmission-9Ka3edXj.mjs.map} +1 -1
- package/dist/{agent-registration-C6tkQz8r.mjs → agent-registration-7kp1dHT0.mjs} +4 -4
- package/dist/{agent-registration-C6tkQz8r.mjs.map → agent-registration-7kp1dHT0.mjs.map} +1 -1
- package/dist/capabilities/Subagent.d.mts +1 -1
- package/dist/capabilities/Subagent.mjs +1 -1
- package/dist/capabilities/SubagentReservations.d.mts +4 -1
- package/dist/capabilities/SubagentReservations.mjs +4 -1
- package/dist/capabilities/SubagentReservations.mjs.map +1 -1
- package/dist/durable/ActivityStore.d.mts +1 -1
- package/dist/durable/ActivityStore.mjs +1 -1
- package/dist/durable/Admin.d.mts +1 -1
- package/dist/durable/Admin.mjs +1 -1
- package/dist/durable/AgentRegistration.d.mts +1 -1
- package/dist/durable/AgentRegistration.mjs +1 -1
- package/dist/durable/Certification.d.mts +1 -1
- package/dist/durable/CommittedActivity.d.mts +3 -3
- package/dist/durable/CommittedActivity.mjs +3 -3
- package/dist/durable/Digest.d.mts +1 -1
- package/dist/durable/Digest.mjs +1 -1
- package/dist/durable/DurableAgentRuntime.d.mts +1 -1
- package/dist/durable/DurableAgentRuntime.mjs +2 -2
- package/dist/durable/EventSource.d.mts +1 -1
- package/dist/durable/EventSource.mjs +1 -1
- package/dist/durable/GitHubWorkflowSource.d.mts +3 -3
- package/dist/durable/LifecyclePublication.d.mts +1 -1
- package/dist/durable/LifecyclePublication.mjs +2 -2
- package/dist/durable/MessageDelivery.d.mts +1 -1
- package/dist/durable/MessageDelivery.mjs +2 -2
- package/dist/durable/MessageDeliveryStoreConformance.d.mts +4 -4
- package/dist/durable/MessageDeliveryStoreConformance.mjs +2 -2
- package/dist/durable/PersistentHistory.d.mts +1 -1
- package/dist/durable/PersistentHistory.mjs +4 -4
- package/dist/durable/PreparedInputAdmission.d.mts +1 -1
- package/dist/durable/RecordFormat.d.mts +1 -1
- package/dist/durable/RecordFormat.mjs +1 -1
- package/dist/durable/Records.d.mts +1 -1
- package/dist/durable/Records.mjs +1 -1
- package/dist/durable/Recovery.d.mts +1 -1
- package/dist/durable/Recovery.mjs +1 -1
- package/dist/durable/RunContinuation.d.mts +3 -3
- package/dist/durable/RunContinuation.mjs +3 -3
- package/dist/durable/RunJournal.d.mts +1 -1
- package/dist/durable/RunJournal.mjs +1 -1
- package/dist/durable/RunStorage.d.mts +1 -1
- package/dist/durable/RunStorage.mjs +1 -1
- package/dist/durable/Schedule.d.mts +1 -1
- package/dist/durable/Schedule.mjs +1 -1
- package/dist/durable/ScheduleStoreConformance.d.mts +1 -1
- package/dist/durable/ScheduleStoreConformance.mjs +1 -1
- package/dist/durable/ScheduleTransition.d.mts +1 -1
- package/dist/durable/ScheduleTransition.mjs +1 -1
- package/dist/durable/Scheduling.d.mts +3 -3
- package/dist/durable/Scheduling.mjs +1 -1
- package/dist/durable/SettlementPublisher.d.mts +1 -1
- package/dist/durable/SettlementPublisher.mjs +3 -3
- package/dist/durable/SubmissionLedger.d.mts +1 -1
- package/dist/durable/SubmissionLedger.mjs +2 -2
- package/dist/durable/SubmissionLedgerConformance.d.mts +2 -2
- package/dist/durable/SubmissionLedgerConformance.mjs +5 -5
- package/dist/durable/SubmissionStatus.d.mts +1 -1
- package/dist/durable/Subscription.d.mts +1 -1
- package/dist/durable/Subscription.mjs +1 -1
- package/dist/durable/SubscriptionInput.d.mts +1 -1
- package/dist/durable/SubscriptionInput.mjs +2 -2
- package/dist/durable/SubscriptionStoreConformance.d.mts +1 -1
- package/dist/durable/SubscriptionStoreConformance.mjs +1 -1
- package/dist/durable/SubscriptionTools.d.mts +4 -4
- package/dist/durable/SubscriptionTransition.d.mts +1 -1
- package/dist/durable/SubscriptionTransition.mjs +1 -1
- package/dist/durable/Subscriptions.d.mts +6 -6
- package/dist/durable/Subscriptions.mjs +2 -2
- package/dist/durable/ThreadArchiveRange.d.mts +1 -1
- package/dist/durable/ThreadArchiveRange.mjs +1 -1
- package/dist/durable/ThreadContextHistory.d.mts +1 -1
- package/dist/durable/ThreadContextHistory.mjs +2 -2
- package/dist/durable/ThreadContextHistoryProjection.d.mts +1 -1
- package/dist/durable/ThreadContextHistoryProjection.mjs +1 -1
- package/dist/durable/ThreadImport.d.mts +1 -1
- package/dist/durable/ThreadImport.mjs +1 -1
- package/dist/durable/ThreadInvariants.d.mts +3 -3
- package/dist/durable/ThreadInvariants.mjs +4 -4
- package/dist/durable/ThreadProjection.d.mts +1 -1
- package/dist/durable/ThreadProjection.mjs +1 -1
- package/dist/durable/ThreadProjectionMaintenance.d.mts +1 -1
- package/dist/durable/ThreadReader.d.mts +1 -1
- package/dist/durable/ThreadReader.mjs +1 -1
- package/dist/durable/ThreadStore.d.mts +2 -2
- package/dist/durable/ThreadStore.mjs +2 -2
- package/dist/durable/ThreadStoreConformance.d.mts +2 -2
- package/dist/durable/ThreadStoreConformance.mjs +4 -4
- package/dist/durable/ThreadTransfer.d.mts +2 -2
- package/dist/durable/ThreadTransfer.mjs +1 -1
- package/dist/durable/ThreadWork.d.mts +1 -1
- package/dist/durable/ThreadWork.mjs +5 -5
- package/dist/durable/ToolReconciler.mjs +1 -1
- package/dist/durable/WorkerAdmission.d.mts +2 -2
- package/dist/durable/WorkerAdmission.mjs +1 -1
- package/dist/durable/WorkerHost.d.mts +2 -2
- package/dist/engine/AgentRuntime.d.mts +1 -1
- package/dist/engine/AgentRuntime.mjs +1 -1
- package/dist/index.d.mts +14 -14
- package/dist/index.mjs +12 -12
- package/dist/{run-context-reader-CIdG5tdJ.d.mts → run-context-reader-DEU4REfD.d.mts} +3 -3
- package/package.json +1 -1
- package/src/capabilities/Subagent.ts +83 -28
- package/src/capabilities/SubagentReservations.ts +4 -1
- package/src/capabilities/internal/subagent-contract.ts +23 -3
- package/src/durable/DurableAgentRuntime.ts +24 -10
- package/src/durable/Records.ts +21 -15
- package/src/durable/RunContinuation.ts +54 -125
- package/src/durable/RunJournal.ts +4 -12
- package/src/durable/internal/history-prompt.ts +10 -4
- package/src/durable/internal/initial-context.ts +1 -1
- package/src/durable/internal/prompt-history-cache.ts +8 -63
- package/src/engine/internal/agent-runtime.ts +379 -381
- package/dist/AgentRuntime-1OjlOCa9.mjs.map +0 -1
- package/dist/DurableAgentRuntime-D2I_T2Yt.mjs.map +0 -1
- package/dist/Records-CZRedCE7.mjs.map +0 -1
- package/dist/RunContinuation-DWiO2K9D.mjs.map +0 -1
- package/dist/RunJournal-oJLo-pjS.mjs.map +0 -1
- package/dist/Subagent-BRiDyUS4.mjs.map +0 -1
- package/dist/json-BlJVQZxN.mjs +0 -15
- package/dist/json-BlJVQZxN.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RunJournal-DQr2dUgg.mjs","names":["makeRecordId"],"sources":["../src/durable/internal/journal-metadata.ts","../src/durable/internal/usage-totals.ts","../src/durable/RunJournal.ts"],"sourcesContent":["import { Brand } from \"effect\";\n\nimport { type RunId, type ToolCallId } from \"../../core/Identifiers.ts\";\nimport {\n type RecordId,\n type CanonicalRecordEnvelope,\n type PromptRecordEnvelope,\n type CompactionCreated,\n type ToolCallSettled,\n} from \"../Records.ts\";\n\n// These constructors produce nonempty strings from fixed prefixes or validated nonempty IDs.\n// Keep the canonical Schemas as the validation boundary for incoming and persisted values.\nconst makeRecordId = Brand.nominal<RecordId>();\n\n/** Deterministic canonical record identity of one Turn's Tool result. */\nexport const toolCallSettledRecordId = (\n runId: RunId,\n turn: number,\n toolCallId: ToolCallId,\n): RecordId => makeRecordId(`tool-settled:${runId}:${turn}:${toolCallId}`);\n\nexport type JournalRecordEnvelope = CanonicalRecordEnvelope | PromptRecordEnvelope;\n\n/** Metadata for one exact canonical prefix, including the exact selected Run evidence. */\nexport interface JournalMetadata {\n readonly ownerRunId: RunId | undefined;\n readonly firstSequenceByRun: ReadonlyMap<string, number>;\n readonly responseSequencesByRun: ReadonlyMap<string, ReadonlyArray<number>>;\n readonly terminalSequenceByRun: ReadonlyMap<string, number>;\n readonly settledSpans: ReadonlyArray<{\n readonly from: number;\n readonly to: number;\n readonly runId: RunId;\n readonly recordId: string;\n }>;\n readonly settledSequenceById: ReadonlyMap<string, number>;\n readonly settledToolCallRecordIds: ReadonlySet<string>;\n readonly settledById: ReadonlyMap<\n string,\n Pick<ToolCallSettled, \"isFailure\" | \"budgetRejected\" | \"toolSelection\">\n >;\n readonly compactions: ReadonlyArray<{\n readonly payload: CompactionCreated;\n readonly sequence: number;\n }>;\n}\n\n/**\n * Attempt-local metadata collector. Feed every validated record exactly once, in canonical order,\n * including records omitted from the control view. Calling finish transfers its collections;\n * discard the collector afterward. The metadata may only accompany a replay stream bounded at\n * that same captured tail. A later prefix requires a new collector.\n */\nexport const makeJournalMetadata = (ownerRunId: RunId | undefined) => {\n const firstSequenceByRun = new Map<string, number>();\n\n const responseSequencesByRun = new Map<string, Array<number>>();\n\n const declarationsByRun = new Map<\n RunId,\n Array<{\n readonly sequence: number;\n readonly turn: number;\n readonly callIds: ReadonlyArray<string>;\n }>\n >();\n\n const terminalSequenceByRun = new Map<string, number>();\n\n const settledSpans: Array<{\n readonly from: number;\n readonly to: number;\n readonly runId: RunId;\n readonly recordId: string;\n }> = [];\n\n const settledSequenceById = new Map<string, number>();\n\n const settledToolCallRecordIds = new Set<string>();\n\n const settledById = new Map<\n string,\n Pick<ToolCallSettled, \"isFailure\" | \"budgetRejected\" | \"toolSelection\">\n >();\n\n const compactions: Array<{ readonly payload: CompactionCreated; readonly sequence: number }> = [];\n\n return {\n add: (envelope: JournalRecordEnvelope): void => {\n const payload = envelope.record.payload;\n\n if (\n (payload._tag === \"RunCompleted\" ||\n payload._tag === \"RunFailed\" ||\n payload._tag === \"SubmissionSettled\") &&\n payload.runId !== undefined &&\n !terminalSequenceByRun.has(payload.runId)\n )\n terminalSequenceByRun.set(payload.runId, envelope.sequence);\n if (payload._tag === \"CompactionCreated\") {\n compactions.push({ payload, sequence: envelope.sequence });\n\n return;\n }\n if (\n \"runId\" in payload &&\n typeof payload.runId === \"string\" &&\n !firstSequenceByRun.has(payload.runId)\n )\n firstSequenceByRun.set(payload.runId, envelope.sequence);\n if (payload._tag === \"ModelResponseRecorded\") {\n const sequences = responseSequencesByRun.get(payload.runId) ?? [];\n\n sequences.push(envelope.sequence);\n responseSequencesByRun.set(payload.runId, sequences);\n\n const callIds =\n \"toolOperations\" in payload\n ? payload.toolOperations.map((operation) => operation.toolCallId)\n : payload.messages.content.flatMap((message) =>\n message.role === \"assistant\"\n ? message.content.flatMap((part) =>\n part.type === \"tool-call\" && !part.providerExecuted ? [part.id] : [],\n )\n : [],\n );\n\n if (callIds.length > 0) {\n const declarations = declarationsByRun.get(payload.runId) ?? [];\n\n // Retain references to bounded source identities, not an expanded settlement-ID\n // string and Map entry for every declared operation in the context.\n declarations.push({ sequence: envelope.sequence, turn: payload.turn, callIds });\n declarationsByRun.set(payload.runId, declarations);\n }\n } else if (payload._tag === \"ToolCallSettled\") {\n settledToolCallRecordIds.add(envelope.record.recordId);\n settledSequenceById.set(envelope.record.recordId, envelope.sequence);\n if (payload.runId === ownerRunId)\n settledById.set(envelope.record.recordId, {\n isFailure: payload.isFailure,\n ...(!(\"toolSelection\" in payload) || payload.toolSelection === undefined\n ? {}\n : { toolSelection: payload.toolSelection }),\n ...(!(\"budgetRejected\" in payload) || payload.budgetRejected === undefined\n ? {}\n : { budgetRejected: payload.budgetRejected }),\n });\n\n const from = declarationsByRun\n .get(payload.runId)\n ?.findLast(\n (declaration) =>\n declaration.callIds.includes(payload.toolCallId) &&\n toolCallSettledRecordId(payload.runId, declaration.turn, payload.toolCallId) ===\n envelope.record.recordId,\n )?.sequence;\n\n if (from !== undefined && from < envelope.sequence)\n settledSpans.push({\n from,\n to: envelope.sequence,\n runId: payload.runId,\n recordId: envelope.record.recordId,\n });\n }\n },\n finish: (): JournalMetadata => {\n responseSequencesByRun.forEach((sequences, runId) => {\n responseSequencesByRun.set(runId, sequences.slice());\n });\n\n return {\n ownerRunId,\n firstSequenceByRun,\n responseSequencesByRun,\n terminalSequenceByRun,\n settledSpans,\n settledSequenceById,\n settledToolCallRecordIds,\n settledById,\n compactions,\n };\n },\n };\n};\n","import { Effect } from \"effect\";\n\nimport { summarizeModelUsage, type ModelCallUsage } from \"../../core/Usage.ts\";\n\n/** Captured calls are additive and nonnegative; progress does not need attribution groups. */\nexport const continuationUsage = (calls: ReadonlyArray<ModelCallUsage>) =>\n Effect.suspend(() => {\n let inputTokens = 0;\n let outputTokens = 0;\n let costMicrousd = 0;\n let knownWebSearchCalls = 0;\n\n for (const call of calls) {\n inputTokens += call.inputTokens.total;\n outputTokens += call.outputTokens.total;\n costMicrousd += call.costMicrousd;\n knownWebSearchCalls += call.webSearchCalls ?? 0;\n }\n if (\n Number.isSafeInteger(inputTokens) &&\n Number.isSafeInteger(outputTokens) &&\n Number.isSafeInteger(costMicrousd) &&\n Number.isSafeInteger(knownWebSearchCalls)\n )\n return Effect.succeed({ modelCalls: calls.length, inputTokens, outputTokens, costMicrousd });\n\n // Safe global sums bound every component/group. On overflow retain the full validator,\n // including groups whose hosted-search coverage differs from the aggregate's coverage.\n return Effect.map(summarizeModelUsage(calls), (summary) => ({\n modelCalls: summary.modelCalls,\n inputTokens: summary.inputTokens.total,\n outputTokens: summary.outputTokens.total,\n costMicrousd: summary.costMicrousd,\n }));\n });\n","import { Brand, Effect, Predicate, Schema, Stream, type DateTime } from \"effect\";\nimport { Prompt } from \"effect/ai\";\n\nimport {\n type RunId,\n type TurnId,\n ThreadId,\n ToolCallId,\n type SubmissionId,\n} from \"../core/Identifiers.ts\";\nimport { type ExhaustedLimit } from \"../core/RunEvent.ts\";\nimport { RunPolicyUsage } from \"../core/RunPolicyUsage.ts\";\nimport { type Selection, type Snapshot } from \"../core/ToolExposure.ts\";\nimport type { ToolParameterRejection } from \"../core/ToolResult.ts\";\nimport { type ModelCallUsage, summarizeModelUsage, type RunUsageSummary } from \"../core/Usage.ts\";\nimport type { WorkerRef } from \"../core/Worker.ts\";\nimport {\n CLEARED_TOOL_RESULT,\n COMPACTION_SUMMARY_PREFIX,\n contextWindowId,\n contextWindowMessage,\n} from \"../engine/Compaction.ts\";\nimport type { RunTurnToolResult } from \"../engine/RunOptions.ts\";\nimport { digestJson } from \"./Digest.ts\";\nimport {\n makeJournalMetadata,\n toolCallSettledRecordId,\n type JournalMetadata,\n type JournalRecordEnvelope,\n} from \"./internal/journal-metadata.ts\";\nimport { continuationUsage } from \"./internal/usage-totals.ts\";\nimport {\n type BatchId,\n type RecordId,\n type CompactionCreated,\n CanonicalBatch,\n ModelResponseRecorded,\n MAX_PERSISTED_JSON_BYTES,\n type PersistedJson,\n RecordEnvelope,\n RunCompleted,\n ToolCallSettled,\n type CanonicalRecordEnvelope,\n CanonicalSequence,\n type DeploymentId,\n type ProducerId,\n} from \"./Records.ts\";\nimport { IdempotencyKey } from \"./SubmissionLedger.ts\";\n\n/** A canonical record could not be projected into Run/Prompt state. */\nexport class RunJournalError extends Schema.TaggedError<RunJournalError>()(\"RunJournalError\", {\n message: Schema.String,\n cause: Schema.optionalKey(Schema.Defect()),\n}) {}\n\nconst journalError = (message: string, cause?: unknown): RunJournalError =>\n cause === undefined\n ? RunJournalError.make({ message })\n : RunJournalError.make({ message, cause });\n\n// These constructors produce nonempty strings from fixed prefixes or validated nonempty IDs.\n// Keep the canonical Schemas as the validation boundary for incoming and persisted values.\nconst makeRunId = Brand.nominal<RunId>();\nconst makeTurnId = Brand.nominal<TurnId>();\nconst makeBatchId = Brand.nominal<BatchId>();\nconst makeRecordId = Brand.nominal<RecordId>();\n\n/**\n * Deterministic Run identity pinned per Submission (plan §Coordinator flow). Every Attempt of one\n * Submission shares this Run identity, so canonical per-Turn records from different Attempts\n * belong to one logical Run.\n */\nexport const runIdForSubmission = (submissionId: SubmissionId): RunId =>\n makeRunId(`run:${submissionId}`);\n\n/** Stable canonical clock identity shared by every Attempt of one Run. */\nexport const runStartedRecordId = (runId: RunId): RecordId => makeRecordId(`run-start:${runId}`);\n\nexport const runStartedBatchId = (runId: RunId): BatchId => makeBatchId(`run-start:${runId}`);\n\nexport const runDurationRecordId = (runId: RunId): RecordId =>\n makeRecordId(`run-duration:${runId}`);\n\nexport const runDurationBatchId = (runId: RunId): BatchId => makeBatchId(`run-duration:${runId}`);\n\n/** Deterministic Turn identity: Attempt-independent for one (Run, canonical turn) pair. */\nexport const turnIdForRun = (runId: RunId, turn: number): TurnId =>\n makeTurnId(`turn:${runId}:${turn}`);\n\n/** Deterministic batch identity of a response committed atomically with its closed Turn outcomes. */\nexport const turnBatchId = (runId: RunId, turn: number): BatchId =>\n makeBatchId(`turn:${runId}:${turn}`);\n\n/**\n * Deterministic batch identity of a tool-declaring Turn's RESPONSE commit (plan §2.1 commit 1):\n * the assistant response plus pending steering becomes canonical before approval preflight and\n * dispatch fencing, or when readonly execution first requires a persisted call-scoped capability.\n * Unsettled declarations conservatively record possible execution.\n */\nexport const turnResponseBatchId = (runId: RunId, turn: number): BatchId =>\n makeBatchId(`turn-response:${runId}:${turn}`);\n\n/**\n * Deterministic batch identity of a tool-declaring Turn's RESULTS commit (plan §2.1 commit 5):\n * every `ToolCallSettled` record of the Turn, in declaration order, model-visible atomically.\n */\nexport const turnResultsBatchId = (runId: RunId, turn: number): BatchId =>\n makeBatchId(`turn-results:${runId}:${turn}`);\n\n/**\n * Deterministic per-call late-settle batch identity used by the resolution path when one\n * recovered/resolved call settles outside its Turn's results batch. Record identity\n * (`tool-settled:{runId}:{turn}:{toolCallId}`) dedupes double-settles across both paths.\n */\nexport const toolCallResultBatchId = (\n runId: RunId,\n turn: number,\n toolCallId: ToolCallId,\n): BatchId => makeBatchId(`turn-results:${runId}:${turn}:${toolCallId}`);\n\n/**\n * Deterministic identity of one pre-Turn compaction record (RUN-026,\n * RUN-026). Keyed by Run, Turn, and kind — the engine performs at most one\n * threshold compaction per Turn plus at most one overflow-forced summarize,\n * so a superseding Attempt that re-decides the same compaction replays the\n * batch identity instead of duplicating the record.\n */\nexport const compactionRecordId = (\n runId: RunId,\n turn: number,\n kind: \"clear-tool-results\" | \"summarize\" | \"rollover\",\n): RecordId => makeRecordId(`compaction:${runId}:${turn}:${kind}`);\n\n/** Deterministic batch identity of one compaction append (same string as its record id). */\nexport const compactionBatchId = (\n runId: RunId,\n turn: number,\n kind: \"clear-tool-results\" | \"summarize\" | \"rollover\",\n): BatchId => makeBatchId(`compaction:${runId}:${turn}:${kind}`);\n\n/** Deterministic canonical record identity of one Turn's `ModelResponseRecorded` record. */\nexport const modelResponseRecordId = (runId: RunId, turn: number): RecordId =>\n makeRecordId(`model-response:${runId}:${turn}`);\n\n/** Terminal Tool completion marker committed atomically with its settled Tool result. */\nexport const runCompletedRecordId = (runId: RunId): RecordId =>\n makeRecordId(`run-completed:${runId}`);\n\n/** Native source reservation locator, including the first admission of a continuing worker. */\nexport const workerInputRecordId = (messageId: IdempotencyKey): RecordId =>\n makeRecordId(`worker-input:${messageId}`);\n\n/** Source-owned first reservation; native worker identity is minted from its first message. */\nexport const firstWorkerInputRecordId = (worker: WorkerRef): RecordId =>\n makeRecordId(`worker-input:${worker.threadId}`);\n\nexport const workerOriginRecordId = (threadId: ThreadId): RecordId =>\n makeRecordId(`worker-origin:${threadId}`);\n\nexport const workerReportRecordId = (messageId: IdempotencyKey): RecordId =>\n makeRecordId(`worker-report:${messageId}`);\n\nexport const peerMessageRecordId = (messageId: IdempotencyKey): RecordId => makeRecordId(messageId);\n\n/** Same immutable tuple used by native update admission; callers never parse its hash. */\nexport const agentUpdateRecordId = Effect.fnUntraced(function* (\n threadId: ThreadId,\n runId: RunId,\n updateId: IdempotencyKey,\n) {\n return makeRecordId(`agent-update:${yield* digestJson([threadId, runId, updateId])}`);\n});\n\n/** Deterministic canonical record identity of one Turn's `ToolCallSettled` record. */\nexport { toolCallSettledRecordId };\n\n/** Deterministic batch identity of one Turn's `ToolCallUnknown` marking append. */\nexport const markUnknownBatchId = (submissionId: SubmissionId, turn: number): BatchId =>\n makeBatchId(`mark-unknown:${submissionId}:${turn}`);\n\n/** Deterministic canonical record identity of one Tool Call's `ToolCallUnknown` record. */\nexport const toolCallUnknownRecordId = (\n runId: RunId,\n turn: number,\n toolCallId: ToolCallId,\n): RecordId => makeRecordId(`tool-unknown:${runId}:${turn}:${toolCallId}`);\n\n/** Deterministic batch identity of one Tool Call's resolution append (DUR-017). */\nexport const toolCallResolutionBatchId = (\n submissionId: SubmissionId,\n toolCallId: ToolCallId,\n): BatchId => makeBatchId(`resolve:${submissionId}:${toolCallId}`);\n\n/** Deterministic canonical record identity of one Tool Call's `ToolCallResolved` record. */\nexport const toolCallResolvedRecordId = (\n runId: RunId,\n turn: number,\n toolCallId: ToolCallId,\n): RecordId => makeRecordId(`tool-resolved:${runId}:${turn}:${toolCallId}`);\n\n/**\n * Deterministic identity of one accepted Durable Step result. The one-record batch reuses the\n * SAME string, so batch idempotency plus the epoch fence realize the durability §11\n * racing-writers rule: only the fenced winner's record commits; the loser replays it.\n * A versioned JSON tuple keeps separator characters in each identity component distinct.\n * Replay derives this key from the structured payload, including records with legacy IDs.\n */\nexport const toolStepSettledRecordId = (\n runId: RunId,\n toolCallId: ToolCallId,\n stepName: string,\n): RecordId => makeRecordId(JSON.stringify([\"step@2\", runId, toolCallId, stepName]));\n\n/** Deterministic batch identity of one Durable Step commit (same string as its record id). */\nexport const toolStepSettledBatchId = (\n runId: RunId,\n toolCallId: ToolCallId,\n stepName: string,\n): BatchId => makeBatchId(toolStepSettledRecordId(runId, toolCallId, stepName));\n\n/** Deterministic batch identity of one Turn's canonical approval-request append (plan §2.6). */\nexport const turnApprovalsBatchId = (runId: RunId, turn: number): BatchId =>\n makeBatchId(`turn-approvals:${runId}:${turn}`);\n\n/** Deterministic canonical record identity of one Tool Call's `ToolApprovalRequested` record. */\nexport const toolApprovalRequestRecordId = (\n runId: RunId,\n turn: number,\n toolCallId: ToolCallId,\n): RecordId => makeRecordId(`approval-request:${runId}:${turn}:${toolCallId}`);\n\n/** Deterministic batch identity of one Tool Call's canonical approval-decision append. */\nexport const approvalDecisionBatchId = (\n submissionId: SubmissionId,\n toolCallId: ToolCallId,\n): BatchId => makeBatchId(`approval-decision:${submissionId}:${toolCallId}`);\n\n/** Deterministic canonical record identity of one Tool Call's `ToolApprovalDecided` record. */\nexport const toolApprovalDecisionRecordId = (\n runId: RunId,\n turn: number,\n toolCallId: ToolCallId,\n): RecordId => makeRecordId(`approval-decision:${runId}:${turn}:${toolCallId}`);\n\n/**\n * One conservative incomplete-usage marker per Run, regardless of how often recovery occurs.\n */\nexport const modelResponseInterruptedRecordId = (runId: RunId): RecordId =>\n makeRecordId(`interrupted:${runId}`);\n\n/** Deterministic batch identity of one `ModelResponseInterrupted` append (same string). */\nexport const modelResponseInterruptedBatchId = (runId: RunId): BatchId =>\n makeBatchId(`interrupted:${runId}`);\n\nconst decodeThreadId = Schema.decodeSync(ThreadId);\nconst decodeIdempotencyKey = Schema.decodeSync(IdempotencyKey);\n\n/**\n * Deterministic canonical record identity of one parent Tool Call's `SubagentRequested` record.\n * The one-record batch reuses the same string, so batch\n * idempotency plus the parent epoch fence make the request append exactly-once-canonical.\n */\nexport const subagentRequestedRecordId = (runId: RunId, toolCallId: ToolCallId): RecordId =>\n makeRecordId(`subagent-requested:${runId}:${toolCallId}`);\n\n/** Deterministic batch identity of one `SubagentRequested` append (same string). */\nexport const subagentRequestedBatchId = (runId: RunId, toolCallId: ToolCallId): BatchId =>\n makeBatchId(`subagent-requested:${runId}:${toolCallId}`);\n\n/**\n * Deterministic canonical record identity of one parent Tool Call's `SubagentStarted` record.\n * Recovery's start-link repair appends the EXACT same record\n * under this identity, so a raced repair replays instead of duplicating (SUB-016/SUB-017).\n */\nexport const subagentStartedRecordId = (runId: RunId, toolCallId: ToolCallId): RecordId =>\n makeRecordId(`subagent-started:${runId}:${toolCallId}`);\n\n/** Deterministic batch identity of one `SubagentStarted` append (same string). */\nexport const subagentStartedBatchId = (runId: RunId, toolCallId: ToolCallId): BatchId =>\n makeBatchId(`subagent-started:${runId}:${toolCallId}`);\n\n/**\n * Deterministic batch identity of one parent Tool Call's atomic settlement join: the\n * `SubagentJoined` record plus the parent's `ToolCallSettled` record (its existing\n * `tool-settled:{runId}:{turn}:{toolCallId}` identity) commit as ONE canonical batch (SUB-019).\n */\nexport const subagentJoinBatchId = (runId: RunId, toolCallId: ToolCallId): BatchId =>\n makeBatchId(`subagent-join:${runId}:${toolCallId}`);\n\n/** Deterministic canonical record identity of one parent Tool Call's `SubagentJoined` record. */\nexport const subagentJoinedRecordId = (runId: RunId, toolCallId: ToolCallId): RecordId =>\n makeRecordId(`subagent-joined:${runId}:${toolCallId}`);\n\n/**\n * Deterministic identity of one child Thread's `SubagentLineageRecorded` record.\n * Its own single-record batch reuses the same string so the generic\n * `thread-created:{cid}` batch identity is never contradicted.\n */\nexport const subagentLineageRecordId = (threadId: ThreadId): RecordId =>\n makeRecordId(`subagent-lineage:${threadId}`);\n\n/** Deterministic batch identity of one `SubagentLineageRecorded` append (same string). */\nexport const subagentLineageBatchId = (threadId: ThreadId): BatchId =>\n makeBatchId(`subagent-lineage:${threadId}`);\n\n/**\n * Deterministic intended child Thread identity: the\n * parent Submission and Tool Call pair addresses exactly one child Thread, so a replayed\n * establishment converges on the one existing child (SUB-016).\n */\nexport const childThreadIdFor = (\n parentSubmissionId: SubmissionId,\n toolCallId: ToolCallId,\n): ThreadId => decodeThreadId(`subagent:${parentSubmissionId}:${toolCallId}`);\n\n/**\n * Deterministic child admission idempotency key: scoped to\n * the parent Run and Tool Call identity, so duplicate admission attempts resolve through the\n * ledger's idempotency contract to one child Receipt (SUB-016, SUB-031). The ledger key is\n * bounded (256); coordinator-minted Run and Tool Call identities stay far below that bound.\n */\nexport const childIdempotencyKeyFor = (\n parentRunId: RunId,\n toolCallId: ToolCallId,\n): IdempotencyKey => decodeIdempotencyKey(`subagent:${parentRunId}:${toolCallId}`);\n\nconst decodePersistedPrompt = (\n messages: PersistedJson,\n): Effect.Effect<Prompt.Prompt, RunJournalError> =>\n Schema.decodeUnknownEffect(Prompt.Prompt)(messages).pipe(\n Effect.mapError((cause) =>\n journalError(\"Canonical messages are not Schema-encoded Prompt messages\", cause),\n ),\n );\n\n// Canonical payloads are immutable. Weak keys let retained storage rows own the lifetime\n// while repeated projections of an advancing tail reuse their validated Prompt values.\nconst decodedMessages = new WeakMap<object, Prompt.Prompt>();\n\nconst decodePromptMessages = (messages: PersistedJson | Prompt.Prompt) =>\n Effect.suspend(() => {\n if (Prompt.isPrompt(messages)) return Effect.succeed(messages);\n if (!Predicate.isObject(messages)) return decodePersistedPrompt(messages);\n const cached = decodedMessages.get(messages);\n\n return cached === undefined\n ? decodePersistedPrompt(messages).pipe(\n Effect.tap((prompt) =>\n Effect.sync(() => {\n decodedMessages.set(messages, prompt);\n }),\n ),\n )\n : Effect.succeed(cached);\n });\n\ninterface PendingSettledTool {\n readonly record: Pick<ToolCallSettled, \"toolCallId\" | \"toolName\" | \"result\" | \"isFailure\">;\n /** RUN-026: a `clear-tool-results` compaction covers this record's sequence. */\n readonly cleared: boolean;\n}\n\nconst toolMessageFromSettled = (\n settled: ReadonlyArray<PendingSettledTool>,\n): Effect.Effect<Prompt.Message, RunJournalError> =>\n Effect.try({\n try: () =>\n Prompt.makeMessage(\"tool\", {\n content: settled.map(({ record, cleared }) =>\n Prompt.makePart(\"tool-result\", {\n id: record.toolCallId,\n name: record.toolName,\n result: cleared ? CLEARED_TOOL_RESULT : record.result,\n isFailure: record.isFailure,\n providerExecuted: false,\n }),\n ),\n }),\n catch: (cause) => journalError(\"Unable to rebuild Tool message from ToolCallSettled\", cause),\n });\n\n/**\n * Pure canonical projection of one Run's durable execution state.\n *\n * Prompt reconstruction contract (D8):\n *\n * - `ModelResponseRecorded.messages` carries the Schema-encoded Prompt messages the Turn appended\n * to the model-visible prompt — for the Run's FIRST committed Turn that includes the evaluated\n * instruction and user-input messages, for later Turns only the assistant response messages.\n * Tool messages are excluded from `messages`.\n * - `ToolCallSettled` records (committed in the same per-Turn batch, in declaration order)\n * deterministically rebuild the Turn's single Tool message.\n * - `UserInputRecorded` records input, with a Submission identity only for durable admission. Its\n * Prompt-visible form (instructions + user message) becomes canonical inside the owning Run's\n * first `ModelResponseRecorded`. The projection consumes it only for Run correlation.\n * - Immediate retained history uses `ModelCompleted.history` as a full retained model-context\n * snapshot. Its `messages` separately preserve the successful Run's exact source contribution\n * for recall. It has no resumable Turn state.\n */\n/** Cumulative committed usage of the projected Run (RUN-023 resume re-seed). */\nexport interface RunJournalUsage {\n readonly modelCalls: number;\n /** Known accounting gaps retained across Attempts without changing numeric usage totals. */\n readonly unobservedModelCalls?: number | undefined;\n readonly inputTokens: number;\n readonly outputTokens: number;\n readonly lastInputTokens: number;\n readonly lastOutputTokens: number;\n /** Cumulative persisted spend of the projected Run's committed calls (RUN-023). */\n readonly costMicrousd: number;\n /** Canonical per-call detail used for settlement aggregation and recovery. */\n readonly modelUsage: ReadonlyArray<ModelCallUsage>;\n /** Detailed usage of retired records, grouped without retaining per-call payloads. */\n readonly summarizedModelUsage?: RunUsageSummary | undefined;\n}\n\nexport interface RunJournalProjection {\n readonly toolSelection?: Selection | undefined;\n readonly policyUsage: RunPolicyUsage;\n /** Canonical projection for the requested Run; may end at its resumable Tool declaration. */\n readonly prompt: Prompt.Prompt;\n /** Prior-Run history with model-only unknown results closing incomplete application calls. */\n readonly historyBefore: Prompt.Prompt;\n /** Inclusive range after effective summarize/rollover coverage; earlier used facts stay retained. */\n readonly historyFrom: CanonicalSequence;\n /** Number of canonical Turns already committed for the projected Run. */\n readonly committedTurns: number;\n /** Summed per-call usage of the projected Run's committed responses; zeros for records predating usage capture. */\n readonly usage: RunJournalUsage;\n /** Latest committed context window identity, retained across ownership changes. */\n readonly contextWindowId?: string | undefined;\n /** Canonical evaluated instructions and initial input for this Run, independent of the view. */\n readonly protectedContext?: Prompt.Prompt | undefined;\n /** Last successful singleton Tool awaiting possible context-control interpretation by the engine. */\n readonly pendingContextToolCallId?: string | undefined;\n}\n\nconst initialPolicyUsage = () => ({\n committedTurns: 0,\n toolCalls: 0,\n programmaticToolCalls: 0,\n consecutiveToolFailures: 0,\n finalizationUsed: false,\n modelRestarts: 0,\n});\n\nconst initialUsage = (modelUsage: Array<ModelCallUsage>) => ({\n modelCalls: 0,\n inputTokens: 0,\n outputTokens: 0,\n lastInputTokens: 0,\n lastOutputTokens: 0,\n costMicrousd: 0,\n modelUsage,\n});\n\n/** Internal first-Run projection after exact input/checkpoint-absence verification. The\n * new UserInputRecorded contributes no model message; the engine evaluates it later. */\nexport const initialRunJournal = (history: Prompt.Prompt): RunJournalProjection => ({\n policyUsage: RunPolicyUsage.make(initialPolicyUsage()),\n usage: initialUsage([]),\n prompt: history,\n historyBefore: history,\n historyFrom: CanonicalSequence.make(1),\n committedTurns: 0,\n});\n\ninterface ProjectedResponseUsage {\n readonly modelCalls: number;\n readonly inputTokens: number;\n readonly outputTokens: number;\n readonly costMicrousd: number;\n readonly modelUsage: ReadonlyArray<ModelCallUsage>;\n}\n\nconst projectedResponseUsage = (\n response: ModelResponseRecorded,\n): Effect.Effect<ProjectedResponseUsage, RunJournalError> =>\n Effect.gen(function* () {\n const calls = response.modelUsage;\n\n if (calls === undefined) {\n return {\n modelCalls: 1,\n inputTokens: response.inputTokens ?? 0,\n outputTokens: response.outputTokens ?? 0,\n costMicrousd: response.costMicrousd ?? 0,\n modelUsage: [],\n };\n }\n if (calls.length === 0) {\n return yield* journalError(\"A canonical modelUsage list must not be empty\");\n }\n\n const summary = yield* summarizeModelUsage(calls).pipe(\n Effect.mapError((cause) =>\n journalError(\"Canonical model usage exceeds accounting bounds\", cause),\n ),\n );\n\n if (\n (response.inputTokens !== undefined && response.inputTokens !== summary.inputTokens.total) ||\n (response.outputTokens !== undefined &&\n response.outputTokens !== summary.outputTokens.total) ||\n (response.costMicrousd !== undefined && response.costMicrousd !== summary.costMicrousd)\n ) {\n return yield* journalError(\"Canonical detailed and aggregate model usage disagree\");\n }\n\n return {\n modelCalls: summary.modelCalls,\n inputTokens: summary.inputTokens.total,\n outputTokens: summary.outputTokens.total,\n costMicrousd: summary.costMicrousd,\n modelUsage: calls,\n };\n });\n\nconst addProjectedUsage = (\n field: string,\n left: number,\n right: number,\n): Effect.Effect<number, RunJournalError> =>\n Schema.decodeEffect(Schema.Natural)(left + right).pipe(\n Effect.mapError((cause) =>\n journalError(`Canonical projected usage exceeds safe-integer bounds at ${field}`, cause),\n ),\n );\n\ninterface FoldState {\n readonly all: Array<Prompt.Message>;\n readonly before: Array<Prompt.Message>;\n readonly pendingTools: Array<PendingSettledTool>;\n readonly pendingToolsForRun: boolean;\n readonly committedTurns: number;\n}\n\nconst decodeToolCallId = Schema.decodeSync(ToolCallId);\nconst decodeToolCallIdEffect = Schema.decodeEffect(ToolCallId);\n\nconst declaredApplicationToolCallIds = (prompt: Prompt.Prompt): ReadonlyArray<string> => {\n const ids: Array<string> = [];\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-call\" && !part.providerExecuted) ids.push(part.id);\n }\n }\n\n return ids;\n};\n\n/**\n * Phase 5 audit tags that are prompt-transparent: they carry durability evidence (approval,\n * unknown marking, resolution, Step results, approvals, interruption) but contribute nothing to\n * the model-visible Prompt, and — unlike the P4 tags — they do NOT split a contiguous\n * `ToolCallSettled` group into separate Tool messages, so a late-settled call's audit records\n * cannot change the replayed prompt shape.\n *\n * The four S2 Subagent lifecycle tags are prompt-transparent for the same reason (spec §5/§11):\n * the parent prompt never carries child transcript or establishment evidence — the joined child\n * result reaches the model exclusively through the paired `ToolCallSettled` record, and the\n * child-log lineage record is not model input.\n */\nconst PROMPT_TRANSPARENT_TAGS: ReadonlySet<string> = new Set([\n \"RunPolicyUsageReserved\",\n \"RunStarted\",\n \"RunContextRecorded\",\n \"RunContinuation\",\n \"RunDurationExhausted\",\n \"ToolCallUnknown\",\n \"ToolCallResolved\",\n \"ToolStepSettled\",\n \"ToolApprovalRequested\",\n \"ToolApprovalDecided\",\n \"ModelResponseInterrupted\",\n \"ModelCallAborted\",\n \"SubagentRequested\",\n \"SubagentStarted\",\n \"SubagentJoined\",\n \"SubagentLineageRecorded\",\n \"WorkerInputRequested\",\n \"WorkerOriginRecorded\",\n \"WorkerInputCompleted\",\n \"WorkerInputRefused\",\n \"WorkerReportPrepared\",\n \"AgentUpdateEmitted\",\n \"WorkerReportRefused\",\n \"PeerMessagePrepared\",\n \"SubtreeBudgetReserved\",\n]);\n\n/**\n * Pure projection: rebuild one Run's resume state from canonical records (DUR-015). Canonical\n * order is authoritative; the fold projects each `ModelResponseRecorded` Turn and the\n * owning Run's resumable incomplete Tool Turn. It flushes each contiguous group of valid `ToolCallSettled` records into one Tool message,\n * exactly mirroring the per-Turn commit shape produced by `turnCanonicalBatch` and the\n * `turnResponseBatch`/`turnResultsBatch` split. The Phase 5 audit tags\n * are skipped transparently, so split-batch commits replay to the same prompt as P4 single-batch\n * commits.\n *\n * An incomplete application Tool turn remains visible while projecting its owning Run so active\n * recovery can resume the declared batch. It is not a valid model-visible Turn boundary for a\n * later Run until model-only unknown results close its missing calls. Those explanatory results\n * are never canonical settlements or evidence for compaction, recovery or accounting. Real\n * results replace them at the original declaration, including results appended after another Run.\n * Prior user intent and assistant text remain visible; prior system instructions do not.\n * Each Run retains the history preceding its start and its own continuation. Other Runs'\n * subsequent Turns cannot replace its input. Compaction covers only its creator's Run view;\n * a projection without an owner retains interleaved exchanges from the complete Thread history.\n */\n/** @internal Lightweight canonical boundaries collected without retaining record payloads. */\nexport interface JournalBoundary {\n readonly sequence: CanonicalSequence;\n readonly tag:\n | \"ModelCompleted\"\n | \"ModelResponseRecorded\"\n | \"ToolCallSettled\"\n | \"CompactionCreated\";\n readonly promptLength: number;\n /** A declaration without all settled results requires terminal-prior-Run proof for coverage. */\n readonly incomplete?: true | undefined;\n /** The Run terminated after its last response and differs from the projection's owner. */\n readonly terminalPriorRun?: true | undefined;\n}\n\n/** Resolved immutable context. Persistence keeps a canonical range and digest, not this Prompt. */\nexport interface RunJournalContext {\n readonly runId: RunId;\n readonly prompt: Prompt.Prompt;\n readonly priorHistoryLength: number;\n readonly historyFrom: CanonicalSequence;\n readonly boundaries: ReadonlyArray<JournalBoundary>;\n readonly contextWindowId?: string | undefined;\n readonly recordId: RecordId;\n}\n\n/**\n * Reconstruct a fixed canonical prefix from a re-readable stream. The caller must keep the same\n * records visible on every traversal. The first collects compaction and settlement metadata;\n * rollovers additionally validate covered Tool batches before rebuilding Prompt and usage. Metadata and the\n * live Prompt remain resident; covered historical message/tool payloads do not. An uncompacted Prompt still grows\n * with its conversation, so hosts must configure an appropriate context compaction policy.\n * Prepared metadata must describe exactly this stream through the same fixed tail;\n * it skips only the metadata scan, never covered-Tool validation or the canonical fold.\n * @internal\n */\nexport const projectRunJournalStream = Effect.fnUntraced(function* <\n E,\n R,\n A extends JournalRecordEnvelope,\n>(\n records: Stream.Stream<A, E, R>,\n ownerRunId: RunId | undefined,\n onBoundary?: (boundary: JournalBoundary) => void,\n savedContext?: RunJournalContext,\n preparedMetadata?: JournalMetadata,\n onEvidence?: (envelope: A) => void,\n): Effect.fn.Return<RunJournalProjection, RunJournalError | E, R> {\n if (savedContext !== undefined && savedContext.runId !== ownerRunId)\n return yield* journalError(\"Saved original context belongs to another Run\");\n\n const initialContext = savedContext?.prompt;\n\n if (\n initialContext !== undefined &&\n savedContext !== undefined &&\n savedContext.priorHistoryLength > initialContext.content.length\n )\n return yield* journalError(\"Saved original context has an invalid ownership boundary\");\n const historical = initialContext?.content.slice(0, savedContext?.priorHistoryLength) ?? [];\n\n let state: FoldState = {\n all: [],\n before: [],\n pendingTools: [],\n pendingToolsForRun: false,\n committedTurns: 0,\n };\n\n // RUN-026 pre-scan: valid compactions retire only their creator's Run view. A bound\n // stays below its own sequence and cannot split a visible response from its settled results.\n // Pruning and rollovers may cover complete owner-Run batches; a summarize record carries\n // its summary. Invalid records leave full history authoritative. A wider containing view\n // replaces earlier coverage, with equal bounds preferring the later record.\n // Exact declaration spans are validated at each compaction's own captured prefix.\n // Later results preserve committed coverage and close retained or summarized calls below.\n if (preparedMetadata !== undefined && preparedMetadata.ownerRunId !== ownerRunId)\n return yield* journalError(\"Prepared journal metadata belongs to another replay\");\n\n let metadata = preparedMetadata;\n\n if (metadata === undefined) {\n const collected = makeJournalMetadata(ownerRunId);\n\n yield* Stream.runForEach(records, (envelope) => Effect.sync(() => collected.add(envelope)));\n metadata = collected.finish();\n }\n\n const {\n firstSequenceByRun,\n responseSequencesByRun,\n terminalSequenceByRun,\n settledSpans,\n settledSequenceById,\n settledToolCallRecordIds,\n settledById,\n } = metadata;\n\n const declarationByResultSequence = new Map(settledSpans.map(({ from, to }) => [to, from]));\n const spansByDeclaration = new Map<number, Array<(typeof settledSpans)[number]>>();\n\n for (const span of settledSpans) {\n const spans = spansByDeclaration.get(span.from) ?? [];\n\n spans.push(span);\n spansByDeclaration.set(span.from, spans);\n }\n\n const isInRunView = (\n sequence: number,\n payload: { readonly _tag: string; readonly runId?: RunId | undefined },\n runId: RunId | undefined,\n ): boolean => {\n if (runId === undefined || payload.runId === undefined || payload.runId === runId) return true;\n const first = firstSequenceByRun.get(runId) ?? Number.POSITIVE_INFINITY;\n\n return (\n sequence < first ||\n (payload._tag === \"ToolCallSettled\" &&\n (declarationByResultSequence.get(sequence) ?? Number.POSITIVE_INFINITY) < first)\n );\n };\n\n const compactions = metadata.compactions.filter(({ sequence, payload }) =>\n isInRunView(sequence, payload, ownerRunId),\n );\n\n const recordsForRun = records.pipe(\n Stream.filter(({ sequence, record: { payload } }) =>\n isInRunView(sequence, payload, ownerRunId),\n ),\n );\n\n const isCovered = (envelope: JournalRecordEnvelope, compaction: CompactionCreated): boolean =>\n envelope.sequence <= compaction.coversThrough &&\n isInRunView(envelope.sequence, envelope.record.payload, compaction.runId);\n\n const settledCoverage = compactions.reduce(\n (through, { payload }) =>\n payload.kind !== \"summarize\" ? Math.max(through, payload.coversThrough) : through,\n 0,\n );\n\n // Terminality changes only prompt coverage; it never settles or resolves the Tool Call.\n // Compare against the compaction's Run and sequence, independent of the replay's owner.\n const isTerminalPriorRun = (\n candidateRunId: RunId,\n compactionRunId: RunId | undefined,\n beforeSequence: number,\n ): boolean => {\n const terminal = terminalSequenceByRun.get(candidateRunId);\n\n return (\n candidateRunId !== compactionRunId &&\n terminal !== undefined &&\n terminal < beforeSequence &&\n terminal >\n (responseSequencesByRun\n .get(candidateRunId)\n ?.findLast((sequence) => sequence < beforeSequence) ?? 0)\n );\n };\n\n const incompleteResponseSequences: Array<{\n readonly sequence: number;\n readonly runId: RunId;\n readonly lastSettlementSequence: number;\n }> = [];\n\n let ownerPrefixSequence = firstSequenceByRun.get(ownerRunId ?? \"\") ?? Number.POSITIVE_INFINITY;\n\n let protectedContext: Prompt.Prompt | undefined =\n initialContext === undefined\n ? undefined\n : Prompt.fromMessages(initialContext.content.slice(savedContext?.priorHistoryLength));\n\n if (settledCoverage > 0) {\n yield* Stream.runForEach(recordsForRun, (envelope) =>\n Effect.gen(function* () {\n const payload = envelope.record.payload;\n\n if (payload._tag !== \"ModelResponseRecorded\" || envelope.sequence > settledCoverage) return;\n const messages = yield* decodePromptMessages(payload.messages);\n const declared = declaredApplicationToolCallIds(messages);\n\n let lastSettlementSequence = 0;\n\n for (const id of declared) {\n const callId = yield* decodeToolCallIdEffect(id).pipe(\n Effect.mapError((cause) =>\n journalError(\"Failed to decode a declared Tool Call ID\", cause),\n ),\n );\n\n lastSettlementSequence = Math.max(\n lastSettlementSequence,\n settledSequenceById.get(toolCallSettledRecordId(payload.runId, payload.turn, callId)) ??\n Infinity,\n );\n }\n if (declared.length > 0)\n incompleteResponseSequences.push({\n sequence: envelope.sequence,\n runId: payload.runId,\n lastSettlementSequence,\n });\n if (\n payload.runId === ownerRunId &&\n payload.turn === 1 &&\n payload.runScopedPrefixLength !== undefined\n ) {\n ownerPrefixSequence = envelope.sequence;\n protectedContext = Prompt.fromMessages(\n messages.content.slice(0, payload.runScopedPrefixLength),\n );\n }\n }),\n );\n }\n\n const boundIsValid = (\n payload: CompactionCreated,\n ownSequence: number,\n evidence?: Set<number>,\n ): boolean => {\n const { runId, coversThrough } = payload;\n\n if (coversThrough <= 0 || coversThrough >= ownSequence) return false;\n const ownerFirst = firstSequenceByRun.get(runId);\n\n if (payload.kind === \"summarize\" && ownerFirst !== undefined && coversThrough >= ownerFirst)\n return false;\n if (\n payload.kind !== \"summarize\" &&\n savedContext?.boundaries.some(\n (boundary) =>\n boundary.sequence <= coversThrough &&\n boundary.incomplete === true &&\n boundary.terminalPriorRun !== true,\n )\n )\n return false;\n if (payload.kind !== \"summarize\") {\n for (const response of incompleteResponseSequences) {\n if (\n response.sequence > coversThrough ||\n response.lastSettlementSequence < ownSequence ||\n !isInRunView(\n response.sequence,\n { _tag: \"ModelResponseRecorded\", runId: response.runId },\n runId,\n )\n )\n continue;\n if (evidence !== undefined) {\n evidence.add(response.sequence);\n const terminal = terminalSequenceByRun.get(response.runId);\n\n const lastResponse = responseSequencesByRun\n .get(response.runId)\n ?.findLast((sequence) => sequence < ownSequence);\n\n if (terminal !== undefined) evidence.add(terminal);\n if (lastResponse !== undefined) evidence.add(lastResponse);\n }\n if (!isTerminalPriorRun(response.runId, runId, ownSequence)) return false;\n }\n }\n for (const span of settledSpans) {\n if (\n span.from <= coversThrough &&\n coversThrough < span.to &&\n span.to < ownSequence &&\n isInRunView(span.from, { _tag: \"ModelResponseRecorded\", runId: span.runId }, runId)\n ) {\n evidence?.add(span.from);\n evidence?.add(span.to);\n\n return false;\n }\n }\n\n return true;\n };\n\n type CompactionView = (typeof compactions)[number];\n\n let replacements: ReadonlyArray<CompactionView> = [];\n let clearings: ReadonlyArray<CompactionView> = [];\n\n const retainCompaction = (views: ReadonlyArray<CompactionView>, next: CompactionView) => {\n // Independent Run views overlap without containing one another. Retire an overlay only\n // when the replacement actually contains its view, not merely a larger sequence number.\n if (\n views.some(\n (prior) =>\n prior.payload.coversThrough > next.payload.coversThrough &&\n isInRunView(next.sequence, next.payload, prior.payload.runId),\n )\n )\n return views;\n\n return [\n ...views.filter(\n (prior) =>\n next.payload.coversThrough < prior.payload.coversThrough ||\n !isInRunView(prior.sequence, prior.payload, next.payload.runId),\n ),\n next,\n ];\n };\n\n let latestWindowId: string | undefined = savedContext?.contextWindowId;\n let latestWindowSequence = -1;\n let latestWindow: CompactionView | undefined;\n let rolloverCoveredThrough = 0;\n\n for (const { payload, sequence } of compactions) {\n if (!boundIsValid(payload, sequence)) continue;\n if (payload.kind === \"rollover\" && sequence > latestWindowSequence) {\n latestWindowId = contextWindowId(payload.runId, payload.turn);\n latestWindowSequence = sequence;\n latestWindow = { payload, sequence };\n }\n if (payload.kind === \"rollover\")\n rolloverCoveredThrough = Math.max(rolloverCoveredThrough, payload.coversThrough);\n if (payload.kind === \"summarize\" || payload.kind === \"rollover\") {\n if (payload.kind === \"summarize\" && payload.summary === undefined) continue;\n replacements = retainCompaction(replacements, { payload, sequence });\n } else clearings = retainCompaction(clearings, { payload, sequence });\n }\n\n // A superseding summary retires the overlay, but the latest rollover still owns the window.\n const contextViews = [\n ...replacements,\n ...clearings,\n ...(latestWindow === undefined ? [] : [latestWindow]),\n ];\n\n const contextCompactions = new Set(contextViews.map(({ sequence }) => sequence));\n\n const historyFrom = CanonicalSequence.make(\n replacements.reduce(\n (from, { payload }) => Math.max(from, payload.coversThrough + 1),\n savedContext?.historyFrom ?? 1,\n ),\n );\n\n const contextValidationViews = compactions.filter(\n ({ sequence }) => sequence >= historyFrom || contextCompactions.has(sequence),\n );\n\n const contextEvidence = new Set(\n contextValidationViews.flatMap(({ payload }) => {\n const sequence = firstSequenceByRun.get(payload.runId);\n\n return sequence === undefined ? [] : [sequence];\n }),\n );\n\n // Reread compactions must keep the facts that accepted or rejected their original bounds.\n if (onEvidence !== undefined)\n for (const { payload, sequence } of contextValidationViews)\n boundIsValid(payload, sequence, contextEvidence);\n\n const retainEvidence = (envelope: A): void => {\n if (onEvidence === undefined) return;\n onEvidence(envelope);\n if (envelope.sequence < historyFrom && envelope.record.payload._tag === \"ModelResponseRecorded\")\n // A retained declaration must preserve its already-settled siblings for later coverage checks.\n for (const span of spansByDeclaration.get(envelope.sequence) ?? [])\n if (span.to < historyFrom) contextEvidence.add(span.to);\n };\n\n let summaryEmitted = false;\n\n const retainedPrefix = replacements.some(\n ({ payload }) =>\n payload.kind === \"rollover\" &&\n payload.runId === ownerRunId &&\n ownerPrefixSequence <= payload.coversThrough,\n )\n ? (protectedContext?.content ?? [])\n : [];\n\n const replacementLength = retainedPrefix.length + replacements.length;\n\n const emitSummary = () => {\n if (summaryEmitted || replacements.length === 0) return;\n summaryEmitted = true;\n state.all.push(...retainedPrefix);\n for (const { payload: replacement } of replacements) {\n const message =\n replacement.kind === \"rollover\"\n ? contextWindowMessage(\n contextWindowId(replacement.runId, replacement.turn),\n replacement.handoff,\n )\n : Prompt.makeMessage(\"user\", {\n content: [\n Prompt.makePart(\"text\", {\n text: `${COMPACTION_SUMMARY_PREFIX}${replacement.summary}`,\n }),\n ],\n });\n\n state.all.push(message);\n if (replacement.kind !== \"rollover\" || replacement.runId !== ownerRunId)\n state.before.push(message);\n // Marker coverage comes from its compaction, even when covered facts leave the saved range.\n onBoundary?.({\n sequence: replacement.coversThrough,\n tag: \"CompactionCreated\",\n promptLength: state.all.length,\n });\n }\n };\n\n // The original context is canonical model input, not a reconstruction of later Thread\n // traffic. Its bounded mapping lets compaction cover exactly the same historical prefix.\n if (savedContext !== undefined) {\n emitSummary();\n for (const [index, message] of historical.entries()) {\n const boundary = savedContext.boundaries.find((entry) => entry.promptLength > index);\n\n if (boundary === undefined && replacements.length > 0)\n return yield* journalError(\"Saved context lacks its canonical compaction boundary\");\n if (\n boundary !== undefined &&\n replacements.some(({ payload }) => boundary.sequence <= payload.coversThrough)\n )\n continue;\n\n const visible =\n message.role === \"tool\" &&\n boundary !== undefined &&\n clearings.some(({ payload }) => boundary.sequence <= payload.coversThrough)\n ? Prompt.makeMessage(\"tool\", {\n content: message.content.map((part) =>\n part.type === \"tool-result\"\n ? Prompt.makePart(\"tool-result\", { ...part, result: CLEARED_TOOL_RESULT })\n : part,\n ),\n })\n : message;\n\n state.all.push(visible);\n state.before.push(visible);\n }\n for (const boundary of savedContext.boundaries) {\n const removed = savedContext.boundaries.reduce(\n (length, candidate) =>\n candidate.sequence <= boundary.sequence &&\n replacements.some(({ payload }) => candidate.sequence <= payload.coversThrough)\n ? Math.max(length, candidate.promptLength)\n : length,\n 0,\n );\n\n onBoundary?.({\n ...boundary,\n promptLength: replacementLength + Math.max(0, boundary.promptLength - removed),\n });\n }\n }\n\n const modelUsage: Array<ModelCallUsage> = [];\n let unobservedModelCalls = 0;\n\n const usage = initialUsage(modelUsage);\n\n let toolSelection: Selection | undefined;\n let usageTurn = 0;\n\n const incompleteToolTurns = new Set<string>();\n const incompleteToolCalls = new Set<string>();\n const incompleteContextRuns = new Set<RunId>();\n\n for (const response of incompleteResponseSequences)\n if (\n contextViews.some(\n (view) =>\n view.payload.kind !== \"summarize\" &&\n response.sequence <= view.payload.coversThrough &&\n response.lastSettlementSequence >= view.sequence,\n )\n )\n incompleteContextRuns.add(response.runId);\n let pendingContextToolCallId: string | undefined;\n let ownerTerminated = false;\n\n const policyUsage = initialPolicyUsage();\n\n const accountResponse = Effect.fnUntraced(function* (\n envelope: JournalRecordEnvelope,\n payload: Extract<\n JournalRecordEnvelope[\"record\"][\"payload\"],\n { readonly _tag: \"ModelResponseRecorded\" }\n >,\n messages: Prompt.Prompt,\n ) {\n const record = envelope.record;\n\n const declared = declaredApplicationToolCallIds(messages);\n const actualResultIds: Array<RecordId> = [];\n let incomplete = false;\n\n for (const id of declared) {\n const toolCallId = yield* Effect.try({\n try: () => decodeToolCallId(id),\n catch: (cause) => journalError(\"Failed to decode a declared Tool Call ID\", cause),\n });\n\n const resultId = toolCallSettledRecordId(payload.runId, payload.turn, toolCallId);\n\n if (settledToolCallRecordIds.has(resultId)) actualResultIds.push(resultId);\n else incomplete = true;\n }\n if (incomplete) {\n incompleteToolTurns.add(envelope.record.recordId);\n incompleteContextRuns.add(payload.runId);\n for (const recordId of actualResultIds) incompleteToolCalls.add(recordId);\n }\n if (payload.runId !== ownerRunId) return;\n if (!(\"toolOperations\" in payload))\n return yield* journalError(\"Owning Run execution requires full canonical evidence\");\n if (payload.turn === 1 && payload.runScopedPrefixLength !== undefined) {\n protectedContext = Prompt.fromMessages(\n messages.content.slice(0, payload.runScopedPrefixLength),\n );\n }\n\n const responseUsage = yield* projectedResponseUsage(payload);\n\n unobservedModelCalls = yield* addProjectedUsage(\n \"unobservedModelCalls\",\n unobservedModelCalls,\n payload.unobservedModelCalls ?? 0,\n );\n\n usage.modelCalls = yield* addProjectedUsage(\n \"modelCalls\",\n usage.modelCalls,\n responseUsage.modelCalls,\n );\n usage.inputTokens = yield* addProjectedUsage(\n \"inputTokens\",\n usage.inputTokens,\n responseUsage.inputTokens,\n );\n usage.outputTokens = yield* addProjectedUsage(\n \"outputTokens\",\n usage.outputTokens,\n responseUsage.outputTokens,\n );\n usage.costMicrousd = yield* addProjectedUsage(\n \"costMicrousd\",\n usage.costMicrousd,\n responseUsage.costMicrousd,\n );\n usage.modelUsage.push(...responseUsage.modelUsage);\n if (payload.turn > usageTurn) {\n usageTurn = payload.turn;\n usage.lastInputTokens = responseUsage.inputTokens;\n usage.lastOutputTokens = responseUsage.outputTokens;\n }\n\n policyUsage.committedTurns = Math.max(policyUsage.committedTurns, payload.turn);\n\n const calls = messages.content.flatMap((message) =>\n message.role === \"assistant\"\n ? message.content.filter((part) => part.type === \"tool-call\")\n : [],\n );\n\n const candidate = calls.length === 1 ? calls[0] : undefined;\n\n const candidateResult =\n candidate === undefined\n ? undefined\n : settledById.get(`tool-settled:${ownerRunId}:${payload.turn}:${candidate.id}`);\n\n pendingContextToolCallId =\n candidate !== undefined &&\n !candidate.providerExecuted &&\n candidateResult?.isFailure === false &&\n candidateResult.budgetRejected !== true &&\n envelope.sequence > rolloverCoveredThrough\n ? candidate.id\n : undefined;\n\n policyUsage.toolCalls += calls.length;\n if (payload.toolExposure !== undefined) toolSelection = payload.toolExposure.selection;\n if (incompleteToolTurns.has(record.recordId)) return;\n for (const call of calls) {\n const result = call.providerExecuted\n ? messages.content\n .flatMap((message) => (message.role === \"assistant\" ? message.content : []))\n .find(\n (part) => part.type === \"tool-result\" && part.providerExecuted && part.id === call.id,\n )\n : settledById.get(`tool-settled:${ownerRunId}:${payload.turn}:${call.id}`);\n\n if (result === undefined || (\"budgetRejected\" in result && result.budgetRejected === true))\n continue;\n if (!(\"isFailure\" in result)) continue;\n if (!result.isFailure && \"toolSelection\" in result && result.toolSelection !== undefined)\n toolSelection = result.toolSelection;\n policyUsage.consecutiveToolFailures = result.isFailure\n ? policyUsage.consecutiveToolFailures + 1\n : 0;\n }\n });\n\n // Slots refer to the retained Prompt itself, not an additional history payload index.\n // Only still-unseen results retain a slot; late results fill the original declaration in place.\n const historicalResults = new Map<\n string,\n {\n readonly allIndex: number;\n readonly beforeIndex: number;\n readonly parts: Array<Prompt.ToolResultPart>;\n readonly partIndex: number;\n }\n >();\n\n // Only exact calls needed by late results survive retirement, never their old messages.\n const retiredLateCalls = new Map<string, Prompt.ToolCallPart>();\n\n let pendingToolOrder = new Map<string, number>();\n\n const flushTools = Effect.fnUntraced(function* (\n current: FoldState,\n ): Effect.fn.Return<FoldState, RunJournalError> {\n if (current.pendingTools.length === 0) return current;\n\n // Suspension can persist an ordinary sibling before a delegated call joins. Model context\n // still uses declaration order, matching the live interpreter's completed results batch.\n const ordered = current.pendingTools.toSorted(\n (left, right) =>\n (pendingToolOrder.get(left.record.toolCallId) ?? Number.MAX_SAFE_INTEGER) -\n (pendingToolOrder.get(right.record.toolCallId) ?? Number.MAX_SAFE_INTEGER),\n );\n\n const toolMessage = yield* toolMessageFromSettled(ordered);\n\n current.all.push(toolMessage);\n if (!current.pendingToolsForRun) current.before.push(toolMessage);\n\n return {\n ...current,\n pendingTools: [],\n pendingToolsForRun: false,\n };\n });\n\n yield* Stream.runForEach(recordsForRun, (envelope) =>\n Effect.gen(function* () {\n const payload = envelope.record.payload;\n\n if (contextEvidence.has(envelope.sequence)) retainEvidence(envelope);\n if (\n (payload._tag === \"RunCompleted\" ||\n payload._tag === \"RunFailed\" ||\n payload._tag === \"SubmissionSettled\") &&\n payload.runId !== undefined &&\n incompleteContextRuns.has(payload.runId)\n )\n retainEvidence(envelope);\n\n if (\n ((payload._tag === \"RunCompleted\" || payload._tag === \"RunFailed\") &&\n payload.runId === ownerRunId) ||\n (payload._tag === \"SubmissionSettled\" &&\n runIdForSubmission(payload.submissionId) === ownerRunId)\n )\n ownerTerminated = true;\n\n if (payload._tag === \"RunPolicyUsageReserved\" && payload.runId === ownerRunId) {\n if (\n payload.programmaticToolCalls < policyUsage.programmaticToolCalls ||\n (policyUsage.finalizationUsed && !payload.finalizationUsed)\n ) {\n return yield* journalError(\"Run policy reservations must be monotonic\");\n }\n policyUsage.programmaticToolCalls = payload.programmaticToolCalls;\n policyUsage.finalizationUsed = payload.finalizationUsed;\n }\n if (payload._tag === \"ModelCallAborted\" && payload.runId === ownerRunId) {\n if (payload.restart !== policyUsage.modelRestarts + 1)\n return yield* journalError(\"Model restart reservations must advance once\");\n policyUsage.modelRestarts = payload.restart;\n\n const summary = yield* summarizeModelUsage(payload.modelUsage).pipe(\n Effect.mapError((cause) =>\n journalError(\"Aborted model usage exceeds accounting bounds\", cause),\n ),\n );\n\n usage.modelCalls = yield* addProjectedUsage(\n \"modelCalls\",\n usage.modelCalls,\n summary.modelCalls,\n );\n usage.inputTokens = yield* addProjectedUsage(\n \"inputTokens\",\n usage.inputTokens,\n summary.inputTokens.total,\n );\n usage.outputTokens = yield* addProjectedUsage(\n \"outputTokens\",\n usage.outputTokens,\n summary.outputTokens.total,\n );\n usage.costMicrousd = yield* addProjectedUsage(\n \"costMicrousd\",\n usage.costMicrousd,\n summary.costMicrousd,\n );\n usage.modelUsage.push(...payload.modelUsage);\n unobservedModelCalls = yield* addProjectedUsage(\n \"unobservedModelCalls\",\n unobservedModelCalls,\n payload.unobservedModelCalls,\n );\n }\n if (PROMPT_TRANSPARENT_TAGS.has(payload._tag)) return;\n // The compaction record governs the fold (pre-scan) and contributes no\n // message of its own; records at or below the summarize bound render as\n // the one summary message emitted at the covered/kept transition.\n if (payload._tag === \"CompactionCreated\") {\n if (contextCompactions.has(envelope.sequence)) retainEvidence(envelope);\n\n return;\n }\n if (replacements.some(({ payload }) => isCovered(envelope, payload))) {\n if (payload._tag === \"ModelResponseRecorded\" && payload.runId !== ownerRunId) {\n const late = (spansByDeclaration.get(envelope.sequence) ?? []).filter((span) =>\n replacements.some(\n (view) => isCovered(envelope, view.payload) && span.to > view.sequence,\n ),\n );\n\n if (late.length > 0) {\n // Even a rollover-hidden late result needs its exact declaration to stay hidden.\n retainEvidence(envelope);\n if (latestWindow !== undefined && isCovered(envelope, latestWindow.payload)) return;\n const messages = yield* decodePromptMessages(payload.messages);\n\n for (const message of messages.content) {\n if (message.role !== \"assistant\") continue;\n for (const call of message.content) {\n if (call.type !== \"tool-call\" || call.providerExecuted) continue;\n\n const callId = yield* decodeToolCallIdEffect(call.id).pipe(\n Effect.mapError((cause) => journalError(\"Invalid retired Tool Call ID\", cause)),\n );\n\n const id = toolCallSettledRecordId(payload.runId, payload.turn, callId);\n\n if (late.some((span) => span.recordId === id)) retiredLateCalls.set(id, call);\n }\n }\n }\n }\n // Retiring Prompt payloads does not retire the owning Run's policy or usage accounting.\n if (payload._tag === \"ModelResponseRecorded\" && payload.runId === ownerRunId) {\n const messages = yield* decodePromptMessages(payload.messages);\n\n yield* accountResponse(envelope, payload, messages);\n state = { ...state, committedTurns: Math.max(state.committedTurns, payload.turn) };\n }\n\n return;\n }\n emitSummary();\n if (payload._tag === \"ToolCallSettled\") {\n const declaration = declarationByResultSequence.get(envelope.sequence);\n\n const declarationFact = {\n sequence: declaration ?? Infinity,\n record: { payload: { _tag: \"ModelResponseRecorded\", runId: payload.runId } },\n };\n\n const declarationCovered = (compaction: CompactionCreated) =>\n declarationFact.sequence <= compaction.coversThrough &&\n isInRunView(declarationFact.sequence, declarationFact.record.payload, compaction.runId);\n\n if (latestWindow !== undefined && declarationCovered(latestWindow.payload)) return;\n retainEvidence(envelope);\n if (payload.runId !== ownerRunId) {\n const slot = historicalResults.get(envelope.record.recordId);\n\n if (slot === undefined) {\n const call = retiredLateCalls.get(envelope.record.recordId);\n\n if (\n call === undefined ||\n call.id !== payload.toolCallId ||\n call.name !== payload.toolName\n )\n return yield* journalError(\"Historical Tool result has no matching declaration\");\n\n const pair = [\n Prompt.makeMessage(\"assistant\", { content: [call] }),\n Prompt.makeMessage(\"tool\", {\n content: [\n Prompt.makePart(\"tool-result\", {\n id: call.id,\n name: call.name,\n result: clearings.some(({ payload }) => declarationCovered(payload))\n ? CLEARED_TOOL_RESULT\n : payload.result,\n isFailure: payload.isFailure,\n providerExecuted: false,\n }),\n ],\n }),\n ];\n\n state.all.push(...pair);\n state.before.push(...pair);\n retiredLateCalls.delete(envelope.record.recordId);\n onBoundary?.({\n sequence: envelope.sequence,\n tag: payload._tag,\n promptLength: state.all.length,\n });\n\n return;\n }\n const declared = slot.parts[slot.partIndex];\n\n if (declared?.id !== payload.toolCallId || declared.name !== payload.toolName)\n return yield* journalError(\"Historical Tool result differs from its declaration\");\n slot.parts[slot.partIndex] = Prompt.makePart(\"tool-result\", {\n id: payload.toolCallId,\n name: payload.toolName,\n result: clearings.some(\n ({ payload }) => isCovered(envelope, payload) || declarationCovered(payload),\n )\n ? CLEARED_TOOL_RESULT\n : payload.result,\n isFailure: payload.isFailure,\n providerExecuted: false,\n });\n const message = Prompt.makeMessage(\"tool\", { content: [...slot.parts] });\n\n state.all[slot.allIndex] = message;\n state.before[slot.beforeIndex] = message;\n historicalResults.delete(envelope.record.recordId);\n onBoundary?.({\n sequence: envelope.sequence,\n tag: payload._tag,\n promptLength: state.all.length,\n ...(incompleteToolCalls.has(envelope.record.recordId) ? { incomplete: true } : {}),\n ...(isTerminalPriorRun(payload.runId, ownerRunId, Number.POSITIVE_INFINITY)\n ? { terminalPriorRun: true }\n : {}),\n });\n\n return;\n }\n if (\n state.pendingTools.length > 0 &&\n state.pendingToolsForRun !== (payload.runId === ownerRunId)\n ) {\n state = yield* flushTools(state);\n }\n state.pendingTools.push({\n record: payload,\n cleared: clearings.some(({ payload }) => isCovered(envelope, payload)),\n });\n state = {\n ...state,\n pendingToolsForRun: payload.runId === ownerRunId,\n };\n onBoundary?.({\n sequence: envelope.sequence,\n tag: payload._tag,\n promptLength: state.all.length + 1,\n ...(isTerminalPriorRun(payload.runId, ownerRunId, Number.POSITIVE_INFINITY)\n ? { terminalPriorRun: true }\n : {}),\n ...(incompleteToolCalls.has(envelope.record.recordId) ? { incomplete: true } : {}),\n });\n\n return;\n }\n state = yield* flushTools(state);\n if (payload._tag === \"ModelCompleted\" && payload.history !== undefined) {\n retainEvidence(envelope);\n const messages = yield* decodePromptMessages(payload.history);\n\n state.all.length = 0;\n state.before.length = 0;\n historicalResults.clear();\n\n for (const message of messages.content) {\n state.all.push(message);\n if (payload.runId !== ownerRunId) state.before.push(message);\n }\n // Persistent, non-durable model history needs the same original compaction mapping\n // as durable responses; cold selected-Run recovery cannot infer it from later history.\n onBoundary?.({\n sequence: envelope.sequence,\n tag: payload._tag,\n promptLength: state.all.length,\n });\n\n return;\n }\n if (payload._tag !== \"ModelResponseRecorded\") return;\n retainEvidence(envelope);\n const messages = yield* decodePromptMessages(payload.messages);\n const forRun = payload.runId === ownerRunId;\n\n pendingToolOrder = new Map(\n declaredApplicationToolCallIds(messages).map((id, index) => [id, index]),\n );\n\n yield* accountResponse(envelope, payload, messages);\n\n const visibleMessages = forRun\n ? messages.content\n : messages.content.filter((message) => message.role !== \"system\");\n\n for (const message of visibleMessages) {\n state.all.push(message);\n if (!forRun) state.before.push(message);\n }\n if (!forRun) {\n const calls = messages.content.flatMap((message) =>\n message.role === \"assistant\"\n ? message.content.filter(\n (part): part is Prompt.ToolCallPart =>\n part.type === \"tool-call\" && !part.providerExecuted,\n )\n : [],\n );\n\n if (calls.length > 0) {\n const parts = calls.map((call) =>\n Prompt.makePart(\"tool-result\", {\n id: call.id,\n name: call.name,\n result: {\n _tag: \"ToolOutcomeUnknown\",\n message:\n \"This earlier operation has no recorded outcome. It may have executed. Do not assume success or retry it; its original operation remains unresolved.\",\n },\n isFailure: true,\n providerExecuted: false,\n }),\n );\n\n const allIndex = state.all.length;\n const beforeIndex = state.before.length;\n const message = Prompt.makeMessage(\"tool\", { content: parts });\n\n state.all.push(message);\n state.before.push(message);\n for (const [partIndex, call] of calls.entries()) {\n const callId = yield* decodeToolCallIdEffect(call.id).pipe(\n Effect.mapError((cause) => journalError(\"Invalid historical Tool Call ID\", cause)),\n );\n\n const resultId = toolCallSettledRecordId(payload.runId, payload.turn, callId);\n\n // A fixed replay can fill only a result present in its captured metadata. Missing\n // calls retain their visible Unknown part without an expanded identity directory.\n if (!settledToolCallRecordIds.has(resultId)) continue;\n historicalResults.set(resultId, {\n allIndex,\n beforeIndex,\n parts,\n partIndex,\n });\n }\n }\n }\n state = {\n ...state,\n committedTurns: forRun\n ? Math.max(state.committedTurns, payload.turn)\n : state.committedTurns,\n };\n onBoundary?.({\n sequence: envelope.sequence,\n tag: payload._tag,\n promptLength: state.all.length,\n ...(isTerminalPriorRun(payload.runId, ownerRunId, Number.POSITIVE_INFINITY)\n ? { terminalPriorRun: true }\n : {}),\n ...(incompleteToolTurns.has(envelope.record.recordId) ? { incomplete: true } : {}),\n });\n }),\n );\n emitSummary();\n state = yield* flushTools(state);\n\n const validatedPolicyUsage = yield* Schema.decodeEffect(RunPolicyUsage)(policyUsage).pipe(\n Effect.mapError((cause) =>\n journalError(\"Run policy accounting exceeds its Schema bounds\", cause),\n ),\n );\n\n return {\n ...(toolSelection === undefined ? {} : { toolSelection }),\n policyUsage: validatedPolicyUsage,\n prompt: Prompt.fromMessages(state.all),\n historyBefore: Prompt.fromMessages(state.before),\n historyFrom,\n committedTurns: state.committedTurns,\n usage: unobservedModelCalls === 0 ? usage : { ...usage, unobservedModelCalls },\n ...(latestWindowId === undefined ? {} : { contextWindowId: latestWindowId }),\n ...(protectedContext === undefined ? {} : { protectedContext }),\n ...(ownerTerminated || pendingContextToolCallId === undefined\n ? {}\n : { pendingContextToolCallId }),\n };\n});\n\n/** Pure projection of one Run's durable recovery state from canonical records. */\nexport const projectRunJournal = (\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n runId: RunId,\n): Effect.Effect<RunJournalProjection, RunJournalError> =>\n projectRunJournalStream(Stream.fromIterable(records), runId);\n\n/**\n * Pure valid-prompt projection from canonical records: `UserInputRecorded` +\n * `ModelResponseRecorded` + complete `ToolCallSettled` batches → the deterministic model-visible\n * Prompt (plan §Coordinator flow step 3).\n */\nexport const promptFromCanonicalRecords = (\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n): Effect.Effect<Prompt.Prompt, RunJournalError> =>\n projectRunJournalStream(Stream.fromIterable(records), undefined).pipe(\n Effect.map((projection) => projection.prompt),\n );\n\n/** Everything one committed Turn contributes to its canonical batch. */\nexport interface TurnCommitInput {\n readonly toolResultMaxBytes?: number | undefined;\n readonly toolSelectionMaxBytes?: number | undefined;\n readonly toolOperations?: ModelResponseRecorded[\"toolOperations\"] | undefined;\n readonly toolParameterRejections?: ReadonlyArray<ToolParameterRejection> | undefined;\n readonly toolExposure?: Snapshot | undefined;\n readonly runId: RunId;\n /** Canonical (Run-relative, Attempt-independent) Turn number; must be positive. */\n readonly turn: number;\n readonly turnId: TurnId;\n /**\n * Exact response and leading input/instruction messages. Application Tool outcomes\n * are supplied separately; the journal does not reconstruct them from Prompt history.\n */\n readonly responseMessages: ReadonlyArray<Prompt.Message>;\n readonly toolResults: ReadonlyArray<RunTurnToolResult>;\n readonly producerId: ProducerId;\n readonly deploymentId: DeploymentId;\n readonly createdAt: DateTime.Utc;\n /** Leading instruction/wake messages that stay canonical but are hidden from later Runs. */\n readonly runScopedPrefixLength?: number | undefined;\n /** Terminal output committed atomically with this Turn's final canonical batch. */\n readonly runCompletion?:\n | {\n readonly output: PersistedJson;\n readonly runDisposition?: PersistedJson | undefined;\n readonly finishReason?: \"budget-exhausted\" | undefined;\n readonly exhausted?: ExhaustedLimit | undefined;\n }\n | undefined;\n /** Known missing-accounting invocations staged before this canonical response. */\n readonly unobservedModelCalls?: number | undefined;\n /** Per-call provider usage staged by the engine's `noteTurnUsage` (RUN-023). */\n readonly usage?:\n | {\n readonly inputTokens: number;\n readonly outputTokens: number;\n readonly costMicrousd?: number | undefined;\n readonly modelUsage?: ReadonlyArray<ModelCallUsage> | undefined;\n }\n | undefined;\n}\n\nconst decodeModelResponse = Schema.decodeUnknownEffect(ModelResponseRecorded);\nconst decodeToolSettled = Schema.decodeUnknownEffect(ToolCallSettled);\nconst encodePrompt = Schema.encodeEffect(Prompt.Prompt);\n\nconst requireCanonicalTurn = (turn: number): Effect.Effect<void, RunJournalError> =>\n !Number.isInteger(turn) || turn <= 0\n ? Effect.fail(journalError(`Canonical turn number must be a positive integer: ${turn}`))\n : Effect.void;\n\nconst modelResponseRecord = Effect.fnUntraced(function* (\n input: TurnCommitInput,\n): Effect.fn.Return<RecordEnvelope, RunJournalError> {\n const promptMessages = input.responseMessages;\n\n if (promptMessages.length === 0) {\n return yield* journalError(`Turn ${input.turn} appended no model-visible Prompt messages`);\n }\n if (promptMessages.some((message) => message.role === \"tool\")) {\n return yield* journalError(\"Application Tool outcomes must be supplied as terminal facts\");\n }\n const runScopedPrefixLength = input.runScopedPrefixLength;\n\n if (\n runScopedPrefixLength !== undefined &&\n (input.turn !== 1 ||\n !Number.isSafeInteger(runScopedPrefixLength) ||\n runScopedPrefixLength <= 0 ||\n runScopedPrefixLength >= promptMessages.length ||\n promptMessages\n .slice(0, runScopedPrefixLength)\n .some((message) => message.role !== \"system\" && message.role !== \"user\"))\n ) {\n return yield* journalError(\n \"Run-scoped Prompt provenance must identify a non-empty system/user prefix of Turn 1 before its assistant response\",\n );\n }\n\n const encodedMessages = yield* encodePrompt(Prompt.fromMessages([...promptMessages])).pipe(\n Effect.mapErrorEager((cause) => journalError(\"Turn Prompt messages failed to encode\", cause)),\n );\n\n // Validate messages and usage together. The progress writer captures the complete record\n // before acquiring its mutation gate; a separate JSON copy here adds no ownership proof.\n const modelUsage = input.usage?.modelUsage;\n\n const payload = yield* decodeModelResponse({\n _tag: \"ModelResponseRecorded\",\n toolResultMaxBytes: input.toolResultMaxBytes ?? MAX_PERSISTED_JSON_BYTES,\n toolSelectionMaxBytes: input.toolSelectionMaxBytes ?? 0,\n toolOperations: input.toolOperations ?? [],\n ...(input.toolParameterRejections === undefined || input.toolParameterRejections.length === 0\n ? {}\n : { toolParameterRejections: input.toolParameterRejections }),\n ...(input.toolExposure === undefined ? {} : { toolExposure: input.toolExposure }),\n runId: input.runId,\n turnId: input.turnId,\n turn: input.turn,\n messages: encodedMessages,\n ...(runScopedPrefixLength === undefined ? {} : { runScopedPrefixLength }),\n ...(modelUsage === undefined ? {} : { modelUsage }),\n ...(input.unobservedModelCalls === undefined || input.unobservedModelCalls === 0\n ? {}\n : {\n unobservedModelCalls: input.unobservedModelCalls,\n }),\n ...(input.usage === undefined\n ? {}\n : {\n inputTokens: input.usage.inputTokens,\n outputTokens: input.usage.outputTokens,\n // Written only when non-zero: absent re-seeds as zero, so the\n // no-estimator case stays byte-identical to pre-cost histories.\n ...(input.usage.costMicrousd === undefined || input.usage.costMicrousd === 0\n ? {}\n : {\n costMicrousd: input.usage.costMicrousd,\n }),\n }),\n }).pipe(\n Effect.mapErrorEager((cause) =>\n journalError(\"Invalid model response operation evidence\", cause),\n ),\n );\n\n if (payload.modelUsage !== undefined) {\n if (payload.modelUsage.length === 0)\n return yield* journalError(\"Turn model usage must contain at least one completed call\");\n\n const summary = yield* continuationUsage(payload.modelUsage).pipe(\n Effect.mapErrorEager((cause) =>\n journalError(\"Turn model usage exceeds accounting bounds\", cause),\n ),\n );\n\n if (\n payload.inputTokens !== summary.inputTokens ||\n payload.outputTokens !== summary.outputTokens ||\n (payload.costMicrousd ?? 0) !== summary.costMicrousd\n )\n return yield* journalError(\"Turn detailed and aggregate model usage disagree\");\n }\n\n return RecordEnvelope.make({\n recordId: modelResponseRecordId(input.runId, input.turn),\n family: \"thread\",\n schemaVersion: 1,\n createdAt: input.createdAt,\n deploymentId: input.deploymentId,\n payload,\n });\n});\n\nconst toolSettledRecords = Effect.fnUntraced(function* (\n input: TurnCommitInput,\n): Effect.fn.Return<Array<RecordEnvelope>, RunJournalError> {\n const toolRecords: Array<RecordEnvelope> = [];\n\n for (const part of input.toolResults) {\n const payload = yield* decodeToolSettled({\n _tag: \"ToolCallSettled\",\n ...(part.toolSelection === undefined ? {} : { toolSelection: part.toolSelection }),\n runId: input.runId,\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n result: part.result,\n isFailure: part.isFailure,\n ...(part.budgetRejected === true ? { budgetRejected: true } : {}),\n }).pipe(\n Effect.mapError((cause) => journalError(`Invalid Tool result ${part.toolCallId}`, cause)),\n );\n\n toolRecords.push(\n RecordEnvelope.make({\n recordId: toolCallSettledRecordId(input.runId, input.turn, payload.toolCallId),\n family: \"thread\",\n schemaVersion: 1,\n createdAt: input.createdAt,\n deploymentId: input.deploymentId,\n payload,\n }),\n );\n }\n\n return toolRecords;\n});\n\nconst runCompletionRecord = (input: TurnCommitInput) => {\n if (input.runCompletion === undefined) return undefined;\n const completion = { runId: input.runId, ...input.runCompletion };\n\n return RecordEnvelope.make({\n recordId: runCompletedRecordId(input.runId),\n family: \"thread\",\n schemaVersion: 1,\n createdAt: input.createdAt,\n deploymentId: input.deploymentId,\n payload: RunCompleted.make({\n ...completion,\n }),\n });\n};\n\n/**\n * Build a canonical batch from interpreter-validated Turn facts: one\n * `ModelResponseRecorded` record plus one `ToolCallSettled` record per terminal Tool result, all\n * under the WP0-style deterministic identities, committed as ONE atomic batch. The same input\n * always yields byte-identical content, so an in-Attempt append retry is an honest batch replay.\n *\n * No-tool Turns and eligible readonly Turns use this shape; a terminal `RunCompleted` marker\n * joins the response in the same atomic batch. Other application Turns split into\n * `turnResponseBatch` + `turnResultsBatch` before execution.\n */\nexport const turnCanonicalBatch = Effect.fnUntraced(function* (\n input: TurnCommitInput,\n): Effect.fn.Return<CanonicalBatch, RunJournalError> {\n yield* requireCanonicalTurn(input.turn);\n const modelResponse = yield* modelResponseRecord(input);\n const toolRecords = yield* toolSettledRecords(input);\n const completionRecord = runCompletionRecord(input);\n\n return CanonicalBatch.make({\n batchId: turnBatchId(input.runId, input.turn),\n producerId: input.producerId,\n records:\n completionRecord === undefined\n ? [modelResponse, ...toolRecords]\n : [modelResponse, ...toolRecords, completionRecord],\n });\n});\n\n/**\n * Commit the normalized response and original operation contracts before application Tools\n * execute, or promote a deferred readonly response before a persisted call-scoped capability.\n * An unsettled application declaration is conservative uncertainty after ownership\n * loss; approvals and the dispatch fence remain separate execution requirements. Provider\n * results stay in assistant content. Application outcomes belong to the results commit.\n */\nexport const turnResponseBatch = Effect.fnUntraced(function* (\n input: TurnCommitInput,\n): Effect.fn.Return<CanonicalBatch, RunJournalError> {\n yield* requireCanonicalTurn(input.turn);\n const modelResponse = yield* modelResponseRecord(input);\n\n return CanonicalBatch.make({\n batchId: turnResponseBatchId(input.runId, input.turn),\n producerId: input.producerId,\n records: [modelResponse],\n });\n});\n\n/**\n * Commit 5 of a tool-declaring Turn (plan §2.1): the Turn's `ToolCallSettled` records in\n * declaration order under batch identity `turn-results:{runId}:{turn}` — the batch becomes\n * model-visible atomically. A completion after already committed Tool results gets its own\n * terminal batch; it never rewrites or repeats the earlier Tool outcomes.\n */\nexport const turnResultsBatch = Effect.fnUntraced(function* (\n input: TurnCommitInput,\n): Effect.fn.Return<CanonicalBatch, RunJournalError> {\n yield* requireCanonicalTurn(input.turn);\n const toolRecords = yield* toolSettledRecords(input);\n const first = toolRecords[0];\n const completionRecord = runCompletionRecord(input);\n\n if (first === undefined) {\n if (completionRecord === undefined) {\n return yield* journalError(`Turn ${input.turn} has no terminal Tool results to commit`);\n }\n\n return CanonicalBatch.make({\n batchId: makeBatchId(runCompletedRecordId(input.runId)),\n producerId: input.producerId,\n records: [completionRecord],\n });\n }\n if (input.runCompletion !== undefined && toolRecords.length !== 1) {\n return yield* journalError(\"A terminal Tool completion requires exactly one settled result\");\n }\n\n return CanonicalBatch.make({\n batchId: turnResultsBatchId(input.runId, input.turn),\n producerId: input.producerId,\n records:\n completionRecord === undefined\n ? [first, ...toolRecords.slice(1)]\n : [first, ...toolRecords.slice(1), completionRecord],\n });\n});\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AttachChildToReservationRequest, ChildBudgetReservationRequest, ClaimJoiningRequest, LedgerError, MarkInputAppliedRequest, MarkJoinedRequest, OwnershipLost, RecoverySnapshotRequest, RevertJoiningRequest, SettlementConflict, SubmissionLedger, SuspendRequest } from "./durable/SubmissionLedger.mjs";
|
|
2
|
-
import { L as ThreadMaterialization, R as ThreadNotMaterialized, Y as ThreadStore, Z as ThreadStoreError, et as ThreadTailRequest, g as PreparedAppend, l as FreshRunRead, n as AppendRequest, t as AppendConflict } from "./ThreadStore-
|
|
2
|
+
import { L as ThreadMaterialization, R as ThreadNotMaterialized, Y as ThreadStore, Z as ThreadStoreError, et as ThreadTailRequest, g as PreparedAppend, l as FreshRunRead, n as AppendRequest, t as AppendConflict } from "./ThreadStore-C_ofHc7h.mjs";
|
|
3
3
|
import { SettlementPublication, SettlementPublisher } from "./durable/SettlementPublisher.mjs";
|
|
4
4
|
import { Cause, Context, Effect, Layer, Option, Schema, Semaphore } from "effect";
|
|
5
5
|
//#region src/durable/internal/StorageOwner.ts
|
|
@@ -297,4 +297,4 @@ const layer = () => Layer.effect(RunStorage, make);
|
|
|
297
297
|
//#endregion
|
|
298
298
|
export { make as a, makeStorageOwner as c, layer as i, RunChildBudgetReservation as n, makeRunWriter as o, RunStorage as r, StorageOwner as s, RunChildAttachment as t };
|
|
299
299
|
|
|
300
|
-
//# sourceMappingURL=RunStorage-
|
|
300
|
+
//# sourceMappingURL=RunStorage-DblN-cmM.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RunStorage-DlfvMfHM.mjs","names":[],"sources":["../src/durable/internal/StorageOwner.ts","../src/durable/RunStorage.ts"],"sourcesContent":["import { Context, Effect, Option, Semaphore, type Scope } from \"effect\";\n\nimport type { ThreadId } from \"../../core/Identifiers.ts\";\nimport { type Claim, LedgerError, OwnershipLost } from \"../SubmissionLedger.ts\";\n\nexport type MutationGate = <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;\n\n/** Local capability only. It is never encoded, persisted, or reconstructed from an Attempt ID. */\nexport interface OwnerGeneration {\n readonly claim: Claim;\n readonly identity: object;\n readonly checkActive: Effect.Effect<void, OwnershipLost>;\n readonly release: Effect.Effect<void>;\n readonly use: <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E | OwnershipLost, R>;\n}\n\nexport interface StorageOwnerService {\n readonly identity: object;\n readonly withMutation: MutationGate;\n readonly withProgress: <A, E, R>(\n threadId: ThreadId,\n effect: Effect.Effect<A, E, R>,\n ) => Effect.Effect<A, E, R>;\n readonly isClosed: () => boolean;\n readonly hasOwner: (threadId: string, submissionId?: string) => boolean;\n /** Trusted administrative retirement, while holding the same mutation gate. */\n readonly closeSubmission: (threadId: string, submissionId: string) => void;\n readonly acquire: <E, R>(\n threadId: ThreadId,\n select: Effect.Effect<Option.Option<Claim>, E, R>,\n ) => Effect.Effect<Option.Option<OwnerGeneration>, E | LedgerError, R | Scope.Scope>;\n}\n\nexport class StorageOwner extends Context.Service<StorageOwner, StorageOwnerService>()(\n \"@effect-agent/durable/StorageOwner\",\n) {}\n\nconst ActiveOwner = Context.Reference<object | undefined>(\n \"@effect-agent/durable/internal/ActiveStorageOwner\",\n { defaultValue: () => undefined },\n);\n\nconst ActiveProgress = Context.Reference<\n { readonly owner: object; readonly threadId: ThreadId } | undefined\n>(\"@effect-agent/durable/internal/ActiveProgress\", { defaultValue: () => undefined });\n\n/** Reuse the physical owner's gate; reentrant calls remain in the same mutation. */\nexport const makeStorageOwner = Effect.fnUntraced(function* (gate: MutationGate) {\n const identity = {};\n let closed = false;\n const progress = new Map<ThreadId, { readonly gate: Semaphore.Semaphore; users: number }>();\n const active = new Map<string, { readonly claim: Claim; closed: boolean }>();\n\n const withMutation: MutationGate = (effect) =>\n Effect.withFiber((fiber) => {\n const current = fiber.getRef(ActiveOwner);\n\n return current === identity\n ? effect\n : gate(Effect.provideService(effect, ActiveOwner, identity));\n });\n\n yield* Effect.addFinalizer(() =>\n withMutation(\n Effect.sync(() => {\n closed = true;\n for (const entry of active.values()) entry.closed = true;\n active.clear();\n }),\n ),\n );\n\n return StorageOwner.of({\n identity,\n withMutation,\n withProgress: (threadId, effect) =>\n Effect.withFiber((fiber) => {\n const current = fiber.getRef(ActiveProgress);\n\n if (current?.owner === identity && current.threadId === threadId) return effect;\n\n return Effect.suspend(() => {\n let entry = progress.get(threadId);\n\n if (entry === undefined) {\n entry = { gate: Semaphore.makeUnsafe(1), users: 0 };\n progress.set(threadId, entry);\n }\n const retained = entry;\n\n retained.users++;\n\n return retained.gate\n .withPermits(1)(\n Effect.provideService(effect, ActiveProgress, { owner: identity, threadId }),\n )\n .pipe(\n Effect.ensuring(\n Effect.sync(() => {\n retained.users--;\n if (retained.users === 0 && progress.get(threadId) === retained)\n progress.delete(threadId);\n }),\n ),\n );\n });\n }),\n isClosed: () => closed,\n hasOwner: (threadId, submissionId) => {\n const entry = active.get(threadId);\n\n return (\n !closed &&\n entry !== undefined &&\n !entry.closed &&\n (submissionId === undefined || entry.claim.submissionId === submissionId)\n );\n },\n closeSubmission: (threadId, submissionId) => {\n const entry = active.get(threadId);\n\n if (entry?.claim.submissionId !== submissionId) return;\n entry.closed = true;\n active.delete(threadId);\n },\n acquire: (threadId, select) =>\n Effect.uninterruptibleMask((restore) =>\n Effect.gen(function* () {\n const selected = yield* withMutation(\n Effect.gen(function* () {\n if (closed)\n return yield* LedgerError.make({\n operation: \"claim\",\n message: \"Storage owner is closed\",\n });\n if (active.has(threadId)) return Option.none<OwnerGeneration>();\n const selected = yield* select;\n\n if (Option.isNone(selected)) return Option.none<OwnerGeneration>();\n const entry = { claim: selected.value, closed: false };\n\n active.set(threadId, entry);\n\n const checkActive = Effect.suspend(() =>\n closed || entry.closed || active.get(threadId) !== entry\n ? Effect.fail(OwnershipLost.make({ submissionId: entry.claim.submissionId }))\n : Effect.void,\n );\n\n const release = withMutation(\n Effect.sync(() => {\n entry.closed = true;\n if (active.get(threadId) === entry) active.delete(threadId);\n }),\n );\n\n return Option.some<OwnerGeneration>({\n claim: entry.claim,\n identity: entry,\n checkActive,\n release,\n use: (effect) => withMutation(Effect.andThen(checkActive, effect)),\n });\n }),\n );\n\n if (Option.isNone(selected)) return selected;\n // A closed Scope runs this immediately. Never register while holding a nonlocal gate.\n yield* Effect.addFinalizer(() => selected.value.release);\n\n return yield* restore(Effect.succeed(selected));\n }),\n ),\n });\n});\n","import type { Scope } from \"effect\";\nimport { Cause, Context, Effect, Layer, Option, Schema } from \"effect\";\n\nimport type { SubmissionId, ThreadId } from \"../core/Identifiers.ts\";\nimport { StorageOwner } from \"./internal/StorageOwner.ts\";\nimport type { CanonicalBatch, CanonicalSequence } from \"./Records.ts\";\nimport {\n SettlementPublication,\n type SettlementPublicationFailure,\n type SettlementPublicationResult,\n SettlementPublisher,\n} from \"./SettlementPublisher.ts\";\nimport {\n AttachChildToReservationRequest,\n ChildBudgetReservationRequest,\n ClaimJoiningRequest,\n type Claim,\n type ClaimRequest,\n type InputAppliedMarker,\n type RecoverySnapshot,\n RecoverySnapshotRequest,\n LedgerError,\n MarkInputAppliedRequest,\n MarkJoinedRequest,\n OwnershipLost,\n RevertJoiningRequest,\n SettlementConflict,\n SubmissionLedger,\n SuspendRequest,\n type SuspensionReason,\n} from \"./SubmissionLedger.ts\";\nimport {\n type AppendResult,\n AppendConflict,\n AppendRequest,\n type CommitBatch,\n type ExecutionUpdate,\n PreparedAppend,\n FreshRunRead,\n type ThreadIdentity,\n ThreadMaterialization,\n ThreadNotMaterialized,\n ThreadStore,\n ThreadStoreError,\n type ThreadStoreFailure,\n ThreadTailRequest,\n} from \"./ThreadStore.ts\";\n\nexport {\n StorageOwner,\n makeStorageOwner,\n type MutationGate,\n type OwnerGeneration,\n type StorageOwnerService,\n} from \"./internal/StorageOwner.ts\";\n\nexport const RunChildBudgetReservation = Schema.Struct({\n reservationId: ChildBudgetReservationRequest.fields.reservationId,\n parentToolCallId: ChildBudgetReservationRequest.fields.parentToolCallId,\n allocation: ChildBudgetReservationRequest.fields.allocation,\n allocationDigest: ChildBudgetReservationRequest.fields.allocationDigest,\n});\n\nexport type RunChildBudgetReservation = typeof RunChildBudgetReservation.Type;\n\nexport const RunChildAttachment = Schema.Struct({\n reservationId: AttachChildToReservationRequest.fields.reservationId,\n childSubmissionId: AttachChildToReservationRequest.fields.childSubmissionId,\n});\n\nexport type RunChildAttachment = typeof RunChildAttachment.Type;\n\n/** Commands bound to one local scoped owner. No authority is transported in their values. */\nexport interface RunOwnership {\n readonly release: Effect.Effect<void>;\n readonly markInputApplied: (\n marker: InputAppliedMarker,\n ) => ReturnType<SubmissionLedger[\"Service\"][\"markInputApplied\"]>;\n readonly claimJoining: (\n maxCount: number,\n ) => ReturnType<SubmissionLedger[\"Service\"][\"claimJoining\"]>;\n readonly markJoined: (\n submissionId: SubmissionId,\n marker: InputAppliedMarker,\n ) => ReturnType<SubmissionLedger[\"Service\"][\"markJoined\"]>;\n readonly revertJoining: (\n submissionId: SubmissionId,\n ) => Effect.Effect<void, LedgerError | OwnershipLost>;\n readonly suspend: (\n reason: SuspensionReason,\n ) => ReturnType<SubmissionLedger[\"Service\"][\"suspend\"]>;\n readonly reserveChildBudget: (\n request: RunChildBudgetReservation,\n ) => ReturnType<SubmissionLedger[\"Service\"][\"reserveChildBudget\"]>;\n readonly attachChildToReservation: (\n request: RunChildAttachment,\n ) => ReturnType<SubmissionLedger[\"Service\"][\"attachChildToReservation\"]>;\n}\n\nexport interface RunWriter {\n readonly threadId: ThreadId;\n /** Opaque cache identity for this local writer lifetime; never portable authority. */\n readonly generation: object;\n readonly refresh: Effect.Effect<void, ThreadStoreFailure>;\n readonly withProgress: <A, E, R>(\n effect: Effect.Effect<A, E, R>,\n ) => Effect.Effect<A, E | ThreadStoreFailure, R>;\n readonly tail: Effect.Effect<{ readonly sequence: CanonicalSequence }>;\n /** Uncertain commit failures close this session before another command may enter. */\n readonly append: (\n batch: CommitBatch,\n executions?: ReadonlyArray<ExecutionUpdate>,\n ) => Effect.Effect<AppendResult, ThreadStoreFailure>;\n /** Recheck the captured local capability after preflight, immediately before effect dispatch. */\n readonly checkActive: Effect.Effect<void, ThreadStoreFailure>;\n}\n\nexport interface RunStorageSession extends RunWriter, RunOwnership {\n readonly claim: Claim;\n /** Atomic original input/context plus the ledger marker, when the adapter supports it. */\n readonly appendInput?: RunWriter[\"append\"];\n /** Read current controls, root identity and empty-Run evidence under this owner.\n * Its tail is adopted by the writer; append still checks the tail and revision. */\n readonly prepareStart?: Effect.Effect<\n { readonly snapshot: RecoverySnapshot; readonly identity: ThreadIdentity } | undefined,\n LedgerError | ThreadStoreFailure\n >;\n readonly refresh: Effect.Effect<void, ThreadStoreFailure>;\n readonly publishSettlement: (\n batch: CanonicalBatch,\n executions?: ReadonlyArray<ExecutionUpdate>,\n ) => Effect.Effect<SettlementPublicationResult, SettlementPublicationFailure>;\n}\n\nexport class RunStorage extends Context.Service<\n RunStorage,\n {\n readonly publishSettlement: SettlementPublisher[\"Service\"][\"publish\"];\n readonly claim: (\n request: ClaimRequest,\n ) => Effect.Effect<\n Option.Option<RunStorageSession>,\n LedgerError | ThreadStoreFailure,\n Scope.Scope\n >;\n }\n>()(\"@effect-agent/thread/RunStorage\") {}\n\n/** One writer's scoped capability, selected at claim or administrative construction. */\nclass WriterOwnership extends Context.Service<\n WriterOwnership,\n {\n readonly identity: object;\n readonly checkActive: Effect.Effect<void, ThreadStoreFailure>;\n readonly release: Effect.Effect<void>;\n }\n>()(\"@effect-agent/durable/internal/WriterOwnership\") {}\n\nconst isDefiniteWriteRefusal = Schema.is(\n Schema.Union([AppendConflict, OwnershipLost, SettlementConflict, ThreadNotMaterialized]),\n);\n\nconst isDefiniteWriteFailure = (cause: Cause.Cause<unknown>) =>\n cause.reasons.length > 0 &&\n cause.reasons.every(\n (reason) => Cause.isFailReason(reason) && isDefiniteWriteRefusal(reason.error),\n );\n\nconst makeWriter = Effect.fnUntraced(function* (threadId: ThreadId) {\n const store = yield* ThreadStore;\n const owner = yield* StorageOwner;\n const ownership = yield* WriterOwnership;\n const checkActive = ownership.checkActive;\n const initial = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n let tail = { sequence: initial.tailSequence };\n\n const refresh = owner.withMutation(\n Effect.gen(function* () {\n yield* checkActive;\n const current = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n\n tail = { sequence: current.tailSequence };\n }),\n );\n\n const makeAppend = Effect.gen(function* () {\n const publisher = yield* ThreadStore;\n\n const append: RunWriter[\"append\"] = Effect.fnUntraced(function* (batch, executions) {\n const captured = yield* PreparedAppend.capture({\n threadId,\n expectedTailSequence: tail.sequence,\n batch,\n ...(executions === undefined ? {} : { executions }),\n }).pipe(\n Effect.mapError((cause) =>\n ThreadStoreError.make({\n operation: \"capture append\",\n message: cause.message,\n cause,\n }),\n ),\n );\n\n return yield* owner.withProgress(\n threadId,\n owner.withMutation(\n Effect.gen(function* () {\n yield* checkActive;\n for (let retries = 0; ; retries++) {\n const result = yield* publisher\n .append(\n captured.expectedTailSequence === tail.sequence\n ? captured\n : AppendRequest.make({\n ...captured,\n expectedTailSequence: tail.sequence,\n }),\n )\n .pipe(\n Effect.catchTag(\"AppendConflict\", (conflict) => {\n if (\n conflict.reason !== \"tail\" ||\n conflict.actualTailSequence === undefined ||\n retries >= 8\n )\n return Effect.fail(conflict);\n tail = { sequence: conflict.actualTailSequence };\n if (captured.executions !== undefined) return Effect.fail(conflict);\n\n return Effect.succeed(undefined);\n }),\n );\n\n if (result === undefined) continue;\n // A historical replay returns its original coordinates, not today's canonical tail.\n if (result.replayed) yield* refresh;\n else tail = { sequence: result.lastSequence };\n\n return result;\n }\n }).pipe(\n // Revoke uncertain writes before releasing the writer's mutation gate.\n Effect.onError((cause) =>\n isDefiniteWriteFailure(cause) ? Effect.void : ownership.release,\n ),\n ),\n ),\n );\n });\n\n return append;\n });\n\n const writer = {\n threadId,\n generation: ownership.identity,\n withProgress: <A, E, R>(effect: Effect.Effect<A, E, R>) =>\n owner.withProgress(threadId, Effect.andThen(checkActive, effect)),\n tail: Effect.sync(() => tail),\n append: yield* makeAppend,\n checkActive: owner.withMutation(checkActive),\n refresh,\n };\n\n return {\n writer,\n makeAppend,\n adoptTail: (sequence: CanonicalSequence) => {\n tail = { sequence };\n },\n };\n});\n\n/** Trusted administrative writer sharing the physical owner's gate and lifetime. */\nexport const makeRunWriter = Effect.fnUntraced(function* (threadId: ThreadId) {\n const owner = yield* StorageOwner;\n\n return (yield* makeWriter(threadId).pipe(\n Effect.provideService(WriterOwnership, {\n identity: owner.identity,\n checkActive: Effect.suspend(() =>\n owner.isClosed()\n ? Effect.fail(\n ThreadStoreError.make({\n operation: \"write Thread\",\n message: \"Storage owner is closed\",\n }),\n )\n : Effect.void,\n ),\n release: Effect.void,\n }),\n )).writer;\n});\n\n/** The same scoped single-owner protocol is used by every adapter. */\nexport const make = Effect.gen(function* () {\n const ledger = yield* SubmissionLedger;\n const store = yield* ThreadStore;\n const publisher = yield* SettlementPublisher;\n const owner = yield* StorageOwner;\n\n const claim: RunStorage[\"Service\"][\"claim\"] = (request) =>\n Effect.uninterruptibleMask((restore) =>\n Effect.gen(function* () {\n const granted = yield* owner.acquire(request.threadId, ledger.selectHead(request));\n\n if (Option.isNone(granted)) return Option.none();\n const generation = granted.value;\n const claimed = generation.claim;\n\n return yield* restore(\n Effect.gen(function* () {\n if (\n request.handoff !== undefined &&\n request.handoff.submissionId !== claimed.submissionId\n )\n return yield* LedgerError.make({\n operation: \"claim handoff\",\n message: \"The submission adapter did not honor the requested handoff\",\n });\n yield* store.materialize(ThreadMaterialization.make({ threadId: request.threadId }));\n\n const { writer, makeAppend, adoptTail } = yield* makeWriter(request.threadId).pipe(\n Effect.provideService(WriterOwnership, generation),\n Effect.provideService(ThreadStore, store),\n Effect.provideService(StorageOwner, owner),\n );\n\n const owned = <A, E>(effect: Effect.Effect<A, E>) => generation.use(effect);\n\n const inputPublisher = ledger.appendInput;\n\n const appendInput =\n inputPublisher === undefined\n ? undefined\n : yield* makeAppend.pipe(\n Effect.provideService(ThreadStore, {\n ...store,\n append: (request) => inputPublisher(claimed.submissionId, request),\n }),\n );\n\n const session: RunStorageSession = {\n ...writer,\n claim: claimed,\n ...(appendInput === undefined ? {} : { appendInput }),\n ...(store.readFreshRun === undefined || appendInput === undefined\n ? {}\n : {\n prepareStart: owner.withProgress(\n request.threadId,\n generation.use(\n Effect.gen(function* () {\n const snapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: claimed.submissionId }),\n );\n\n const submission = snapshot.submission;\n\n if (\n submission.threadId !== request.threadId ||\n submission.state !== \"ready\" ||\n submission.workerAdmission !== undefined ||\n submission.messageAdmission !== undefined ||\n submission.parentLinkage !== undefined ||\n snapshot.inputApplied !== undefined ||\n snapshot.abortIntent !== undefined ||\n snapshot.approvalDecisions.length !== 0\n )\n return undefined;\n\n const identity = yield* store.readFreshRun!(\n FreshRunRead.make({\n threadId: request.threadId,\n submissionId: claimed.submissionId,\n }),\n );\n\n if (Option.isNone(identity)) return undefined;\n adoptTail(identity.value.tailSequence);\n\n return { snapshot, identity: identity.value };\n }),\n ),\n ),\n }),\n release: generation.release,\n refresh: writer.refresh,\n markInputApplied: (marker) =>\n owned(\n ledger.markInputApplied(\n MarkInputAppliedRequest.make({\n ...marker,\n submissionId: claimed.submissionId,\n }),\n ),\n ),\n claimJoining: (maxCount) =>\n owned(\n ledger.claimJoining(\n ClaimJoiningRequest.make({\n threadId: request.threadId,\n hostSubmissionId: claimed.submissionId,\n maxCount,\n }),\n ),\n ),\n markJoined: (submissionId, marker) =>\n owned(\n ledger.markJoined(\n MarkJoinedRequest.make({\n ...marker,\n submissionId,\n }),\n ),\n ),\n revertJoining: (submissionId) =>\n owned(\n ledger.revertJoining(\n RevertJoiningRequest.make({\n submissionId,\n guard: { hostSubmissionId: claimed.submissionId },\n }),\n ),\n ),\n suspend: (reason) =>\n owned(\n ledger\n .suspend(\n SuspendRequest.make({\n submissionId: claimed.submissionId,\n reason,\n }),\n )\n .pipe(\n Effect.tap((outcome) =>\n outcome === \"suspended\" ? generation.release : Effect.void,\n ),\n ),\n ),\n publishSettlement: Effect.fnUntraced(function* (batch, executions) {\n const captured = yield* PreparedAppend.capture(\n AppendRequest.make({\n threadId: request.threadId,\n expectedTailSequence: (yield* writer.tail).sequence,\n batch,\n ...(executions === undefined ? {} : { executions }),\n }),\n ).pipe(\n Effect.mapError((cause) =>\n LedgerError.make({\n operation: \"capture settlement\",\n message: cause.message,\n cause,\n }),\n ),\n );\n\n return yield* owner.withProgress(\n request.threadId,\n owned(\n Effect.gen(function* () {\n for (let retries = 0; ; retries++) {\n const result = yield* publisher\n .publish(\n SettlementPublication.make({\n submissionId: claimed.submissionId,\n authority: { _tag: \"Owned\" },\n append: AppendRequest.make({\n ...captured,\n expectedTailSequence: (yield* writer.tail).sequence,\n }),\n }),\n )\n .pipe(\n Effect.catchTag(\"AppendConflict\", (conflict) => {\n if (\n conflict.reason !== \"tail\" ||\n conflict.actualTailSequence === undefined ||\n retries >= 8\n )\n return Effect.fail(conflict);\n\n return writer.refresh.pipe(\n Effect.andThen(\n captured.executions === undefined\n ? Effect.succeed(undefined)\n : Effect.fail(conflict),\n ),\n );\n }),\n );\n\n if (result === undefined) continue;\n adoptTail(result.tailSequence);\n\n return result;\n }\n }).pipe(\n Effect.onError((cause) =>\n isDefiniteWriteFailure(cause) ? Effect.void : generation.release,\n ),\n ),\n ),\n );\n }),\n reserveChildBudget: (value) =>\n owned(\n ledger.reserveChildBudget(\n ChildBudgetReservationRequest.make({\n ...value,\n parentSubmissionId: claimed.submissionId,\n }),\n ),\n ),\n attachChildToReservation: (value) =>\n owned(ledger.attachChildToReservation(AttachChildToReservationRequest.make(value))),\n };\n\n return Option.some(session);\n }).pipe(Effect.onError(() => generation.release)),\n );\n }),\n );\n\n return RunStorage.of({ claim, publishSettlement: publisher.publish });\n});\n\nexport const layer = () => Layer.effect(RunStorage, make);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RunStorage-DblN-cmM.mjs","names":[],"sources":["../src/durable/internal/StorageOwner.ts","../src/durable/RunStorage.ts"],"sourcesContent":["import { Context, Effect, Option, Semaphore, type Scope } from \"effect\";\n\nimport type { ThreadId } from \"../../core/Identifiers.ts\";\nimport { type Claim, LedgerError, OwnershipLost } from \"../SubmissionLedger.ts\";\n\nexport type MutationGate = <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;\n\n/** Local capability only. It is never encoded, persisted, or reconstructed from an Attempt ID. */\nexport interface OwnerGeneration {\n readonly claim: Claim;\n readonly identity: object;\n readonly checkActive: Effect.Effect<void, OwnershipLost>;\n readonly release: Effect.Effect<void>;\n readonly use: <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E | OwnershipLost, R>;\n}\n\nexport interface StorageOwnerService {\n readonly identity: object;\n readonly withMutation: MutationGate;\n readonly withProgress: <A, E, R>(\n threadId: ThreadId,\n effect: Effect.Effect<A, E, R>,\n ) => Effect.Effect<A, E, R>;\n readonly isClosed: () => boolean;\n readonly hasOwner: (threadId: string, submissionId?: string) => boolean;\n /** Trusted administrative retirement, while holding the same mutation gate. */\n readonly closeSubmission: (threadId: string, submissionId: string) => void;\n readonly acquire: <E, R>(\n threadId: ThreadId,\n select: Effect.Effect<Option.Option<Claim>, E, R>,\n ) => Effect.Effect<Option.Option<OwnerGeneration>, E | LedgerError, R | Scope.Scope>;\n}\n\nexport class StorageOwner extends Context.Service<StorageOwner, StorageOwnerService>()(\n \"@effect-agent/durable/StorageOwner\",\n) {}\n\nconst ActiveOwner = Context.Reference<object | undefined>(\n \"@effect-agent/durable/internal/ActiveStorageOwner\",\n { defaultValue: () => undefined },\n);\n\nconst ActiveProgress = Context.Reference<\n { readonly owner: object; readonly threadId: ThreadId } | undefined\n>(\"@effect-agent/durable/internal/ActiveProgress\", { defaultValue: () => undefined });\n\n/** Reuse the physical owner's gate; reentrant calls remain in the same mutation. */\nexport const makeStorageOwner = Effect.fnUntraced(function* (gate: MutationGate) {\n const identity = {};\n let closed = false;\n const progress = new Map<ThreadId, { readonly gate: Semaphore.Semaphore; users: number }>();\n const active = new Map<string, { readonly claim: Claim; closed: boolean }>();\n\n const withMutation: MutationGate = (effect) =>\n Effect.withFiber((fiber) => {\n const current = fiber.getRef(ActiveOwner);\n\n return current === identity\n ? effect\n : gate(Effect.provideService(effect, ActiveOwner, identity));\n });\n\n yield* Effect.addFinalizer(() =>\n withMutation(\n Effect.sync(() => {\n closed = true;\n for (const entry of active.values()) entry.closed = true;\n active.clear();\n }),\n ),\n );\n\n return StorageOwner.of({\n identity,\n withMutation,\n withProgress: (threadId, effect) =>\n Effect.withFiber((fiber) => {\n const current = fiber.getRef(ActiveProgress);\n\n if (current?.owner === identity && current.threadId === threadId) return effect;\n\n return Effect.suspend(() => {\n let entry = progress.get(threadId);\n\n if (entry === undefined) {\n entry = { gate: Semaphore.makeUnsafe(1), users: 0 };\n progress.set(threadId, entry);\n }\n const retained = entry;\n\n retained.users++;\n\n return retained.gate\n .withPermits(1)(\n Effect.provideService(effect, ActiveProgress, { owner: identity, threadId }),\n )\n .pipe(\n Effect.ensuring(\n Effect.sync(() => {\n retained.users--;\n if (retained.users === 0 && progress.get(threadId) === retained)\n progress.delete(threadId);\n }),\n ),\n );\n });\n }),\n isClosed: () => closed,\n hasOwner: (threadId, submissionId) => {\n const entry = active.get(threadId);\n\n return (\n !closed &&\n entry !== undefined &&\n !entry.closed &&\n (submissionId === undefined || entry.claim.submissionId === submissionId)\n );\n },\n closeSubmission: (threadId, submissionId) => {\n const entry = active.get(threadId);\n\n if (entry?.claim.submissionId !== submissionId) return;\n entry.closed = true;\n active.delete(threadId);\n },\n acquire: (threadId, select) =>\n Effect.uninterruptibleMask((restore) =>\n Effect.gen(function* () {\n const selected = yield* withMutation(\n Effect.gen(function* () {\n if (closed)\n return yield* LedgerError.make({\n operation: \"claim\",\n message: \"Storage owner is closed\",\n });\n if (active.has(threadId)) return Option.none<OwnerGeneration>();\n const selected = yield* select;\n\n if (Option.isNone(selected)) return Option.none<OwnerGeneration>();\n const entry = { claim: selected.value, closed: false };\n\n active.set(threadId, entry);\n\n const checkActive = Effect.suspend(() =>\n closed || entry.closed || active.get(threadId) !== entry\n ? Effect.fail(OwnershipLost.make({ submissionId: entry.claim.submissionId }))\n : Effect.void,\n );\n\n const release = withMutation(\n Effect.sync(() => {\n entry.closed = true;\n if (active.get(threadId) === entry) active.delete(threadId);\n }),\n );\n\n return Option.some<OwnerGeneration>({\n claim: entry.claim,\n identity: entry,\n checkActive,\n release,\n use: (effect) => withMutation(Effect.andThen(checkActive, effect)),\n });\n }),\n );\n\n if (Option.isNone(selected)) return selected;\n // A closed Scope runs this immediately. Never register while holding a nonlocal gate.\n yield* Effect.addFinalizer(() => selected.value.release);\n\n return yield* restore(Effect.succeed(selected));\n }),\n ),\n });\n});\n","import type { Scope } from \"effect\";\nimport { Cause, Context, Effect, Layer, Option, Schema } from \"effect\";\n\nimport type { SubmissionId, ThreadId } from \"../core/Identifiers.ts\";\nimport { StorageOwner } from \"./internal/StorageOwner.ts\";\nimport type { CanonicalBatch, CanonicalSequence } from \"./Records.ts\";\nimport {\n SettlementPublication,\n type SettlementPublicationFailure,\n type SettlementPublicationResult,\n SettlementPublisher,\n} from \"./SettlementPublisher.ts\";\nimport {\n AttachChildToReservationRequest,\n ChildBudgetReservationRequest,\n ClaimJoiningRequest,\n type Claim,\n type ClaimRequest,\n type InputAppliedMarker,\n type RecoverySnapshot,\n RecoverySnapshotRequest,\n LedgerError,\n MarkInputAppliedRequest,\n MarkJoinedRequest,\n OwnershipLost,\n RevertJoiningRequest,\n SettlementConflict,\n SubmissionLedger,\n SuspendRequest,\n type SuspensionReason,\n} from \"./SubmissionLedger.ts\";\nimport {\n type AppendResult,\n AppendConflict,\n AppendRequest,\n type CommitBatch,\n type ExecutionUpdate,\n PreparedAppend,\n FreshRunRead,\n type ThreadIdentity,\n ThreadMaterialization,\n ThreadNotMaterialized,\n ThreadStore,\n ThreadStoreError,\n type ThreadStoreFailure,\n ThreadTailRequest,\n} from \"./ThreadStore.ts\";\n\nexport {\n StorageOwner,\n makeStorageOwner,\n type MutationGate,\n type OwnerGeneration,\n type StorageOwnerService,\n} from \"./internal/StorageOwner.ts\";\n\nexport const RunChildBudgetReservation = Schema.Struct({\n reservationId: ChildBudgetReservationRequest.fields.reservationId,\n parentToolCallId: ChildBudgetReservationRequest.fields.parentToolCallId,\n allocation: ChildBudgetReservationRequest.fields.allocation,\n allocationDigest: ChildBudgetReservationRequest.fields.allocationDigest,\n});\n\nexport type RunChildBudgetReservation = typeof RunChildBudgetReservation.Type;\n\nexport const RunChildAttachment = Schema.Struct({\n reservationId: AttachChildToReservationRequest.fields.reservationId,\n childSubmissionId: AttachChildToReservationRequest.fields.childSubmissionId,\n});\n\nexport type RunChildAttachment = typeof RunChildAttachment.Type;\n\n/** Commands bound to one local scoped owner. No authority is transported in their values. */\nexport interface RunOwnership {\n readonly release: Effect.Effect<void>;\n readonly markInputApplied: (\n marker: InputAppliedMarker,\n ) => ReturnType<SubmissionLedger[\"Service\"][\"markInputApplied\"]>;\n readonly claimJoining: (\n maxCount: number,\n ) => ReturnType<SubmissionLedger[\"Service\"][\"claimJoining\"]>;\n readonly markJoined: (\n submissionId: SubmissionId,\n marker: InputAppliedMarker,\n ) => ReturnType<SubmissionLedger[\"Service\"][\"markJoined\"]>;\n readonly revertJoining: (\n submissionId: SubmissionId,\n ) => Effect.Effect<void, LedgerError | OwnershipLost>;\n readonly suspend: (\n reason: SuspensionReason,\n ) => ReturnType<SubmissionLedger[\"Service\"][\"suspend\"]>;\n readonly reserveChildBudget: (\n request: RunChildBudgetReservation,\n ) => ReturnType<SubmissionLedger[\"Service\"][\"reserveChildBudget\"]>;\n readonly attachChildToReservation: (\n request: RunChildAttachment,\n ) => ReturnType<SubmissionLedger[\"Service\"][\"attachChildToReservation\"]>;\n}\n\nexport interface RunWriter {\n readonly threadId: ThreadId;\n /** Opaque cache identity for this local writer lifetime; never portable authority. */\n readonly generation: object;\n readonly refresh: Effect.Effect<void, ThreadStoreFailure>;\n readonly withProgress: <A, E, R>(\n effect: Effect.Effect<A, E, R>,\n ) => Effect.Effect<A, E | ThreadStoreFailure, R>;\n readonly tail: Effect.Effect<{ readonly sequence: CanonicalSequence }>;\n /** Uncertain commit failures close this session before another command may enter. */\n readonly append: (\n batch: CommitBatch,\n executions?: ReadonlyArray<ExecutionUpdate>,\n ) => Effect.Effect<AppendResult, ThreadStoreFailure>;\n /** Recheck the captured local capability after preflight, immediately before effect dispatch. */\n readonly checkActive: Effect.Effect<void, ThreadStoreFailure>;\n}\n\nexport interface RunStorageSession extends RunWriter, RunOwnership {\n readonly claim: Claim;\n /** Atomic original input/context plus the ledger marker, when the adapter supports it. */\n readonly appendInput?: RunWriter[\"append\"];\n /** Read current controls, root identity and empty-Run evidence under this owner.\n * Its tail is adopted by the writer; append still checks the tail and revision. */\n readonly prepareStart?: Effect.Effect<\n { readonly snapshot: RecoverySnapshot; readonly identity: ThreadIdentity } | undefined,\n LedgerError | ThreadStoreFailure\n >;\n readonly refresh: Effect.Effect<void, ThreadStoreFailure>;\n readonly publishSettlement: (\n batch: CanonicalBatch,\n executions?: ReadonlyArray<ExecutionUpdate>,\n ) => Effect.Effect<SettlementPublicationResult, SettlementPublicationFailure>;\n}\n\nexport class RunStorage extends Context.Service<\n RunStorage,\n {\n readonly publishSettlement: SettlementPublisher[\"Service\"][\"publish\"];\n readonly claim: (\n request: ClaimRequest,\n ) => Effect.Effect<\n Option.Option<RunStorageSession>,\n LedgerError | ThreadStoreFailure,\n Scope.Scope\n >;\n }\n>()(\"@effect-agent/thread/RunStorage\") {}\n\n/** One writer's scoped capability, selected at claim or administrative construction. */\nclass WriterOwnership extends Context.Service<\n WriterOwnership,\n {\n readonly identity: object;\n readonly checkActive: Effect.Effect<void, ThreadStoreFailure>;\n readonly release: Effect.Effect<void>;\n }\n>()(\"@effect-agent/durable/internal/WriterOwnership\") {}\n\nconst isDefiniteWriteRefusal = Schema.is(\n Schema.Union([AppendConflict, OwnershipLost, SettlementConflict, ThreadNotMaterialized]),\n);\n\nconst isDefiniteWriteFailure = (cause: Cause.Cause<unknown>) =>\n cause.reasons.length > 0 &&\n cause.reasons.every(\n (reason) => Cause.isFailReason(reason) && isDefiniteWriteRefusal(reason.error),\n );\n\nconst makeWriter = Effect.fnUntraced(function* (threadId: ThreadId) {\n const store = yield* ThreadStore;\n const owner = yield* StorageOwner;\n const ownership = yield* WriterOwnership;\n const checkActive = ownership.checkActive;\n const initial = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n let tail = { sequence: initial.tailSequence };\n\n const refresh = owner.withMutation(\n Effect.gen(function* () {\n yield* checkActive;\n const current = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n\n tail = { sequence: current.tailSequence };\n }),\n );\n\n const makeAppend = Effect.gen(function* () {\n const publisher = yield* ThreadStore;\n\n const append: RunWriter[\"append\"] = Effect.fnUntraced(function* (batch, executions) {\n const captured = yield* PreparedAppend.capture({\n threadId,\n expectedTailSequence: tail.sequence,\n batch,\n ...(executions === undefined ? {} : { executions }),\n }).pipe(\n Effect.mapError((cause) =>\n ThreadStoreError.make({\n operation: \"capture append\",\n message: cause.message,\n cause,\n }),\n ),\n );\n\n return yield* owner.withProgress(\n threadId,\n owner.withMutation(\n Effect.gen(function* () {\n yield* checkActive;\n for (let retries = 0; ; retries++) {\n const result = yield* publisher\n .append(\n captured.expectedTailSequence === tail.sequence\n ? captured\n : AppendRequest.make({\n ...captured,\n expectedTailSequence: tail.sequence,\n }),\n )\n .pipe(\n Effect.catchTag(\"AppendConflict\", (conflict) => {\n if (\n conflict.reason !== \"tail\" ||\n conflict.actualTailSequence === undefined ||\n retries >= 8\n )\n return Effect.fail(conflict);\n tail = { sequence: conflict.actualTailSequence };\n if (captured.executions !== undefined) return Effect.fail(conflict);\n\n return Effect.succeed(undefined);\n }),\n );\n\n if (result === undefined) continue;\n // A historical replay returns its original coordinates, not today's canonical tail.\n if (result.replayed) yield* refresh;\n else tail = { sequence: result.lastSequence };\n\n return result;\n }\n }).pipe(\n // Revoke uncertain writes before releasing the writer's mutation gate.\n Effect.onError((cause) =>\n isDefiniteWriteFailure(cause) ? Effect.void : ownership.release,\n ),\n ),\n ),\n );\n });\n\n return append;\n });\n\n const writer = {\n threadId,\n generation: ownership.identity,\n withProgress: <A, E, R>(effect: Effect.Effect<A, E, R>) =>\n owner.withProgress(threadId, Effect.andThen(checkActive, effect)),\n tail: Effect.sync(() => tail),\n append: yield* makeAppend,\n checkActive: owner.withMutation(checkActive),\n refresh,\n };\n\n return {\n writer,\n makeAppend,\n adoptTail: (sequence: CanonicalSequence) => {\n tail = { sequence };\n },\n };\n});\n\n/** Trusted administrative writer sharing the physical owner's gate and lifetime. */\nexport const makeRunWriter = Effect.fnUntraced(function* (threadId: ThreadId) {\n const owner = yield* StorageOwner;\n\n return (yield* makeWriter(threadId).pipe(\n Effect.provideService(WriterOwnership, {\n identity: owner.identity,\n checkActive: Effect.suspend(() =>\n owner.isClosed()\n ? Effect.fail(\n ThreadStoreError.make({\n operation: \"write Thread\",\n message: \"Storage owner is closed\",\n }),\n )\n : Effect.void,\n ),\n release: Effect.void,\n }),\n )).writer;\n});\n\n/** The same scoped single-owner protocol is used by every adapter. */\nexport const make = Effect.gen(function* () {\n const ledger = yield* SubmissionLedger;\n const store = yield* ThreadStore;\n const publisher = yield* SettlementPublisher;\n const owner = yield* StorageOwner;\n\n const claim: RunStorage[\"Service\"][\"claim\"] = (request) =>\n Effect.uninterruptibleMask((restore) =>\n Effect.gen(function* () {\n const granted = yield* owner.acquire(request.threadId, ledger.selectHead(request));\n\n if (Option.isNone(granted)) return Option.none();\n const generation = granted.value;\n const claimed = generation.claim;\n\n return yield* restore(\n Effect.gen(function* () {\n if (\n request.handoff !== undefined &&\n request.handoff.submissionId !== claimed.submissionId\n )\n return yield* LedgerError.make({\n operation: \"claim handoff\",\n message: \"The submission adapter did not honor the requested handoff\",\n });\n yield* store.materialize(ThreadMaterialization.make({ threadId: request.threadId }));\n\n const { writer, makeAppend, adoptTail } = yield* makeWriter(request.threadId).pipe(\n Effect.provideService(WriterOwnership, generation),\n Effect.provideService(ThreadStore, store),\n Effect.provideService(StorageOwner, owner),\n );\n\n const owned = <A, E>(effect: Effect.Effect<A, E>) => generation.use(effect);\n\n const inputPublisher = ledger.appendInput;\n\n const appendInput =\n inputPublisher === undefined\n ? undefined\n : yield* makeAppend.pipe(\n Effect.provideService(ThreadStore, {\n ...store,\n append: (request) => inputPublisher(claimed.submissionId, request),\n }),\n );\n\n const session: RunStorageSession = {\n ...writer,\n claim: claimed,\n ...(appendInput === undefined ? {} : { appendInput }),\n ...(store.readFreshRun === undefined || appendInput === undefined\n ? {}\n : {\n prepareStart: owner.withProgress(\n request.threadId,\n generation.use(\n Effect.gen(function* () {\n const snapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: claimed.submissionId }),\n );\n\n const submission = snapshot.submission;\n\n if (\n submission.threadId !== request.threadId ||\n submission.state !== \"ready\" ||\n submission.workerAdmission !== undefined ||\n submission.messageAdmission !== undefined ||\n submission.parentLinkage !== undefined ||\n snapshot.inputApplied !== undefined ||\n snapshot.abortIntent !== undefined ||\n snapshot.approvalDecisions.length !== 0\n )\n return undefined;\n\n const identity = yield* store.readFreshRun!(\n FreshRunRead.make({\n threadId: request.threadId,\n submissionId: claimed.submissionId,\n }),\n );\n\n if (Option.isNone(identity)) return undefined;\n adoptTail(identity.value.tailSequence);\n\n return { snapshot, identity: identity.value };\n }),\n ),\n ),\n }),\n release: generation.release,\n refresh: writer.refresh,\n markInputApplied: (marker) =>\n owned(\n ledger.markInputApplied(\n MarkInputAppliedRequest.make({\n ...marker,\n submissionId: claimed.submissionId,\n }),\n ),\n ),\n claimJoining: (maxCount) =>\n owned(\n ledger.claimJoining(\n ClaimJoiningRequest.make({\n threadId: request.threadId,\n hostSubmissionId: claimed.submissionId,\n maxCount,\n }),\n ),\n ),\n markJoined: (submissionId, marker) =>\n owned(\n ledger.markJoined(\n MarkJoinedRequest.make({\n ...marker,\n submissionId,\n }),\n ),\n ),\n revertJoining: (submissionId) =>\n owned(\n ledger.revertJoining(\n RevertJoiningRequest.make({\n submissionId,\n guard: { hostSubmissionId: claimed.submissionId },\n }),\n ),\n ),\n suspend: (reason) =>\n owned(\n ledger\n .suspend(\n SuspendRequest.make({\n submissionId: claimed.submissionId,\n reason,\n }),\n )\n .pipe(\n Effect.tap((outcome) =>\n outcome === \"suspended\" ? generation.release : Effect.void,\n ),\n ),\n ),\n publishSettlement: Effect.fnUntraced(function* (batch, executions) {\n const captured = yield* PreparedAppend.capture(\n AppendRequest.make({\n threadId: request.threadId,\n expectedTailSequence: (yield* writer.tail).sequence,\n batch,\n ...(executions === undefined ? {} : { executions }),\n }),\n ).pipe(\n Effect.mapError((cause) =>\n LedgerError.make({\n operation: \"capture settlement\",\n message: cause.message,\n cause,\n }),\n ),\n );\n\n return yield* owner.withProgress(\n request.threadId,\n owned(\n Effect.gen(function* () {\n for (let retries = 0; ; retries++) {\n const result = yield* publisher\n .publish(\n SettlementPublication.make({\n submissionId: claimed.submissionId,\n authority: { _tag: \"Owned\" },\n append: AppendRequest.make({\n ...captured,\n expectedTailSequence: (yield* writer.tail).sequence,\n }),\n }),\n )\n .pipe(\n Effect.catchTag(\"AppendConflict\", (conflict) => {\n if (\n conflict.reason !== \"tail\" ||\n conflict.actualTailSequence === undefined ||\n retries >= 8\n )\n return Effect.fail(conflict);\n\n return writer.refresh.pipe(\n Effect.andThen(\n captured.executions === undefined\n ? Effect.succeed(undefined)\n : Effect.fail(conflict),\n ),\n );\n }),\n );\n\n if (result === undefined) continue;\n adoptTail(result.tailSequence);\n\n return result;\n }\n }).pipe(\n Effect.onError((cause) =>\n isDefiniteWriteFailure(cause) ? Effect.void : generation.release,\n ),\n ),\n ),\n );\n }),\n reserveChildBudget: (value) =>\n owned(\n ledger.reserveChildBudget(\n ChildBudgetReservationRequest.make({\n ...value,\n parentSubmissionId: claimed.submissionId,\n }),\n ),\n ),\n attachChildToReservation: (value) =>\n owned(ledger.attachChildToReservation(AttachChildToReservationRequest.make(value))),\n };\n\n return Option.some(session);\n }).pipe(Effect.onError(() => generation.release)),\n );\n }),\n );\n\n return RunStorage.of({ claim, publishSettlement: publisher.publish });\n});\n\nexport const layer = () => Layer.effect(RunStorage, make);\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { a as Receipt } from "./Receipt-BkM21Qiu.mjs";
|
|
2
2
|
import { a as FailureDiagnostic_d_exports, r as Diagnostic } from "./FailureDiagnostic-DvHruCSJ.mjs";
|
|
3
|
-
import { S as Digest, b as DefinitionDigests } from "./Records-
|
|
3
|
+
import { S as Digest, b as DefinitionDigests } from "./Records-BP67Yz6n.mjs";
|
|
4
4
|
import { Context, Effect, Schema } from "effect";
|
|
5
5
|
declare namespace Schedule_d_exports {
|
|
6
6
|
export { ScheduleAuthorizationDecision, ScheduleAuthorizationError, ScheduleAuthorizer, ScheduleCapacityError, ScheduleChange, ScheduleConfiguration, ScheduleConflict, ScheduleDestination, ScheduleDueCursor, ScheduleFailpoint, ScheduleFailpointError, ScheduleId, ScheduleInstant, ScheduleKey, ScheduleManagementAuthorization, ScheduleManagementOperation, ScheduleNotFound, ScheduleOccurrenceAuthorization, ScheduleOwner, SchedulePage, SchedulePageRequest, SchedulePending, ScheduleRecord, ScheduleRefusal, ScheduleRetry, ScheduleRetryReason, ScheduleScope, ScheduleSkippedRange, ScheduleSnapshot, ScheduleSnapshotPage, ScheduleStorageError, ScheduleStore, ScheduleStoreFailure, ScheduleTiming, ScheduleTimingRequest, ScheduleValidationError, ScheduleWake, ScheduledEnvelope, ScheduledInputAdmission, ScheduledInputFailure, ScheduledInputRefused, ScheduledInputRetryable, SchedulingLimits, defaultSchedulingLimits };
|
|
@@ -844,4 +844,4 @@ declare const ScheduleFailpoint: Context.Reference<{
|
|
|
844
844
|
}>;
|
|
845
845
|
//#endregion
|
|
846
846
|
export { ScheduleSnapshotPage as A, ScheduledInputAdmission as B, ScheduleRecord as C, ScheduleScope as D, ScheduleRetryReason as E, ScheduleTimingRequest as F, defaultSchedulingLimits as G, ScheduledInputRefused as H, ScheduleValidationError as I, ScheduleWake as L, ScheduleStore as M, ScheduleStoreFailure as N, ScheduleSkippedRange as O, ScheduleTiming as P, Schedule_d_exports as R, SchedulePending as S, ScheduleRetry as T, ScheduledInputRetryable as U, ScheduledInputFailure as V, SchedulingLimits as W, ScheduleNotFound as _, ScheduleChange as a, SchedulePage as b, ScheduleDestination as c, ScheduleFailpointError as d, ScheduleId as f, ScheduleManagementOperation as g, ScheduleManagementAuthorization as h, ScheduleCapacityError as i, ScheduleStorageError as j, ScheduleSnapshot as k, ScheduleDueCursor as l, ScheduleKey as m, ScheduleAuthorizationError as n, ScheduleConfiguration as o, ScheduleInstant as p, ScheduleAuthorizer as r, ScheduleConflict as s, ScheduleAuthorizationDecision as t, ScheduleFailpoint as u, ScheduleOccurrenceAuthorization as v, ScheduleRefusal as w, SchedulePageRequest as x, ScheduleOwner as y, ScheduledEnvelope as z };
|
|
847
|
-
//# sourceMappingURL=Schedule-
|
|
847
|
+
//# sourceMappingURL=Schedule-CVLtl5rP.d.mts.map
|
|
@@ -2,8 +2,8 @@ import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
|
|
|
2
2
|
import { ThreadId } from "./core/Identifiers.mjs";
|
|
3
3
|
import { n as utf8ByteLength } from "./utf8-B5pAmhTo.mjs";
|
|
4
4
|
import { IdempotencyKey } from "./core/Receipt.mjs";
|
|
5
|
-
import { U as PersistedJson, v as DefinitionDigests } from "./Records-
|
|
6
|
-
import { s as digestJson } from "./Digest-
|
|
5
|
+
import { U as PersistedJson, v as DefinitionDigests } from "./Records-bbGVHprv.mjs";
|
|
6
|
+
import { s as digestJson } from "./Digest-CzLJcsWv.mjs";
|
|
7
7
|
import { ScheduleAuthorizer, ScheduleConflict, ScheduleDestination, ScheduleFailpoint, ScheduleInstant, ScheduleNotFound, ScheduleStorageError, ScheduleStore, ScheduleTimingRequest, ScheduleValidationError, ScheduleWake, ScheduledInputAdmission, SchedulingLimits, defaultSchedulingLimits } from "./durable/Schedule.mjs";
|
|
8
8
|
import { admitPreparedInput } from "./durable/PreparedInputAdmission.mjs";
|
|
9
9
|
import { Cause, Context, Cron, Crypto, DateTime, Effect, Layer, Option, Result, Schema, Semaphore } from "effect";
|
|
@@ -688,4 +688,4 @@ var ScheduleDriver = class ScheduleDriver extends Context.Service()("@effect-age
|
|
|
688
688
|
//#endregion
|
|
689
689
|
export { Scheduling_exports as i, ScheduleWakeNoop as n, Scheduling as r, ScheduleDriver as t };
|
|
690
690
|
|
|
691
|
-
//# sourceMappingURL=Scheduling-
|
|
691
|
+
//# sourceMappingURL=Scheduling-B6l0lWdr.mjs.map
|