@yielded/agent-platform-cloudflare 0.1.0-beta.174 → 0.1.0-beta.176
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/{Alarm-4J9B8Fg8.mjs → Alarm-7uipp6LW.mjs} +155 -117
- package/dist/Alarm-7uipp6LW.mjs.map +1 -0
- package/dist/Alarm.d.mts +2 -0
- package/dist/Alarm.mjs +1 -1
- package/dist/CloudflareScheduling.mjs +2 -2
- package/dist/CloudflareSubscriptions.mjs +2 -2
- package/dist/{CloudflareThreadClient-lTm6baDP.d.mts → CloudflareThreadClient-HO_3rkM7.d.mts} +362 -362
- package/dist/{CloudflareThreadClient-DU548EEj.mjs → CloudflareThreadClient-bA3lGA_2.mjs} +4 -4
- package/dist/CloudflareThreadClient-bA3lGA_2.mjs.map +1 -0
- package/dist/CloudflareThreadClient.d.mts +1 -1
- package/dist/CloudflareThreadClient.mjs +1 -1
- package/dist/{ThreadObject-BLYgzcdT.d.mts → ThreadObject-CxNlhoPL.d.mts} +13 -13
- package/dist/{ThreadObject-C2LF3btz.mjs → ThreadObject-SNcCsrS2.mjs} +52 -50
- package/dist/ThreadObject-SNcCsrS2.mjs.map +1 -0
- package/dist/ThreadObject.d.mts +1 -1
- package/dist/ThreadObject.mjs +1 -1
- package/dist/WakeScheduler.mjs +1 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.mjs +3 -3
- package/dist/{prepared-admission-BoUPHSNQ.mjs → prepared-admission-BvMiFR41.mjs} +2 -2
- package/dist/{prepared-admission-BoUPHSNQ.mjs.map → prepared-admission-BvMiFR41.mjs.map} +1 -1
- package/package.json +1 -1
- package/src/Alarm.ts +295 -201
- package/src/CloudflareThreadClient.ts +3 -2
- package/src/ThreadObject.ts +17 -22
- package/src/internal/layers.ts +124 -82
- package/src/internal/message-delivery.ts +61 -37
- package/dist/Alarm-4J9B8Fg8.mjs.map +0 -1
- package/dist/CloudflareThreadClient-DU548EEj.mjs.map +0 -1
- package/dist/ThreadObject-C2LF3btz.mjs.map +0 -1
|
@@ -2,7 +2,7 @@ import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
|
|
|
2
2
|
import { ThreadObjectNamespace, callThreadObject } from "./CloudflareBindings.mjs";
|
|
3
3
|
import { AdmissionLimitExceeded } from "./CloudflareConfig.mjs";
|
|
4
4
|
import { r as safeCauseMessage, t as cloudflareFailureSignals } from "./boundary-BguazVkh.mjs";
|
|
5
|
-
import { n as DurableAlarmError } from "./Alarm-
|
|
5
|
+
import { n as DurableAlarmError } from "./Alarm-7uipp6LW.mjs";
|
|
6
6
|
import { Receipt } from "@yielded/agent/durable-agent-runtime";
|
|
7
7
|
import { AgentId, ThreadId } from "@yielded/agent/identifiers";
|
|
8
8
|
import { AbortCommand, AbortIntent, AdmissionConflict, AdmissionFence, AdmissionGroup, AdmissionPolicyError, ApprovalConflict, ApprovalDecisionCommand, ApprovalDecisionIntent, IdempotencyKey, JoinedToHost, LedgerError, OwnershipLost, Principal, Settlement, SettlementConflict, UnknownResolutionCommand, UnknownResolutionConflict, UnknownResolutionIntent } from "@yielded/agent/submission-ledger";
|
|
@@ -316,12 +316,12 @@ const ClientUnknownHostFailure = Schema.Union([
|
|
|
316
316
|
HostProtocolError
|
|
317
317
|
]);
|
|
318
318
|
const liveTextProtocolFailure = () => HostProtocolError.make({ message: "Provisional text is incomplete or invalid; discard drafts and read canonical records" });
|
|
319
|
+
const decodeLiveTextFrame = Schema.decodeUnknownSync(Schema.fromJsonString(Frame));
|
|
319
320
|
const decodeLiveText = (threadId, source) => Stream.suspend(() => {
|
|
320
321
|
const decoder = new TextDecoder("utf-8", {
|
|
321
322
|
fatal: true,
|
|
322
323
|
ignoreBOM: false
|
|
323
324
|
});
|
|
324
|
-
const decode = Schema.decodeUnknownSync(Schema.fromJsonString(Frame));
|
|
325
325
|
let pending = "";
|
|
326
326
|
let pendingBytes = 0;
|
|
327
327
|
let expected = 0;
|
|
@@ -395,7 +395,7 @@ const decodeLiveText = (threadId, source) => Stream.suspend(() => {
|
|
|
395
395
|
offset = end + 1;
|
|
396
396
|
if (newline < 0) break;
|
|
397
397
|
const frame = yield* Effect.try({
|
|
398
|
-
try: () =>
|
|
398
|
+
try: () => decodeLiveTextFrame(pending),
|
|
399
399
|
catch: liveTextProtocolFailure
|
|
400
400
|
});
|
|
401
401
|
pending = "";
|
|
@@ -601,4 +601,4 @@ var CloudflareThreadClient = class CloudflareThreadClient extends Context.Servic
|
|
|
601
601
|
//#endregion
|
|
602
602
|
export { decodeObservePageRequest as A, encodeObservePageRequest as B, boundHostDiagnostic as C, decodeAwaitSettlementRequest as D, decodeAwaitProgressRequest as E, encodeApprovalDecisionCommand as F, MAX_DELTA_LENGTH as G, encodeSubmitRequest as H, encodeAwaitProgressRequest as I, Request as J, MAX_DRAFT_LENGTH as K, encodeAwaitSettlementRequest as L, decodeSubmitRequest as M, decodeUnknownResolutionCommand as N, decodeCancelProgressRequest as O, encodeAbortCommand as P, encodeCancelProgressRequest as R, UnknownResolutionRecorded as S, decodeApprovalDecisionCommand as T, encodeUnknownResolutionCommand as U, encodeReceipt as V, Frame as W, cloudflareCryptoLayer as X, isBoundedEvent as Y, SettlementRecordReached as _, CancelProgressRequest as a, SubmitSucceeded as b, HostFailed as c, HostResponse as d, ObservePageRequest as f, SettlementReached as g, ProgressObserved as h, AwaitSettlementRequest as i, decodeReceipt as j, decodeHostResponse as k, HostFailure as l, ProgressCancelled as m, ApprovalRecorded as n, CloudflareThreadClient as o, ObservedPage as p, MAX_FRAME_BYTES as q, AwaitProgressRequest as r, CloudflareThreadClient_exports as s, AbortRecorded as t, HostProtocolError as u, SubmissionStatusResponse as v, decodeAbortCommand as w, ThreadClientError as x, SubmitRequest as y, encodeHostResponse as z };
|
|
603
603
|
|
|
604
|
-
//# sourceMappingURL=CloudflareThreadClient-
|
|
604
|
+
//# sourceMappingURL=CloudflareThreadClient-bA3lGA_2.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CloudflareThreadClient-bA3lGA_2.mjs","names":["LiveTextFrame","WatchTextRequest"],"sources":["../src/internal/crypto.ts","../src/internal/live-text-protocol.ts","../src/CloudflareThreadClient.ts"],"sourcesContent":["// Implement the Effect Crypto service with the Workers native hashing primitive.\n// @effect-diagnostics-next-line nodeBuiltinImport:off\nimport { createHash } from \"node:crypto\";\n\nimport { BrowserCrypto } from \"@effect/platform-browser\";\nimport { Crypto, Effect, Layer, PlatformError } from \"effect\";\n\n/** Workers use native SHA-256 while retaining BrowserCrypto's services and overrides. */\nexport const cloudflareCryptoLayer: Layer.Layer<Crypto.Crypto> = Layer.effect(\n Crypto.Crypto,\n Effect.gen(function* () {\n const base = yield* Crypto.Crypto;\n const webCrypto = yield* BrowserCrypto.WebCrypto;\n const hostGlobals: object = globalThis;\n\n return Crypto.Crypto.of({\n ...base,\n digest: (algorithm, data) => {\n if (\n algorithm !== \"SHA-256\" ||\n !(\"crypto\" in hostGlobals) ||\n webCrypto !== hostGlobals.crypto ||\n typeof webCrypto.subtle?.digest !== \"function\"\n )\n return base.digest(algorithm, data);\n\n return Effect.try({\n try: () => Uint8Array.from(createHash(\"sha256\").update(data).digest()),\n catch: (cause) =>\n PlatformError.systemError({\n module: \"Crypto\",\n method: \"digest\",\n _tag: \"Unknown\",\n description: \"Could not compute digest\",\n cause,\n }),\n });\n },\n });\n }),\n).pipe(Layer.provide(BrowserCrypto.layer));\n","import { ThreadId } from \"@yielded/agent/identifiers\";\nimport { Event } from \"@yielded/agent/provisional-text\";\nimport { Schema } from \"effect\";\n\nexport const MAX_FRAME_BYTES = 32 * 1_024;\nexport const MAX_ID_LENGTH = 256;\nexport const MAX_DELTA_LENGTH = 4_096;\nexport const BUFFER_SIZE = 32;\nexport const MAX_OBSERVERS = 8;\nexport const MAX_DRAFT_PARTS = 32;\nexport const MAX_DRAFT_LENGTH = 2 * 1_024 * 1_024;\n\nconst streamId = Schema.NonEmptyString.check(Schema.isMaxLength(MAX_ID_LENGTH));\n\nexport const Request = Schema.Struct({ schemaVersion: Schema.Literal(1) });\n\n/**\n * Reset replaces all drafts with a snapshot, streamed as native Text parts before live deltas.\n * Each snapshot starts a fresh streamId. Its sequences are unrelated to canonical sequences.\n */\nexport const Frame = Schema.Union([\n Schema.TaggedStruct(\"Reset\", {\n schemaVersion: Schema.Literal(1),\n streamId,\n threadId: ThreadId,\n sequence: Schema.Literal(0),\n }),\n Schema.TaggedStruct(\"Event\", {\n schemaVersion: Schema.Literal(1),\n streamId,\n sequence: Schema.Int.check(Schema.isGreaterThan(0)),\n event: Event,\n }),\n]);\n\nexport type Frame = typeof Frame.Type;\n\n/** Bounds are checked before queueing; provider metadata is deliberately absent. */\nexport const isBoundedEvent = (event: Event): boolean => {\n const ids: string[] = [event.threadId, event.submissionId, event.attemptId];\n\n if (event._tag !== \"AttemptEnded\") ids.push(event.runId, event.turnId);\n if (ids.some((id) => id.length > MAX_ID_LENGTH)) return false;\n\n return (\n event._tag !== \"Text\" ||\n (event.part.id.length <= MAX_ID_LENGTH &&\n Object.keys(event.part.metadata).length === 0 &&\n (event.part.type !== \"text-delta\" || event.part.delta.length <= MAX_DELTA_LENGTH))\n );\n};\n","import { AgentInputError } from \"@yielded/agent/agent-error\";\nimport { DigestError } from \"@yielded/agent/digest\";\nimport {\n Receipt,\n type DurableSubmitAgent,\n type DurableSubmitOptions,\n} from \"@yielded/agent/durable-agent-runtime\";\nimport { DurableRuntimeFailpointError } from \"@yielded/agent/durable-failpoint\";\nimport { AgentId, type ThreadId } from \"@yielded/agent/identifiers\";\nimport { InputMessage } from \"@yielded/agent/messaging\";\nimport { OperationDenied } from \"@yielded/agent/operation-authorizer\";\nimport {\n CanonicalRecordEnvelope,\n CanonicalSequence,\n DefinitionDigests,\n PersistedJson,\n SubmissionSettledRecord,\n WorkerAdmission,\n} from \"@yielded/agent/records\";\nimport {\n AdmissionFence,\n AdmissionGroup,\n AbortCommand,\n AbortIntent,\n AdmissionConflict,\n AdmissionPolicyError,\n ApprovalConflict,\n ApprovalDecisionCommand,\n ApprovalDecisionIntent,\n IdempotencyKey,\n JoinedToHost,\n LedgerError,\n OwnershipLost,\n Principal,\n Settlement,\n SettlementConflict,\n UnknownResolutionCommand,\n UnknownResolutionConflict,\n UnknownResolutionIntent,\n} from \"@yielded/agent/submission-ledger\";\nimport { SubmissionStatus } from \"@yielded/agent/submission-status\";\nimport {\n AppendConflict,\n ThreadNotMaterialized,\n ThreadStoreError,\n} from \"@yielded/agent/thread-store\";\nimport { Context, Crypto, Duration, Effect, Layer, Predicate, Schema, Stream } from \"effect\";\nimport { RpcTargets, RpcTracing } from \"effect-cf\";\n\nimport { DurableAlarmError } from \"./Alarm.ts\";\nimport {\n callThreadObject,\n ThreadObjectNamespace,\n type ThreadObjectRpc,\n} from \"./CloudflareBindings.ts\";\nimport { AdmissionLimitExceeded } from \"./CloudflareConfig.ts\";\nimport { cloudflareFailureSignals, safeCauseMessage } from \"./internal/boundary.ts\";\nimport { cloudflareCryptoLayer } from \"./internal/crypto.ts\";\nimport {\n Frame as LiveTextFrame,\n isBoundedEvent,\n MAX_DRAFT_PARTS,\n MAX_FRAME_BYTES,\n Request as WatchTextRequest,\n} from \"./internal/live-text-protocol.ts\";\n\nexport { Frame as LiveTextFrame } from \"./internal/live-text-protocol.ts\";\n\n/**\n * The Worker↔Thread-Object host protocol (plan §1.4): Schema envelopes for the host\n * entry points (`submitEncoded`, `awaitSettlementEncoded`, `observePage`, `abortEncoded`,\n * `resolveApprovalEncoded`, `resolveUnknownEncoded`) plus the Worker-side client that speaks\n * it. Mirrors the WP2 port protocol: requests and responses are closed Schema unions, typed\n * failures travel as their own tagged classes and RE-DECODE to identical tags on the caller\n * (error-tag fidelity), and protocol anomalies are answered typed instead of thrown.\n */\n\n/** Ceiling for host protocol diagnostic strings. */\nconst MAX_HOST_DIAGNOSTIC_LENGTH = 4_096;\nconst PROGRESS_CANCELLATION_TIMEOUT = \"1 second\";\n\nconst BoundedDiagnostic = Schema.String.check(Schema.isMaxLength(MAX_HOST_DIAGNOSTIC_LENGTH));\n\n/** Truncate a diagnostic string to the host protocol's bounded length. */\nexport const boundHostDiagnostic = (value: string): string =>\n value.length > MAX_HOST_DIAGNOSTIC_LENGTH\n ? `${value.slice(0, MAX_HOST_DIAGNOSTIC_LENGTH - 3)}...`\n : value;\n\n/**\n * The envelope itself could not be honored: the Object could not decode the request, or a\n * response could not be encoded/decoded. Never carries operation semantics.\n */\nexport class HostProtocolError extends Schema.TaggedError<HostProtocolError>()(\n \"HostProtocolError\",\n {\n message: BoundedDiagnostic,\n },\n) {}\n\n/** The Worker-side stub call itself failed (RPC rejection, overload, eviction mid-call). */\nexport class ThreadClientError extends Schema.TaggedError<ThreadClientError>()(\n \"ThreadClientError\",\n {\n threadId: Schema.String,\n message: Schema.String,\n cause: Schema.optionalKey(Schema.Defect()),\n /** Cloudflare's own classification for a failure safe to retry with a fresh stub. */\n retryable: Schema.optionalKey(Schema.Boolean),\n /** Cloudflare overloads are surfaced immediately instead of adding retry pressure. */\n overloaded: Schema.optionalKey(Schema.Boolean),\n },\n) {}\n\n// ---------------------------------------------------------------------------\n// Requests\n// ---------------------------------------------------------------------------\n\n/**\n * One durable submission, input ALREADY encoded by the caller through the Agent Binding's\n * input schema (the Worker bundles the same Agent definitions as the Object, so schema\n * validation happens client-side; the resolved Binding re-validates at claim time). The\n * Thread identity is deliberately absent — the addressed Object IS the lane.\n */\nexport class SubmitRequest extends Schema.Class<SubmitRequest>(\n \"@effect-agent/platform-cloudflare/SubmitRequest\",\n)({\n agentId: AgentId,\n principal: Principal,\n idempotencyKey: IdempotencyKey,\n admissionGroup: Schema.optionalKey(AdmissionGroup),\n admissionFence: Schema.optionalKey(AdmissionFence),\n workerAdmission: Schema.optionalKey(WorkerAdmission),\n messageAdmission: Schema.optionalKey(InputMessage),\n definitions: DefinitionDigests,\n inputPayload: PersistedJson,\n}) {}\n\n/** One bounded page of canonical records after an optional sequence. */\nexport class ObservePageRequest extends Schema.Class<ObservePageRequest>(\n \"@effect-agent/platform-cloudflare/ObservePageRequest\",\n)({\n afterSequence: Schema.optionalKey(CanonicalSequence),\n limit: Schema.Int.check(Schema.isGreaterThan(0), Schema.isLessThanOrEqualTo(1_024)),\n}) {}\n\n/** Receipt-shaped observation request; the optional identity owns only the remote wait. */\nexport class AwaitSettlementRequest extends Receipt.extend<AwaitSettlementRequest>(\n \"@effect-agent/platform-cloudflare/AwaitSettlementRequest\",\n)({\n waiterId: Schema.optionalKey(Schema.String.check(Schema.isMinLength(1), Schema.isMaxLength(256))),\n}) {}\n\n/** One event-driven wait for canonical progress strictly after this sequence. */\nexport class AwaitProgressRequest extends Schema.Class<AwaitProgressRequest>(\n \"@effect-agent/platform-cloudflare/AwaitProgressRequest\",\n)({\n afterSequence: CanonicalSequence,\n waiterId: Schema.String.check(Schema.isMinLength(1), Schema.isMaxLength(256)),\n}) {}\n\n/** Best-effort cancellation of one in-flight progress or settlement observation. */\nexport class CancelProgressRequest extends Schema.Class<CancelProgressRequest>(\n \"@effect-agent/platform-cloudflare/CancelProgressRequest\",\n)({\n waiterId: Schema.String.check(Schema.isMinLength(1), Schema.isMaxLength(256)),\n}) {}\n\n// ---------------------------------------------------------------------------\n// Responses\n// ---------------------------------------------------------------------------\n\n/**\n * Every typed failure a host entry point can produce, plus the protocol's own errors. Same\n * closed-union discipline as the WP2 `PortFailure`: members re-decode to the SAME tagged\n * classes on the Worker side; `cause` chains travel as Schema defects without instance\n * fidelity (plan §2.8).\n */\nexport const HostFailure = Schema.Union([\n AgentInputError,\n DigestError,\n AdmissionConflict,\n AdmissionPolicyError,\n SettlementConflict,\n ApprovalConflict,\n UnknownResolutionConflict,\n JoinedToHost,\n LedgerError,\n OwnershipLost,\n ThreadStoreError,\n ThreadNotMaterialized,\n AppendConflict,\n DurableRuntimeFailpointError,\n AdmissionLimitExceeded,\n DurableAlarmError,\n OperationDenied,\n HostProtocolError,\n]);\n\nexport type HostFailure = typeof HostFailure.Type;\n\nexport class SubmitSucceeded extends Schema.TaggedClass<SubmitSucceeded>(\n \"@effect-agent/platform-cloudflare/SubmitSucceeded\",\n)(\"SubmitSucceeded\", {\n receipt: Receipt,\n}) {}\n\nexport class SubmissionStatusResponse extends Schema.TaggedClass<SubmissionStatusResponse>(\n \"@effect-agent/platform-cloudflare/SubmissionStatusResponse\",\n)(\"SubmissionStatusResponse\", { status: SubmissionStatus }) {}\n\nexport class SettlementReached extends Schema.TaggedClass<SettlementReached>(\n \"@effect-agent/platform-cloudflare/SettlementReached\",\n)(\"SettlementReached\", {\n settlement: Settlement,\n}) {}\n\n/** The exact canonical record of an operationally finalized Submission. */\nexport class SettlementRecordReached extends Schema.TaggedClass<SettlementRecordReached>(\n \"@effect-agent/platform-cloudflare/SettlementRecordReached\",\n)(\"SettlementRecordReached\", {\n record: SubmissionSettledRecord,\n}) {}\n\nexport class ObservedPage extends Schema.TaggedClass<ObservedPage>(\n \"@effect-agent/platform-cloudflare/ObservedPage\",\n)(\"ObservedPage\", {\n records: Schema.Array(CanonicalRecordEnvelope).check(Schema.isMaxLength(1_024)),\n}) {}\n\n/** A record was already committed or an incarnation-local hint says the caller should re-read. */\nexport class ProgressObserved extends Schema.TaggedClass<ProgressObserved>(\n \"@effect-agent/platform-cloudflare/ProgressObserved\",\n)(\"ProgressObserved\", {}) {}\n\nexport class ProgressCancelled extends Schema.TaggedClass<ProgressCancelled>(\n \"@effect-agent/platform-cloudflare/ProgressCancelled\",\n)(\"ProgressCancelled\", {}) {}\n\nexport class AbortRecorded extends Schema.TaggedClass<AbortRecorded>(\n \"@effect-agent/platform-cloudflare/AbortRecorded\",\n)(\"AbortRecorded\", {\n intent: AbortIntent,\n}) {}\n\nexport class ApprovalRecorded extends Schema.TaggedClass<ApprovalRecorded>(\n \"@effect-agent/platform-cloudflare/ApprovalRecorded\",\n)(\"ApprovalRecorded\", {\n intent: ApprovalDecisionIntent,\n}) {}\n\nexport class UnknownResolutionRecorded extends Schema.TaggedClass<UnknownResolutionRecorded>(\n \"@effect-agent/platform-cloudflare/UnknownResolutionRecorded\",\n)(\"UnknownResolutionRecorded\", {\n intent: UnknownResolutionIntent,\n}) {}\n\n/** The entry point failed TYPED on the Object; the failure re-decodes verbatim. */\nexport class HostFailed extends Schema.TaggedClass<HostFailed>(\n \"@effect-agent/platform-cloudflare/HostFailed\",\n)(\"HostFailed\", {\n failure: HostFailure,\n}) {}\n\n/** The uniform answer of one host entry point. Callers narrow by the tag their call implies. */\nexport const HostResponse = Schema.Union([\n SubmitSucceeded,\n SettlementReached,\n SettlementRecordReached,\n SubmissionStatusResponse,\n ObservedPage,\n ProgressObserved,\n ProgressCancelled,\n AbortRecorded,\n ApprovalRecorded,\n UnknownResolutionRecorded,\n HostFailed,\n]);\n\nexport type HostResponse = typeof HostResponse.Type;\n\n// ---------------------------------------------------------------------------\n// Codecs (shared by the Object endpoints and the Worker client)\n// ---------------------------------------------------------------------------\n\nexport const decodeSubmitRequest = Schema.decodeUnknownEffect(SubmitRequest);\nexport const encodeSubmitRequest = Schema.encodeEffect(SubmitRequest);\nexport const decodeReceipt = Schema.decodeUnknownEffect(Receipt);\nexport const encodeReceipt = Schema.encodeEffect(Receipt);\nexport const decodeAwaitSettlementRequest = Schema.decodeUnknownEffect(AwaitSettlementRequest);\nexport const encodeAwaitSettlementRequest = Schema.encodeEffect(AwaitSettlementRequest);\nexport const decodeObservePageRequest = Schema.decodeUnknownEffect(ObservePageRequest);\nexport const encodeObservePageRequest = Schema.encodeEffect(ObservePageRequest);\nexport const decodeAwaitProgressRequest = Schema.decodeUnknownEffect(AwaitProgressRequest);\nexport const encodeAwaitProgressRequest = Schema.encodeEffect(AwaitProgressRequest);\nexport const decodeCancelProgressRequest = Schema.decodeUnknownEffect(CancelProgressRequest);\nexport const encodeCancelProgressRequest = Schema.encodeEffect(CancelProgressRequest);\nexport const decodeAbortCommand = Schema.decodeUnknownEffect(AbortCommand);\nexport const encodeAbortCommand = Schema.encodeEffect(AbortCommand);\nexport const decodeApprovalDecisionCommand = Schema.decodeUnknownEffect(ApprovalDecisionCommand);\nexport const encodeApprovalDecisionCommand = Schema.encodeEffect(ApprovalDecisionCommand);\nexport const decodeUnknownResolutionCommand = Schema.decodeUnknownEffect(UnknownResolutionCommand);\nexport const encodeUnknownResolutionCommand = Schema.encodeEffect(UnknownResolutionCommand);\nexport const encodeHostResponse = Schema.encodeEffect(HostResponse);\nexport const decodeHostResponse = Schema.decodeUnknownEffect(HostResponse);\n\n// ---------------------------------------------------------------------------\n// Worker-side client\n// ---------------------------------------------------------------------------\n\n/** Failure surface of `CloudflareThreadClient.submit`. */\nconst ClientSubmitHostFailure = Schema.Union([\n AgentInputError,\n DigestError,\n AdmissionConflict,\n AdmissionPolicyError,\n LedgerError,\n OwnershipLost,\n ThreadStoreError,\n ThreadNotMaterialized,\n AppendConflict,\n DurableRuntimeFailpointError,\n AdmissionLimitExceeded,\n DurableAlarmError,\n HostProtocolError,\n]);\n\nconst ClientAwaitHostFailure = Schema.Union([\n LedgerError,\n OwnershipLost,\n SettlementConflict,\n OperationDenied,\n HostProtocolError,\n]);\n\nconst ClientObserveHostFailure = Schema.Union([\n ThreadStoreError,\n ThreadNotMaterialized,\n OperationDenied,\n HostProtocolError,\n]);\n\nconst ClientAbortHostFailure = Schema.Union([\n OperationDenied,\n LedgerError,\n OwnershipLost,\n SettlementConflict,\n JoinedToHost,\n DurableRuntimeFailpointError,\n DurableAlarmError,\n HostProtocolError,\n]);\n\nconst ClientApprovalHostFailure = Schema.Union([\n LedgerError,\n OwnershipLost,\n SettlementConflict,\n ApprovalConflict,\n OperationDenied,\n DurableAlarmError,\n HostProtocolError,\n]);\n\nconst ClientUnknownHostFailure = Schema.Union([\n LedgerError,\n OwnershipLost,\n SettlementConflict,\n UnknownResolutionConflict,\n JoinedToHost,\n DurableRuntimeFailpointError,\n OperationDenied,\n DurableAlarmError,\n HostProtocolError,\n]);\n\nexport type ClientSubmitFailure = typeof ClientSubmitHostFailure.Type | ThreadClientError;\nexport type ClientAwaitFailure = typeof ClientAwaitHostFailure.Type | ThreadClientError;\nexport type ClientObserveFailure = typeof ClientObserveHostFailure.Type | ThreadClientError;\nexport type ClientProgressFailure = ClientObserveFailure;\nexport type ClientAbortFailure = typeof ClientAbortHostFailure.Type | ThreadClientError;\nexport type ClientApprovalFailure = typeof ClientApprovalHostFailure.Type | ThreadClientError;\nexport type ClientUnknownFailure = typeof ClientUnknownHostFailure.Type | ThreadClientError;\n\nconst liveTextProtocolFailure = () =>\n HostProtocolError.make({\n message: \"Provisional text is incomplete or invalid; discard drafts and read canonical records\",\n });\n\nconst decodeLiveTextFrame = Schema.decodeUnknownSync(Schema.fromJsonString(LiveTextFrame));\n\nconst decodeLiveText = (\n threadId: ThreadId,\n source: ReadableStream<unknown>,\n): Stream.Stream<LiveTextFrame, HostProtocolError | ThreadClientError> =>\n Stream.suspend(() => {\n const decoder = new TextDecoder(\"utf-8\", { fatal: true, ignoreBOM: false });\n let pending = \"\";\n let pendingBytes = 0;\n let expected = 0;\n let streamId: string | undefined;\n const models = new Map<string, { attemptId: string; parts: Set<string> }>();\n\n const accept = Effect.fnUntraced(function* (frame: LiveTextFrame) {\n if (frame._tag === \"Reset\") {\n if (frame.streamId === streamId || frame.threadId !== threadId)\n return yield* liveTextProtocolFailure();\n streamId = frame.streamId;\n expected = 1;\n models.clear();\n\n return true;\n }\n if (\n streamId === undefined ||\n frame.streamId !== streamId ||\n frame.sequence !== expected++ ||\n frame.event.threadId !== threadId ||\n !isBoundedEvent(frame.event)\n )\n return yield* liveTextProtocolFailure();\n const event = frame.event;\n\n if (event._tag === \"AttemptEnded\") {\n for (const [key, model] of models)\n if (model.attemptId === event.attemptId) models.delete(key);\n\n return true;\n }\n const key = JSON.stringify([event.attemptId, event.runId, event.turnId, event.generation]);\n\n if (event._tag === \"Discard\") {\n models.delete(key);\n\n return true;\n }\n let model = models.get(key);\n\n if (event.part.type === \"text-start\") {\n if (model?.parts.has(event.part.id)) return yield* liveTextProtocolFailure();\n if (\n [...models.values()].reduce((size, value) => size + value.parts.size, 0) >=\n MAX_DRAFT_PARTS\n )\n return yield* liveTextProtocolFailure();\n if (model === undefined) {\n model = { attemptId: event.attemptId, parts: new Set() };\n models.set(key, model);\n }\n model.parts.add(event.part.id);\n\n return true;\n }\n if (!model?.parts.has(event.part.id)) return yield* liveTextProtocolFailure();\n if (event.part.type === \"text-end\") {\n model.parts.delete(event.part.id);\n if (model.parts.size === 0) models.delete(key);\n }\n\n return true;\n });\n\n return Stream.fromReadableStream({\n evaluate: () => source,\n // The subscription Scope owns the single bounded cancellation after this reader unlocks.\n releaseLockOnEnd: true,\n onError: (cause) =>\n ThreadClientError.make({\n threadId,\n message: \"Provisional text disconnected; discard drafts and read canonical records\",\n cause,\n }),\n }).pipe(\n Stream.mapEffect(\n Effect.fnUntraced(function* (chunk) {\n if (!(chunk instanceof Uint8Array)) return yield* liveTextProtocolFailure();\n const frames: LiveTextFrame[] = [];\n\n for (let offset = 0; offset < chunk.byteLength;) {\n const newline = chunk.indexOf(10, offset);\n const end = newline < 0 ? chunk.byteLength : newline;\n\n pendingBytes += end - offset;\n if (pendingBytes > MAX_FRAME_BYTES) return yield* liveTextProtocolFailure();\n pending += yield* Effect.try({\n try: () => decoder.decode(chunk.subarray(offset, end), { stream: newline < 0 }),\n catch: liveTextProtocolFailure,\n });\n offset = end + 1;\n if (newline < 0) break;\n\n const frame = yield* Effect.try({\n try: () => decodeLiveTextFrame(pending),\n catch: liveTextProtocolFailure,\n });\n\n pending = \"\";\n pendingBytes = 0;\n if (yield* accept(frame)) frames.push(frame);\n }\n\n return frames;\n }),\n ),\n Stream.flatMap(Stream.fromArray),\n // This connection is open-ended. Clean EOF is also loss of provisional state.\n Stream.concat(Stream.fail(liveTextProtocolFailure())),\n );\n });\n\nconst outOfContract = (threadId: string, operation: string, observed: string): ThreadClientError =>\n ThreadClientError.make({\n threadId,\n message: boundHostDiagnostic(\n `The Thread Object answered ${operation} with the out-of-contract ${observed}.`,\n ),\n });\n\nconst hostRpcMethods = {\n submit: \"submitEncoded\",\n awaitSettlement: \"awaitSettlementEncoded\",\n awaitSettlementRecord: \"awaitSettlementRecordEncoded\",\n submissionStatus: \"submissionStatusEncoded\",\n awaitProgress: \"awaitProgressEncoded\",\n cancelProgress: \"cancelProgressEncoded\",\n observePage: \"observePage\",\n abort: \"abortEncoded\",\n resolveApproval: \"resolveApprovalEncoded\",\n resolveUnknown: \"resolveUnknownEncoded\",\n} as const satisfies Record<string, keyof ThreadObjectRpc>;\n\n/** Worker-side client over the Thread Object namespace (DEPLOY-010). */\nexport class CloudflareThreadClient extends Context.Service<\n CloudflareThreadClient,\n {\n /** Encode the input client-side, then durably submit to the owning Object. */\n readonly submit: <InputSchema extends Schema.Top>(\n agent: DurableSubmitAgent<InputSchema>,\n input: InputSchema[\"Type\"],\n options: DurableSubmitOptions,\n ) => Effect.Effect<Receipt, ClientSubmitFailure, InputSchema[\"EncodingServices\"]>;\n /** Wake-hinted, poll-guaranteed settlement wait executed inside the owning Object. */\n readonly submissionStatus: (\n receipt: Receipt,\n ) => Effect.Effect<SubmissionStatus, ClientAwaitFailure>;\n /**\n * Wait for settlement; interruption spends at most one second cancelling the remote\n * observation best effort. Cancellation never aborts the admitted Run.\n */\n readonly awaitSettlement: (receipt: Receipt) => Effect.Effect<Settlement, ClientAwaitFailure>;\n /**\n * Wait for finalization and return this Receipt's canonical terminal record in one RPC.\n * Requires both settlement and observation authority. Decode an ordinary completed\n * record's result through the Agent output Schema; joined completion may have no result.\n * Interruption uses the same bounded observation cancellation as `awaitSettlement`.\n */\n readonly awaitSettlementRecord: (\n receipt: Receipt,\n ) => Effect.Effect<SubmissionSettledRecord, ClientAwaitFailure>;\n /**\n * Wait without polling until progress after `afterSequence` is already durable or hinted.\n * The result is deliberately void: canonical records remain authoritative and must be read.\n * Interruption waits at most one second for best-effort remote cancellation.\n */\n readonly awaitProgress: (\n threadId: ThreadId,\n afterSequence: CanonicalSequence,\n ) => Effect.Effect<void, ClientProgressFailure>;\n /**\n * Current provisional text followed by native deltas. Reset starts a replacement snapshot,\n * including when a slow consumer exceeds the fixed backlog. Reconcile by\n * Run/Turn identity to canonical records; discard drafts on Discard, AttemptEnded,\n * Reset or stream failure. Snapshots exist only in the Object incarnation's memory.\n * Scope the stream: interruption cancels its remote subscription.\n */\n readonly watchText: (threadId: ThreadId) => Stream.Stream<LiveTextFrame, ClientObserveFailure>;\n /** One bounded page of canonical records. */\n readonly readPage: (\n threadId: ThreadId,\n options?: {\n readonly afterSequence?: CanonicalSequence | undefined;\n readonly limit?: number | undefined;\n },\n ) => Effect.Effect<ReadonlyArray<CanonicalRecordEnvelope>, ClientObserveFailure>;\n /**\n * Every canonical record up to the CURRENT committed tail, via repeated pages. A\n * snapshot read, not a live observation — callers wanting liveness re-read after\n * `awaitSettlement`.\n */\n readonly readAll: (\n threadId: ThreadId,\n ) => Effect.Effect<ReadonlyArray<CanonicalRecordEnvelope>, ClientObserveFailure>;\n /**\n * Submission-addressed operations take the owning Thread explicitly (from the\n * Receipt): minted Submission identities stay OPAQUE outside the storage adapter that\n * minted them (D-P6-5), so the client never parses one to find the lane.\n */\n readonly abort: (\n threadId: ThreadId,\n command: AbortCommand,\n ) => Effect.Effect<AbortIntent, ClientAbortFailure>;\n readonly resolveApproval: (\n threadId: ThreadId,\n command: ApprovalDecisionCommand,\n ) => Effect.Effect<ApprovalDecisionIntent, ClientApprovalFailure>;\n readonly resolveUnknown: (\n threadId: ThreadId,\n command: UnknownResolutionCommand,\n ) => Effect.Effect<UnknownResolutionIntent, ClientUnknownFailure>;\n }\n>()(\"@effect-agent/platform-cloudflare/CloudflareThreadClient\") {\n /**\n * Assemble the client from a resolved namespace and the platform Crypto implementation.\n * rpcTracing is the binding name and remains opt-in. Caller authentication, principals,\n * idempotency keys, and definition digests are still explicit submission inputs.\n */\n static layerFromBinding(options: {\n readonly namespace: DurableObjectNamespace<ThreadObjectRpc>;\n readonly rpcTracing?: string;\n }): Layer.Layer<CloudflareThreadClient> {\n return CloudflareThreadClient.layer.pipe(\n Layer.provide([\n ThreadObjectNamespace.layer(options.namespace, options),\n cloudflareCryptoLayer,\n ]),\n );\n }\n\n static readonly layer: Layer.Layer<\n CloudflareThreadClient,\n never,\n ThreadObjectNamespace | Crypto.Crypto\n > = Layer.effect(CloudflareThreadClient)(\n Effect.gen(function* () {\n const namespace = yield* ThreadObjectNamespace;\n const { rpcTracing } = namespace;\n const crypto = yield* Crypto.Crypto;\n\n const call = Effect.fnUntraced(\n function* (\n threadId: ThreadId,\n operation: keyof typeof hostRpcMethods,\n encoded: unknown,\n ): Effect.fn.Return<HostResponse, ThreadClientError | HostProtocolError> {\n // Empty arguments preserve native arity. Passing `undefined` still adds an argument.\n const traceArgs =\n rpcTracing === undefined ? [] : yield* RpcTracing.withRpcTraceContext([]);\n\n const raw = yield* callThreadObject(\n threadId,\n (stub) => stub[hostRpcMethods[operation]](encoded, ...traceArgs),\n (cause) =>\n ThreadClientError.make({\n threadId,\n message: boundHostDiagnostic(\n `${operation} did not reach the Thread Object: ${safeCauseMessage(\n cause,\n \"the RPC failed without a diagnostic\",\n )}`,\n ),\n cause,\n ...cloudflareFailureSignals(cause),\n }),\n ).pipe(Effect.provideService(ThreadObjectNamespace, namespace));\n\n return yield* decodeHostResponse(raw).pipe(\n Effect.mapError((error): HostProtocolError =>\n HostProtocolError.make({\n message: boundHostDiagnostic(\n `The ${operation} answer could not be decoded: ${error.message}`,\n ),\n }),\n ),\n );\n },\n (effect, threadId, operation) =>\n rpcTracing === undefined\n ? Effect.withSpan(effect, \"CloudflareThreadClient.call\", {\n attributes: { threadId, operation },\n })\n : RpcTracing.withRpcClientSpan(effect, rpcTracing, hostRpcMethods[operation]),\n );\n\n const expect = <ResultSchema extends Schema.Top, FailureSchema extends Schema.Top>(\n threadId: string,\n operation: string,\n resultSchema: ResultSchema,\n failureSchema: FailureSchema,\n ) => {\n const isExpectedResult = Schema.is(resultSchema);\n const isExpectedFailure = Schema.is(failureSchema);\n\n return (\n response: HostResponse,\n ): Effect.Effect<ResultSchema[\"Type\"], FailureSchema[\"Type\"] | ThreadClientError> => {\n if (response._tag === \"HostFailed\") {\n const failure = response.failure;\n\n return isExpectedFailure(failure)\n ? Effect.fail(failure)\n : Effect.fail(outOfContract(threadId, operation, `failure ${failure._tag}`));\n }\n if (!isExpectedResult(response)) {\n return Effect.fail(outOfContract(threadId, operation, `result ${response._tag}`));\n }\n\n return Effect.succeed(response);\n };\n };\n\n const readPage = Effect.fnUntraced(function* (\n threadId: ThreadId,\n options?: {\n readonly afterSequence?: CanonicalSequence | undefined;\n readonly limit?: number | undefined;\n },\n ) {\n const request = ObservePageRequest.make({\n ...(options?.afterSequence === undefined ? {} : { afterSequence: options.afterSequence }),\n limit: options?.limit ?? 256,\n });\n\n const encoded = yield* encodeObservePageRequest(request).pipe(\n Effect.mapError((error) =>\n HostProtocolError.make({\n message: boundHostDiagnostic(`observePage request encode failed: ${error.message}`),\n }),\n ),\n );\n\n const response = yield* call(threadId, \"observePage\", encoded);\n\n const page = yield* expect(\n threadId,\n \"observePage\",\n ObservedPage,\n ClientObserveHostFailure,\n )(response);\n\n return page.records;\n });\n\n const cancelProgress = (threadId: ThreadId, waiterId: string): Effect.Effect<void> =>\n encodeCancelProgressRequest(CancelProgressRequest.make({ waiterId })).pipe(\n Effect.mapError(() => undefined),\n Effect.flatMap((encoded) => call(threadId, \"cancelProgress\", encoded)),\n // Finalizers are uninterruptible; only the foreign RPC branch must remain\n // interruptible so a lost cancellation reply cannot prevent local shutdown.\n Effect.interruptible,\n Effect.timeout(PROGRESS_CANCELLATION_TIMEOUT),\n Effect.asVoid,\n Effect.ignore,\n );\n\n const awaitSettlementCall = Effect.fnUntraced(function* (\n receipt: Receipt,\n operation: \"awaitSettlement\" | \"awaitSettlementRecord\",\n ): Effect.fn.Return<HostResponse, ClientAwaitFailure> {\n const waiterId = yield* crypto.randomUUIDv4().pipe(\n Effect.mapError((error) =>\n HostProtocolError.make({\n message: boundHostDiagnostic(\n `${operation} cancellation identity generation failed: ${error.message}`,\n ),\n }),\n ),\n );\n\n const encoded = yield* encodeAwaitSettlementRequest(\n AwaitSettlementRequest.make({ ...receipt, waiterId }),\n ).pipe(\n Effect.mapError((error) =>\n HostProtocolError.make({\n message: boundHostDiagnostic(`${operation} request encode failed: ${error.message}`),\n }),\n ),\n );\n\n return yield* call(receipt.threadId, operation, encoded).pipe(\n Effect.onInterrupt(() => cancelProgress(receipt.threadId, waiterId)),\n );\n });\n\n return CloudflareThreadClient.of({\n submit: Effect.fnUntraced(function* <InputSchema extends Schema.Top>(\n agent: DurableSubmitAgent<InputSchema>,\n input: InputSchema[\"Type\"],\n options: DurableSubmitOptions,\n ) {\n // Client-side half of `DurableAgentRuntime.submit`'s input boundary: encode\n // through the Agent's input schema and prove the canonical persistence bounds.\n const encodedInput = yield* Schema.encodeEffect(agent.definition.input)(input).pipe(\n Effect.mapError((cause) =>\n AgentInputError.make({ message: `Unable to encode Agent input: ${cause.message}` }),\n ),\n );\n\n const inputPayload = yield* Schema.decodeUnknownEffect(PersistedJson)(encodedInput).pipe(\n Effect.mapError(() =>\n AgentInputError.make({\n message: \"Agent input does not satisfy the canonical persistence bounds\",\n }),\n ),\n );\n\n const request = SubmitRequest.make({\n agentId: agent.definition.id,\n principal: options.principal,\n idempotencyKey: options.idempotencyKey,\n ...(options.admissionGroup === undefined\n ? {}\n : { admissionGroup: options.admissionGroup }),\n ...(options.admissionFence === undefined\n ? {}\n : { admissionFence: options.admissionFence }),\n ...(options.workerAdmission === undefined\n ? {}\n : { workerAdmission: options.workerAdmission }),\n ...(options.messageAdmission === undefined\n ? {}\n : { messageAdmission: options.messageAdmission }),\n definitions: options.definitions,\n inputPayload,\n });\n\n const encoded = yield* encodeSubmitRequest(request).pipe(\n Effect.mapError((error) =>\n HostProtocolError.make({\n message: boundHostDiagnostic(`submit request encode failed: ${error.message}`),\n }),\n ),\n );\n\n const response = yield* call(options.threadId, \"submit\", encoded);\n\n const succeeded = yield* expect(\n options.threadId,\n \"submit\",\n SubmitSucceeded,\n ClientSubmitHostFailure,\n )(response);\n\n return succeeded.receipt;\n }),\n\n submissionStatus: Effect.fnUntraced(function* (receipt) {\n const encoded = yield* encodeReceipt(receipt).pipe(\n Effect.mapError(() => HostProtocolError.make({ message: \"Invalid receipt\" })),\n );\n\n const response = yield* call(receipt.threadId, \"submissionStatus\", encoded);\n\n const result = yield* expect(\n receipt.threadId,\n \"submissionStatus\",\n SubmissionStatusResponse,\n ClientAwaitHostFailure,\n )(response);\n\n return result.status;\n }),\n awaitSettlement: Effect.fnUntraced(function* (receipt) {\n const response = yield* awaitSettlementCall(receipt, \"awaitSettlement\");\n\n const settled = yield* expect(\n receipt.threadId,\n \"awaitSettlement\",\n SettlementReached,\n ClientAwaitHostFailure,\n )(response);\n\n return settled.settlement;\n }),\n\n awaitSettlementRecord: Effect.fnUntraced(function* (receipt) {\n const response = yield* awaitSettlementCall(receipt, \"awaitSettlementRecord\");\n\n const settled = yield* expect(\n receipt.threadId,\n \"awaitSettlementRecord\",\n SettlementRecordReached,\n ClientAwaitHostFailure,\n )(response);\n\n return settled.record;\n }),\n\n awaitProgress: Effect.fnUntraced(function* (threadId, afterSequence) {\n const waiterId = yield* crypto.randomUUIDv4().pipe(\n Effect.mapError((error) =>\n HostProtocolError.make({\n message: boundHostDiagnostic(\n `awaitProgress cancellation identity generation failed: ${error.message}`,\n ),\n }),\n ),\n );\n\n const request = AwaitProgressRequest.make({ afterSequence, waiterId });\n\n const encoded = yield* encodeAwaitProgressRequest(request).pipe(\n Effect.mapError((error) =>\n HostProtocolError.make({\n message: boundHostDiagnostic(\n `awaitProgress request encode failed: ${error.message}`,\n ),\n }),\n ),\n );\n\n const attempt = (retry: number): Effect.Effect<void, ClientProgressFailure> =>\n call(threadId, \"awaitProgress\", encoded).pipe(\n Effect.flatMap(\n expect(threadId, \"awaitProgress\", ProgressObserved, ClientObserveHostFailure),\n ),\n Effect.asVoid,\n Effect.catchTag(\"ThreadClientError\", (error) =>\n error.retryable === true && error.overloaded !== true && retry < 5\n ? Effect.sleep(Duration.millis(10 * 2 ** retry)).pipe(\n Effect.andThen(attempt(retry + 1)),\n )\n : Effect.fail(error),\n ),\n );\n\n yield* attempt(0).pipe(Effect.onInterrupt(() => cancelProgress(threadId, waiterId)));\n }),\n\n watchText: (threadId) =>\n Stream.unwrap(\n Effect.gen(function* () {\n const traceArgs =\n rpcTracing === undefined ? [] : yield* RpcTracing.withRpcTraceContext([]);\n\n const openingFailure = (cause: unknown) =>\n ThreadClientError.make({\n threadId,\n message: \"Provisional text observation could not reach the Thread Object\",\n cause,\n ...cloudflareFailureSignals(cause),\n });\n\n // Retain the original RPC promise: resolving through callThreadObject would\n // erase its optional native disposer before an interrupted opening can use it.\n const target = yield* RpcTargets.get(namespace, threadId, () =>\n namespace.get(threadId),\n ).pipe(Effect.mapError(openingFailure));\n\n let request: Promise<unknown> | undefined;\n let received: unknown;\n let closed = false;\n\n const cancel = () => {\n const value = received;\n\n received = undefined;\n\n return value instanceof ReadableStream && !value.locked\n ? value.cancel().catch(() => undefined)\n : Promise.resolve();\n };\n\n // Install ownership before invoking foreign code, not after its promise settles.\n yield* Effect.addFinalizer(() =>\n Effect.try({\n try: () => {\n closed = true;\n if (Predicate.hasProperty(request, Symbol.dispose)) {\n const dispose = request[Symbol.dispose];\n\n if (typeof dispose === \"function\") dispose.call(request);\n }\n },\n catch: () => undefined,\n }).pipe(\n Effect.ignore,\n Effect.andThen(\n Effect.tryPromise({ try: cancel, catch: () => undefined }).pipe(\n Effect.interruptible,\n Effect.timeout(PROGRESS_CANCELLATION_TIMEOUT),\n Effect.ignore,\n ),\n ),\n ),\n );\n\n const raw = yield* Effect.tryPromise({\n try: () => {\n request = target.watchTextEncoded(\n Schema.encodeSync(WatchTextRequest)({ schemaVersion: 1 }),\n ...traceArgs,\n );\n\n return request.then((value) => {\n received = value;\n\n // A custom endpoint may return a plain, non-cancellable promise. Keep\n // late cleanup on that native promise chain; it starts no Effect fiber.\n return closed ? cancel().then(() => value) : value;\n });\n },\n catch: openingFailure,\n }).pipe(\n Effect.interruptible,\n Effect.tapCause(() => RpcTargets.invalidate(target)),\n );\n\n if (raw instanceof ReadableStream) return decodeLiveText(threadId, raw);\n\n const response = yield* decodeHostResponse(raw).pipe(\n Effect.mapError(liveTextProtocolFailure),\n );\n\n if (\n response._tag === \"HostFailed\" &&\n Schema.is(ClientObserveHostFailure)(response.failure)\n )\n return yield* response.failure;\n\n return yield* liveTextProtocolFailure();\n }),\n ),\n\n readPage,\n\n readAll: Effect.fnUntraced(function* (threadId) {\n const all: Array<CanonicalRecordEnvelope> = [];\n let after: CanonicalSequence | undefined;\n\n for (;;) {\n const page = yield* readPage(threadId, { afterSequence: after, limit: 1_024 });\n\n all.push(...page);\n const last = page.at(-1);\n\n if (page.length < 1_024 || last === undefined) return all;\n after = last.sequence;\n }\n }),\n\n abort: Effect.fnUntraced(function* (threadId, command) {\n const encoded = yield* encodeAbortCommand(command).pipe(\n Effect.mapError((error) =>\n HostProtocolError.make({\n message: boundHostDiagnostic(`abort command encode failed: ${error.message}`),\n }),\n ),\n );\n\n const response = yield* call(threadId, \"abort\", encoded);\n\n const recorded = yield* expect(\n threadId,\n \"abort\",\n AbortRecorded,\n ClientAbortHostFailure,\n )(response);\n\n return recorded.intent;\n }),\n\n resolveApproval: Effect.fnUntraced(function* (threadId, command) {\n const encoded = yield* encodeApprovalDecisionCommand(command).pipe(\n Effect.mapError((error) =>\n HostProtocolError.make({\n message: boundHostDiagnostic(`approval command encode failed: ${error.message}`),\n }),\n ),\n );\n\n const response = yield* call(threadId, \"resolveApproval\", encoded);\n\n const recorded = yield* expect(\n threadId,\n \"resolveApproval\",\n ApprovalRecorded,\n ClientApprovalHostFailure,\n )(response);\n\n return recorded.intent;\n }),\n\n resolveUnknown: Effect.fnUntraced(function* (threadId, command) {\n const encoded = yield* encodeUnknownResolutionCommand(command).pipe(\n Effect.mapError((error) =>\n HostProtocolError.make({\n message: boundHostDiagnostic(`resolution command encode failed: ${error.message}`),\n }),\n ),\n );\n\n const response = yield* call(threadId, \"resolveUnknown\", encoded);\n\n const recorded = yield* expect(\n threadId,\n \"resolveUnknown\",\n UnknownResolutionRecorded,\n ClientUnknownHostFailure,\n )(response);\n\n return recorded.intent;\n }),\n });\n }),\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { A as boundHostDiagnostic, B as decodeUnknownResolutionCommand, C as SettlementReached, D as SubmitSucceeded, E as SubmitRequest, F as decodeCancelProgressRequest, G as encodeCancelProgressRequest, H as encodeApprovalDecisionCommand, I as decodeHostResponse, J as encodeReceipt, K as encodeHostResponse, L as decodeObservePageRequest, M as decodeApprovalDecisionCommand, N as decodeAwaitProgressRequest, O as ThreadClientError, P as decodeAwaitSettlementRequest, R as decodeReceipt, S as ProgressObserved, T as SubmissionStatusResponse, U as encodeAwaitProgressRequest, V as encodeAbortCommand, W as encodeAwaitSettlementRequest, X as encodeUnknownResolutionCommand, Y as encodeSubmitRequest, Z as Frame, _ as HostProtocolError, a as CancelProgressRequest, b as ObservedPage, c as ClientAwaitFailure, d as ClientSubmitFailure, f as ClientUnknownFailure, g as HostFailure, h as HostFailed, i as AwaitSettlementRequest, j as decodeAbortCommand, k as UnknownResolutionRecorded, l as ClientObserveFailure, n as ApprovalRecorded, o as ClientAbortFailure, p as CloudflareThreadClient, q as encodeObservePageRequest, r as AwaitProgressRequest, s as ClientApprovalFailure, t as AbortRecorded, u as ClientProgressFailure, v as HostResponse, w as SettlementRecordReached, x as ProgressCancelled, y as ObservePageRequest, z as decodeSubmitRequest } from "./CloudflareThreadClient-
|
|
1
|
+
import { A as boundHostDiagnostic, B as decodeUnknownResolutionCommand, C as SettlementReached, D as SubmitSucceeded, E as SubmitRequest, F as decodeCancelProgressRequest, G as encodeCancelProgressRequest, H as encodeApprovalDecisionCommand, I as decodeHostResponse, J as encodeReceipt, K as encodeHostResponse, L as decodeObservePageRequest, M as decodeApprovalDecisionCommand, N as decodeAwaitProgressRequest, O as ThreadClientError, P as decodeAwaitSettlementRequest, R as decodeReceipt, S as ProgressObserved, T as SubmissionStatusResponse, U as encodeAwaitProgressRequest, V as encodeAbortCommand, W as encodeAwaitSettlementRequest, X as encodeUnknownResolutionCommand, Y as encodeSubmitRequest, Z as Frame, _ as HostProtocolError, a as CancelProgressRequest, b as ObservedPage, c as ClientAwaitFailure, d as ClientSubmitFailure, f as ClientUnknownFailure, g as HostFailure, h as HostFailed, i as AwaitSettlementRequest, j as decodeAbortCommand, k as UnknownResolutionRecorded, l as ClientObserveFailure, n as ApprovalRecorded, o as ClientAbortFailure, p as CloudflareThreadClient, q as encodeObservePageRequest, r as AwaitProgressRequest, s as ClientApprovalFailure, t as AbortRecorded, u as ClientProgressFailure, v as HostResponse, w as SettlementRecordReached, x as ProgressCancelled, y as ObservePageRequest, z as decodeSubmitRequest } from "./CloudflareThreadClient-HO_3rkM7.mjs";
|
|
2
2
|
export { AbortRecorded, ApprovalRecorded, AwaitProgressRequest, AwaitSettlementRequest, CancelProgressRequest, ClientAbortFailure, ClientApprovalFailure, ClientAwaitFailure, ClientObserveFailure, ClientProgressFailure, ClientSubmitFailure, ClientUnknownFailure, CloudflareThreadClient, HostFailed, HostFailure, HostProtocolError, HostResponse, Frame as LiveTextFrame, ObservePageRequest, ObservedPage, ProgressCancelled, ProgressObserved, SettlementReached, SettlementRecordReached, SubmissionStatusResponse, SubmitRequest, SubmitSucceeded, ThreadClientError, UnknownResolutionRecorded, boundHostDiagnostic, decodeAbortCommand, decodeApprovalDecisionCommand, decodeAwaitProgressRequest, decodeAwaitSettlementRequest, decodeCancelProgressRequest, decodeHostResponse, decodeObservePageRequest, decodeReceipt, decodeSubmitRequest, decodeUnknownResolutionCommand, encodeAbortCommand, encodeApprovalDecisionCommand, encodeAwaitProgressRequest, encodeAwaitSettlementRequest, encodeCancelProgressRequest, encodeHostResponse, encodeObservePageRequest, encodeReceipt, encodeSubmitRequest, encodeUnknownResolutionCommand };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { A as decodeObservePageRequest, B as encodeObservePageRequest, C as boundHostDiagnostic, D as decodeAwaitSettlementRequest, E as decodeAwaitProgressRequest, F as encodeApprovalDecisionCommand, H as encodeSubmitRequest, I as encodeAwaitProgressRequest, L as encodeAwaitSettlementRequest, M as decodeSubmitRequest, N as decodeUnknownResolutionCommand, O as decodeCancelProgressRequest, P as encodeAbortCommand, R as encodeCancelProgressRequest, S as UnknownResolutionRecorded, T as decodeApprovalDecisionCommand, U as encodeUnknownResolutionCommand, V as encodeReceipt, W as Frame, _ as SettlementRecordReached, a as CancelProgressRequest, b as SubmitSucceeded, c as HostFailed, d as HostResponse, f as ObservePageRequest, g as SettlementReached, h as ProgressObserved, i as AwaitSettlementRequest, j as decodeReceipt, k as decodeHostResponse, l as HostFailure, m as ProgressCancelled, n as ApprovalRecorded, o as CloudflareThreadClient, p as ObservedPage, r as AwaitProgressRequest, t as AbortRecorded, u as HostProtocolError, v as SubmissionStatusResponse, w as decodeAbortCommand, x as ThreadClientError, y as SubmitRequest, z as encodeHostResponse } from "./CloudflareThreadClient-
|
|
1
|
+
import { A as decodeObservePageRequest, B as encodeObservePageRequest, C as boundHostDiagnostic, D as decodeAwaitSettlementRequest, E as decodeAwaitProgressRequest, F as encodeApprovalDecisionCommand, H as encodeSubmitRequest, I as encodeAwaitProgressRequest, L as encodeAwaitSettlementRequest, M as decodeSubmitRequest, N as decodeUnknownResolutionCommand, O as decodeCancelProgressRequest, P as encodeAbortCommand, R as encodeCancelProgressRequest, S as UnknownResolutionRecorded, T as decodeApprovalDecisionCommand, U as encodeUnknownResolutionCommand, V as encodeReceipt, W as Frame, _ as SettlementRecordReached, a as CancelProgressRequest, b as SubmitSucceeded, c as HostFailed, d as HostResponse, f as ObservePageRequest, g as SettlementReached, h as ProgressObserved, i as AwaitSettlementRequest, j as decodeReceipt, k as decodeHostResponse, l as HostFailure, m as ProgressCancelled, n as ApprovalRecorded, o as CloudflareThreadClient, p as ObservedPage, r as AwaitProgressRequest, t as AbortRecorded, u as HostProtocolError, v as SubmissionStatusResponse, w as decodeAbortCommand, x as ThreadClientError, y as SubmitRequest, z as encodeHostResponse } from "./CloudflareThreadClient-bA3lGA_2.mjs";
|
|
2
2
|
export { AbortRecorded, ApprovalRecorded, AwaitProgressRequest, AwaitSettlementRequest, CancelProgressRequest, CloudflareThreadClient, HostFailed, HostFailure, HostProtocolError, HostResponse, Frame as LiveTextFrame, ObservePageRequest, ObservedPage, ProgressCancelled, ProgressObserved, SettlementReached, SettlementRecordReached, SubmissionStatusResponse, SubmitRequest, SubmitSucceeded, ThreadClientError, UnknownResolutionRecorded, boundHostDiagnostic, decodeAbortCommand, decodeApprovalDecisionCommand, decodeAwaitProgressRequest, decodeAwaitSettlementRequest, decodeCancelProgressRequest, decodeHostResponse, decodeObservePageRequest, decodeReceipt, decodeSubmitRequest, decodeUnknownResolutionCommand, encodeAbortCommand, encodeApprovalDecisionCommand, encodeAwaitProgressRequest, encodeAwaitSettlementRequest, encodeCancelProgressRequest, encodeHostResponse, encodeObservePageRequest, encodeReceipt, encodeSubmitRequest, encodeUnknownResolutionCommand };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { DurableObjectContext, ThreadObjectIdentity, ThreadObjectNamespace, ThreadObjectPlacement } from "./CloudflareBindings.mjs";
|
|
2
2
|
import { l as CloudflarePlatformConfigError, s as CloudflareDurableRuntimeConfig, t as AdmissionLimitExceeded } from "./CloudflareConfig-C9MvPbX8.mjs";
|
|
3
3
|
import { DurableAlarmError, DurableAlarmService, MaintenancePassFailure, ThreadMaintenance, ThreadMaintenanceAlarm, ThreadMaintenanceFailpoint, ThreadMaintenanceFailpointHandler, ThreadMutationGate, ThreadPublication, ThreadRecoveryEvents } from "./Alarm.mjs";
|
|
4
|
-
import { E as SubmitRequest, _ as HostProtocolError } from "./CloudflareThreadClient-
|
|
4
|
+
import { E as SubmitRequest, _ as HostProtocolError } from "./CloudflareThreadClient-HO_3rkM7.mjs";
|
|
5
5
|
import { AgentRegistration } from "@yielded/agent/agent-registration";
|
|
6
6
|
import { ApprovalSuspensionError, DurableAgentRuntime, DurableRuntimeConfig, RecoveryBlocked, RecoveryReport } from "@yielded/agent/durable-agent-runtime";
|
|
7
7
|
import { SubmissionId, ThreadId } from "@yielded/agent/identifiers";
|
|
@@ -400,13 +400,13 @@ declare const encodeAdminResponse: (input: AdminFailed | ExplainedRecovery | Obl
|
|
|
400
400
|
readonly author: string;
|
|
401
401
|
readonly reason: string;
|
|
402
402
|
readonly resolution: {
|
|
403
|
+
readonly _tag: "SafeToRetry";
|
|
404
|
+
} | {
|
|
403
405
|
readonly _tag: "CompletedWithResult";
|
|
404
406
|
readonly result: Schema.Json;
|
|
405
407
|
readonly isFailure: boolean;
|
|
406
408
|
} | {
|
|
407
409
|
readonly _tag: "NeverHappened";
|
|
408
|
-
} | {
|
|
409
|
-
readonly _tag: "SafeToRetry";
|
|
410
410
|
} | {
|
|
411
411
|
readonly _tag: "AbortSubmission";
|
|
412
412
|
};
|
|
@@ -736,13 +736,10 @@ declare const encodeAdminResponse: (input: AdminFailed | ExplainedRecovery | Obl
|
|
|
736
736
|
} | {
|
|
737
737
|
readonly _tag: "AdminFailed";
|
|
738
738
|
readonly failure: {
|
|
739
|
-
readonly _tag: "
|
|
739
|
+
readonly _tag: "LedgerError";
|
|
740
740
|
readonly operation: string;
|
|
741
741
|
readonly message: string;
|
|
742
|
-
readonly cause?:
|
|
743
|
-
} | {
|
|
744
|
-
readonly _tag: "ThreadNotMaterialized";
|
|
745
|
-
readonly threadId: string;
|
|
742
|
+
readonly cause?: import("@yielded/agent/failure-diagnostic").Diagnostic | undefined;
|
|
746
743
|
} | {
|
|
747
744
|
readonly _tag: "ThreadStoreError";
|
|
748
745
|
readonly operation: string;
|
|
@@ -756,10 +753,8 @@ declare const encodeAdminResponse: (input: AdminFailed | ExplainedRecovery | Obl
|
|
|
756
753
|
readonly sequence?: number | undefined;
|
|
757
754
|
} | undefined;
|
|
758
755
|
} | {
|
|
759
|
-
readonly _tag: "
|
|
760
|
-
readonly
|
|
761
|
-
readonly message: string;
|
|
762
|
-
readonly cause?: import("@yielded/agent/failure-diagnostic").Diagnostic | undefined;
|
|
756
|
+
readonly _tag: "ThreadNotMaterialized";
|
|
757
|
+
readonly threadId: string;
|
|
763
758
|
} | {
|
|
764
759
|
readonly _tag: "AppendConflict";
|
|
765
760
|
readonly threadId: string;
|
|
@@ -823,6 +818,11 @@ declare const encodeAdminResponse: (input: AdminFailed | ExplainedRecovery | Obl
|
|
|
823
818
|
readonly _tag: "RunJournalError";
|
|
824
819
|
readonly message: string;
|
|
825
820
|
readonly cause?: Schema.Json | undefined;
|
|
821
|
+
} | {
|
|
822
|
+
readonly _tag: "DurableAlarmError";
|
|
823
|
+
readonly operation: string;
|
|
824
|
+
readonly message: string;
|
|
825
|
+
readonly cause?: Schema.Json | undefined;
|
|
826
826
|
} | {
|
|
827
827
|
readonly _tag: "HostProtocolError";
|
|
828
828
|
readonly message: string;
|
|
@@ -888,4 +888,4 @@ interface Class<EventServices = never> {
|
|
|
888
888
|
declare const make: <ApplicationServices, ApplicationError, EventServices = never, EventLayerError = never, AlarmServices = never, AlarmError = never>(applicationLayer: Layer.Layer<CloudflareDurableRuntimeServices | ApplicationServices, ApplicationError, CloudflareBootstrapServices | ThreadMaintenanceAlarm | NoInfer<AlarmServices> | DurableObjectState$1.DurableObjectState | WorkerEnvironment | DurableObjectContext | ThreadObjectNamespace>, options: Options<ApplicationServices, EventServices, EventLayerError, AlarmServices, AlarmError>) => Class<ApplicationServices | EventServices | AlarmServices>;
|
|
889
889
|
//#endregion
|
|
890
890
|
export { ThreadHostMutation as A, make as C, CloudflareDurableRuntimeInitializationError as D, CloudflareBootstrapServices as E, layerHostConfig as F, layerInHost as I, ThreadPublicationOptions as M, layer$1 as N, CloudflareDurableRuntimeOptions as O, layerConfig as P, handleRpc as S, submit as T, decodeAdminResponse as _, AdminVerifyRequest as a, decodeRetryCommand as b, Instance as c, RetryExecuted as d, ThreadObject_d_exports as f, decodeAdminExplainRequest as g, alarms as h, AdminResponse as i, ThreadObjectPorts as j, CloudflareDurableRuntimeServices as k, ObligationsScanned as l, VerifiedIntegrity as m, AdminFailed as n, Class as o, ThreadRpcOperation as p, AdminFailure as r, ExplainedRecovery as s, AdminExplainRequest as t, Options as u, decodeAdminVerifyRequest as v, portCall as w, encodeAdminResponse as x, decodeObligationThresholds as y };
|
|
891
|
-
//# sourceMappingURL=ThreadObject-
|
|
891
|
+
//# sourceMappingURL=ThreadObject-CxNlhoPL.d.mts.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
|
|
2
2
|
import { DurableObjectContext, ThreadObjectIdentity, ThreadObjectNamespace, ThreadObjectPlacement, callThreadObject, threadNamespaceFromEnv } from "./CloudflareBindings.mjs";
|
|
3
3
|
import { AdmissionLimitExceeded, CLOUDFLARE_RUNTIME_DEFAULTS, CloudflareDurableRuntimeConfig, CloudflareDurableRuntimeConfigValue, CloudflarePlatformConfigError } from "./CloudflareConfig.mjs";
|
|
4
|
-
import { _ as Lifecycle, b as Projection, c as ThreadMaintenanceFailpoint, d as ThreadNativeMaintenance, f as ThreadPublication, g as HostLaneId, h as publishCommitted, l as ThreadMessageDelivery, n as DurableAlarmError, o as ThreadMaintenance, r as DurableAlarmService, s as ThreadMaintenanceAlarm, u as ThreadMutationGate, v as Messages, x as Publication, y as Native } from "./Alarm-
|
|
5
|
-
import { A as decodeObservePageRequest, C as boundHostDiagnostic, D as decodeAwaitSettlementRequest, E as decodeAwaitProgressRequest, G as MAX_DELTA_LENGTH, J as Request, M as decodeSubmitRequest, N as decodeUnknownResolutionCommand, O as decodeCancelProgressRequest, S as UnknownResolutionRecorded, T as decodeApprovalDecisionCommand, W as Frame, X as cloudflareCryptoLayer, Y as isBoundedEvent, _ as SettlementRecordReached, b as SubmitSucceeded, c as HostFailed, g as SettlementReached, h as ProgressObserved, j as decodeReceipt, m as ProgressCancelled, n as ApprovalRecorded, o as CloudflareThreadClient, p as ObservedPage, t as AbortRecorded, u as HostProtocolError, v as SubmissionStatusResponse, w as decodeAbortCommand, z as encodeHostResponse } from "./CloudflareThreadClient-
|
|
6
|
-
import { t as cloudflarePreparedInputAdmissionLayer } from "./prepared-admission-
|
|
4
|
+
import { _ as Lifecycle, b as Projection, c as ThreadMaintenanceFailpoint, d as ThreadNativeMaintenance, f as ThreadPublication, g as HostLaneId, h as publishCommitted, l as ThreadMessageDelivery, n as DurableAlarmError, o as ThreadMaintenance, r as DurableAlarmService, s as ThreadMaintenanceAlarm, u as ThreadMutationGate, v as Messages, x as Publication, y as Native } from "./Alarm-7uipp6LW.mjs";
|
|
5
|
+
import { A as decodeObservePageRequest, C as boundHostDiagnostic, D as decodeAwaitSettlementRequest, E as decodeAwaitProgressRequest, G as MAX_DELTA_LENGTH, J as Request, M as decodeSubmitRequest, N as decodeUnknownResolutionCommand, O as decodeCancelProgressRequest, S as UnknownResolutionRecorded, T as decodeApprovalDecisionCommand, W as Frame, X as cloudflareCryptoLayer, Y as isBoundedEvent, _ as SettlementRecordReached, b as SubmitSucceeded, c as HostFailed, g as SettlementReached, h as ProgressObserved, j as decodeReceipt, m as ProgressCancelled, n as ApprovalRecorded, o as CloudflareThreadClient, p as ObservedPage, t as AbortRecorded, u as HostProtocolError, v as SubmissionStatusResponse, w as decodeAbortCommand, z as encodeHostResponse } from "./CloudflareThreadClient-bA3lGA_2.mjs";
|
|
6
|
+
import { t as cloudflarePreparedInputAdmissionLayer } from "./prepared-admission-BvMiFR41.mjs";
|
|
7
7
|
import { cloudflareWakeSchedulerLayer } from "./WakeScheduler.mjs";
|
|
8
8
|
import { ThreadPortTransport, executePortRequest, makeLocalSubmissionLookup, portTransportFailure, routedMessageDeliveryStoreLayer, routedSettlementPublisherLayer, routedSubmissionLedgerLayer, routedThreadStoreLayer, routedWorkerAdmissionLayer } from "@yielded/agent-storage-cloudflare/port-routing";
|
|
9
9
|
import { compileRegistrations } from "@yielded/agent/agent-registration";
|
|
@@ -20,7 +20,7 @@ import { SqliteClient } from "@effect/sql-sqlite-do";
|
|
|
20
20
|
import { DigestError } from "@yielded/agent/digest";
|
|
21
21
|
import { DurableRuntimeFailpoint, DurableRuntimeFailpointError } from "@yielded/agent/durable-failpoint";
|
|
22
22
|
import { OperationAuthorizationRequest, OperationAuthorizer, OperationDenied, operationAuthorizerLayer } from "@yielded/agent/operation-authorizer";
|
|
23
|
-
import { AppendConflict, AppendResult, ThreadNotMaterialized, ThreadRead, ThreadStore, ThreadStoreError } from "@yielded/agent/thread-store";
|
|
23
|
+
import { AppendConflict, AppendResult, PreparedAppend, ThreadNotMaterialized, ThreadRead, ThreadStore, ThreadStoreError } from "@yielded/agent/thread-store";
|
|
24
24
|
import { Publisher } from "@yielded/agent/provisional-text";
|
|
25
25
|
import { LedgerLookupResult, PortFailed, PortProtocolError, PortSucceeded, decodePortRequest, encodePortResponse } from "@yielded/agent-storage-cloudflare/port-protocol";
|
|
26
26
|
import { IntegrityReport, ObligationReport, ObligationThresholds, RecoveryExplanation, RetryCommand, RetryRefused } from "@yielded/agent/admin";
|
|
@@ -29,7 +29,7 @@ import { WorkDiscoveryUnavailable } from "@yielded/agent/thread-work";
|
|
|
29
29
|
import { doMessageDeliveryStoreLayer } from "@yielded/agent-storage-cloudflare/do-message-delivery-store";
|
|
30
30
|
import "@yielded/agent-storage-cloudflare/do-storage-failpoint";
|
|
31
31
|
import { submissionLedgerLayer } from "@yielded/agent-storage-cloudflare/do-submission-ledger";
|
|
32
|
-
import { sqlOwnerLayer, storageConfigLayer, storageFailpointLayer, threadStoreLayer } from "@yielded/agent-storage-cloudflare/do-thread-store";
|
|
32
|
+
import { journalLayer, sqlOwnerLayer, storageConfigLayer, storageFailpointLayer, threadStoreLayer } from "@yielded/agent-storage-cloudflare/do-thread-store";
|
|
33
33
|
import { SqlStorageProgress, SqlStorageProgressError } from "@yielded/agent-storage-sql/sql-storage-progress";
|
|
34
34
|
import { LifecyclePublicationError, LifecyclePublicationFact, drainLifecyclePublications, lifecyclePublicationLayer } from "@yielded/agent/lifecycle-publication";
|
|
35
35
|
import { MessageDeliveryDriver, MessageDeliveryError, MessageDeliveryStore } from "@yielded/agent/message-delivery";
|
|
@@ -230,10 +230,15 @@ const guardedMessageDeliveryStoreLayer = Layer.effect(MessageDeliveryStore, Effe
|
|
|
230
230
|
nextDeadline: (owner) => local(owner, store.nextDeadline(owner))
|
|
231
231
|
});
|
|
232
232
|
}));
|
|
233
|
-
/**
|
|
234
|
-
const
|
|
235
|
-
const
|
|
233
|
+
/** Build the driver in the Object's Scope only when retained delivery work is due. */
|
|
234
|
+
const lazyThreadMessageDeliveryLayer = (driver) => Layer.fromBuildMemo((memoMap, scope) => Effect.gen(function* () {
|
|
235
|
+
const context = yield* Effect.context();
|
|
236
236
|
const store = yield* MessageDeliveryStore;
|
|
237
|
+
const service = yield* Effect.cachedWithTTL(Layer.buildWithMemoMap(driver, memoMap, scope).pipe(Effect.provide(context), Effect.map(Context.get(MessageDeliveryDriver)), Effect.mapError((cause) => DurableAlarmError.make({
|
|
238
|
+
operation: "prepare message delivery",
|
|
239
|
+
message: "Durable message recovery remains pending",
|
|
240
|
+
cause
|
|
241
|
+
}))), (exit) => Exit.isSuccess(exit) ? Duration.infinity : Duration.zero);
|
|
237
242
|
const failure = (operation) => () => DurableAlarmError.make({
|
|
238
243
|
operation,
|
|
239
244
|
message: "Durable message recovery remains pending"
|
|
@@ -248,14 +253,15 @@ const threadMessageDeliveryLayer = Layer.effectContext(Effect.gen(function* () {
|
|
|
248
253
|
const records = yield* Effect.forEach(keys, (key) => store.get(key));
|
|
249
254
|
return {
|
|
250
255
|
timeoutMillis: Math.max(1, ...records.map((record) => record?.policy.attemptTimeoutMillis ?? 1)),
|
|
251
|
-
run: Effect.forEach(keys, (key) => driver.process(key), {
|
|
256
|
+
run: Effect.flatMap(service, (driver) => Effect.forEach(keys, (key) => driver.process(key), {
|
|
252
257
|
concurrency: 4,
|
|
253
258
|
discard: true
|
|
254
|
-
}).pipe(Effect.andThen(store.nextDeadline()), Effect.map(Option.fromNullishOr), Effect.mapError(failure("dispatch message delivery")))
|
|
259
|
+
})).pipe(Effect.andThen(store.nextDeadline()), Effect.map(Option.fromNullishOr), Effect.mapError(failure("dispatch message delivery")))
|
|
255
260
|
};
|
|
256
261
|
}).pipe(Effect.mapError(failure("prepare message delivery")));
|
|
257
262
|
return Context.make(ThreadMessageDelivery, { prepare });
|
|
258
263
|
}));
|
|
264
|
+
lazyThreadMessageDeliveryLayer(Layer.effect(MessageDeliveryDriver, MessageDeliveryDriver));
|
|
259
265
|
//#endregion
|
|
260
266
|
//#region src/internal/progress-wait.ts
|
|
261
267
|
/** Cancellation tombstones are bounded hints, never durable authority. */
|
|
@@ -458,7 +464,7 @@ const sharedLayer = (application, options = {}) => Layer.unwrap(Effect.gen(funct
|
|
|
458
464
|
maxStoredValueBytes: config.maxStoredValueBytes,
|
|
459
465
|
verifyOnOpen: config.verifyOnOpen
|
|
460
466
|
};
|
|
461
|
-
const infrastructure = Layer.mergeAll(options.lifecyclePublication === void 0 ? Layer.empty : lifecyclePublicationLayer, storageConfigLayer(storageOptions), Layer.effect(SqlClient)(SqlClient));
|
|
467
|
+
const infrastructure = Layer.suspend(() => Layer.mergeAll(options.lifecyclePublication === void 0 ? Layer.empty : lifecyclePublicationLayer, storageConfigLayer(storageOptions), Layer.effect(SqlClient)(SqlClient)));
|
|
462
468
|
const sourceOwner = Layer.effect(SqlStorageOwner)(Effect.gen(function* () {
|
|
463
469
|
const owner = yield* SqlStorageOwner;
|
|
464
470
|
const mutations = yield* ThreadMutationGate;
|
|
@@ -472,7 +478,7 @@ const sharedLayer = (application, options = {}) => Layer.unwrap(Effect.gen(funct
|
|
|
472
478
|
}) : Effect.void)))
|
|
473
479
|
};
|
|
474
480
|
})).pipe(Layer.provide(sqlOwnerLayer));
|
|
475
|
-
const localInfrastructure = Layer.mergeAll(infrastructure, sourceOwner);
|
|
481
|
+
const localInfrastructure = Layer.suspend(() => Layer.mergeAll(infrastructure, sourceOwner));
|
|
476
482
|
const sourceProgress = Layer.effect(SqlStorageProgress)(Effect.gen(function* () {
|
|
477
483
|
const mutations = yield* ThreadMutationGate;
|
|
478
484
|
return { committed: (kind) => {
|
|
@@ -488,16 +494,16 @@ const sharedLayer = (application, options = {}) => Layer.unwrap(Effect.gen(funct
|
|
|
488
494
|
})))));
|
|
489
495
|
} };
|
|
490
496
|
}));
|
|
491
|
-
const rawLocalPorts = Layer.mergeAll(threadStoreLayer, submissionLedgerLayer).pipe(Layer.provide(localInfrastructure), Layer.provide(sourceProgress));
|
|
492
|
-
const base = Layer.mergeAll(DurableAlarmService.layer, ProgressWaitRegistry.layer);
|
|
497
|
+
const rawLocalPorts = Layer.suspend(() => Layer.mergeAll(threadStoreLayer, submissionLedgerLayer).pipe(Layer.provide(journalLayer), Layer.provide(localInfrastructure), Layer.provide(sourceProgress)));
|
|
498
|
+
const base = Layer.suspend(() => Layer.mergeAll(DurableAlarmService.layer, ProgressWaitRegistry.layer));
|
|
493
499
|
const wakes = cloudflareWakeSchedulerLayer.pipe(Layer.provide(base));
|
|
494
|
-
const messageStore = guardedMessageDeliveryStoreLayer.pipe(Layer.provide(doMessageDeliveryStoreLayer().pipe(Layer.provide(localInfrastructure), Layer.provide(sourceProgress))), Layer.provide(wakes));
|
|
495
|
-
const messageRecovery =
|
|
500
|
+
const messageStore = Layer.suspend(() => guardedMessageDeliveryStoreLayer.pipe(Layer.provide(doMessageDeliveryStoreLayer().pipe(Layer.provide(localInfrastructure), Layer.provide(sourceProgress))), Layer.provide(wakes)));
|
|
501
|
+
const messageRecovery = Layer.suspend(() => lazyThreadMessageDeliveryLayer(MessageDeliveryDriver.layer({
|
|
496
502
|
batchSize: 4,
|
|
497
503
|
concurrency: 4
|
|
498
|
-
})
|
|
499
|
-
const publication =
|
|
500
|
-
const projection =
|
|
504
|
+
}).pipe(Layer.provide(cloudflarePreparedInputAdmissionLayer), Layer.provide(CloudflareThreadClient.layer), Layer.provide(messageStore), Layer.provide(wakes))).pipe(Layer.provide(messageStore)));
|
|
505
|
+
const publication = options.publication === void 0 ? ThreadPublication.layer : options.publication.pipe(Layer.provide(Layer.mergeAll(rawLocalPorts, Layer.effect(SqlClient)(SqlClient))));
|
|
506
|
+
const projection = options.projection === void 0 ? ThreadProjectionMaintenance.layer : options.projection.pipe(Layer.provide(Layer.mergeAll(rawLocalPorts, Layer.effect(SqlClient)(SqlClient))));
|
|
501
507
|
const localPorts = options.publication === void 0 && options.projection === void 0 && options.hostLanesForMutation === void 0 && options.lifecyclePublication === void 0 ? rawLocalPorts : Layer.effectContext(Effect.gen(function* () {
|
|
502
508
|
const store = yield* ThreadStore;
|
|
503
509
|
const ledger = yield* SubmissionLedger;
|
|
@@ -508,6 +514,11 @@ const sharedLayer = (application, options = {}) => Layer.unwrap(Effect.gen(funct
|
|
|
508
514
|
const publish = yield* Effect.context();
|
|
509
515
|
const afterCommit = publishCommitted.pipe(Effect.provide(publish));
|
|
510
516
|
const sourceCommits = yield* Semaphore.make(1);
|
|
517
|
+
const observeAppend = (request, body) => mutations.withMutation(sourceCommits.withPermit(body.pipe(Effect.tap((result) => index.applyCommitted(request, result).pipe(Effect.catchCause((cause) => Cause.hasInterrupts(cause) ? Effect.interrupt : Effect.logError("Thread projection deferred after source commit", cause)))))).pipe(Effect.tap(() => afterCommit)), { lanes: [...options.projection === void 0 ? [] : [Projection], ...options.lifecyclePublication === void 0 || !request.batch.records.some((record) => Schema.is(Schema.toType(LifecyclePublicationFact))(record.payload)) ? [] : [Lifecycle]] }).pipe(Effect.catchTag("DurableAlarmError", (cause) => ThreadStoreError.make({
|
|
518
|
+
operation: "prearm publication append",
|
|
519
|
+
message: cause.message,
|
|
520
|
+
cause
|
|
521
|
+
})));
|
|
511
522
|
const observedStore = ThreadStore.of({
|
|
512
523
|
...store,
|
|
513
524
|
...store.lifecyclePublications === void 0 ? {} : { lifecyclePublications: {
|
|
@@ -520,11 +531,7 @@ const sharedLayer = (application, options = {}) => Layer.unwrap(Effect.gen(funct
|
|
|
520
531
|
cause
|
|
521
532
|
})))
|
|
522
533
|
} },
|
|
523
|
-
append: (request) =>
|
|
524
|
-
operation: "prearm publication append",
|
|
525
|
-
message: cause.message,
|
|
526
|
-
cause
|
|
527
|
-
})))
|
|
534
|
+
append: (request) => observeAppend(request, store.append(request))
|
|
528
535
|
});
|
|
529
536
|
const observeIntent = (body, invalidatesRecovery = true, hostLanes = []) => mutations.withMutation(body.pipe(Effect.tap(() => invalidatesRecovery ? afterCommit : Effect.void)), {
|
|
530
537
|
invalidatesRecovery,
|
|
@@ -540,6 +547,7 @@ const sharedLayer = (application, options = {}) => Layer.unwrap(Effect.gen(funct
|
|
|
540
547
|
cause
|
|
541
548
|
})), Effect.flatMap((lanes) => observeIntent(body, invalidatesRecovery, lanes)));
|
|
542
549
|
const stopWorker = ledger.stopWorker;
|
|
550
|
+
const appendInput = ledger.appendInput;
|
|
543
551
|
return Context.make(ThreadStore, observedStore).pipe(Context.add(StorageOwner, storageOwner), Context.add(SettlementPublisher, { publish: Effect.fnUntraced(function* (input) {
|
|
544
552
|
const { request } = yield* validatePublication(input);
|
|
545
553
|
return yield* mutations.withMutation(sourceCommits.withPermit(settlementPublisher.publish(request).pipe(Effect.tap((result) => result.replayed ? Effect.void : index.applyCommitted(request.append, AppendResult.make({
|
|
@@ -553,10 +561,11 @@ const sharedLayer = (application, options = {}) => Layer.unwrap(Effect.gen(funct
|
|
|
553
561
|
})));
|
|
554
562
|
}) }), Context.add(SubmissionLedger, {
|
|
555
563
|
...ledger,
|
|
556
|
-
...
|
|
564
|
+
...appendInput === void 0 ? {} : { appendInput: (submissionId, input) => Effect.flatMap(PreparedAppend.capture(input), (request) => observeAppend(request, appendInput(submissionId, request))) },
|
|
565
|
+
...options.hostLanesForMutation === void 0 && options.lifecyclePublication === void 0 ? {} : { admit: (...args) => observeMutation({
|
|
557
566
|
_tag: "Admission",
|
|
558
|
-
request
|
|
559
|
-
}, ledger.admit(
|
|
567
|
+
request: args[0]
|
|
568
|
+
}, ledger.admit(...args), false) },
|
|
560
569
|
...options.lifecyclePublication === void 0 ? {} : {
|
|
561
570
|
markReady: (request) => observeIntent(ledger.markReady(request), false),
|
|
562
571
|
suspend: (request) => observeIntent(ledger.suspend(request), false),
|
|
@@ -722,10 +731,10 @@ const gateAdmissionLimits = Effect.fnUntraced(function* (threadId, request) {
|
|
|
722
731
|
actual: inputBytes,
|
|
723
732
|
maximum: config.limits.maxInputBytes
|
|
724
733
|
}));
|
|
725
|
-
const
|
|
726
|
-
if (
|
|
734
|
+
const queueDepth = yield* Stream.runFold(ledger.scanNonterminal, () => 0, (depth, submission) => depth + (submission.threadId === threadId ? 1 : 0));
|
|
735
|
+
if (queueDepth >= config.limits.maxQueueDepthPerLane) return yield* refuseFresh(AdmissionLimitExceeded.make({
|
|
727
736
|
limit: "queue-depth",
|
|
728
|
-
actual:
|
|
737
|
+
actual: queueDepth,
|
|
729
738
|
maximum: config.limits.maxQueueDepthPerLane
|
|
730
739
|
}));
|
|
731
740
|
const databaseBytes = yield* Effect.sync(() => ctx.storage.sql.databaseSize);
|
|
@@ -1100,25 +1109,18 @@ const gateEndpoint = Effect.gen(function* () {
|
|
|
1100
1109
|
* ports. effect-cf owns the cached ManagedRuntime and supplies these values once per Object
|
|
1101
1110
|
* incarnation; the durable runtime continues to depend only on the narrow services below.
|
|
1102
1111
|
*/
|
|
1103
|
-
const effectCfPlatformLayer = (namespaceBinding, rpcTracing = false) => {
|
|
1104
|
-
const
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
return ThreadObjectNamespace.of({
|
|
1116
|
-
get: (threadId) => binding.get(binding.idFromName(threadId)),
|
|
1117
|
-
...rpcTracing === true ? { rpcTracing: namespaceBinding } : {}
|
|
1118
|
-
});
|
|
1119
|
-
}));
|
|
1120
|
-
return Layer.merge(context, namespace);
|
|
1121
|
-
};
|
|
1112
|
+
const effectCfPlatformLayer = (namespaceBinding, rpcTracing = false) => Layer.effectContext(Effect.gen(function* () {
|
|
1113
|
+
const state = yield* DurableObjectState.DurableObjectState;
|
|
1114
|
+
const env = yield* WorkerEnvironment;
|
|
1115
|
+
const binding = yield* threadNamespaceFromEnv(env, namespaceBinding);
|
|
1116
|
+
return Context.make(DurableObjectContext, {
|
|
1117
|
+
ctx: state.raw,
|
|
1118
|
+
env
|
|
1119
|
+
}).pipe(Context.add(ThreadObjectNamespace, ThreadObjectNamespace.of({
|
|
1120
|
+
get: (threadId) => binding.get(binding.idFromName(threadId)),
|
|
1121
|
+
...rpcTracing === true ? { rpcTracing: namespaceBinding } : {}
|
|
1122
|
+
})));
|
|
1123
|
+
}));
|
|
1122
1124
|
/**
|
|
1123
1125
|
* Export a composed application Layer as a native Durable Object class.
|
|
1124
1126
|
* Bootstrap services are provided to the whole graph before it acquires, so application Layers
|
|
@@ -1164,4 +1166,4 @@ const make = (applicationLayer, options) => {
|
|
|
1164
1166
|
//#endregion
|
|
1165
1167
|
export { ThreadObjectPorts as C, layerInHost as D, layerHostConfig as E, submit as S, layerConfig as T, decodeRetryCommand as _, AdminVerifyRequest as a, make as b, RetryExecuted as c, VerifiedIntegrity as d, alarms as f, decodeObligationThresholds as g, decodeAdminVerifyRequest as h, AdminResponse as i, ThreadObject_exports as l, decodeAdminResponse as m, AdminFailed as n, ExplainedRecovery as o, decodeAdminExplainRequest as p, AdminFailure as r, ObligationsScanned as s, AdminExplainRequest as t, ThreadRpcOperation as u, encodeAdminResponse as v, layer$1 as w, portCall as x, handleRpc as y };
|
|
1166
1168
|
|
|
1167
|
-
//# sourceMappingURL=ThreadObject-
|
|
1169
|
+
//# sourceMappingURL=ThreadObject-SNcCsrS2.mjs.map
|