@yielded/agent 0.1.0-beta.177 → 0.1.0-beta.179
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{Admin-Bpg24yCK.d.mts → Admin-NvXFPDIM.d.mts} +26 -6
- package/dist/{DurableAgentRuntime-CGW93k81.mjs → DurableAgentRuntime-CWhu1exp.mjs} +49 -69
- package/dist/DurableAgentRuntime-CWhu1exp.mjs.map +1 -0
- package/dist/{EventSource-A6TB7t-f.d.mts → EventSource-DNyaWmyQ.d.mts} +2 -2
- package/dist/{MessageDelivery-BkWrcQUd.d.mts → MessageDelivery-CLzWJImC.d.mts} +42 -42
- package/dist/{PreparedInputAdmission-DKIfqRZT.d.mts → PreparedInputAdmission-BQ9UCLFS.d.mts} +3 -3
- package/dist/{RunContinuation-D42RFqjS.mjs → RunContinuation-BF95Ncv2.mjs} +9 -11
- package/dist/RunContinuation-BF95Ncv2.mjs.map +1 -0
- package/dist/{RunContinuation-Ce2pR8VD.d.mts → RunContinuation-CL0wBsQE.d.mts} +3 -6
- package/dist/{RunStorage-BRGP3Tcu.mjs → RunStorage-DlfvMfHM.mjs} +20 -6
- package/dist/RunStorage-DlfvMfHM.mjs.map +1 -0
- package/dist/{Subscription-D5sOrmlI.d.mts → Subscription-D2yn6Eo3.d.mts} +2 -2
- package/dist/{SubscriptionInput-CxSXZUiC.d.mts → SubscriptionInput-Cog4x7Rd.d.mts} +2 -2
- package/dist/{ThreadImport-DUcPj5jC.mjs → ThreadImport-BoTfjjrz.mjs} +4 -4
- package/dist/{ThreadImport-DUcPj5jC.mjs.map → ThreadImport-BoTfjjrz.mjs.map} +1 -1
- package/dist/{ThreadImport-C6IiPJMW.d.mts → ThreadImport-em89zmM-.d.mts} +4 -4
- package/dist/{ThreadStore-Cn6FDWX9.mjs → ThreadStore-D2rqtt7k.mjs} +13 -8
- package/dist/ThreadStore-D2rqtt7k.mjs.map +1 -0
- package/dist/{ThreadTransfer-BWnAHIge.mjs → ThreadTransfer-BFolkpEp.mjs} +2 -2
- package/dist/{ThreadTransfer-BWnAHIge.mjs.map → ThreadTransfer-BFolkpEp.mjs.map} +1 -1
- package/dist/{WorkerAdmission-cfiK9aRi.mjs → WorkerAdmission-CtX1HRkm.mjs} +2 -2
- package/dist/{WorkerAdmission-cfiK9aRi.mjs.map → WorkerAdmission-CtX1HRkm.mjs.map} +1 -1
- package/dist/capabilities/BrowserUse.d.mts +36 -18
- package/dist/capabilities/BrowserUse.mjs +43 -11
- package/dist/capabilities/BrowserUse.mjs.map +1 -1
- package/dist/capabilities/CodeMode.mjs +1 -0
- package/dist/capabilities/CodeMode.mjs.map +1 -1
- package/dist/durable/Admin.d.mts +1 -1
- package/dist/durable/AgentRegistration.d.mts +1 -1
- package/dist/durable/Certification.d.mts +1 -1
- package/dist/durable/CommittedActivity.d.mts +1 -1
- package/dist/durable/CommittedActivity.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/GitHubWorkflowSource.d.mts +3 -3
- package/dist/durable/LifecyclePublication.d.mts +1 -1
- package/dist/durable/LifecyclePublication.mjs +1 -1
- package/dist/durable/MessageDelivery.d.mts +1 -1
- package/dist/durable/MessageDeliveryStoreConformance.d.mts +2 -2
- package/dist/durable/PersistentHistory.d.mts +1 -1
- package/dist/durable/PersistentHistory.mjs +2 -2
- package/dist/durable/PreparedInputAdmission.d.mts +1 -1
- package/dist/durable/Recovery.d.mts +1 -1
- package/dist/durable/RunContinuation.d.mts +2 -2
- package/dist/durable/RunContinuation.mjs +2 -2
- package/dist/durable/RunJournal.d.mts +1 -1
- package/dist/durable/RunStorage.d.mts +1 -1
- package/dist/durable/RunStorage.mjs +1 -1
- package/dist/durable/Scheduling.d.mts +1 -1
- package/dist/durable/SettlementPublisher.d.mts +1 -1
- package/dist/durable/SettlementPublisher.mjs +1 -1
- package/dist/durable/SubmissionLedger.d.mts +1 -1
- package/dist/durable/SubmissionLedgerConformance.d.mts +1 -1
- package/dist/durable/SubmissionLedgerConformance.mjs +2 -2
- package/dist/durable/SubmissionStatus.d.mts +1 -1
- package/dist/durable/Subscription.d.mts +1 -1
- package/dist/durable/SubscriptionInput.d.mts +1 -1
- package/dist/durable/SubscriptionStoreConformance.d.mts +1 -1
- package/dist/durable/SubscriptionTools.d.mts +2 -2
- package/dist/durable/SubscriptionTransition.d.mts +1 -1
- package/dist/durable/Subscriptions.d.mts +5 -5
- package/dist/durable/ThreadArchiveRange.d.mts +1 -1
- package/dist/durable/ThreadContextHistory.d.mts +1 -1
- package/dist/durable/ThreadContextHistory.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 +3 -3
- 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 -1
- package/dist/durable/ThreadStoreConformance.mjs +2 -2
- package/dist/durable/ThreadTransfer.d.mts +1 -1
- package/dist/durable/ThreadTransfer.mjs +1 -1
- package/dist/durable/ThreadWork.d.mts +1 -1
- package/dist/durable/ThreadWork.mjs +2 -2
- package/dist/durable/WorkerAdmission.d.mts +1 -1
- package/dist/durable/WorkerAdmission.mjs +1 -1
- package/dist/durable/WorkerHost.d.mts +1 -1
- package/dist/index.d.mts +8 -8
- package/dist/index.mjs +6 -6
- package/dist/{run-context-reader-BtBPX_nC.d.mts → run-context-reader-kpO9xhP2.d.mts} +2 -2
- package/dist/sandbox/CodeExecutor.d.mts +3 -1
- package/dist/sandbox/CodeExecutor.mjs +3 -1
- package/dist/sandbox/CodeExecutor.mjs.map +1 -1
- package/package.json +1 -1
- package/src/capabilities/BrowserUse.ts +53 -15
- package/src/capabilities/CodeMode.ts +1 -0
- package/src/durable/DurableAgentRuntime.ts +78 -143
- package/src/durable/RunContinuation.ts +44 -32
- package/src/durable/RunStorage.ts +56 -15
- package/src/durable/ThreadStore.ts +11 -0
- package/src/durable/internal/prompt-history-cache.ts +19 -3
- package/src/durable/internal/record-encoding.ts +8 -7
- package/src/sandbox/CodeExecutor.ts +3 -1
- package/dist/DurableAgentRuntime-CGW93k81.mjs.map +0 -1
- package/dist/RunContinuation-D42RFqjS.mjs.map +0 -1
- package/dist/RunStorage-BRGP3Tcu.mjs.map +0 -1
- package/dist/ThreadStore-Cn6FDWX9.mjs.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { K as PersistedJson } from "./Records-BTnGRdcf.mjs";
|
|
2
|
-
import { E as SubscriptionSourceError, b as SubscriptionRecord, i as EventSourceVersion, t as AcceptedEvent } from "./Subscription-
|
|
2
|
+
import { E as SubscriptionSourceError, b as SubscriptionRecord, i as EventSourceVersion, t as AcceptedEvent } from "./Subscription-D2yn6Eo3.mjs";
|
|
3
3
|
import { Context, Effect, Schema, Scope } from "effect";
|
|
4
4
|
declare namespace EventSource_d_exports {
|
|
5
5
|
export { EventSource, EventSources, NormalizedEvent, makeEventSource };
|
|
@@ -48,4 +48,4 @@ declare const makeEventSource: <Event extends Schema.Top, Parameters extends Sch
|
|
|
48
48
|
}) => Effect.Effect<EventSource, never, Exclude<R, Scope.Scope> | Exclude<Event["DecodingServices"], Scope.Scope> | Exclude<Event["EncodingServices"], Scope.Scope> | Exclude<Parameters["DecodingServices"], Scope.Scope> | Exclude<Parameters["EncodingServices"], Scope.Scope>>;
|
|
49
49
|
//#endregion
|
|
50
50
|
export { makeEventSource as a, NormalizedEvent as i, EventSource_d_exports as n, EventSources as r, EventSource as t };
|
|
51
|
-
//# sourceMappingURL=EventSource-
|
|
51
|
+
//# sourceMappingURL=EventSource-DNyaWmyQ.d.mts.map
|
|
@@ -5,9 +5,9 @@ import { r as Update } from "./AgentUpdates-DksV4D0A.mjs";
|
|
|
5
5
|
import { a as FailureDiagnostic_d_exports, r as Diagnostic } from "./FailureDiagnostic-DvHruCSJ.mjs";
|
|
6
6
|
import { t as AgentPolicy } from "./AgentPolicy-B4lbCU2T.mjs";
|
|
7
7
|
import { b as DefinitionDigests } from "./Records-BTnGRdcf.mjs";
|
|
8
|
-
import {
|
|
9
|
-
import { a as PreparedInput } from "./Subscription-
|
|
10
|
-
import { t as PreparedInputAdmission } from "./PreparedInputAdmission-
|
|
8
|
+
import { fo as LifecyclePublicationStorage, sn as Settlement } from "./Admin-NvXFPDIM.mjs";
|
|
9
|
+
import { a as PreparedInput } from "./Subscription-D2yn6Eo3.mjs";
|
|
10
|
+
import { t as PreparedInputAdmission } from "./PreparedInputAdmission-BQ9UCLFS.mjs";
|
|
11
11
|
import { Context, Crypto, Effect, Layer, Result, Schema } from "effect";
|
|
12
12
|
declare namespace MessageDelivery_d_exports {
|
|
13
13
|
export { MessageDeliveryChange, MessageDeliveryCompletion, MessageDeliveryDriver, MessageDeliveryDriverLimits, MessageDeliveryError, MessageDeliveryFailpoint, MessageDeliveryFailpointError, MessageDeliveryFailure, MessageDeliveryKey, MessageDeliveryPage, MessageDeliveryPageRequest, MessageDeliveryPolicy, MessageDeliveryRecord, MessageDeliveryStore, MessageDeliveryStoreLimits, applyMessageDeliveryChange, defaultMessageDeliveryPolicy, defaultMessageDeliveryStoreLimits, isWorkerUpdateDelivery, messageDeliveryCapacity, messageDeliveryDeadline, messageDeliveryKeyString, messageDeliveryUsesCapacity, peerMessageRetentionDeadline, prepareMessageDelivery, readPending, sameMessageDeliveryIdentity, validateMessageDelivery };
|
|
@@ -633,25 +633,6 @@ declare const readPending: (request: Pick<{
|
|
|
633
633
|
readonly reportKind?: "update" | undefined;
|
|
634
634
|
} | undefined;
|
|
635
635
|
readonly messageAdmission?: {
|
|
636
|
-
readonly schemaVersion: 1;
|
|
637
|
-
readonly message: {
|
|
638
|
-
readonly ownerThreadId: string & import("effect/Brand").Brand<"@effect-agent/core/ThreadId">;
|
|
639
|
-
readonly messageId: string & import("effect/Brand").Brand<"@effect-agent/thread/IdempotencyKey">;
|
|
640
|
-
};
|
|
641
|
-
readonly peerName: string;
|
|
642
|
-
readonly sender: {
|
|
643
|
-
readonly threadId: string & import("effect/Brand").Brand<"@effect-agent/core/ThreadId">;
|
|
644
|
-
readonly agentId: string & import("effect/Brand").Brand<"@effect-agent/core/AgentId">;
|
|
645
|
-
};
|
|
646
|
-
readonly returnAddress: {
|
|
647
|
-
readonly threadId: string & import("effect/Brand").Brand<"@effect-agent/core/ThreadId">;
|
|
648
|
-
readonly agentId: string & import("effect/Brand").Brand<"@effect-agent/core/AgentId">;
|
|
649
|
-
};
|
|
650
|
-
readonly inReplyTo?: {
|
|
651
|
-
readonly ownerThreadId: string & import("effect/Brand").Brand<"@effect-agent/core/ThreadId">;
|
|
652
|
-
readonly messageId: string & import("effect/Brand").Brand<"@effect-agent/thread/IdempotencyKey">;
|
|
653
|
-
} | undefined;
|
|
654
|
-
} | {
|
|
655
636
|
readonly _tag: "WorkerCompletion";
|
|
656
637
|
readonly budgetExhausted: boolean;
|
|
657
638
|
readonly schemaVersion: 1;
|
|
@@ -692,6 +673,25 @@ declare const readPending: (request: Pick<{
|
|
|
692
673
|
readonly threadId: string & import("effect/Brand").Brand<"@effect-agent/core/ThreadId">;
|
|
693
674
|
};
|
|
694
675
|
readonly update: Update;
|
|
676
|
+
} | {
|
|
677
|
+
readonly schemaVersion: 1;
|
|
678
|
+
readonly message: {
|
|
679
|
+
readonly ownerThreadId: string & import("effect/Brand").Brand<"@effect-agent/core/ThreadId">;
|
|
680
|
+
readonly messageId: string & import("effect/Brand").Brand<"@effect-agent/thread/IdempotencyKey">;
|
|
681
|
+
};
|
|
682
|
+
readonly peerName: string;
|
|
683
|
+
readonly sender: {
|
|
684
|
+
readonly threadId: string & import("effect/Brand").Brand<"@effect-agent/core/ThreadId">;
|
|
685
|
+
readonly agentId: string & import("effect/Brand").Brand<"@effect-agent/core/AgentId">;
|
|
686
|
+
};
|
|
687
|
+
readonly returnAddress: {
|
|
688
|
+
readonly threadId: string & import("effect/Brand").Brand<"@effect-agent/core/ThreadId">;
|
|
689
|
+
readonly agentId: string & import("effect/Brand").Brand<"@effect-agent/core/AgentId">;
|
|
690
|
+
};
|
|
691
|
+
readonly inReplyTo?: {
|
|
692
|
+
readonly ownerThreadId: string & import("effect/Brand").Brand<"@effect-agent/core/ThreadId">;
|
|
693
|
+
readonly messageId: string & import("effect/Brand").Brand<"@effect-agent/thread/IdempotencyKey">;
|
|
694
|
+
} | undefined;
|
|
695
695
|
} | undefined;
|
|
696
696
|
};
|
|
697
697
|
readonly envelopeDigest: string & import("effect/Brand").Brand<"@effect-agent/thread/Digest">;
|
|
@@ -836,25 +836,6 @@ declare const prepareMessageDelivery: (options: {
|
|
|
836
836
|
readonly reportKind?: "update" | undefined;
|
|
837
837
|
} | undefined;
|
|
838
838
|
readonly messageAdmission?: {
|
|
839
|
-
readonly schemaVersion: 1;
|
|
840
|
-
readonly message: {
|
|
841
|
-
readonly ownerThreadId: string & import("effect/Brand").Brand<"@effect-agent/core/ThreadId">;
|
|
842
|
-
readonly messageId: string & import("effect/Brand").Brand<"@effect-agent/thread/IdempotencyKey">;
|
|
843
|
-
};
|
|
844
|
-
readonly peerName: string;
|
|
845
|
-
readonly sender: {
|
|
846
|
-
readonly threadId: string & import("effect/Brand").Brand<"@effect-agent/core/ThreadId">;
|
|
847
|
-
readonly agentId: string & import("effect/Brand").Brand<"@effect-agent/core/AgentId">;
|
|
848
|
-
};
|
|
849
|
-
readonly returnAddress: {
|
|
850
|
-
readonly threadId: string & import("effect/Brand").Brand<"@effect-agent/core/ThreadId">;
|
|
851
|
-
readonly agentId: string & import("effect/Brand").Brand<"@effect-agent/core/AgentId">;
|
|
852
|
-
};
|
|
853
|
-
readonly inReplyTo?: {
|
|
854
|
-
readonly ownerThreadId: string & import("effect/Brand").Brand<"@effect-agent/core/ThreadId">;
|
|
855
|
-
readonly messageId: string & import("effect/Brand").Brand<"@effect-agent/thread/IdempotencyKey">;
|
|
856
|
-
} | undefined;
|
|
857
|
-
} | {
|
|
858
839
|
readonly _tag: "WorkerCompletion";
|
|
859
840
|
readonly budgetExhausted: boolean;
|
|
860
841
|
readonly schemaVersion: 1;
|
|
@@ -895,6 +876,25 @@ declare const prepareMessageDelivery: (options: {
|
|
|
895
876
|
readonly threadId: string & import("effect/Brand").Brand<"@effect-agent/core/ThreadId">;
|
|
896
877
|
};
|
|
897
878
|
readonly update: Update;
|
|
879
|
+
} | {
|
|
880
|
+
readonly schemaVersion: 1;
|
|
881
|
+
readonly message: {
|
|
882
|
+
readonly ownerThreadId: string & import("effect/Brand").Brand<"@effect-agent/core/ThreadId">;
|
|
883
|
+
readonly messageId: string & import("effect/Brand").Brand<"@effect-agent/thread/IdempotencyKey">;
|
|
884
|
+
};
|
|
885
|
+
readonly peerName: string;
|
|
886
|
+
readonly sender: {
|
|
887
|
+
readonly threadId: string & import("effect/Brand").Brand<"@effect-agent/core/ThreadId">;
|
|
888
|
+
readonly agentId: string & import("effect/Brand").Brand<"@effect-agent/core/AgentId">;
|
|
889
|
+
};
|
|
890
|
+
readonly returnAddress: {
|
|
891
|
+
readonly threadId: string & import("effect/Brand").Brand<"@effect-agent/core/ThreadId">;
|
|
892
|
+
readonly agentId: string & import("effect/Brand").Brand<"@effect-agent/core/AgentId">;
|
|
893
|
+
};
|
|
894
|
+
readonly inReplyTo?: {
|
|
895
|
+
readonly ownerThreadId: string & import("effect/Brand").Brand<"@effect-agent/core/ThreadId">;
|
|
896
|
+
readonly messageId: string & import("effect/Brand").Brand<"@effect-agent/thread/IdempotencyKey">;
|
|
897
|
+
} | undefined;
|
|
898
898
|
} | undefined;
|
|
899
899
|
};
|
|
900
900
|
readonly envelopeDigest: string & import("effect/Brand").Brand<"@effect-agent/thread/Digest">;
|
|
@@ -950,4 +950,4 @@ declare class MessageDeliveryDriver extends MessageDeliveryDriver_base {
|
|
|
950
950
|
}
|
|
951
951
|
//#endregion
|
|
952
952
|
export { messageDeliveryKeyString as C, readPending as D, prepareMessageDelivery as E, sameMessageDeliveryIdentity as O, messageDeliveryDeadline as S, peerMessageRetentionDeadline as T, applyMessageDeliveryChange as _, MessageDeliveryError as a, isWorkerUpdateDelivery as b, MessageDeliveryFailure as c, MessageDeliveryPageRequest as d, MessageDeliveryPolicy as f, MessageDelivery_d_exports as g, MessageDeliveryStoreLimits as h, MessageDeliveryDriverLimits as i, validateMessageDelivery as k, MessageDeliveryKey as l, MessageDeliveryStore as m, MessageDeliveryCompletion as n, MessageDeliveryFailpoint as o, MessageDeliveryRecord as p, MessageDeliveryDriver as r, MessageDeliveryFailpointError as s, MessageDeliveryChange as t, MessageDeliveryPage as u, defaultMessageDeliveryPolicy as v, messageDeliveryUsesCapacity as w, messageDeliveryCapacity as x, defaultMessageDeliveryStoreLimits as y };
|
|
953
|
-
//# sourceMappingURL=MessageDelivery-
|
|
953
|
+
//# sourceMappingURL=MessageDelivery-CLzWJImC.d.mts.map
|
package/dist/{PreparedInputAdmission-DKIfqRZT.d.mts → PreparedInputAdmission-BQ9UCLFS.d.mts}
RENAMED
|
@@ -1,8 +1,8 @@
|
|
|
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 { kr as SubmissionStatus } from "./Admin-
|
|
3
|
+
import { kr as SubmissionStatus } from "./Admin-NvXFPDIM.mjs";
|
|
4
4
|
import { H as ScheduledInputRefused, V as ScheduledInputFailure, j as ScheduleStorageError } from "./Schedule-CDgTz0vj.mjs";
|
|
5
|
-
import { a as PreparedInput } from "./Subscription-
|
|
5
|
+
import { a as PreparedInput } from "./Subscription-D2yn6Eo3.mjs";
|
|
6
6
|
import { Context, Effect } from "effect";
|
|
7
7
|
declare namespace PreparedInputAdmission_d_exports {
|
|
8
8
|
export { PreparedInputAdmission, admitPreparedInput };
|
|
@@ -39,4 +39,4 @@ declare const admitPreparedInput: <R>(submit: Effect.Effect<Receipt, ScheduledIn
|
|
|
39
39
|
}, ScheduleStorageError, R>;
|
|
40
40
|
//#endregion
|
|
41
41
|
export { PreparedInputAdmission_d_exports as n, admitPreparedInput as r, PreparedInputAdmission as t };
|
|
42
|
-
//# sourceMappingURL=PreparedInputAdmission-
|
|
42
|
+
//# sourceMappingURL=PreparedInputAdmission-BQ9UCLFS.d.mts.map
|
|
@@ -6,7 +6,7 @@ import { G as PromptRecord, J as RUN_TERMINAL_RESERVE_BYTES, O as MAX_RUN_CONTIN
|
|
|
6
6
|
import { i as digestCanonicalJson, r as canonicalJson } from "./Digest-ft4ku9pj.mjs";
|
|
7
7
|
import { submissionAbortRecordId, submissionInputRecordId, submissionSettlementBatchId, submissionSettlementRecordId } from "./durable/SubmissionLedger.mjs";
|
|
8
8
|
import { A as subagentRequestedRecordId, L as toolCallResultBatchId, M as subagentStartedRecordId, Q as continuationUsage, S as runIdForSubmission, _ as projectRunJournalStream, et as toolCallSettledRecordId, t as RunJournalError, y as runCompletedRecordId } from "./RunJournal-oJLo-pjS.mjs";
|
|
9
|
-
import {
|
|
9
|
+
import { W as ThreadReader, Z as ThreadStoreError, _t as executionRunIds, a as CommitBatch, bt as isWorkHandoff, c as ExecutionUpdate, ct as getRunInput, gt as canonicalRunIds, ht as recordEncoding, mt as captureRecord, o as ExecutionCheckpoint, st as getRecord, vt as isPreContinuationFact, xt as terminalUsageCharge, yt as isTerminalBudgetFact } from "./ThreadStore-D2rqtt7k.mjs";
|
|
10
10
|
import { Context, DateTime, Effect, Layer, Option, Result, Schema, Semaphore, Stream } from "effect";
|
|
11
11
|
import { Prompt } from "effect/ai";
|
|
12
12
|
//#region src/durable/internal/evidence.ts
|
|
@@ -214,16 +214,17 @@ const decodeExecutionFrontier = Schema.decodeUnknownEffect(Schema.Struct({
|
|
|
214
214
|
const captureFacts = (batch) => Effect.try({
|
|
215
215
|
try: () => Result.gen(function* () {
|
|
216
216
|
const inputs = batch.records;
|
|
217
|
-
const { batchId, producerId } = validateBatchShape({
|
|
217
|
+
const { batchId, producerId, records: slots } = validateBatchShape({
|
|
218
218
|
batchId: batch.batchId,
|
|
219
219
|
producerId: batch.producerId,
|
|
220
220
|
records: inputs
|
|
221
221
|
});
|
|
222
|
-
const records = (yield*
|
|
222
|
+
const records = [(yield* captureRecord(inputs[0])).canonical];
|
|
223
|
+
for (let index = 1; index < slots.length; index++) records.push((yield* captureRecord(inputs[index])).canonical);
|
|
223
224
|
return Object.freeze(CanonicalBatch.make({
|
|
224
225
|
batchId,
|
|
225
226
|
producerId,
|
|
226
|
-
records:
|
|
227
|
+
records: Object.freeze(records)
|
|
227
228
|
}, { disableChecks: true }));
|
|
228
229
|
}),
|
|
229
230
|
catch: (cause) => failure("Cannot capture canonical progress facts", cause)
|
|
@@ -905,7 +906,7 @@ const makeProgressWriter = Effect.fnUntraced(function* (threadId, deploymentId)
|
|
|
905
906
|
if (prior !== void 0 && (yield* Effect.fromResult(recordEncoding(prior)).pipe(Effect.mapError((cause) => failure("Cannot encode active Run fact", cause)))).json !== (yield* Effect.fromResult(recordEncoding(fact)).pipe(Effect.mapError((cause) => failure("Cannot encode active Run fact", cause)))).json) return yield* failure("An active Run fact cannot change after becoming durable");
|
|
906
907
|
operational.set(fact.recordId, fact);
|
|
907
908
|
}
|
|
908
|
-
const checkpoint =
|
|
909
|
+
const checkpoint = ExecutionCheckpoint.make({
|
|
909
910
|
version: 2,
|
|
910
911
|
progressRecord: record,
|
|
911
912
|
operational: [...operational.values()],
|
|
@@ -913,7 +914,7 @@ const makeProgressWriter = Effect.fnUntraced(function* (threadId, deploymentId)
|
|
|
913
914
|
originalSequence: originalSequence ?? CanonicalSequence.make(after + ownedRecords.filter((fact) => !isOperationalRecord(fact)).findIndex((fact) => fact.recordId === originalInput.recordId) + 1),
|
|
914
915
|
throughSequence: CanonicalSequence.make(after + ownedRecords.filter((fact) => !isOperationalRecord(fact)).length),
|
|
915
916
|
batchId: batch.batchId
|
|
916
|
-
}
|
|
917
|
+
}, { disableChecks: true });
|
|
917
918
|
const state = {
|
|
918
919
|
continuation,
|
|
919
920
|
record,
|
|
@@ -930,7 +931,7 @@ const makeProgressWriter = Effect.fnUntraced(function* (threadId, deploymentId)
|
|
|
930
931
|
checkpoint,
|
|
931
932
|
facts: changed,
|
|
932
933
|
retire: position === "settled"
|
|
933
|
-
}));
|
|
934
|
+
}, { disableChecks: true }));
|
|
934
935
|
accepted.set(runId, state);
|
|
935
936
|
}
|
|
936
937
|
if (ownedRecords.length + executionCount > 256) return yield* failure("Progress and facts exceed the atomic batch bound");
|
|
@@ -1066,9 +1067,6 @@ const makeProgressWriter = Effect.fnUntraced(function* (threadId, deploymentId)
|
|
|
1066
1067
|
reserve,
|
|
1067
1068
|
defer,
|
|
1068
1069
|
check,
|
|
1069
|
-
/** Internal read view immediately after this writer's acknowledged commit, while
|
|
1070
|
-
* holding its initialization gates. Never authority across ownership or writes. */
|
|
1071
|
-
acceptedCheckpoint: (runId) => cached.get(runId)?.checkpoint,
|
|
1072
1070
|
/** Scope a verified empty execution/evidence view to one owned initialization body.
|
|
1073
1071
|
* The caller holds progress+mutation gates; a changed writer or tail never reuses it. */
|
|
1074
1072
|
withVerifiedEmptyRun: (runId, through, body) => Effect.flatMap(CurrentRunWriter, (writer) => {
|
|
@@ -1091,4 +1089,4 @@ const makeProgressWriter = Effect.fnUntraced(function* (threadId, deploymentId)
|
|
|
1091
1089
|
//#endregion
|
|
1092
1090
|
export { readRunContext as _, canonicalRecordBytes as a, reference as b, prepareProgressAppend as c, resolveExecutionEvidence as d, runEvidence as f, digestRunHistory as g, verifyRunContinuations as h, RunContinuation_exports as i, readContinuation as l, validateSuffix as m, CurrentRunWriter as n, isOperationalRecord as o, validateProgressAppend as p, ProgressAppendReader as r, makeProgressWriter as s, CurrentRunSettlement as t, readRunEvidenceSnapshot as u, validateContextBoundary as v, resolveEvidence as x, RunContextReader as y };
|
|
1093
1091
|
|
|
1094
|
-
//# sourceMappingURL=RunContinuation-
|
|
1092
|
+
//# sourceMappingURL=RunContinuation-BF95Ncv2.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RunContinuation-BF95Ncv2.mjs","names":["failure"],"sources":["../src/durable/internal/evidence.ts","../src/durable/internal/run-context-reader.ts","../src/durable/internal/run-context.ts","../src/durable/RunContinuation.ts"],"sourcesContent":["import { Effect, Option } from \"effect\";\n\nimport type { ThreadId } from \"../../core/Identifiers.ts\";\nimport { EvidenceReference, type RecordEnvelope } from \"../Records.ts\";\nimport { getRecord, ThreadStoreError } from \"../ThreadStore.ts\";\n\nconst failure = (message: string, cause?: unknown) =>\n ThreadStoreError.make({\n operation: \"RunContinuation\",\n message,\n ...(cause === undefined ? {} : { cause }),\n });\n\n/** References identify immutable facts; schema and owning readers validate their meaning. */\nexport const reference = (record: RecordEnvelope) =>\n Effect.succeed(EvidenceReference.make({ recordId: record.recordId }));\n\n/** Resolve an immutable fact by Thread and record identity. A failed reference leaves the original work owed. */\nexport const resolveEvidence = Effect.fnUntraced(function* (\n threadId: ThreadId,\n ref: EvidenceReference,\n) {\n const found = yield* getRecord({ threadId, recordId: ref.recordId });\n\n if (Option.isNone(found)) return yield* failure(\"Required canonical evidence is unavailable\");\n\n return found.value;\n});\n","import { Context, Effect, Layer, Option, type Stream } from \"effect\";\n\nimport type { ThreadId } from \"../../core/Identifiers.ts\";\nimport type { CanonicalRecordEnvelope, RecordId } from \"../Records.ts\";\nimport {\n getRecord,\n ThreadReader,\n type ThreadNotMaterialized,\n type ThreadStoreError,\n type ThreadPromptRead,\n} from \"../ThreadStore.ts\";\nimport type { JournalRecordEnvelope } from \"./journal-metadata.ts\";\n\n/** Canonical history access bound by the recovery or verification-snapshot owner. */\nexport class RunContextReader extends Context.Service<\n RunContextReader,\n {\n /** Recovery decodes the prompt view; verification supplies full canonical envelopes. */\n readonly read: (\n request: ThreadPromptRead,\n ) => Stream.Stream<JournalRecordEnvelope, ThreadStoreError | ThreadNotMaterialized>;\n readonly record: (\n recordId: RecordId,\n ) => Effect.Effect<\n CanonicalRecordEnvelope | undefined,\n ThreadStoreError | ThreadNotMaterialized\n >;\n }\n>()(\"@effect-agent/thread/RunContextReader\") {\n static layer(threadId: ThreadId) {\n return Layer.effect(\n RunContextReader,\n Effect.gen(function* () {\n const reader = yield* ThreadReader;\n\n return RunContextReader.of({\n read: reader.readPrompt,\n record: (recordId) =>\n getRecord({ threadId, recordId }).pipe(\n Effect.provideService(ThreadReader, reader),\n Effect.map(Option.getOrUndefined),\n ),\n });\n }),\n );\n }\n}\n","import { type Crypto, Effect, Schema, Stream } from \"effect\";\nimport { Prompt } from \"effect/ai\";\n\nimport { canonicalJson, digestCanonicalJson } from \"../Digest.ts\";\nimport {\n CanonicalSequence,\n PromptRecord,\n type RecordId,\n PROMPT_EVIDENCE_TAGS,\n type CanonicalRecordEnvelope,\n type RunContextRecorded,\n} from \"../Records.ts\";\nimport {\n projectRunJournalStream,\n RunJournalError,\n type RunJournalContext,\n type JournalBoundary,\n} from \"../RunJournal.ts\";\nimport type { ThreadNotMaterialized, ThreadStoreError } from \"../ThreadStore.ts\";\nimport type { JournalRecordEnvelope } from \"./journal-metadata.ts\";\nimport { RunContextReader } from \"./run-context-reader.ts\";\n\nconst invalid = (message: string) => RunJournalError.make({ message });\nconst encodePrompt = Schema.encodeEffect(Schema.toCodecJson(Prompt.Prompt));\n\nconst decodePromptRecord = Schema.decodeUnknownEffect(PromptRecord);\nconst promptTags = new Set<string>(PROMPT_EVIDENCE_TAGS);\n\nconst projectHistoryRecord = (\n entry: JournalRecordEnvelope,\n ownerRunId: RunContextRecorded[\"runId\"],\n): Effect.Effect<JournalRecordEnvelope> => {\n if (!(\"batchId\" in entry)) return Effect.succeed(entry);\n const payload = entry.record.payload;\n\n if ((\"runId\" in payload && payload.runId === ownerRunId) || !promptTags.has(payload._tag))\n return Effect.succeed(entry);\n\n return decodePromptRecord({ recordId: entry.record.recordId, payload }).pipe(\n Effect.map((record) => ({ threadId: entry.threadId, sequence: entry.sequence, record })),\n // Coverage and later canonical validation must retain their original error precedence.\n Effect.catchTag(\"SchemaError\", () => Effect.succeed(entry)),\n );\n};\n\nexport const encodeRunHistory = (prompt: Prompt.Prompt) =>\n encodePrompt(prompt).pipe(\n Effect.map(canonicalJson),\n Effect.mapError((cause) =>\n RunJournalError.make({ message: \"Original model history integrity is unavailable\", cause }),\n ),\n );\n\nexport const digestRunHistory = (prompt: Prompt.Prompt) =>\n encodeRunHistory(prompt).pipe(\n Effect.flatMap(digestCanonicalJson),\n Effect.mapError((cause) =>\n RunJournalError.make({ message: \"Original model history integrity is unavailable\", cause }),\n ),\n );\n\nexport const validateContextBoundary = (\n context: RunContextRecorded,\n original: CanonicalRecordEnvelope,\n): Effect.Effect<void, RunJournalError> =>\n original.record.payload._tag !== \"UserInputRecorded\" ||\n original.record.payload.kind !== \"user\" ||\n original.record.payload.runId !== context.runId ||\n context.historyThrough + 1 !== original.sequence ||\n context.historyFrom < 1 ||\n context.historyFrom > original.sequence ||\n context.retained.some(\n (ref, index) =>\n ref.sequence <= (context.retained[index - 1]?.sequence ?? 0) ||\n ref.sequence >= context.historyFrom,\n )\n ? Effect.fail(invalid(\"Saved context has an invalid original admission boundary\"))\n : Effect.void;\n\ntype ProjectedRunHistory = Pick<\n RunJournalContext,\n \"prompt\" | \"historyFrom\" | \"contextWindowId\" | \"boundaries\"\n>;\n\n/** Reconstruct the exact saved range using the owner's history validation boundary. */\nconst readProjectedHistory = Effect.fnUntraced(function* (\n context: RunContextRecorded,\n original: CanonicalRecordEnvelope,\n): Effect.fn.Return<\n ProjectedRunHistory,\n RunJournalError | ThreadStoreError | ThreadNotMaterialized,\n RunContextReader | Crypto.Crypto\n> {\n yield* validateContextBoundary(context, original);\n const reader = yield* RunContextReader;\n const records: Array<JournalRecordEnvelope> = [];\n\n for (const ref of context.retained) {\n const entry = yield* reader.record(ref.recordId);\n\n if (\n entry === undefined ||\n entry.threadId !== original.threadId ||\n entry.record.recordId !== ref.recordId ||\n entry.sequence !== ref.sequence\n )\n return yield* invalid(\"Saved context has missing or corrupt retained evidence\");\n records.push(yield* projectHistoryRecord(entry, context.runId));\n }\n\n let after = CanonicalSequence.make(context.historyFrom - 1);\n\n while (after < context.historyThrough) {\n const page = yield* reader\n .read({\n threadId: original.threadId,\n throughSequence: context.historyThrough,\n afterSequence: after,\n limit: 8,\n })\n .pipe(Stream.take(9), Stream.runCollect);\n\n if (page.length > 8) return yield* invalid(\"Saved context page exceeds its record bound\");\n for (const entry of page) {\n if (\n entry.threadId !== original.threadId ||\n entry.sequence <= after ||\n entry.sequence > context.historyThrough\n )\n return yield* invalid(\"Saved context range has invalid canonical ordering\");\n after = entry.sequence;\n records.push(yield* projectHistoryRecord(entry, context.runId));\n }\n if (page.length < 8) break;\n }\n\n let through = 0;\n const retained = new Map(context.retained.map((ref) => [ref.sequence, ref.recordId]));\n\n for (const entry of records) {\n if (\n entry.threadId !== original.threadId ||\n entry.sequence <= through ||\n entry.sequence > context.historyThrough ||\n (entry.sequence < context.historyFrom &&\n retained.get(entry.sequence) !== entry.record.recordId)\n )\n return yield* invalid(\"Saved context has invalid canonical range evidence\");\n through = entry.sequence;\n retained.delete(entry.sequence);\n }\n if (retained.size !== 0) return yield* invalid(\"Saved context is missing retained evidence\");\n\n const boundaries: Array<JournalBoundary> = [];\n\n records.push(original);\n\n const history = yield* projectRunJournalStream(\n Stream.fromIterable(records),\n context.runId,\n (boundary) => boundaries.push(boundary),\n );\n\n return {\n prompt: history.prompt,\n historyFrom: history.historyFrom,\n boundaries,\n ...(history.contextWindowId === undefined ? {} : { contextWindowId: history.contextWindowId }),\n };\n});\n\n/** Both readers preserve the exact saved context and historyDigest. */\nexport const readRunContext = Effect.fnUntraced(function* (\n context: RunContextRecorded,\n original: CanonicalRecordEnvelope,\n recordId: RecordId,\n): Effect.fn.Return<\n RunJournalContext,\n RunJournalError | ThreadStoreError | ThreadNotMaterialized,\n RunContextReader | Crypto.Crypto\n> {\n const history = yield* readProjectedHistory(context, original);\n const historyDigest = yield* digestRunHistory(history.prompt);\n\n if (\n historyDigest !== context.historyDigest ||\n history.historyFrom !== context.historyFrom ||\n history.prompt.content.length !== context.priorHistoryLength ||\n history.contextWindowId !== context.contextWindowId\n )\n return yield* invalid(\"Saved context differs from its original model history\");\n\n const prefix = yield* Schema.decodeUnknownEffect(Prompt.Prompt)(context.runScopedInput).pipe(\n Effect.mapError(() => invalid(\"Saved Run instructions and input are malformed\")),\n );\n\n return {\n runId: context.runId,\n prompt: Prompt.fromMessages([...history.prompt.content, ...prefix.content]),\n priorHistoryLength: context.priorHistoryLength,\n historyFrom: context.historyFrom,\n boundaries: history.boundaries.filter(\n (boundary) => boundary.promptLength <= context.priorHistoryLength,\n ),\n recordId,\n ...(context.contextWindowId === undefined ? {} : { contextWindowId: context.contextWindowId }),\n };\n});\n","import { Context, DateTime, Effect, Option, Result, Schema, Semaphore, Stream } from \"effect\";\nimport { Prompt } from \"effect/ai\";\n\nimport { AgentPersistenceCapacityError } from \"../core/AgentError.ts\";\nimport type { RunId, SubmissionId, ThreadId } from \"../core/Identifiers.ts\";\nimport { ToolCallId } from \"../core/Identifiers.ts\";\nimport { utf8ByteLength } from \"../core/internal/utf8.ts\";\nimport { resolveEvidence } from \"./internal/evidence.ts\";\nimport { continuationUsage } from \"./internal/usage-totals.ts\";\nexport { reference, resolveEvidence } from \"./internal/evidence.ts\";\nimport {\n captureRecord,\n recordEncoding,\n type ProgressAppendRecord,\n} from \"./internal/record-encoding.ts\";\nimport {\n canonicalRunIds,\n executionRunIds,\n isPreContinuationFact,\n isTerminalBudgetFact,\n} from \"./internal/record-ownership.ts\";\nexport { terminalUsageCharge } from \"./internal/record-ownership.ts\";\nimport { readRunContext, validateContextBoundary } from \"./internal/run-context.ts\";\nimport {\n type CanonicalRecordEnvelope,\n type ContinuationAccounting,\n type DeploymentId,\n CanonicalBatch,\n CanonicalSequence,\n EvidenceReference,\n MAX_RUN_CONTINUATION_BYTES,\n MAX_RUN_EVIDENCE_BYTES,\n MAX_RUN_TERMINAL_BYTES,\n MAX_RUN_EVIDENCE_RECORDS,\n MAX_RUN_RECOVERY_SUFFIX_BYTES,\n MAX_RUN_RECOVERY_SUFFIX_RECORDS,\n MAX_TURN_CANONICAL_BYTES,\n MAX_PERSISTED_JSON_BYTES,\n RUN_TERMINAL_RESERVE_BYTES,\n RUN_TERMINAL_RESERVE_RECORDS,\n RecordEnvelope,\n RecordId,\n RunContinuation,\n type ModelResponseRecorded,\n type ToolCallSettled,\n} from \"./Records.ts\";\nimport {\n runIdForSubmission,\n runCompletedRecordId,\n toolCallSettledRecordId,\n toolCallResultBatchId,\n subagentRequestedRecordId,\n subagentStartedRecordId,\n} from \"./RunJournal.ts\";\nimport type { RunStorageSession } from \"./RunStorage.ts\";\nimport {\n submissionAbortRecordId,\n submissionInputRecordId,\n submissionSettlementRecordId,\n submissionSettlementBatchId,\n} from \"./SubmissionLedger.ts\";\nimport {\n CommitBatch,\n ExecutionCheckpoint,\n ExecutionUpdate,\n getRecord,\n getRunInput,\n ThreadReader,\n ThreadStoreError,\n} from \"./ThreadStore.ts\";\n\nexport { RunContinuation, RunContextRecorded, EvidenceReference } from \"./Records.ts\";\n\n/** Writer and progress sequencer selected at the local owner's resource boundary. */\nexport class CurrentRunWriter extends Context.Service<\n CurrentRunWriter,\n Pick<RunStorageSession, \"threadId\" | \"tail\" | \"append\" | \"appendInput\" | \"withProgress\">\n>()(\"@effect-agent/thread/CurrentRunWriter\") {}\n\n/** Settlement publication keeps its original atomic authority and claim-scoped implementation. */\nexport class CurrentRunSettlement extends Context.Service<\n CurrentRunSettlement,\n Pick<RunStorageSession, \"threadId\" | \"tail\" | \"publishSettlement\" | \"withProgress\">\n>()(\"@effect-agent/thread/CurrentRunSettlement\") {}\n\n/** Canonical reads pinned to the append owner's current transaction or mutation gate. */\nexport class ProgressAppendReader extends Context.Service<\n ProgressAppendReader,\n {\n readonly previous: (\n runId: RunId,\n ) => Effect.Effect<RunContinuation | undefined, ThreadStoreError>;\n readonly initial: (\n next: RunContinuation,\n ) => Effect.Effect<ReadonlyArray<RecordEnvelope>, ThreadStoreError>;\n }\n>()(\"@effect-agent/thread/ProgressAppendReader\") {}\n\nexport {\n canonicalRunIds,\n executionRunIds,\n isWorkHandoff,\n isPreContinuationFact,\n} from \"./internal/record-ownership.ts\";\n\nconst failure = (message: string, cause?: unknown) =>\n ThreadStoreError.make({\n operation: \"RunContinuation\",\n message,\n ...(cause === undefined ? {} : { cause }),\n });\n\nconst capacityFailure = (message: string) =>\n failure(message, AgentPersistenceCapacityError.make({ message }));\n\nconst isExecutionProgressRecord = (\n record: RecordEnvelope,\n): record is RecordEnvelope & { readonly payload: RunContinuation } =>\n record.payload._tag === \"RunContinuation\";\n\nconst decodeResponsePrompt = Schema.decodeUnknownEffect(Prompt.Prompt);\n// The decoded Prompt stays private. Progress and capacity are recomputed on every invocation.\nconst responsePrompts = new WeakMap<ModelResponseRecorded, Prompt.Prompt>();\n\n/** Cache eligibility only: freezing does not make accessors or custom iterators immutable. */\nconst isFrozenJsonData = (input: Schema.Json): boolean => {\n const pending: Array<unknown> = [input];\n const seen = new WeakSet<object>();\n\n while (pending.length > 0) {\n const value = pending.pop();\n\n if (value === null) continue;\n if (typeof value !== \"object\") {\n if (typeof value !== \"string\" && typeof value !== \"number\" && typeof value !== \"boolean\")\n return false;\n continue;\n }\n if (seen.has(value)) continue;\n seen.add(value);\n const prototype = Object.getPrototypeOf(value);\n\n if (\n !Object.isFrozen(value) ||\n (prototype !== null && prototype !== Object.prototype && prototype !== Array.prototype)\n )\n return false;\n for (const key of Reflect.ownKeys(value)) {\n if (typeof key !== \"string\") return false;\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n\n if (descriptor === undefined || !(\"value\" in descriptor)) return false;\n pending.push(descriptor.value);\n }\n }\n\n return true;\n};\n\nconst validateBatchShape = Schema.decodeUnknownSync(\n Schema.Struct({\n batchId: CanonicalBatch.fields.batchId,\n producerId: CanonicalBatch.fields.producerId,\n records: Schema.NonEmptyArray(Schema.Unknown).check(Schema.isMaxLength(256)),\n }),\n);\n\nconst ContinuationBytes = Schema.Struct({\n turnBytes: RunContinuation.fields.turnBytes,\n terminalBytes: RunContinuation.fields.terminalBytes,\n});\n\nconst decodeExecutionFrontier = Schema.decodeUnknownEffect(\n Schema.Struct({\n canonicalRecords: ExecutionCheckpoint.fields.canonicalRecords,\n throughSequence: ExecutionCheckpoint.fields.throughSequence,\n }),\n);\n\n/** One private snapshot for every retry; callers cannot change facts while awaiting the gate. */\nconst captureFacts = (batch: CommitBatch) =>\n Effect.try({\n try: () =>\n Result.gen(function* () {\n const inputs = batch.records;\n\n const {\n batchId,\n producerId,\n records: slots,\n } = validateBatchShape({\n batchId: batch.batchId,\n producerId: batch.producerId,\n records: inputs,\n });\n\n const first = yield* captureRecord(inputs[0]!);\n const records: [RecordEnvelope, ...Array<RecordEnvelope>] = [first.canonical];\n\n for (let index = 1; index < slots.length; index++)\n records.push((yield* captureRecord(inputs[index]!)).canonical);\n\n return Object.freeze(\n CanonicalBatch.make(\n { batchId, producerId, records: Object.freeze(records) },\n { disableChecks: true },\n ),\n );\n }),\n catch: (cause) => failure(\"Cannot capture canonical progress facts\", cause),\n }).pipe(\n Effect.flatMap(Effect.fromResult),\n Effect.mapError((cause) =>\n Schema.is(ThreadStoreError)(cause)\n ? cause\n : failure(\"Cannot capture canonical progress facts\", cause),\n ),\n );\n\n/** Exact UTF-8 wire accounting reuses the append's privately captured Schema encoding. */\nexport const canonicalRecordBytes = (record: RecordEnvelope): number => {\n const encoded = recordEncoding(record);\n\n if (Result.isFailure(encoded)) {\n // oxlint-disable-next-line effect/no-untyped-throw, effect/no-native-error -- Public synchronous byte-accounting validation must reject malformed records before returning a number.\n throw encoded.failure.cause ?? new RangeError(encoded.failure.message);\n }\n\n return encoded.success.bytes;\n};\n\nexport type { ProgressAppendRecord } from \"./internal/record-encoding.ts\";\n\n/** Capture before acquiring the mutation owner; summaries never cross a wire boundary. */\nexport const prepareProgressAppend = (\n records: ReadonlyArray<RecordEnvelope>,\n): ReadonlyArray<ProgressAppendRecord> => {\n const encodings = Result.all(records.map(captureRecord));\n\n if (Result.isFailure(encodings)) {\n // oxlint-disable-next-line effect/no-untyped-throw, effect/no-native-error -- Public synchronous progress construction must reject malformed records before acquiring a mutation owner.\n throw encodings.failure.cause ?? new RangeError(encodings.failure.message);\n }\n\n return Object.freeze(encodings.success.map((record) => record.progress));\n};\n\n/** These values belong to the active Run, not its permanent conversation history. */\nexport const isOperationalRecord = ({ payload }: RecordEnvelope): boolean =>\n payload._tag === \"RunStarted\" ||\n payload._tag === \"RunContextRecorded\" ||\n payload._tag === \"RunCompleted\";\n\nexport const readContinuation = Effect.fnUntraced(function* (\n threadId: ThreadId,\n runId: RunId,\n throughSequence: CanonicalSequence,\n) {\n const reader = yield* ThreadReader;\n\n const loaded = yield* reader\n .readExecution({ threadId, runId })\n .pipe(\n Effect.catchTag(\"ThreadNotMaterialized\", (cause) =>\n throughSequence === 0\n ? Effect.succeed(Option.none())\n : failure(\"Active Run history is not materialized\", cause),\n ),\n );\n\n if (Option.isNone(loaded)) return Option.none();\n const value = loaded.value;\n\n if (\n value.progress.runId !== runId ||\n value.throughSequence > throughSequence ||\n canonicalRecordBytes(value.progressRecord) > MAX_RUN_CONTINUATION_BYTES ||\n value.operational.some(\n (record) => !isOperationalRecord(record) || !executionRunIds(record).includes(runId),\n ) ||\n new Set(value.operational.map((record) => record.recordId)).size !== value.operational.length\n )\n return yield* failure(\"Invalid active Run checkpoint\");\n\n return Option.some({\n ...value,\n checkpoint: value,\n get progress() {\n return value.progress;\n },\n record: value.progressRecord,\n continuation: value.progress,\n });\n});\n\n/** Resolve an active-only fact without presenting it as a canonical envelope or sequence. */\nexport const resolveExecutionEvidence = Effect.fnUntraced(function* (\n threadId: ThreadId,\n checkpoint: ExecutionCheckpoint,\n ref: EvidenceReference,\n) {\n const operational = checkpoint.operational.find((record) => record.recordId === ref.recordId);\n const record = operational ?? (yield* resolveEvidence(threadId, ref)).record;\n\n return record;\n});\n\n/** Each selected page is at most eight records; total resident encoded evidence is bounded. */\nexport const runEvidence = (\n threadId: ThreadId,\n submissionId: SubmissionId,\n throughSequence: CanonicalSequence,\n afterSequence: CanonicalSequence = CanonicalSequence.make(0),\n): Stream.Stream<CanonicalRecordEnvelope, ThreadStoreError, ThreadReader> =>\n Stream.unwrap(\n Effect.map(ThreadReader, (reader) =>\n Stream.suspend(() => {\n let after = afterSequence;\n let count = 0;\n let bytes = 0;\n const runId = runIdForSubmission(submissionId);\n\n const controls = new Set([\n submissionInputRecordId(submissionId),\n submissionAbortRecordId(submissionId),\n submissionSettlementRecordId(submissionId),\n ]);\n\n const next = (): Stream.Stream<CanonicalRecordEnvelope, ThreadStoreError> =>\n Stream.unwrap(\n Stream.runCollect(\n reader.read({\n threadId,\n selection: { _tag: \"RunEvidence\", runId, submissionId, throughSequence },\n page: { limit: 8, ...(after === 0 ? {} : { afterSequence: after }) },\n }),\n ).pipe(\n Effect.mapError((cause) =>\n cause._tag === \"ThreadStoreError\"\n ? cause\n : failure(\"Selected Run disappeared\", cause),\n ),\n Effect.flatMap((page) =>\n Effect.gen(function* () {\n if (page.length > 8)\n return yield* failure(\"Run evidence page exceeds its record bound\");\n for (const entry of page) {\n if (\n entry.threadId !== threadId ||\n entry.sequence <= after ||\n entry.sequence > throughSequence ||\n entry.record.payload._tag === \"RunContinuation\" ||\n (!canonicalRunIds(entry.record).includes(runId) &&\n !controls.has(entry.record.recordId))\n )\n return yield* failure(\"Run evidence page has invalid identity or ordering\");\n after = entry.sequence;\n count += 1;\n bytes += yield* Effect.try({\n try: () => canonicalRecordBytes(entry.record),\n catch: (cause) => failure(\"Selected Run evidence is malformed\", cause),\n });\n if (\n count > MAX_RUN_EVIDENCE_RECORDS + RUN_TERMINAL_RESERVE_RECORDS ||\n bytes > MAX_RUN_EVIDENCE_BYTES + MAX_RUN_TERMINAL_BYTES\n )\n return yield* failure(\"Selected Run evidence exceeds its recovery bound\");\n }\n\n return page.length < 8\n ? Stream.fromIterable(page)\n : Stream.concat(Stream.fromIterable(page), Stream.suspend(next));\n }),\n ),\n ),\n );\n\n return next();\n }),\n ),\n );\n\n/** A bounded selected-Run suffix, never a Thread-wide tail or an implicit replay fallback. */\nexport const validateSuffix = (\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n through: CanonicalSequence,\n) => {\n const suffix = records.filter((record) => record.sequence > through);\n\n return (\n suffix.length <= MAX_RUN_RECOVERY_SUFFIX_RECORDS &&\n suffix.reduce((bytes, record) => bytes + canonicalRecordBytes(record.record), 0) <=\n MAX_RUN_RECOVERY_SUFFIX_BYTES\n );\n};\n\n/**\n * Selected semantic evidence without expanding model context. Worker acknowledgements and\n * delivery repair must validate locator completeness before treating missing effects as closed.\n */\nexport const readRunEvidenceSnapshot = Effect.fnUntraced(function* (\n threadId: ThreadId,\n submissionId: SubmissionId,\n throughSequence: CanonicalSequence,\n) {\n const records = yield* Stream.runCollect(runEvidence(threadId, submissionId, throughSequence));\n const runId = runIdForSubmission(submissionId);\n const own = records.filter((entry) => executionRunIds(entry.record).includes(runId));\n const progress = yield* readContinuation(threadId, runId, throughSequence);\n\n if (Option.isNone(progress)) {\n const terminal = own.findLast(\n ({ record }) => record.payload._tag === \"SubmissionSettled\" && record.payload.runId === runId,\n );\n\n if (terminal?.record.payload._tag === \"SubmissionSettled\") {\n if (\n terminal.record.payload.historyRecordCount === undefined ||\n own.filter((entry) => entry.sequence <= terminal.sequence).length !==\n terminal.record.payload.historyRecordCount\n )\n return yield* failure(\"Settled Run history is incomplete\");\n\n return records;\n }\n if (own.some(({ record }) => !isPreContinuationFact(record)))\n return yield* failure(\"Active execution has no durable checkpoint\");\n\n return records;\n }\n const checkpoint = progress.value;\n const cursor = checkpoint.continuation;\n\n if (cursor.submissionId !== submissionId)\n return yield* failure(\"Active checkpoint has another admitted owner\");\n if (\n own.filter((entry) => entry.sequence <= checkpoint.throughSequence).length !==\n checkpoint.canonicalRecords ||\n !validateSuffix(own, checkpoint.throughSequence)\n )\n return yield* failure(\"Selected execution history is incomplete or exceeds its suffix bound\");\n\n const resolve = (ref: EvidenceReference) =>\n resolveExecutionEvidence(threadId, checkpoint.checkpoint, ref);\n\n const input = yield* resolve(cursor.originalInput);\n\n if (\n input.payload._tag !== \"UserInputRecorded\" ||\n input.payload.submissionId !== submissionId ||\n input.payload.kind !== \"user\" ||\n input.payload.runId !== runId\n )\n return yield* failure(\"Active checkpoint has no original accepted input\");\n yield* resolve(cursor.lastFact);\n if (cursor.savedContext !== undefined) {\n const context = yield* resolve(cursor.savedContext);\n\n if (context.payload._tag !== \"RunContextRecorded\" || context.payload.runId !== runId)\n return yield* failure(\"Active checkpoint has invalid saved context\");\n }\n if (cursor.latestResponse !== undefined) {\n const response = yield* resolve(cursor.latestResponse);\n\n if (\n response.payload._tag !== \"ModelResponseRecorded\" ||\n response.payload.runId !== runId ||\n response.payload.turn !== cursor.accounting.committedTurns\n )\n return yield* failure(\"Active checkpoint has invalid operation evidence\");\n }\n if (cursor.terminal !== undefined) {\n const terminal = yield* resolve(cursor.terminal);\n\n if (\n terminal.payload._tag !== \"RunCompleted\" &&\n terminal.payload._tag !== \"RunFailed\" &&\n terminal.payload._tag !== \"SubmissionSettled\"\n )\n return yield* failure(\"Active checkpoint has invalid terminal evidence\");\n }\n\n return records;\n});\n\n/** Called inside the adapter's existing mutation, before publishing any fact or index. */\nexport const validateProgressAppend = Effect.fnUntraced(function* (\n records: ReadonlyArray<ProgressAppendRecord>,\n updates: ReadonlyArray<ExecutionUpdate> = [],\n): Effect.fn.Return<void, ThreadStoreError, ProgressAppendReader> {\n const reader = yield* ProgressAppendReader;\n\n if (records.some((record) => record.continuation !== undefined))\n return yield* failure(\"Interpreter progress must be committed as active execution state\");\n\n const operational = new Map(\n updates.flatMap((update) => update.facts.map((fact) => [fact.recordId, fact] as const)),\n );\n\n const factsAndProgress = [\n ...records,\n ...prepareProgressAppend([...operational.values()]),\n ...prepareProgressAppend(updates.map((update) => update.checkpoint.progressRecord)),\n ];\n\n const seen = new Set<RunId>();\n let progressStarted = false;\n\n for (const record of factsAndProgress) {\n const next = record.continuation;\n\n if (next === undefined) {\n if (progressStarted)\n return yield* failure(\"Execution facts cannot follow their continuation\");\n continue;\n }\n progressStarted = true;\n if (record.recordBytes > MAX_RUN_CONTINUATION_BYTES)\n return yield* failure(\"Encoded continuation exceeds its record byte bound\");\n if (seen.has(next.runId))\n return yield* failure(\"One atomic batch cannot publish conflicting Run progress\");\n seen.add(next.runId);\n\n const update = updates.find((value) => value.checkpoint.progress.runId === next.runId);\n\n if (\n update === undefined ||\n update.previousRevision + 1 !== next.revision ||\n update.facts.some((fact) => !isOperationalRecord(fact)) ||\n (update.retire && (next.position !== \"settled\" || next.terminal === undefined))\n )\n return yield* failure(\"Invalid active execution transition\");\n\n const facts = factsAndProgress.filter(\n (fact) => fact.continuation === undefined && fact.runIds.includes(next.runId),\n );\n\n const frontier = facts.find((fact) => fact.recordId === next.lastFact.recordId);\n const prior = yield* reader.previous(next.runId);\n\n const retained =\n prior === undefined\n ? (yield* reader.initial(next)).filter((fact) => executionRunIds(fact).includes(next.runId))\n : [];\n\n const retainedBytes = retained.reduce((bytes, fact) => bytes + canonicalRecordBytes(fact), 0);\n const factBytes = facts.reduce((bytes, fact) => bytes + fact.recordBytes, 0);\n const turnBase = prior?.turn === next.turn ? prior.turnBytes : retainedBytes;\n const closing = facts.filter((fact) => fact.terminal);\n\n if (\n frontier === undefined ||\n retained.length > MAX_RUN_RECOVERY_SUFFIX_RECORDS ||\n retainedBytes > MAX_RUN_RECOVERY_SUFFIX_BYTES ||\n retained.some(\n (fact) => !isPreContinuationFact(fact) || !executionRunIds(fact).includes(next.runId),\n ) ||\n frontier.recordId !== next.lastFact.recordId ||\n next.revision !== (prior?.revision ?? 0) + 1 ||\n next.recordBytes < (prior?.recordBytes ?? 0) ||\n next.turn < (prior?.turn ?? 0) ||\n (prior !== undefined && next.turn === prior.turn && next.turnBytes <= prior.turnBytes) ||\n next.recordBytes !== (prior?.recordBytes ?? retainedBytes) + factBytes ||\n next.terminalUsageBytes !==\n (prior?.terminalUsageBytes ?? 0) +\n facts.reduce((bytes, fact) => bytes + fact.terminalUsageBytes, 0) ||\n next.turnBytes !== turnBase + factBytes + record.recordBytes ||\n next.recordCount !== (prior?.recordCount ?? retained.length) + facts.length ||\n next.terminalRecords !== (prior?.terminalRecords ?? 0) + closing.length ||\n next.terminalBytes !==\n (prior?.terminalBytes ?? 0) +\n closing.reduce((bytes, fact) => bytes + fact.recordBytes, 0) +\n (closing.length > 0 ? record.recordBytes : 0) ||\n (prior !== undefined &&\n (prior.submissionId !== next.submissionId ||\n !Schema.toEquivalence(EvidenceReference)(prior.originalInput, next.originalInput) ||\n (prior.savedContext !== undefined &&\n (next.savedContext === undefined ||\n !Schema.toEquivalence(EvidenceReference)(prior.savedContext, next.savedContext))))) ||\n (prior !== undefined &&\n (\n [\n \"committedTurns\",\n \"toolCalls\",\n \"programmaticToolCalls\",\n \"modelRestarts\",\n \"modelCalls\",\n \"inputTokens\",\n \"outputTokens\",\n \"costMicrousd\",\n \"unobservedModelCalls\",\n \"accountedToolTurn\",\n ] satisfies ReadonlyArray<keyof ContinuationAccounting>\n ).some((field) => next.accounting[field] < prior.accounting[field])) ||\n (prior?.accounting.finalizationUsed === true && !next.accounting.finalizationUsed)\n )\n return yield* failure(\"Run continuation conflicts with its canonical frontier or revision\");\n }\n});\n\ninterface ChildResultCapacity {\n readonly resultBytes: number;\n readonly remainingBytes: number;\n readonly remainingRecords: number;\n}\n\ninterface ProgressState {\n readonly continuation: RunContinuation;\n readonly record: RecordEnvelope;\n readonly response?: ModelResponseRecorded;\n readonly results: ReadonlyMap<ToolCallId, ToolCallSettled>;\n readonly completionBytes?: number;\n readonly childResults: ReadonlyMap<ToolCallId, ChildResultCapacity>;\n readonly checkpoint?: ExecutionCheckpoint;\n}\n\ntype CapacityState = Omit<ProgressState, \"continuation\" | \"record\"> & {\n readonly continuation: Pick<\n RunContinuation,\n | \"runId\"\n | \"position\"\n | \"turn\"\n | \"turnBytes\"\n | \"recordBytes\"\n | \"recordCount\"\n | \"accounting\"\n | \"terminalUsageBytes\"\n | \"terminalBytes\"\n | \"terminalRecords\"\n >;\n};\n\n/** Headers/identities must themselves fit a continuation. Leave room for a result's cursor too. */\nconst resultCapacity = (state: CapacityState): { bytes: number; records: number } => {\n const response = state.response;\n\n if (\n response === undefined ||\n state.continuation.position === \"settling\" ||\n state.continuation.position === \"settled\" ||\n state.continuation.accounting.accountedToolTurn >= response.turn\n )\n return { bytes: 0, records: 0 };\n let bytes = 0;\n let records = 0;\n\n for (const operation of response.toolOperations) {\n if (state.results.has(operation.toolCallId)) continue;\n\n const identity = JSON.stringify({\n recordId: toolCallSettledRecordId(response.runId, response.turn, operation.toolCallId),\n payload: {\n _tag: \"ToolCallSettled\",\n runId: response.runId,\n toolCallId: operation.toolCallId,\n toolName: operation.toolName,\n result: null,\n isFailure: false,\n },\n });\n\n // An uncertain ordinary call may later close with exact supplier/operator truth, rather\n // than the interpreter's truncated result. Attached joins retain their frozen allocation.\n const resultBytes =\n operation.executionKind === \"ordinary\" && operation.executionClass !== \"readonly\"\n ? MAX_PERSISTED_JSON_BYTES\n : Math.max(\n response.toolResultMaxBytes,\n state.childResults.get(operation.toolCallId)?.resultBytes ?? 0,\n );\n\n const joining = state.childResults.get(operation.toolCallId);\n\n bytes +=\n utf8ByteLength(identity) +\n resultBytes +\n (joining?.remainingBytes ?? 0) +\n response.toolSelectionMaxBytes +\n 2 * MAX_RUN_CONTINUATION_BYTES +\n 256;\n records += joining?.remainingRecords ?? 1;\n }\n\n return { bytes, records };\n};\n\nconst emptyAccounting = (): ContinuationAccounting => ({\n committedTurns: 0,\n toolCalls: 0,\n programmaticToolCalls: 0,\n consecutiveToolFailures: 0,\n finalizationUsed: false,\n modelRestarts: 0,\n modelCalls: 0,\n unobservedModelCalls: 0,\n inputTokens: 0,\n outputTokens: 0,\n lastInputTokens: 0,\n lastOutputTokens: 0,\n costMicrousd: 0,\n accountedToolTurn: 0,\n});\n\n/** Recompute semantic progress solely from immutable owning facts. No port grants authority. */\nconst advanceFacts = Effect.fnUntraced(function* (\n previous: ProgressState | undefined,\n facts: ReadonlyArray<RecordEnvelope>,\n submissionId: SubmissionId,\n initialBytes: number,\n) {\n const accounting = { ...(previous?.continuation.accounting ?? emptyAccounting()) };\n let savedContext = previous?.continuation.savedContext;\n let latestResponse = previous?.continuation.latestResponse;\n let terminal = previous?.continuation.terminal;\n let position = previous?.continuation.position ?? \"starting\";\n let response = previous?.response;\n let responsePrompt: Prompt.Prompt | undefined;\n let results = new Map(previous?.results);\n let childResults = new Map(previous?.childResults);\n let completionBytes = previous?.completionBytes;\n let factBytes = 0;\n let turn = previous?.continuation.turn ?? 1;\n let usageCharge = 0;\n let closingBytes = 0;\n let closingCount = 0;\n\n for (const fact of facts) {\n const payload = fact.payload;\n const captured = recordEncoding(fact);\n\n if (Result.isFailure(captured))\n return yield* failure(\"Cannot account canonical progress facts\", captured.failure);\n const encoded = captured.success;\n\n factBytes += encoded.bytes;\n if (\"turn\" in payload) turn = Math.max(turn, payload.turn);\n usageCharge += encoded.progress.terminalUsageBytes;\n if (encoded.progress.terminal) {\n closingBytes += encoded.bytes;\n closingCount++;\n }\n\n switch (payload._tag) {\n case \"RunStarted\":\n position = \"awaiting-model\";\n break;\n case \"RunContextRecorded\":\n if (savedContext !== undefined)\n return yield* failure(\"A Run's original context cannot be replaced\");\n savedContext = EvidenceReference.make({ recordId: fact.recordId });\n position = \"awaiting-model\";\n break;\n case \"ModelResponseRecorded\": {\n if (savedContext === undefined)\n return yield* failure(\"A model response has no saved original Run context\");\n if (payload.turn !== accounting.committedTurns + 1)\n return yield* failure(\"Canonical Turn progress must advance once\");\n\n const promptInput = payload.messages;\n const retainedPrompt = responsePrompts.get(payload);\n\n const messages =\n retainedPrompt ??\n (yield* decodeResponsePrompt(promptInput).pipe(\n Effect.mapError((cause) => failure(\"Invalid model evidence\", cause)),\n ));\n\n if (retainedPrompt === undefined) {\n const property = Object.getOwnPropertyDescriptor(payload, \"messages\");\n\n if (\n Object.isFrozen(payload) &&\n property !== undefined &&\n \"value\" in property &&\n property.value === promptInput &&\n isFrozenJsonData(promptInput)\n )\n responsePrompts.set(payload, messages);\n }\n responsePrompt = messages;\n\n const calls = messages.content.flatMap((message) =>\n message.role === \"assistant\"\n ? message.content.filter((part) => part.type === \"tool-call\")\n : [],\n );\n\n const summary =\n payload.modelUsage === undefined\n ? undefined\n : yield* continuationUsage(payload.modelUsage).pipe(\n Effect.mapError((cause) => failure(\"Invalid usage evidence\", cause)),\n );\n\n accounting.committedTurns = payload.turn;\n accounting.toolCalls += calls.length;\n accounting.modelCalls += summary?.modelCalls ?? 1;\n accounting.inputTokens += summary?.inputTokens ?? payload.inputTokens ?? 0;\n accounting.outputTokens += summary?.outputTokens ?? payload.outputTokens ?? 0;\n accounting.costMicrousd += summary?.costMicrousd ?? payload.costMicrousd ?? 0;\n accounting.lastInputTokens = summary?.inputTokens ?? payload.inputTokens ?? 0;\n accounting.lastOutputTokens = summary?.outputTokens ?? payload.outputTokens ?? 0;\n accounting.unobservedModelCalls += payload.unobservedModelCalls ?? 0;\n latestResponse = EvidenceReference.make({ recordId: fact.recordId });\n response = payload;\n results = new Map();\n childResults = new Map();\n position = payload.toolOperations.length === 0 ? \"awaiting-model\" : \"processing-operations\";\n break;\n }\n case \"ToolCallSettled\":\n results.set(payload.toolCallId, payload);\n childResults.delete(payload.toolCallId);\n break;\n case \"ToolCallUnknown\":\n position = \"unknown\";\n break;\n case \"ToolCallResolved\":\n position = \"processing-operations\";\n break;\n case \"ToolApprovalRequested\":\n position = \"waiting-approval\";\n break;\n case \"ToolApprovalDecided\":\n position = \"processing-operations\";\n break;\n case \"SubagentRequested\":\n childResults.set(payload.toolCallId, {\n resultBytes: Math.min(\n MAX_PERSISTED_JSON_BYTES,\n payload.budget?.allocation.resultBytes ?? MAX_PERSISTED_JSON_BYTES,\n ),\n remainingBytes: RUN_TERMINAL_RESERVE_BYTES,\n remainingRecords: 4,\n });\n position = \"waiting-dependency\";\n break;\n case \"SubagentStarted\":\n {\n const reserved = childResults.get(payload.toolCallId);\n\n if (reserved !== undefined)\n childResults.set(payload.toolCallId, {\n ...reserved,\n remainingBytes: Math.max(\n 0,\n reserved.remainingBytes - canonicalRecordBytes(fact) - MAX_RUN_CONTINUATION_BYTES,\n ),\n remainingRecords: reserved.remainingRecords - 1,\n });\n }\n position = \"waiting-dependency\";\n break;\n case \"RunPolicyUsageReserved\":\n if (\n payload.programmaticToolCalls < accounting.programmaticToolCalls ||\n (accounting.finalizationUsed && !payload.finalizationUsed)\n )\n return yield* failure(\"Run reservations cannot be refunded\");\n accounting.programmaticToolCalls = payload.programmaticToolCalls;\n accounting.finalizationUsed = payload.finalizationUsed;\n break;\n case \"ModelCallAborted\": {\n if (payload.restart !== (accounting.modelRestarts ?? 0) + 1)\n return yield* failure(\"Model restart progress must advance once\");\n\n const summary = yield* continuationUsage(payload.modelUsage).pipe(\n Effect.mapError((cause) => failure(\"Invalid cancelled model usage\", cause)),\n );\n\n accounting.modelRestarts = payload.restart;\n accounting.modelCalls += summary.modelCalls;\n accounting.inputTokens += summary.inputTokens;\n accounting.outputTokens += summary.outputTokens;\n accounting.costMicrousd += summary.costMicrousd;\n accounting.unobservedModelCalls += payload.unobservedModelCalls;\n break;\n }\n case \"RunCompleted\":\n case \"RunFailed\":\n completionBytes =\n payload._tag === \"RunCompleted\"\n ? utf8ByteLength(JSON.stringify(payload.output)) +\n (payload.runDisposition === undefined\n ? 0\n : utf8ByteLength(JSON.stringify(payload.runDisposition)))\n : undefined;\n terminal = EvidenceReference.make({ recordId: fact.recordId });\n position = \"settling\";\n break;\n case \"SubmissionSettled\":\n if (payload.submissionId !== submissionId) break;\n terminal = EvidenceReference.make({ recordId: fact.recordId });\n position = \"settled\";\n if (payload.usageSummary !== undefined) {\n accounting.modelCalls = payload.usageSummary.modelCalls;\n accounting.inputTokens = payload.usageSummary.inputTokens.total;\n accounting.outputTokens = payload.usageSummary.outputTokens.total;\n accounting.costMicrousd = payload.usageSummary.costMicrousd;\n accounting.unobservedModelCalls =\n payload.usageSummary.unobservedModelCalls ?? accounting.unobservedModelCalls;\n }\n break;\n default:\n break;\n }\n }\n if (\n response !== undefined &&\n response.turn > accounting.accountedToolTurn &&\n response.toolOperations.every((operation) => results.has(operation.toolCallId))\n ) {\n const messages =\n responsePrompt ??\n responsePrompts.get(response) ??\n (yield* decodeResponsePrompt(response.messages).pipe(\n Effect.mapError((cause) => failure(\"Invalid batch evidence\", cause)),\n ));\n\n const parts = messages.content.flatMap((message) =>\n message.role === \"assistant\" ? message.content : [],\n );\n\n for (const call of parts) {\n if (call.type !== \"tool-call\") continue;\n\n const result = call.providerExecuted\n ? parts.find((part) => part.type === \"tool-result\" && part.id === call.id)\n : results.get(ToolCallId.make(call.id));\n\n if (\n result === undefined ||\n !(\"isFailure\" in result) ||\n (\"budgetRejected\" in result && result.budgetRejected === true)\n )\n continue;\n accounting.consecutiveToolFailures = result.isFailure\n ? accounting.consecutiveToolFailures + 1\n : 0;\n }\n accounting.accountedToolTurn = response.turn;\n results.clear();\n if (position !== \"settling\" && position !== \"settled\") position = \"awaiting-model\";\n }\n const last = facts.at(-1);\n\n if (last === undefined) return yield* failure(\"Progress has no owning fact\");\n if (previous?.continuation.position === \"settled\") position = \"settled\";\n else if (previous?.continuation.position === \"settling\" && position !== \"settled\")\n position = \"settling\";\n\n const turnBase =\n (previous?.continuation.turn === turn ? previous.continuation.turnBytes : initialBytes) +\n factBytes;\n\n const terminalUsageBytes = (previous?.continuation.terminalUsageBytes ?? 0) + usageCharge;\n\n return {\n accounting,\n savedContext,\n latestResponse,\n terminal,\n position,\n response,\n results,\n childResults,\n completionBytes,\n last,\n factBytes,\n turn,\n turnBase,\n usageCharge,\n terminalUsageBytes,\n terminalBytes: (previous?.continuation.terminalBytes ?? 0) + closingBytes,\n terminalRecords: (previous?.continuation.terminalRecords ?? 0) + closingCount,\n closing: closingCount > 0,\n };\n});\n\n/**\n * Verify retained history. Mutable checkpoint revisions are deliberately not historical proof.\n * Active original context is still checked against its exact retained historyDigest.\n */\nexport const verifyRunContinuations = Effect.fnUntraced(function* (\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n options?: {\n readonly verifyContext?: boolean;\n readonly executions?: ReadonlyArray<ExecutionCheckpoint>;\n },\n) {\n const inputs = records.filter(\n ({ record }) =>\n record.payload._tag === \"UserInputRecorded\" &&\n record.payload.kind === \"user\" &&\n record.payload.submissionId !== undefined,\n );\n\n if (records.some(({ record }) => record.payload._tag === \"RunContinuation\"))\n return yield* failure(\"Mutable interpreter progress is not canonical history\");\n for (const input of inputs) {\n const payload = input.record.payload;\n\n if (payload._tag !== \"UserInputRecorded\" || payload.submissionId === undefined) continue;\n const runId = runIdForSubmission(payload.submissionId);\n const own = records.filter((entry) => executionRunIds(entry.record).includes(runId));\n\n const terminal = own.findLast(\n ({ record }) => record.payload._tag === \"SubmissionSettled\" && record.payload.runId === runId,\n );\n\n if (terminal?.record.payload._tag === \"SubmissionSettled\") {\n if (\n terminal.record.payload.historyRecordCount === undefined ||\n own.filter((entry) => entry.sequence <= terminal.sequence).length !==\n terminal.record.payload.historyRecordCount\n )\n return yield* failure(\"Terminal history differs from its retained fact count\");\n continue;\n }\n if (options?.verifyContext === false) continue;\n const checkpoint = options?.executions?.find((value) => value.progress.runId === runId);\n\n if (checkpoint === undefined) {\n if (own.some(({ record }) => !isPreContinuationFact(record)))\n return yield* failure(\"Active execution is missing its authoritative checkpoint\");\n continue;\n }\n\n const saved = checkpoint.operational.find(\n ({ payload }) => payload._tag === \"RunContextRecorded\",\n );\n\n if (saved?.payload._tag === \"RunContextRecorded\") {\n yield* validateContextBoundary(saved.payload, input).pipe(\n Effect.mapError((cause) => failure(\"Context has an invalid admission boundary\", cause)),\n );\n yield* readRunContext(saved.payload, input, saved.recordId).pipe(\n Effect.mapError((cause) => failure(\"Context differs from its original history\", cause)),\n );\n }\n }\n});\n\n/**\n * Prepare progress for the existing atomic append/publication. Accept the returned state only\n * after that append commits; a failed or stale producer cannot publish speculative progress.\n * One writer retains bounded metadata for its active Run, not its historical results or IDs.\n */\nexport const makeProgressWriter = Effect.fnUntraced(function* (\n threadId: ThreadId,\n deploymentId: DeploymentId,\n) {\n const reader = yield* ThreadReader;\n const gate = yield* Semaphore.make(1);\n const cached = new Map<RunId, ProgressState>();\n\n let verifiedEmpty:\n | {\n readonly runId: RunId;\n readonly through: CanonicalSequence;\n readonly writer: CurrentRunWriter[\"Service\"];\n }\n | undefined;\n\n const reservations = new Map<\n RecordId,\n {\n readonly runId: RunId;\n readonly turn: number;\n readonly bytes: number;\n readonly records: number;\n }\n >();\n\n const stagedUsage = new Map<RunId, number>();\n\n const provide = <A, E>(effect: Effect.Effect<A, E, ThreadReader>) =>\n Effect.provideService(effect, ThreadReader, reader);\n\n const loadUncachedState = Effect.fnUntraced(function* (runId: RunId, after: CanonicalSequence) {\n const loaded = yield* provide(readContinuation(threadId, runId, after));\n\n if (Option.isNone(loaded)) return undefined;\n const continuation = loaded.value.continuation;\n let response: ModelResponseRecorded | undefined;\n let completionBytes: number | undefined;\n const results = new Map<ToolCallId, ToolCallSettled>();\n\n const childResults = new Map<ToolCallId, ChildResultCapacity>();\n\n if (continuation.latestResponse !== undefined) {\n const evidence = yield* provide(resolveEvidence(threadId, continuation.latestResponse));\n\n if (\n evidence.record.payload._tag !== \"ModelResponseRecorded\" ||\n evidence.record.payload.runId !== runId\n )\n return yield* failure(\"Continuation operation reference is invalid\");\n response = evidence.record.payload;\n if (continuation.accounting.accountedToolTurn < response.turn) {\n for (const operation of response.toolOperations) {\n const found = yield* provide(\n getRecord({\n threadId,\n recordId: toolCallSettledRecordId(runId, response.turn, operation.toolCallId),\n }),\n );\n\n if (Option.isSome(found)) {\n const result = found.value.record.payload;\n\n if (\n result._tag !== \"ToolCallSettled\" ||\n result.runId !== runId ||\n result.toolCallId !== operation.toolCallId ||\n result.toolName !== operation.toolName\n )\n return yield* failure(\"Continuation result identity is invalid\");\n results.set(operation.toolCallId, result);\n } else if (operation.executionKind === \"delegation\") {\n const requested = yield* provide(\n getRecord({\n threadId,\n recordId: subagentRequestedRecordId(runId, operation.toolCallId),\n }),\n );\n\n if (\n Option.isSome(requested) &&\n requested.value.record.payload._tag === \"SubagentRequested\"\n ) {\n if (\n requested.value.record.payload.runId !== runId ||\n requested.value.record.payload.toolCallId !== operation.toolCallId\n )\n return yield* failure(\"Continuation child request identity is invalid\");\n\n const started = yield* provide(\n getRecord({\n threadId,\n recordId: subagentStartedRecordId(runId, operation.toolCallId),\n }),\n );\n\n if (\n Option.isSome(started) &&\n (started.value.record.payload._tag !== \"SubagentStarted\" ||\n started.value.record.payload.runId !== runId ||\n started.value.record.payload.toolCallId !== operation.toolCallId ||\n started.value.record.payload.childThreadId !==\n requested.value.record.payload.childThreadId)\n )\n return yield* failure(\"Continuation child start identity is invalid\");\n\n const startedBytes = Option.isSome(started)\n ? canonicalRecordBytes(started.value.record) + MAX_RUN_CONTINUATION_BYTES\n : 0;\n\n childResults.set(operation.toolCallId, {\n resultBytes: Math.min(\n MAX_PERSISTED_JSON_BYTES,\n requested.value.record.payload.budget?.allocation.resultBytes ??\n MAX_PERSISTED_JSON_BYTES,\n ),\n remainingBytes: Math.max(0, RUN_TERMINAL_RESERVE_BYTES - startedBytes),\n remainingRecords: Option.isSome(started) ? 3 : 4,\n });\n }\n }\n }\n }\n }\n if (continuation.position === \"settling\" && continuation.terminal !== undefined) {\n const terminal = yield* provide(\n resolveExecutionEvidence(threadId, loaded.value.checkpoint, continuation.terminal),\n );\n\n const payload = terminal.payload;\n\n if (payload._tag === \"RunCompleted\")\n completionBytes =\n utf8ByteLength(JSON.stringify(payload.output)) +\n (payload.runDisposition === undefined\n ? 0\n : utf8ByteLength(JSON.stringify(payload.runDisposition)));\n }\n\n return {\n continuation,\n record: loaded.value.record,\n checkpoint: loaded.value.checkpoint,\n ...(response === undefined ? {} : { response }),\n results,\n childResults,\n ...(completionBytes === undefined ? {} : { completionBytes }),\n };\n });\n\n const checkFutureShapes = (\n state: ProgressState,\n cursorBytes?: number,\n ): Effect.Effect<void, ThreadStoreError> => {\n const progress = state.continuation;\n\n if (progress.position === \"settled\") return Effect.void;\n const size = cursorBytes ?? canonicalRecordBytes(state.record);\n const textBytes = (value: string) => utf8ByteLength(JSON.stringify(value));\n const refBytes = (value: EvidenceReference) => utf8ByteLength(JSON.stringify(value));\n\n const ref = (recordId: RecordId) => EvidenceReference.make({ recordId });\n\n const fits = (batchId: string, lastFact: EvidenceReference, terminal?: EvidenceReference) =>\n // Only these identities change. The fixed allowance covers scalar and timestamp growth.\n size +\n textBytes(JSON.stringify([\"continuation@1\", progress.runId, batchId])) -\n textBytes(state.record.recordId) +\n textBytes(deploymentId) -\n textBytes(state.record.deploymentId) +\n refBytes(lastFact) -\n refBytes(progress.lastFact) +\n (terminal === undefined\n ? 0\n : refBytes(terminal) -\n (progress.terminal === undefined ? 0 : refBytes(progress.terminal)) +\n 12) +\n 1024 <=\n MAX_RUN_CONTINUATION_BYTES;\n\n if (\n !fits(\n submissionSettlementBatchId(progress.submissionId),\n ref(submissionSettlementRecordId(progress.submissionId)),\n ref(runCompletedRecordId(progress.runId)),\n )\n )\n return Effect.fail(capacityFailure(\"Run has no room for a terminal continuation envelope\"));\n\n if (\n state.response !== undefined &&\n progress.accounting.accountedToolTurn < state.response.turn\n ) {\n for (const operation of state.response.toolOperations) {\n if (state.results.has(operation.toolCallId)) continue;\n if (\n !fits(\n toolCallResultBatchId(progress.runId, state.response.turn, operation.toolCallId),\n ref(toolCallSettledRecordId(progress.runId, state.response.turn, operation.toolCallId)),\n )\n )\n return Effect.fail(\n capacityFailure(\"Tool dispatch has no room for its result continuation envelope\"),\n );\n }\n }\n\n return Effect.void;\n };\n\n const checkCapacity = (\n state: CapacityState,\n consumed: ReadonlySet<RecordId> = new Set(),\n extra?: { readonly turn: number; readonly bytes: number; readonly records: number },\n committedUsageBytes = 0,\n ): Effect.Effect<void, ThreadStoreError> => {\n const progress = state.continuation;\n const pending = resultCapacity(state);\n\n const terminal =\n progress.position === \"settled\"\n ? 0\n : Math.max(\n 0,\n RUN_TERMINAL_RESERVE_BYTES +\n 2 * (state.completionBytes ?? 0) +\n 2 *\n (progress.terminalUsageBytes +\n Math.max(0, (stagedUsage.get(progress.runId) ?? 0) - committedUsageBytes)) -\n progress.terminalBytes,\n );\n\n let turnBytes =\n (extra !== undefined && extra.turn !== progress.turn ? 0 : progress.turnBytes) +\n pending.bytes +\n terminal +\n (extra?.bytes ?? 0);\n\n let recordBytes = progress.recordBytes + pending.bytes + terminal + (extra?.bytes ?? 0);\n\n let recordCount =\n progress.recordCount +\n pending.records +\n (progress.position === \"settled\"\n ? 0\n : Math.max(0, RUN_TERMINAL_RESERVE_RECORDS - progress.terminalRecords)) +\n (extra?.records ?? 0);\n\n for (const [recordId, reservation] of reservations) {\n if (reservation.runId !== progress.runId || consumed.has(recordId)) continue;\n if (reservation.turn === (extra?.turn ?? progress.turn)) turnBytes += reservation.bytes;\n recordBytes += reservation.bytes;\n recordCount += reservation.records;\n }\n if (\n turnBytes > MAX_TURN_CANONICAL_BYTES ||\n recordBytes > MAX_RUN_EVIDENCE_BYTES ||\n recordCount > MAX_RUN_EVIDENCE_RECORDS\n )\n return Effect.fail(\n failure(\n \"Run has no remaining canonical dispatch capacity\",\n AgentPersistenceCapacityError.make({\n message: \"Run has no room for the next result and a bounded terminal settlement\",\n }),\n ),\n );\n\n return Effect.void;\n };\n\n const prepare = Effect.fnUntraced(function* (\n batch: CanonicalBatch,\n after: CanonicalSequence,\n mode: \"commit\" | \"preflight\" = \"commit\",\n ) {\n if (batch.records.some((record) => record.payload._tag === \"RunContinuation\"))\n return yield* failure(\"A caller cannot supply interpreter progress to the progress writer\");\n\n // Every private caller passes captureFacts' owned snapshot. Keep a mutable\n // list for settlement accounting without capturing that snapshot a second time.\n const ownedRecords = [...batch.records];\n\n const groups = new Map<RunId, Array<RecordEnvelope>>();\n\n for (const record of ownedRecords) {\n for (const runId of executionRunIds(record)) {\n const facts = groups.get(runId) ?? [];\n\n facts.push(record);\n groups.set(runId, facts);\n }\n }\n const executions: Array<ExecutionUpdate> = [];\n const accepted = new Map<RunId, ProgressState>();\n let executionCount = 0;\n\n for (const [runId, facts] of groups) {\n const empty =\n verifiedEmpty?.runId === runId &&\n verifiedEmpty.through === after &&\n // Settlement preparation need not have a Run writer; absence disables reuse.\n verifiedEmpty.writer ===\n Option.getOrUndefined(yield* Effect.serviceOption(CurrentRunWriter));\n\n const previous = empty\n ? undefined\n : (cached.get(runId) ?? (yield* loadUncachedState(runId, after)));\n\n let original = facts.find(\n (record) =>\n record.payload._tag === \"UserInputRecorded\" &&\n record.payload.kind === \"user\" &&\n record.payload.runId === runId &&\n record.payload.submissionId !== undefined,\n );\n\n let originalCount = 0;\n let initialBytes = 0;\n let originalSequence = previous?.checkpoint?.originalSequence;\n\n if (previous === undefined && original === undefined) {\n const input = yield* provide(getRunInput({ threadId, runId }));\n\n if (\n Option.isNone(input) ||\n input.value.record.payload._tag !== \"UserInputRecorded\" ||\n input.value.record.payload.submissionId === undefined\n )\n continue;\n\n original = input.value.record;\n originalSequence = input.value.sequence;\n }\n\n const submissionId =\n previous?.continuation.submissionId ??\n (original?.payload._tag === \"UserInputRecorded\"\n ? original.payload.submissionId\n : undefined);\n\n if (submissionId === undefined)\n return yield* failure(\"Run progress has no original admission identity\");\n if (runId !== runIdForSubmission(submissionId))\n return yield* failure(\"Run progress conflicts with its original admission\");\n if (previous === undefined && original === undefined)\n return yield* failure(\"Run has no accepted original input\");\n\n if (previous === undefined && !empty) {\n const settled = yield* provide(\n getRecord({\n threadId,\n recordId: submissionSettlementRecordId(submissionId),\n }),\n );\n\n if (\n Option.isSome(settled) &&\n settled.value.sequence <= after &&\n settled.value.record.payload._tag === \"SubmissionSettled\" &&\n settled.value.record.payload.runId === runId &&\n settled.value.record.payload.historyRecordCount !== undefined &&\n facts.every(\n ({ payload }) =>\n payload._tag === \"WorkerReportPrepared\" ||\n payload._tag === \"SubmissionSettled\" ||\n payload._tag === \"ToolCallSettled\" ||\n payload._tag === \"ToolCallResolved\" ||\n payload._tag === \"SubagentJoined\",\n )\n )\n // Independent obligations can record factual closure after interpreter retirement.\n continue;\n\n const selected = yield* provide(\n Stream.runCollect(\n runEvidence(threadId, submissionId, after).pipe(\n Stream.take(MAX_RUN_RECOVERY_SUFFIX_RECORDS + 1),\n ),\n ),\n );\n\n const existing = selected.filter(({ record }) => executionRunIds(record).includes(runId));\n\n if (\n !validateSuffix(existing, CanonicalSequence.make(0)) ||\n existing.some(({ record }) => !isPreContinuationFact(record))\n )\n return yield* failure(\n `Run execution has no active checkpoint or exceeds its preparation bound (${facts.map((fact) => fact.payload._tag).join(\", \")})`,\n );\n originalCount = existing.length;\n initialBytes = existing.reduce(\n (bytes, entry) => bytes + canonicalRecordBytes(entry.record),\n 0,\n );\n }\n\n const canonicalRecords =\n (previous?.checkpoint?.canonicalRecords ?? originalCount) +\n facts.filter((fact) => !isOperationalRecord(fact)).length;\n\n for (let index = 0; index < facts.length; index++) {\n const fact = facts[index]!;\n const payload = fact.payload;\n\n if (payload._tag !== \"SubmissionSettled\" || payload.runId !== runId) continue;\n\n const retained = yield* Effect.fromResult(\n captureRecord(\n RecordEnvelope.make({\n ...fact,\n payload: { ...payload, historyRecordCount: canonicalRecords },\n }),\n ),\n ).pipe(\n Effect.map((record) => record.canonical),\n Effect.mapError((cause) => failure(\"Cannot capture canonical progress facts\", cause)),\n );\n\n facts[index] = retained;\n ownedRecords[ownedRecords.indexOf(fact)] = retained;\n }\n\n const originalInput =\n previous !== undefined\n ? previous.continuation.originalInput\n : original === undefined\n ? yield* failure(\"Run progress has no original input\")\n : EvidenceReference.make({ recordId: original.recordId });\n\n const next = yield* advanceFacts(previous, facts, submissionId, initialBytes);\n\n const {\n accounting,\n savedContext,\n latestResponse,\n terminal,\n position,\n response,\n results,\n childResults,\n completionBytes,\n last,\n factBytes,\n turn,\n turnBase,\n usageCharge,\n terminalUsageBytes,\n } = next;\n\n let continuation = yield* RunContinuation.makeEffect({\n version: 1,\n runId,\n submissionId,\n revision: (previous?.continuation.revision ?? 0) + 1,\n recordCount: (previous?.continuation.recordCount ?? originalCount) + facts.length,\n recordBytes: (previous?.continuation.recordBytes ?? initialBytes) + factBytes,\n turn,\n turnBytes: turnBase,\n terminalUsageBytes,\n terminalBytes: next.terminalBytes,\n terminalRecords: next.terminalRecords,\n originalInput,\n ...(savedContext === undefined ? {} : { savedContext }),\n ...(latestResponse === undefined ? {} : { latestResponse }),\n ...(terminal === undefined ? {} : { terminal }),\n lastFact: EvidenceReference.make({ recordId: last.recordId }),\n position,\n accounting,\n }).pipe(\n Effect.mapError(() =>\n capacityFailure(\"Canonical continuation exceeds its protocol bounds\"),\n ),\n );\n\n const header = {\n recordId: RecordId.make(JSON.stringify([\"continuation@1\", runId, batch.batchId])),\n family: \"thread\" as const,\n schemaVersion: 1 as const,\n createdAt: last.createdAt,\n deploymentId: last.deploymentId,\n };\n\n // The validated continuation fields are JSON; only the envelope DateTime needs encoding.\n // Key order does not change byte width. Measure without capturing a provisional record,\n // then compare against the final Schema encoding before accepting its accounting.\n const provisional = {\n ...header,\n createdAt: DateTime.formatIso(header.createdAt),\n payload: continuation,\n } satisfies typeof RecordEnvelope.Encoded;\n\n const initialCursorBytes = utf8ByteLength(JSON.stringify(provisional));\n\n const initialWidth =\n String(continuation.turnBytes).length + String(continuation.terminalBytes).length;\n\n let turnBytes = continuation.turnBytes;\n let terminalBytes = continuation.terminalBytes;\n\n for (let attempts = 0; ; attempts++) {\n const cursorBytes =\n initialCursorBytes +\n String(turnBytes).length +\n String(terminalBytes).length -\n initialWidth;\n\n const nextTurnBytes = turnBase + cursorBytes;\n const nextTerminalBytes = next.terminalBytes + (next.closing ? cursorBytes : 0);\n\n if (nextTurnBytes === turnBytes && nextTerminalBytes === terminalBytes) break;\n if (attempts >= 4) return yield* failure(\"Continuation byte accounting did not converge\");\n turnBytes = nextTurnBytes;\n terminalBytes = nextTerminalBytes;\n }\n\n const checkedBytes = yield* ContinuationBytes.makeEffect({\n turnBytes,\n terminalBytes,\n }).pipe(\n Effect.mapError(() =>\n capacityFailure(\"Turn exceeds its incremental canonical byte budget\"),\n ),\n );\n\n // Every other field was checked above; byte accounting changes only these counters.\n continuation = RunContinuation.make(\n { ...continuation, ...checkedBytes },\n { disableChecks: true },\n );\n\n const proposedRecord = RecordEnvelope.make(\n { ...header, payload: continuation },\n { disableChecks: true },\n );\n\n const cursorBytes = turnBytes - turnBase;\n\n if (cursorBytes > MAX_RUN_CONTINUATION_BYTES)\n return yield* capacityFailure(\n \"Encoded continuation exceeds 8192 bytes including its envelope\",\n );\n executionCount++;\n if (\n mode === \"preflight\" &&\n previous?.checkpoint !== undefined &&\n facts.every(({ payload }) => payload._tag === \"ModelResponseRecorded\")\n ) {\n // The payload and header are validated, and operational facts are unchanged.\n // Dispatch needs their capacity proof; only a commit needs checkpoint wire.\n yield* decodeExecutionFrontier({\n canonicalRecords,\n throughSequence: after + ownedRecords.filter((fact) => !isOperationalRecord(fact)).length,\n }).pipe(Effect.mapError((cause) => failure(\"Active execution exceeds its bounds\", cause)));\n\n const state: ProgressState = {\n continuation,\n record: proposedRecord,\n ...(response === undefined ? {} : { response }),\n results,\n childResults,\n ...(completionBytes === undefined ? {} : { completionBytes }),\n };\n\n yield* checkCapacity(\n state,\n new Set(batch.records.map(({ recordId }) => recordId)),\n undefined,\n usageCharge,\n );\n yield* checkFutureShapes(state, cursorBytes);\n continue;\n }\n\n const record = yield* Effect.fromResult(captureRecord(proposedRecord)).pipe(\n Effect.map((record) => record.canonical),\n Effect.mapError((cause) => failure(\"Cannot capture canonical progress facts\", cause)),\n );\n\n if (!isExecutionProgressRecord(record))\n return yield* failure(\"Captured execution has no Run continuation\");\n if (canonicalRecordBytes(record) !== cursorBytes)\n return yield* failure(\"Continuation byte accounting differs from its Schema encoding\");\n\n const operational = new Map(\n (previous?.checkpoint?.operational ?? []).map((fact) => [fact.recordId, fact]),\n );\n\n const changed = facts.filter(isOperationalRecord);\n\n for (const fact of changed) {\n const prior = operational.get(fact.recordId);\n\n if (\n prior !== undefined &&\n (yield* Effect.fromResult(recordEncoding(prior)).pipe(\n Effect.mapError((cause) => failure(\"Cannot encode active Run fact\", cause)),\n )).json !==\n (yield* Effect.fromResult(recordEncoding(fact)).pipe(\n Effect.mapError((cause) => failure(\"Cannot encode active Run fact\", cause)),\n )).json\n )\n return yield* failure(\"An active Run fact cannot change after becoming durable\");\n operational.set(fact.recordId, fact);\n }\n\n // The records above already belong to this writer. PreparedAppend captures the\n // complete update at the storage boundary, preserving their private encodings.\n const checkpoint = ExecutionCheckpoint.make(\n {\n version: 2,\n progressRecord: record,\n operational: [...operational.values()],\n canonicalRecords,\n originalSequence:\n originalSequence ??\n CanonicalSequence.make(\n after +\n ownedRecords\n .filter((fact) => !isOperationalRecord(fact))\n .findIndex((fact) => fact.recordId === originalInput.recordId) +\n 1,\n ),\n throughSequence: CanonicalSequence.make(\n after + ownedRecords.filter((fact) => !isOperationalRecord(fact)).length,\n ),\n batchId: batch.batchId,\n },\n { disableChecks: true },\n );\n\n const state = {\n continuation,\n record,\n checkpoint,\n ...(response === undefined ? {} : { response }),\n results,\n childResults,\n ...(completionBytes === undefined ? {} : { completionBytes }),\n };\n\n if (\n !facts.every((fact) => isTerminalBudgetFact(fact) && fact.payload._tag !== \"RunCompleted\")\n )\n yield* checkCapacity(\n state,\n new Set(batch.records.map(({ recordId }) => recordId)),\n undefined,\n usageCharge,\n );\n yield* checkFutureShapes(state);\n executions.push(\n ExecutionUpdate.make(\n {\n previousRevision: previous?.continuation.revision ?? 0,\n checkpoint,\n facts: changed,\n // Pending operations and handoffs retain their own recovery rows and original facts.\n retire: position === \"settled\",\n },\n { disableChecks: true },\n ),\n );\n accepted.set(runId, state);\n }\n\n if (ownedRecords.length + executionCount > 256)\n return yield* failure(\"Progress and facts exceed the atomic batch bound\");\n\n const prepared = CommitBatch.make(\n {\n ...batch,\n records: ownedRecords.filter((fact) => !isOperationalRecord(fact)),\n },\n { disableChecks: true },\n );\n\n return {\n batch: prepared,\n executions,\n accept: () => {\n for (const record of batch.records) reservations.delete(record.recordId);\n for (const [runId, state] of accepted) {\n if (executions.find((update) => update.checkpoint.progress.runId === runId)?.retire)\n cached.delete(runId);\n else cached.set(runId, state);\n }\n // Administrative writers can address many old Runs; retention is still bounded.\n while (cached.size > 8) {\n const first = cached.keys().next().value;\n\n if (first !== undefined) cached.delete(first);\n }\n },\n };\n });\n\n const tail = Effect.flatMap(CurrentRunWriter, (writer) =>\n writer.threadId !== threadId\n ? Effect.fail(failure(\"Progress writer belongs to another Thread\"))\n : Effect.map(writer.tail, (position) => position.sequence),\n );\n\n const commitCaptured = Effect.fnUntraced(\n function* (batch: CanonicalBatch) {\n const writer = yield* CurrentRunWriter;\n\n for (let retries = 0; ; retries++) {\n const prepared = yield* prepare(batch, yield* tail).pipe(\n Effect.catchTag(\"ThreadNotMaterialized\", (cause) =>\n failure(\"Selected Run disappeared during progress publication\", cause),\n ),\n );\n\n const result = yield* writer.append(prepared.batch, prepared.executions).pipe(\n Effect.catchTag(\"AppendConflict\", (conflict) => {\n if (conflict.reason !== \"tail\" || retries >= 8) return Effect.fail(conflict);\n cached.clear();\n\n return Effect.succeed(undefined);\n }),\n );\n\n if (result === undefined) continue;\n\n if (result.replayed) cached.clear();\n else prepared.accept();\n\n return result;\n }\n },\n (effect) =>\n Effect.flatMap(CurrentRunWriter, (writer) =>\n writer.withProgress(gate.withPermits(1)(effect)),\n ),\n );\n\n const publishCaptured = Effect.fnUntraced(\n function* (batch: CanonicalBatch) {\n const publisher = yield* CurrentRunSettlement;\n\n if (publisher.threadId !== threadId)\n return yield* failure(\"Settlement publisher belongs to another Thread\");\n\n for (let retries = 0; ; retries++) {\n const prepared = yield* prepare(batch, (yield* publisher.tail).sequence).pipe(\n Effect.catchTag(\"ThreadNotMaterialized\", (cause) =>\n failure(\"Selected Run disappeared during progress publication\", cause),\n ),\n );\n\n const first = prepared.batch.records[0];\n\n if (first === undefined)\n return yield* failure(\"Settlement must publish a retained terminal fact\");\n\n const terminalBatch = yield* CanonicalBatch.makeEffect({\n ...prepared.batch,\n records: [first, ...prepared.batch.records.slice(1)],\n }).pipe(\n Effect.mapError((cause) =>\n failure(\"Settlement must publish a retained terminal fact\", cause),\n ),\n );\n\n const result = yield* publisher.publishSettlement(terminalBatch, prepared.executions).pipe(\n Effect.catchTag(\"AppendConflict\", (conflict) => {\n if (conflict.reason !== \"tail\" || retries >= 8) return Effect.fail(conflict);\n cached.clear();\n\n return Effect.succeed(undefined);\n }),\n );\n\n if (result === undefined) continue;\n\n if (result.replayed) cached.clear();\n else prepared.accept();\n\n return result;\n }\n },\n (effect) =>\n Effect.flatMap(CurrentRunSettlement, (writer) =>\n writer.withProgress(gate.withPermits(1)(effect)),\n ),\n );\n\n const commit = (batch: CommitBatch) => captureFacts(batch).pipe(Effect.flatMap(commitCaptured));\n\n const publish = (batch: CanonicalBatch) =>\n captureFacts(batch).pipe(Effect.flatMap(publishCaptured));\n\n const reserve = (runId: RunId, probe: CanonicalBatch, bytes: number) =>\n gate.withPermits(1)(\n Effect.gen(function* () {\n const after = yield* tail;\n\n yield* prepare(yield* captureFacts(probe), after);\n const recordId = probe.records[0].recordId;\n const state = cached.get(runId) ?? (yield* loadUncachedState(runId, after));\n\n if (state === undefined) return yield* failure(\"Dispatch has no canonical Run progress\");\n if (reservations.has(recordId))\n return yield* failure(\"Dispatch capacity is already reserved\");\n yield* checkCapacity(state, new Set(), {\n turn: state.continuation.turn,\n bytes,\n records: 1,\n });\n reservations.set(recordId, { runId, turn: state.continuation.turn, bytes, records: 1 });\n\n return gate.withPermits(1)(\n Effect.sync(() => {\n reservations.delete(recordId);\n }),\n );\n }),\n );\n\n const defer = (batch: CanonicalBatch) =>\n gate.withPermits(1)(\n Effect.gen(function* () {\n const after = yield* tail;\n\n const owned = yield* captureFacts(batch);\n\n yield* prepare(owned, after, \"preflight\");\n\n const response = owned.records.find(\n (record) => record.payload._tag === \"ModelResponseRecorded\",\n );\n\n if (response === undefined || response.payload._tag !== \"ModelResponseRecorded\")\n return yield* failure(\"Deferred dispatch has no response\");\n\n const progress =\n cached.get(response.payload.runId) ??\n (yield* loadUncachedState(response.payload.runId, after));\n\n if (progress === undefined) return yield* failure(\"Deferred dispatch has no Run progress\");\n\n const pending = resultCapacity({\n ...progress,\n continuation: {\n ...progress.continuation,\n accounting: { ...progress.continuation.accounting, accountedToolTurn: 0 },\n },\n response: response.payload,\n results: new Map(),\n childResults: new Map(),\n });\n\n const bytes =\n owned.records.reduce((total, record) => total + canonicalRecordBytes(record), 0) +\n MAX_RUN_CONTINUATION_BYTES +\n pending.bytes;\n\n const records = owned.records.length + pending.records;\n\n yield* checkCapacity(progress, new Set(), { turn: response.payload.turn, bytes, records });\n reservations.set(response.recordId, {\n runId: response.payload.runId,\n turn: response.payload.turn,\n bytes,\n records,\n });\n\n return owned;\n }),\n );\n\n const checkState = (state: ProgressState | undefined, recovered: boolean) => {\n if (state === undefined) return Effect.fail(failure(\"Execution has no canonical Run progress\"));\n\n const capacity = () =>\n state.continuation.position === \"settling\" || state.continuation.position === \"settled\"\n ? Effect.void\n : checkCapacity(state);\n\n // Accepted states were shape-checked, but usage and reservations remain live inputs.\n return recovered ? Effect.andThen(checkFutureShapes(state), capacity) : capacity();\n };\n\n const check = (runId: RunId) =>\n gate.withPermits(1)(\n Effect.flatMap(CurrentRunWriter, (writer) => {\n if (writer.threadId !== threadId)\n return Effect.fail(failure(\"Progress writer belongs to another Thread\"));\n\n const retained = cached.get(runId);\n\n if (retained !== undefined) return checkState(retained, false);\n\n return Effect.flatMap(writer.tail, (position) =>\n Effect.flatMap(loadUncachedState(runId, position.sequence), (state) =>\n checkState(state, true),\n ),\n );\n }),\n );\n\n return {\n commit,\n publish,\n reserve,\n defer,\n check,\n /** Scope a verified empty execution/evidence view to one owned initialization body.\n * The caller holds progress+mutation gates; a changed writer or tail never reuses it. */\n withVerifiedEmptyRun: <A, E, R>(\n runId: RunId,\n through: CanonicalSequence,\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<A, E, R | CurrentRunWriter> =>\n Effect.flatMap(CurrentRunWriter, (writer) => {\n const view = { runId, through, writer };\n\n verifiedEmpty = view;\n\n return body.pipe(\n Effect.ensuring(\n Effect.sync(() => {\n if (verifiedEmpty === view) verifiedEmpty = undefined;\n }),\n ),\n );\n }),\n stageUsage: (runId: RunId, bytes: number) => {\n if (bytes === 0) stagedUsage.delete(runId);\n else stagedUsage.set(runId, bytes);\n },\n };\n});\n"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { l as SubmissionId, s as RunId, u as ThreadId } from "./Identifiers-CN2s30fF.mjs";
|
|
2
2
|
import { r as ModelCallUsage } from "./Usage-CzZJ6A2n.mjs";
|
|
3
3
|
import { $ as RecordEnvelope, C as EvidenceReference, d as CanonicalRecordEnvelope, l as CanonicalBatch, ot as RunContextRecorded, p as CanonicalSequence, st as RunContinuation } from "./Records-BTnGRdcf.mjs";
|
|
4
|
-
import { $r as ExecutionCheckpoint, Fr as RunStorageSession,
|
|
5
|
-
import { t as RunContextReader } from "./run-context-reader-
|
|
4
|
+
import { $r as ExecutionCheckpoint, Fr as RunStorageSession, Gt as LedgerError, Ki as ThreadStoreError, Ni as ThreadNotMaterialized, Qr as CommitBatch, Ur as SettlementPublicationResult, Xr as AppendResult, _o as ProgressAppendRecord, cn as SettlementConflict, qi as ThreadStoreFailure, ti as ExecutionUpdate, zi as ThreadReader } from "./Admin-NvXFPDIM.mjs";
|
|
5
|
+
import { t as RunContextReader } from "./run-context-reader-kpO9xhP2.mjs";
|
|
6
6
|
import { Context, Effect, Option, Stream } from "effect";
|
|
7
7
|
//#region src/durable/internal/evidence.d.ts
|
|
8
8
|
/** References identify immutable facts; schema and owning readers validate their meaning. */
|
|
@@ -118,9 +118,6 @@ declare const makeProgressWriter: (threadId: string & import("effect/Brand").Bra
|
|
|
118
118
|
reserve: (runId: RunId, probe: CanonicalBatch, bytes: number) => Effect.Effect<Effect.Effect<void, never, never>, ThreadNotMaterialized | ThreadStoreError, CurrentRunWriter>;
|
|
119
119
|
defer: (batch: CanonicalBatch) => Effect.Effect<Readonly<CanonicalBatch>, ThreadNotMaterialized | ThreadStoreError, CurrentRunWriter>;
|
|
120
120
|
check: (runId: RunId) => Effect.Effect<void, ThreadNotMaterialized | ThreadStoreError, CurrentRunWriter>;
|
|
121
|
-
/** Internal read view immediately after this writer's acknowledged commit, while
|
|
122
|
-
* holding its initialization gates. Never authority across ownership or writes. */
|
|
123
|
-
acceptedCheckpoint: (runId: RunId) => ExecutionCheckpoint | undefined;
|
|
124
121
|
/** Scope a verified empty execution/evidence view to one owned initialization body.
|
|
125
122
|
* The caller holds progress+mutation gates; a changed writer or tail never reuses it. */
|
|
126
123
|
withVerifiedEmptyRun: <A, E, R>(runId: RunId, through: CanonicalSequence, body: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R | CurrentRunWriter>;
|
|
@@ -128,4 +125,4 @@ declare const makeProgressWriter: (threadId: string & import("effect/Brand").Bra
|
|
|
128
125
|
}, never, ThreadReader>;
|
|
129
126
|
//#endregion
|
|
130
127
|
export { resolveEvidence as S, executionRunIds as _, canonicalRecordBytes as a, terminalUsageCharge as b, prepareProgressAppend as c, resolveExecutionEvidence as d, runEvidence as f, canonicalRunIds as g, verifyRunContinuations as h, RunContinuation_d_exports as i, readContinuation as l, validateSuffix as m, CurrentRunWriter as n, isOperationalRecord as o, validateProgressAppend as p, ProgressAppendReader as r, makeProgressWriter as s, CurrentRunSettlement as t, readRunEvidenceSnapshot as u, isPreContinuationFact as v, reference as x, isWorkHandoff as y };
|
|
131
|
-
//# sourceMappingURL=RunContinuation-
|
|
128
|
+
//# sourceMappingURL=RunContinuation-CL0wBsQE.d.mts.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { AttachChildToReservationRequest, ChildBudgetReservationRequest, ClaimJoiningRequest, LedgerError, MarkInputAppliedRequest, MarkJoinedRequest, OwnershipLost, RevertJoiningRequest, SettlementConflict, SubmissionLedger, SuspendRequest } from "./durable/SubmissionLedger.mjs";
|
|
2
|
-
import {
|
|
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-D2rqtt7k.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
|
|
@@ -125,12 +125,12 @@ const makeWriter = Effect.fnUntraced(function* (threadId) {
|
|
|
125
125
|
const makeAppend = Effect.gen(function* () {
|
|
126
126
|
const publisher = yield* ThreadStore;
|
|
127
127
|
return Effect.fnUntraced(function* (batch, executions) {
|
|
128
|
-
const captured = yield* PreparedAppend.capture(
|
|
128
|
+
const captured = yield* PreparedAppend.capture({
|
|
129
129
|
threadId,
|
|
130
130
|
expectedTailSequence: tail.sequence,
|
|
131
131
|
batch,
|
|
132
132
|
...executions === void 0 ? {} : { executions }
|
|
133
|
-
})
|
|
133
|
+
}).pipe(Effect.mapError((cause) => ThreadStoreError.make({
|
|
134
134
|
operation: "capture append",
|
|
135
135
|
message: cause.message,
|
|
136
136
|
cause
|
|
@@ -211,7 +211,21 @@ const make = Effect.gen(function* () {
|
|
|
211
211
|
...writer,
|
|
212
212
|
claim: claimed,
|
|
213
213
|
...appendInput === void 0 ? {} : { appendInput },
|
|
214
|
-
|
|
214
|
+
...store.readFreshRun === void 0 || appendInput === void 0 ? {} : { prepareStart: owner.withProgress(request.threadId, generation.use(Effect.gen(function* () {
|
|
215
|
+
const snapshot = yield* ledger.loadRecoverySnapshot(RecoverySnapshotRequest.make({ submissionId: claimed.submissionId }));
|
|
216
|
+
const submission = snapshot.submission;
|
|
217
|
+
if (submission.threadId !== request.threadId || submission.state !== "ready" || submission.workerAdmission !== void 0 || submission.messageAdmission !== void 0 || submission.parentLinkage !== void 0 || snapshot.inputApplied !== void 0 || snapshot.abortIntent !== void 0 || snapshot.approvalDecisions.length !== 0) return void 0;
|
|
218
|
+
const identity = yield* store.readFreshRun(FreshRunRead.make({
|
|
219
|
+
threadId: request.threadId,
|
|
220
|
+
submissionId: claimed.submissionId
|
|
221
|
+
}));
|
|
222
|
+
if (Option.isNone(identity)) return void 0;
|
|
223
|
+
adoptTail(identity.value.tailSequence);
|
|
224
|
+
return {
|
|
225
|
+
snapshot,
|
|
226
|
+
identity: identity.value
|
|
227
|
+
};
|
|
228
|
+
}))) },
|
|
215
229
|
release: generation.release,
|
|
216
230
|
refresh: writer.refresh,
|
|
217
231
|
markInputApplied: (marker) => owned(ledger.markInputApplied(MarkInputAppliedRequest.make({
|
|
@@ -283,4 +297,4 @@ const layer = () => Layer.effect(RunStorage, make);
|
|
|
283
297
|
//#endregion
|
|
284
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 };
|
|
285
299
|
|
|
286
|
-
//# sourceMappingURL=RunStorage-
|
|
300
|
+
//# sourceMappingURL=RunStorage-DlfvMfHM.mjs.map
|