@effect-agent/platform-cloudflare 0.1.0-beta.82 → 0.1.0-beta.84
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/CloudflareBindings.d.mts +6 -3
- package/dist/CloudflareBindings.mjs +14 -2
- package/dist/CloudflareBindings.mjs.map +1 -1
- package/dist/CloudflareMemory.d.mts +1 -1
- package/dist/CloudflareMemory.mjs +11 -4
- package/dist/CloudflareMemory.mjs.map +1 -1
- package/dist/CloudflareScheduling.mjs +13 -6
- package/dist/CloudflareScheduling.mjs.map +1 -1
- package/dist/CloudflareThreadClient.d.mts +47 -47
- package/dist/CloudflareThreadClient.mjs +9 -13
- package/dist/CloudflareThreadClient.mjs.map +1 -1
- package/dist/{ThreadObject-bML6jTHl.d.mts → ThreadObject-BS1gRV0V.d.mts} +34 -34
- package/dist/{ThreadObject-BpwkEc5E.mjs → ThreadObject-mmWMMWdY.mjs} +4 -7
- package/dist/ThreadObject-mmWMMWdY.mjs.map +1 -0
- package/dist/ThreadObject.d.mts +1 -1
- package/dist/ThreadObject.mjs +1 -1
- package/dist/WakeScheduler.mjs +7 -10
- package/dist/WakeScheduler.mjs.map +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +1 -1
- package/src/CloudflareBindings.ts +20 -1
- package/src/CloudflareMemory.ts +18 -4
- package/src/CloudflareScheduling.ts +21 -7
- package/src/CloudflareThreadClient.ts +12 -10
- package/src/WakeScheduler.ts +12 -6
- package/src/internal/transport.ts +8 -6
- package/dist/ThreadObject-BpwkEc5E.mjs.map +0 -1
|
@@ -482,11 +482,6 @@ declare const encodeHostResponse: (input: AbortRecorded | ApprovalRecorded | Hos
|
|
|
482
482
|
readonly createdAt: string;
|
|
483
483
|
readonly deploymentId: string;
|
|
484
484
|
readonly payload: {
|
|
485
|
-
readonly _tag: "AbortRequested";
|
|
486
|
-
readonly submissionId: string;
|
|
487
|
-
readonly author: string;
|
|
488
|
-
readonly reason: string;
|
|
489
|
-
} | {
|
|
490
485
|
readonly _tag: "ThreadCreated";
|
|
491
486
|
readonly agentId: string;
|
|
492
487
|
readonly definitions: {
|
|
@@ -661,6 +656,11 @@ declare const encodeHostResponse: (input: AbortRecorded | ApprovalRecorded | Hos
|
|
|
661
656
|
readonly runDisposition?: Schema.Json | undefined;
|
|
662
657
|
readonly finishReason?: "budget-exhausted" | undefined;
|
|
663
658
|
readonly exhausted?: "tokens" | "tool-calls" | "turns" | undefined;
|
|
659
|
+
} | {
|
|
660
|
+
readonly _tag: "AbortRequested";
|
|
661
|
+
readonly submissionId: string;
|
|
662
|
+
readonly author: string;
|
|
663
|
+
readonly reason: string;
|
|
664
664
|
} | {
|
|
665
665
|
readonly _tag: "SubmissionSettled";
|
|
666
666
|
readonly submissionId: string;
|
|
@@ -1138,37 +1138,10 @@ declare const encodeHostResponse: (input: AbortRecorded | ApprovalRecorded | Hos
|
|
|
1138
1138
|
} | {
|
|
1139
1139
|
readonly _tag: "HostFailed";
|
|
1140
1140
|
readonly failure: {
|
|
1141
|
-
readonly _tag: "AdmissionConflict";
|
|
1142
|
-
readonly threadId: string;
|
|
1143
|
-
readonly principal: string;
|
|
1144
|
-
readonly idempotencyKey: string;
|
|
1145
|
-
readonly existingInputDigest: string;
|
|
1146
|
-
readonly attemptedInputDigest: string;
|
|
1147
|
-
} | {
|
|
1148
|
-
readonly _tag: "AdmissionPolicyError";
|
|
1149
|
-
readonly reason: "occupied" | "refused" | "unavailable";
|
|
1150
|
-
readonly code: string;
|
|
1151
|
-
} | {
|
|
1152
|
-
readonly _tag: "SettlementConflict";
|
|
1153
|
-
readonly submissionId: string;
|
|
1154
|
-
readonly existingOutcome: "aborted" | "completed" | "failed";
|
|
1155
|
-
} | {
|
|
1156
|
-
readonly _tag: "JoinedToHost";
|
|
1157
|
-
readonly submissionId: string;
|
|
1158
|
-
readonly hostSubmissionId: string;
|
|
1159
|
-
} | {
|
|
1160
1141
|
readonly _tag: "LedgerError";
|
|
1161
1142
|
readonly operation: string;
|
|
1162
1143
|
readonly message: string;
|
|
1163
1144
|
readonly cause?: Schema.Json | undefined;
|
|
1164
|
-
} | {
|
|
1165
|
-
readonly _tag: "ThreadStoreError";
|
|
1166
|
-
readonly operation: string;
|
|
1167
|
-
readonly message: string;
|
|
1168
|
-
readonly cause?: Schema.Json | undefined;
|
|
1169
|
-
} | {
|
|
1170
|
-
readonly _tag: "ThreadNotMaterialized";
|
|
1171
|
-
readonly threadId: string;
|
|
1172
1145
|
} | {
|
|
1173
1146
|
readonly _tag: "AppendConflict";
|
|
1174
1147
|
readonly threadId: string;
|
|
@@ -1182,8 +1155,30 @@ declare const encodeHostResponse: (input: AbortRecorded | ApprovalRecorded | Hos
|
|
|
1182
1155
|
readonly actualEpoch: number;
|
|
1183
1156
|
readonly attemptedEpoch: number;
|
|
1184
1157
|
} | {
|
|
1185
|
-
readonly _tag: "
|
|
1158
|
+
readonly _tag: "ThreadNotMaterialized";
|
|
1159
|
+
readonly threadId: string;
|
|
1160
|
+
} | {
|
|
1161
|
+
readonly _tag: "ThreadStoreError";
|
|
1162
|
+
readonly operation: string;
|
|
1186
1163
|
readonly message: string;
|
|
1164
|
+
readonly cause?: Schema.Json | undefined;
|
|
1165
|
+
} | {
|
|
1166
|
+
readonly _tag: "OperationDenied";
|
|
1167
|
+
readonly operation: "abort" | "awaitSettlement" | "explain" | "observe" | "resolveApproval" | "resolveUnknown" | "retry" | "scanObligations" | "verify" | "wake";
|
|
1168
|
+
readonly reason: string;
|
|
1169
|
+
readonly threadId?: string | undefined;
|
|
1170
|
+
readonly submissionId?: string | undefined;
|
|
1171
|
+
} | {
|
|
1172
|
+
readonly _tag: "AdmissionConflict";
|
|
1173
|
+
readonly threadId: string;
|
|
1174
|
+
readonly principal: string;
|
|
1175
|
+
readonly idempotencyKey: string;
|
|
1176
|
+
readonly existingInputDigest: string;
|
|
1177
|
+
readonly attemptedInputDigest: string;
|
|
1178
|
+
} | {
|
|
1179
|
+
readonly _tag: "AdmissionPolicyError";
|
|
1180
|
+
readonly reason: "occupied" | "refused" | "unavailable";
|
|
1181
|
+
readonly code: string;
|
|
1187
1182
|
} | {
|
|
1188
1183
|
readonly _tag: "AgentInputError";
|
|
1189
1184
|
readonly message: string;
|
|
@@ -1191,6 +1186,25 @@ declare const encodeHostResponse: (input: AbortRecorded | ApprovalRecorded | Hos
|
|
|
1191
1186
|
readonly _tag: "DigestError";
|
|
1192
1187
|
readonly message: string;
|
|
1193
1188
|
readonly cause?: Schema.Json | undefined;
|
|
1189
|
+
} | {
|
|
1190
|
+
readonly _tag: "DurableRuntimeFailpointError";
|
|
1191
|
+
readonly location: "abort:after-intent" | "approval:after-request-append" | "approval:after-suspend" | "checkpoint:after-save" | "checkpoint:before-save" | "claim:after-claim" | "compaction:after-canonical-append" | "compaction:before-canonical-append" | "input:after-canonical-append" | "join:after-canonical-append" | "join:after-claim" | "policy:after-reservation-append" | "policy:before-reservation-append" | "resolve:after-intent" | "run:after-start-append" | "run:before-start-append" | "step:after-step-append" | "subagent:after-admit" | "subagent:after-child-abort-intent" | "subagent:after-child-ready" | "subagent:after-join-append" | "subagent:after-release" | "subagent:after-release-pending" | "subagent:after-request-append" | "subagent:after-reserve" | "subagent:after-sibling-settle" | "subagent:after-start-append" | "subagent:after-suspend" | "subagent:before-join-append" | "submit:after-admit" | "submit:after-materialize" | "terminalize:after-canonical-append" | "terminalize:after-reserve" | "tools:after-prepared-append" | "tools:before-prepared-append" | "turn:after-canonical-append" | "turn:after-response-append" | "turn:after-results-append" | "worker:after-completion-append" | "worker:after-origin-append" | "worker:after-report-append" | "worker:after-report-delivery" | "worker:after-source-append" | "worker:after-subtree-append" | "worker:before-completion-append" | "worker:before-origin-append" | "worker:before-report-append" | "worker:before-report-delivery" | "worker:before-source-append" | "worker:before-subtree-append";
|
|
1192
|
+
} | {
|
|
1193
|
+
readonly _tag: "SettlementConflict";
|
|
1194
|
+
readonly submissionId: string;
|
|
1195
|
+
readonly existingOutcome: "aborted" | "completed" | "failed";
|
|
1196
|
+
} | {
|
|
1197
|
+
readonly _tag: "JoinedToHost";
|
|
1198
|
+
readonly submissionId: string;
|
|
1199
|
+
readonly hostSubmissionId: string;
|
|
1200
|
+
} | {
|
|
1201
|
+
readonly _tag: "DurableAlarmError";
|
|
1202
|
+
readonly operation: string;
|
|
1203
|
+
readonly message: string;
|
|
1204
|
+
readonly cause?: Schema.Json | undefined;
|
|
1205
|
+
} | {
|
|
1206
|
+
readonly _tag: "HostProtocolError";
|
|
1207
|
+
readonly message: string;
|
|
1194
1208
|
} | {
|
|
1195
1209
|
readonly _tag: "ApprovalConflict";
|
|
1196
1210
|
readonly submissionId: string;
|
|
@@ -1200,25 +1214,11 @@ declare const encodeHostResponse: (input: AbortRecorded | ApprovalRecorded | Hos
|
|
|
1200
1214
|
readonly _tag: "UnknownResolutionConflict";
|
|
1201
1215
|
readonly submissionId: string;
|
|
1202
1216
|
readonly toolCallId: string;
|
|
1203
|
-
} | {
|
|
1204
|
-
readonly _tag: "DurableRuntimeFailpointError";
|
|
1205
|
-
readonly location: "abort:after-intent" | "approval:after-request-append" | "approval:after-suspend" | "checkpoint:after-save" | "checkpoint:before-save" | "claim:after-claim" | "compaction:after-canonical-append" | "compaction:before-canonical-append" | "input:after-canonical-append" | "join:after-canonical-append" | "join:after-claim" | "policy:after-reservation-append" | "policy:before-reservation-append" | "resolve:after-intent" | "run:after-start-append" | "run:before-start-append" | "step:after-step-append" | "subagent:after-admit" | "subagent:after-child-abort-intent" | "subagent:after-child-ready" | "subagent:after-join-append" | "subagent:after-release" | "subagent:after-release-pending" | "subagent:after-request-append" | "subagent:after-reserve" | "subagent:after-sibling-settle" | "subagent:after-start-append" | "subagent:after-suspend" | "subagent:before-join-append" | "submit:after-admit" | "submit:after-materialize" | "terminalize:after-canonical-append" | "terminalize:after-reserve" | "tools:after-prepared-append" | "tools:before-prepared-append" | "turn:after-canonical-append" | "turn:after-response-append" | "turn:after-results-append" | "worker:after-completion-append" | "worker:after-origin-append" | "worker:after-report-append" | "worker:after-report-delivery" | "worker:after-source-append" | "worker:after-subtree-append" | "worker:before-completion-append" | "worker:before-origin-append" | "worker:before-report-append" | "worker:before-report-delivery" | "worker:before-source-append" | "worker:before-subtree-append";
|
|
1206
1217
|
} | {
|
|
1207
1218
|
readonly _tag: "AdmissionLimitExceeded";
|
|
1208
1219
|
readonly limit: "database-bytes" | "input-bytes" | "queue-depth";
|
|
1209
1220
|
readonly actual: number;
|
|
1210
1221
|
readonly maximum: number;
|
|
1211
|
-
} | {
|
|
1212
|
-
readonly _tag: "DurableAlarmError";
|
|
1213
|
-
readonly operation: string;
|
|
1214
|
-
readonly message: string;
|
|
1215
|
-
readonly cause?: Schema.Json | undefined;
|
|
1216
|
-
} | {
|
|
1217
|
-
readonly _tag: "OperationDenied";
|
|
1218
|
-
readonly operation: "abort" | "awaitSettlement" | "explain" | "observe" | "resolveApproval" | "resolveUnknown" | "retry" | "scanObligations" | "verify" | "wake";
|
|
1219
|
-
readonly reason: string;
|
|
1220
|
-
readonly threadId?: string | undefined;
|
|
1221
|
-
readonly submissionId?: string | undefined;
|
|
1222
1222
|
};
|
|
1223
1223
|
}, Schema.SchemaError, never>;
|
|
1224
1224
|
declare const decodeHostResponse: (input: unknown, options?: import("effect/SchemaAST").ParseOptions) => Effect.Effect<AbortRecorded | ApprovalRecorded | HostFailed | ObservedPage | ProgressCancelled | ProgressObserved | SettlementReached | SubmissionStatusResponse | SubmitSucceeded | UnknownResolutionRecorded, Schema.SchemaError, never>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
|
|
2
|
-
import { ThreadObjectNamespace } from "./CloudflareBindings.mjs";
|
|
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
5
|
import { DurableAlarmError } from "./Alarm.mjs";
|
|
@@ -266,21 +266,17 @@ var CloudflareThreadClient = class CloudflareThreadClient extends Context.Servic
|
|
|
266
266
|
return CloudflareThreadClient.layer.pipe(Layer.provide([ThreadObjectNamespace.layer(options.namespace, options), BrowserCrypto.layer]));
|
|
267
267
|
}
|
|
268
268
|
static layer = Layer.effect(CloudflareThreadClient)(Effect.gen(function* () {
|
|
269
|
-
const
|
|
269
|
+
const namespace = yield* ThreadObjectNamespace;
|
|
270
|
+
const { rpcTracing } = namespace;
|
|
270
271
|
const crypto = yield* Crypto.Crypto;
|
|
271
272
|
const call = Effect.fn(function* (threadId, operation, encoded) {
|
|
272
273
|
const traceArgs = rpcTracing === void 0 ? [] : yield* RpcTracing.withRpcTraceContext([]);
|
|
273
|
-
const raw = yield*
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
message: boundHostDiagnostic(`${operation} did not reach the Thread Object: ${safeCauseMessage(cause, "the RPC failed without a diagnostic")}`),
|
|
280
|
-
cause,
|
|
281
|
-
...cloudflareFailureSignals(cause)
|
|
282
|
-
})
|
|
283
|
-
});
|
|
274
|
+
const raw = yield* callThreadObject(threadId, (stub) => stub[hostRpcMethods[operation]](encoded, ...traceArgs), (cause) => ThreadClientError.make({
|
|
275
|
+
threadId,
|
|
276
|
+
message: boundHostDiagnostic(`${operation} did not reach the Thread Object: ${safeCauseMessage(cause, "the RPC failed without a diagnostic")}`),
|
|
277
|
+
cause,
|
|
278
|
+
...cloudflareFailureSignals(cause)
|
|
279
|
+
})).pipe(Effect.provideService(ThreadObjectNamespace, namespace));
|
|
284
280
|
return yield* decodeHostResponse(raw).pipe(Effect.mapError((error) => HostProtocolError.make({ message: boundHostDiagnostic(`The ${operation} answer could not be decoded: ${error.message}`) })));
|
|
285
281
|
}, (effect, threadId, operation) => rpcTracing === void 0 ? Effect.withSpan(effect, "CloudflareThreadClient.call", { attributes: {
|
|
286
282
|
threadId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CloudflareThreadClient.mjs","names":[],"sources":["../src/CloudflareThreadClient.ts"],"sourcesContent":["import { AgentInputError } from \"@effect-agent/core/AgentError\";\nimport { AgentId, type ThreadId } from \"@effect-agent/core/Identifiers\";\nimport { MessageAdmission } from \"@effect-agent/core/Messaging\";\nimport { DigestError } from \"@effect-agent/thread/Digest\";\nimport {\n Receipt,\n type DurableSubmitAgent,\n type DurableSubmitOptions,\n} from \"@effect-agent/thread/DurableAgentRuntime\";\nimport { DurableRuntimeFailpointError } from \"@effect-agent/thread/DurableFailpoint\";\nimport { OperationDenied } from \"@effect-agent/thread/OperationAuthorizer\";\nimport {\n CanonicalRecordEnvelope,\n CanonicalSequence,\n DefinitionDigests,\n PersistedJson,\n WorkerAdmission,\n} from \"@effect-agent/thread/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 Principal,\n Settlement,\n SettlementConflict,\n UnknownResolutionCommand,\n UnknownResolutionConflict,\n UnknownResolutionIntent,\n} from \"@effect-agent/thread/SubmissionLedger\";\nimport { SubmissionStatus } from \"@effect-agent/thread/SubmissionStatus\";\nimport {\n AppendConflict,\n ThreadNotMaterialized,\n ThreadStoreError,\n FenceRejected,\n} from \"@effect-agent/thread/ThreadStore\";\nimport { BrowserCrypto } from \"@effect/platform-browser\";\nimport { Context, Crypto, Duration, Effect, Layer, Schema } from \"effect\";\nimport { RpcTracing } from \"effect-cf\";\n\nimport { DurableAlarmError } from \"./Alarm.ts\";\nimport { ThreadObjectNamespace, type ThreadObjectRpc } from \"./CloudflareBindings.ts\";\nimport { AdmissionLimitExceeded } from \"./CloudflareConfig.ts\";\nimport { cloudflareFailureSignals, safeCauseMessage } from \"./internal/boundary.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(MessageAdmission),\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/** 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 RPC. */\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 ThreadStoreError,\n ThreadNotMaterialized,\n AppendConflict,\n FenceRejected,\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\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 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 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 ThreadStoreError,\n ThreadNotMaterialized,\n AppendConflict,\n FenceRejected,\n DurableRuntimeFailpointError,\n AdmissionLimitExceeded,\n DurableAlarmError,\n HostProtocolError,\n]);\n\nconst ClientAwaitHostFailure = Schema.Union([\n LedgerError,\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 SettlementConflict,\n JoinedToHost,\n DurableRuntimeFailpointError,\n DurableAlarmError,\n HostProtocolError,\n]);\n\nconst ClientApprovalHostFailure = Schema.Union([\n LedgerError,\n SettlementConflict,\n ApprovalConflict,\n OperationDenied,\n DurableAlarmError,\n HostProtocolError,\n]);\n\nconst ClientUnknownHostFailure = Schema.Union([\n LedgerError,\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 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 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 readonly awaitSettlement: (receipt: Receipt) => Effect.Effect<Settlement, 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 /** 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([ThreadObjectNamespace.layer(options.namespace, options), BrowserCrypto.layer]),\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 { get, rpcTracing } = yield* ThreadObjectNamespace;\n const crypto = yield* Crypto.Crypto;\n\n const call = Effect.fn(\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* Effect.tryPromise({\n try: () => {\n const stub = get(threadId);\n\n return stub[hostRpcMethods[operation]](encoded, ...traceArgs);\n },\n catch: (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 });\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 = (\n threadId: ThreadId,\n options?: {\n readonly afterSequence?: CanonicalSequence | undefined;\n readonly limit?: number | undefined;\n },\n ) =>\n Effect.gen(function* () {\n const request = ObservePageRequest.make({\n ...(options?.afterSequence === undefined\n ? {}\n : { 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 return CloudflareThreadClient.of({\n submit: <InputSchema extends Schema.Top>(\n agent: DurableSubmitAgent<InputSchema>,\n input: InputSchema[\"Type\"],\n options: DurableSubmitOptions,\n ) =>\n Effect.gen(function* () {\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)(\n encodedInput,\n ).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: (receipt) =>\n Effect.gen(function* () {\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: (receipt) =>\n Effect.gen(function* () {\n const encoded = yield* encodeReceipt(receipt).pipe(\n Effect.mapError((error) =>\n HostProtocolError.make({\n message: boundHostDiagnostic(`receipt encode failed: ${error.message}`),\n }),\n ),\n );\n\n const response = yield* call(receipt.threadId, \"awaitSettlement\", encoded);\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 awaitProgress: (threadId, afterSequence) =>\n Effect.gen(function* () {\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 readPage,\n\n readAll: (threadId) =>\n Effect.gen(function* () {\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: (threadId, command) =>\n Effect.gen(function* () {\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: (threadId, command) =>\n Effect.gen(function* () {\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: (threadId, command) =>\n Effect.gen(function* () {\n const encoded = yield* encodeUnknownResolutionCommand(command).pipe(\n Effect.mapError((error) =>\n HostProtocolError.make({\n message: boundHostDiagnostic(\n `resolution command encode failed: ${error.message}`,\n ),\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
|
+
{"version":3,"file":"CloudflareThreadClient.mjs","names":[],"sources":["../src/CloudflareThreadClient.ts"],"sourcesContent":["import { AgentInputError } from \"@effect-agent/core/AgentError\";\nimport { AgentId, type ThreadId } from \"@effect-agent/core/Identifiers\";\nimport { MessageAdmission } from \"@effect-agent/core/Messaging\";\nimport { DigestError } from \"@effect-agent/thread/Digest\";\nimport {\n Receipt,\n type DurableSubmitAgent,\n type DurableSubmitOptions,\n} from \"@effect-agent/thread/DurableAgentRuntime\";\nimport { DurableRuntimeFailpointError } from \"@effect-agent/thread/DurableFailpoint\";\nimport { OperationDenied } from \"@effect-agent/thread/OperationAuthorizer\";\nimport {\n CanonicalRecordEnvelope,\n CanonicalSequence,\n DefinitionDigests,\n PersistedJson,\n WorkerAdmission,\n} from \"@effect-agent/thread/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 Principal,\n Settlement,\n SettlementConflict,\n UnknownResolutionCommand,\n UnknownResolutionConflict,\n UnknownResolutionIntent,\n} from \"@effect-agent/thread/SubmissionLedger\";\nimport { SubmissionStatus } from \"@effect-agent/thread/SubmissionStatus\";\nimport {\n AppendConflict,\n ThreadNotMaterialized,\n ThreadStoreError,\n FenceRejected,\n} from \"@effect-agent/thread/ThreadStore\";\nimport { BrowserCrypto } from \"@effect/platform-browser\";\nimport { Context, Crypto, Duration, Effect, Layer, Schema } from \"effect\";\nimport { 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\";\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(MessageAdmission),\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/** 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 RPC. */\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 ThreadStoreError,\n ThreadNotMaterialized,\n AppendConflict,\n FenceRejected,\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\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 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 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 ThreadStoreError,\n ThreadNotMaterialized,\n AppendConflict,\n FenceRejected,\n DurableRuntimeFailpointError,\n AdmissionLimitExceeded,\n DurableAlarmError,\n HostProtocolError,\n]);\n\nconst ClientAwaitHostFailure = Schema.Union([\n LedgerError,\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 SettlementConflict,\n JoinedToHost,\n DurableRuntimeFailpointError,\n DurableAlarmError,\n HostProtocolError,\n]);\n\nconst ClientApprovalHostFailure = Schema.Union([\n LedgerError,\n SettlementConflict,\n ApprovalConflict,\n OperationDenied,\n DurableAlarmError,\n HostProtocolError,\n]);\n\nconst ClientUnknownHostFailure = Schema.Union([\n LedgerError,\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 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 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 readonly awaitSettlement: (receipt: Receipt) => Effect.Effect<Settlement, 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 /** 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([ThreadObjectNamespace.layer(options.namespace, options), BrowserCrypto.layer]),\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.fn(\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 = (\n threadId: ThreadId,\n options?: {\n readonly afterSequence?: CanonicalSequence | undefined;\n readonly limit?: number | undefined;\n },\n ) =>\n Effect.gen(function* () {\n const request = ObservePageRequest.make({\n ...(options?.afterSequence === undefined\n ? {}\n : { 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 return CloudflareThreadClient.of({\n submit: <InputSchema extends Schema.Top>(\n agent: DurableSubmitAgent<InputSchema>,\n input: InputSchema[\"Type\"],\n options: DurableSubmitOptions,\n ) =>\n Effect.gen(function* () {\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)(\n encodedInput,\n ).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: (receipt) =>\n Effect.gen(function* () {\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: (receipt) =>\n Effect.gen(function* () {\n const encoded = yield* encodeReceipt(receipt).pipe(\n Effect.mapError((error) =>\n HostProtocolError.make({\n message: boundHostDiagnostic(`receipt encode failed: ${error.message}`),\n }),\n ),\n );\n\n const response = yield* call(receipt.threadId, \"awaitSettlement\", encoded);\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 awaitProgress: (threadId, afterSequence) =>\n Effect.gen(function* () {\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 readPage,\n\n readAll: (threadId) =>\n Effect.gen(function* () {\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: (threadId, command) =>\n Effect.gen(function* () {\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: (threadId, command) =>\n Effect.gen(function* () {\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: (threadId, command) =>\n Effect.gen(function* () {\n const encoded = yield* encodeUnknownResolutionCommand(command).pipe(\n Effect.mapError((error) =>\n HostProtocolError.make({\n message: boundHostDiagnostic(\n `resolution command encode failed: ${error.message}`,\n ),\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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"}
|
|
@@ -348,13 +348,13 @@ declare const encodeAdminResponse: (input: AdminFailed | ExplainedRecovery | Obl
|
|
|
348
348
|
readonly author: string;
|
|
349
349
|
readonly reason: string;
|
|
350
350
|
readonly resolution: {
|
|
351
|
-
readonly _tag: "SafeToRetry";
|
|
352
|
-
} | {
|
|
353
351
|
readonly _tag: "CompletedWithResult";
|
|
354
352
|
readonly result: Schema.Json;
|
|
355
353
|
readonly isFailure: boolean;
|
|
356
354
|
} | {
|
|
357
355
|
readonly _tag: "NeverHappened";
|
|
356
|
+
} | {
|
|
357
|
+
readonly _tag: "SafeToRetry";
|
|
358
358
|
} | {
|
|
359
359
|
readonly _tag: "AbortSubmission";
|
|
360
360
|
};
|
|
@@ -694,26 +694,22 @@ declare const encodeAdminResponse: (input: AdminFailed | ExplainedRecovery | Obl
|
|
|
694
694
|
} | {
|
|
695
695
|
readonly _tag: "AdminFailed";
|
|
696
696
|
readonly failure: {
|
|
697
|
-
readonly _tag: "
|
|
698
|
-
readonly reason: "occupied" | "refused" | "unavailable";
|
|
699
|
-
readonly code: string;
|
|
700
|
-
} | {
|
|
701
|
-
readonly _tag: "SettlementConflict";
|
|
702
|
-
readonly submissionId: string;
|
|
703
|
-
readonly existingOutcome: "aborted" | "completed" | "failed";
|
|
704
|
-
} | {
|
|
705
|
-
readonly _tag: "LedgerError";
|
|
697
|
+
readonly _tag: "DurableAlarmError";
|
|
706
698
|
readonly operation: string;
|
|
707
699
|
readonly message: string;
|
|
708
700
|
readonly cause?: Schema.Json | undefined;
|
|
709
701
|
} | {
|
|
710
|
-
readonly _tag: "
|
|
702
|
+
readonly _tag: "HostProtocolError";
|
|
703
|
+
readonly message: string;
|
|
704
|
+
} | {
|
|
705
|
+
readonly _tag: "LedgerError";
|
|
711
706
|
readonly operation: string;
|
|
712
707
|
readonly message: string;
|
|
713
708
|
readonly cause?: Schema.Json | undefined;
|
|
714
709
|
} | {
|
|
715
|
-
readonly _tag: "
|
|
716
|
-
readonly
|
|
710
|
+
readonly _tag: "AdmissionPolicyError";
|
|
711
|
+
readonly reason: "occupied" | "refused" | "unavailable";
|
|
712
|
+
readonly code: string;
|
|
717
713
|
} | {
|
|
718
714
|
readonly _tag: "AppendConflict";
|
|
719
715
|
readonly threadId: string;
|
|
@@ -721,17 +717,6 @@ declare const encodeAdminResponse: (input: AdminFailed | ExplainedRecovery | Obl
|
|
|
721
717
|
readonly reason: "batch-digest" | "record-identity" | "tail";
|
|
722
718
|
readonly actualTailSequence?: number | undefined;
|
|
723
719
|
readonly actualTailDigest?: string | undefined;
|
|
724
|
-
} | {
|
|
725
|
-
readonly _tag: "FenceRejected";
|
|
726
|
-
readonly threadId: string;
|
|
727
|
-
readonly actualEpoch: number;
|
|
728
|
-
readonly attemptedEpoch: number;
|
|
729
|
-
} | {
|
|
730
|
-
readonly _tag: "OperationDenied";
|
|
731
|
-
readonly operation: "abort" | "awaitSettlement" | "explain" | "observe" | "resolveApproval" | "resolveUnknown" | "retry" | "scanObligations" | "verify" | "wake";
|
|
732
|
-
readonly reason: string;
|
|
733
|
-
readonly threadId?: string | undefined;
|
|
734
|
-
readonly submissionId?: string | undefined;
|
|
735
720
|
} | {
|
|
736
721
|
readonly _tag: "DigestError";
|
|
737
722
|
readonly message: string;
|
|
@@ -740,27 +725,42 @@ declare const encodeAdminResponse: (input: AdminFailed | ExplainedRecovery | Obl
|
|
|
740
725
|
readonly _tag: "DurableRuntimeFailpointError";
|
|
741
726
|
readonly location: "abort:after-intent" | "approval:after-request-append" | "approval:after-suspend" | "checkpoint:after-save" | "checkpoint:before-save" | "claim:after-claim" | "compaction:after-canonical-append" | "compaction:before-canonical-append" | "input:after-canonical-append" | "join:after-canonical-append" | "join:after-claim" | "policy:after-reservation-append" | "policy:before-reservation-append" | "resolve:after-intent" | "run:after-start-append" | "run:before-start-append" | "step:after-step-append" | "subagent:after-admit" | "subagent:after-child-abort-intent" | "subagent:after-child-ready" | "subagent:after-join-append" | "subagent:after-release" | "subagent:after-release-pending" | "subagent:after-request-append" | "subagent:after-reserve" | "subagent:after-sibling-settle" | "subagent:after-start-append" | "subagent:after-suspend" | "subagent:before-join-append" | "submit:after-admit" | "submit:after-materialize" | "terminalize:after-canonical-append" | "terminalize:after-reserve" | "tools:after-prepared-append" | "tools:before-prepared-append" | "turn:after-canonical-append" | "turn:after-response-append" | "turn:after-results-append" | "worker:after-completion-append" | "worker:after-origin-append" | "worker:after-report-append" | "worker:after-report-delivery" | "worker:after-source-append" | "worker:after-subtree-append" | "worker:before-completion-append" | "worker:before-origin-append" | "worker:before-report-append" | "worker:before-report-delivery" | "worker:before-source-append" | "worker:before-subtree-append";
|
|
742
727
|
} | {
|
|
743
|
-
readonly _tag: "
|
|
744
|
-
readonly
|
|
728
|
+
readonly _tag: "FenceRejected";
|
|
729
|
+
readonly threadId: string;
|
|
745
730
|
readonly actualEpoch: number;
|
|
731
|
+
readonly attemptedEpoch: number;
|
|
746
732
|
} | {
|
|
747
|
-
readonly _tag: "
|
|
748
|
-
readonly
|
|
749
|
-
readonly cause?: Schema.Json | undefined;
|
|
733
|
+
readonly _tag: "ThreadNotMaterialized";
|
|
734
|
+
readonly threadId: string;
|
|
750
735
|
} | {
|
|
751
|
-
readonly _tag: "
|
|
736
|
+
readonly _tag: "ThreadStoreError";
|
|
752
737
|
readonly operation: string;
|
|
753
738
|
readonly message: string;
|
|
754
739
|
readonly cause?: Schema.Json | undefined;
|
|
755
740
|
} | {
|
|
756
|
-
readonly _tag: "
|
|
757
|
-
readonly
|
|
741
|
+
readonly _tag: "OperationDenied";
|
|
742
|
+
readonly operation: "abort" | "awaitSettlement" | "explain" | "observe" | "resolveApproval" | "resolveUnknown" | "retry" | "scanObligations" | "verify" | "wake";
|
|
743
|
+
readonly reason: string;
|
|
744
|
+
readonly threadId?: string | undefined;
|
|
745
|
+
readonly submissionId?: string | undefined;
|
|
758
746
|
} | {
|
|
759
747
|
readonly _tag: "RetryRefused";
|
|
760
748
|
readonly submissionId: string;
|
|
761
749
|
readonly refusal: "await-approval-decision" | "await-unknown-resolution" | "settled";
|
|
762
750
|
readonly decisionTag: string;
|
|
763
751
|
readonly message: string;
|
|
752
|
+
} | {
|
|
753
|
+
readonly _tag: "RunJournalError";
|
|
754
|
+
readonly message: string;
|
|
755
|
+
readonly cause?: Schema.Json | undefined;
|
|
756
|
+
} | {
|
|
757
|
+
readonly _tag: "OwnershipLost";
|
|
758
|
+
readonly submissionId: string;
|
|
759
|
+
readonly actualEpoch: number;
|
|
760
|
+
} | {
|
|
761
|
+
readonly _tag: "SettlementConflict";
|
|
762
|
+
readonly submissionId: string;
|
|
763
|
+
readonly existingOutcome: "aborted" | "completed" | "failed";
|
|
764
764
|
};
|
|
765
765
|
}, Schema.SchemaError, never>;
|
|
766
766
|
declare const decodeAdminResponse: (input: unknown, options?: import("effect/SchemaAST").ParseOptions) => Effect.Effect<AdminFailed | ExplainedRecovery | ObligationsScanned | RetryExecuted | VerifiedIntegrity, Schema.SchemaError, never>;
|
|
@@ -813,4 +813,4 @@ interface Class<EventServices = never> {
|
|
|
813
813
|
declare const make: <ApplicationServices, ApplicationError, EventServices = never, EventLayerError = never>(applicationLayer: Layer.Layer<CloudflareDurableRuntimeServices | ApplicationServices, ApplicationError, CloudflareBootstrapServices | DurableObjectState$1.DurableObjectState | WorkerEnvironment | DurableObjectContext | ThreadObjectNamespace>, options: Options<ApplicationServices, EventServices, EventLayerError>) => Class<ApplicationServices | EventServices>;
|
|
814
814
|
//#endregion
|
|
815
815
|
export { ThreadPublicationOptions as A, portCall as C, CloudflareDurableRuntimeOptions as D, CloudflareDurableRuntimeInitializationError as E, layerConfig as M, layerHostConfig as N, CloudflareDurableRuntimeServices as O, layerInHost as P, make as S, CloudflareBootstrapServices as T, decodeAdminVerifyRequest as _, AdminVerifyRequest as a, encodeAdminResponse as b, Instance as c, RetryExecuted as d, ThreadObject_d_exports as f, decodeAdminResponse as g, decodeAdminExplainRequest as h, AdminResponse as i, layer as j, ThreadObjectPorts 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, decodeObligationThresholds as v, submit as w, handleRpc as x, decodeRetryCommand as y };
|
|
816
|
-
//# sourceMappingURL=ThreadObject-
|
|
816
|
+
//# sourceMappingURL=ThreadObject-BS1gRV0V.d.mts.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
|
|
2
|
-
import { DurableObjectContext, ThreadObjectIdentity, ThreadObjectNamespace, ThreadObjectPlacement, threadNamespaceFromEnv } from "./CloudflareBindings.mjs";
|
|
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
4
|
import { DurableAlarmError, DurableAlarmService, ThreadMaintenance, ThreadMaintenanceFailpoint, ThreadMessageDelivery, ThreadMutationGate, ThreadPublication, publishCommitted } from "./Alarm.mjs";
|
|
5
5
|
import { AbortRecorded, ApprovalRecorded, CloudflareThreadClient, HostFailed, HostProtocolError, ObservedPage, ProgressCancelled, ProgressObserved, SettlementReached, SubmissionStatusResponse, SubmitSucceeded, UnknownResolutionRecorded, boundHostDiagnostic, decodeAbortCommand, decodeApprovalDecisionCommand, decodeAwaitProgressRequest, decodeCancelProgressRequest, decodeObservePageRequest, decodeReceipt, decodeSubmitRequest, decodeUnknownResolutionCommand, encodeHostResponse } from "./CloudflareThreadClient.mjs";
|
|
@@ -175,11 +175,8 @@ var ProgressWaitRegistry = class ProgressWaitRegistry extends Context.Service()(
|
|
|
175
175
|
* turns exactly this error into `AdmissionIndeterminate` (SUB-031).
|
|
176
176
|
*/
|
|
177
177
|
const threadPortTransportLayer = Layer.effect(ThreadPortTransport)(Effect.gen(function* () {
|
|
178
|
-
const
|
|
179
|
-
return ThreadPortTransport.of({ call: (threadId, request) => Effect.
|
|
180
|
-
try: () => get(threadId).portCall(request),
|
|
181
|
-
catch: (cause) => portTransportFailure(threadId, cause)
|
|
182
|
-
}).pipe(Effect.withSpan("CloudflarePortTransport.call", { attributes: { threadId } })) });
|
|
178
|
+
const namespace = yield* ThreadObjectNamespace;
|
|
179
|
+
return ThreadPortTransport.of({ call: (threadId, request) => callThreadObject(threadId, (target) => target.portCall(request), (cause) => portTransportFailure(threadId, cause)).pipe(Effect.provideService(ThreadObjectNamespace, namespace), Effect.withSpan("CloudflarePortTransport.call", { attributes: { threadId } })) });
|
|
183
180
|
}));
|
|
184
181
|
//#endregion
|
|
185
182
|
//#region src/internal/layers.ts
|
|
@@ -833,4 +830,4 @@ const make = (applicationLayer, options) => {
|
|
|
833
830
|
//#endregion
|
|
834
831
|
export { layer as C, layerInHost as E, ThreadObjectPorts as S, layerHostConfig as T, encodeAdminResponse as _, AdminVerifyRequest as a, portCall as b, RetryExecuted as c, VerifiedIntegrity as d, decodeAdminExplainRequest as f, decodeRetryCommand as g, decodeObligationThresholds as h, AdminResponse as i, ThreadObject_exports as l, decodeAdminVerifyRequest as m, AdminFailed as n, ExplainedRecovery as o, decodeAdminResponse as p, AdminFailure as r, ObligationsScanned as s, AdminExplainRequest as t, ThreadRpcOperation as u, handleRpc as v, layerConfig as w, submit as x, make as y };
|
|
835
832
|
|
|
836
|
-
//# sourceMappingURL=ThreadObject-
|
|
833
|
+
//# sourceMappingURL=ThreadObject-mmWMMWdY.mjs.map
|