@yielded/agent-platform-cloudflare 0.1.0-beta.172 → 0.1.0-beta.174
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-BMEAZo3p.mjs → Alarm-4J9B8Fg8.mjs} +54 -32
- package/dist/Alarm-4J9B8Fg8.mjs.map +1 -0
- package/dist/Alarm.mjs +1 -1
- package/dist/BrowserRestCapture.mjs.map +1 -1
- package/dist/BrowserRestCrawl.mjs.map +1 -1
- package/dist/{BrowserSession-Bx0V1-6_.d.mts → BrowserSession-Cojp7nth.d.mts} +3 -2
- package/dist/{BrowserSession-BfNmyayH.mjs → BrowserSession-aovMjfL4.mjs} +14 -14
- package/dist/BrowserSession-aovMjfL4.mjs.map +1 -0
- package/dist/BrowserSession.d.mts +1 -1
- package/dist/BrowserSession.mjs +2 -2
- package/dist/BrowserUse.d.mts +40 -64
- package/dist/BrowserUse.mjs +223 -2
- package/dist/BrowserUse.mjs.map +1 -0
- package/dist/CloudflareBrowser-Vt8qTdYW.mjs.map +1 -1
- package/dist/CloudflareCodeMode.mjs.map +1 -1
- package/dist/CloudflareScheduling.mjs +9 -9
- package/dist/CloudflareScheduling.mjs.map +1 -1
- package/dist/CloudflareSubscriptions.mjs +15 -15
- package/dist/CloudflareSubscriptions.mjs.map +1 -1
- package/dist/{CloudflareThreadClient-DgZVrZzF.mjs → CloudflareThreadClient-DU548EEj.mjs} +42 -39
- package/dist/CloudflareThreadClient-DU548EEj.mjs.map +1 -0
- package/dist/{CloudflareThreadClient-DuRG0MLd.d.mts → CloudflareThreadClient-lTm6baDP.d.mts} +353 -353
- package/dist/CloudflareThreadClient.d.mts +1 -1
- package/dist/CloudflareThreadClient.mjs +1 -1
- package/dist/{InteractiveBrowser-LdKzQeLR.mjs → InteractiveBrowser-BHNlwjZL.mjs} +40 -31
- package/dist/InteractiveBrowser-BHNlwjZL.mjs.map +1 -0
- package/dist/InteractiveBrowser.mjs +1 -1
- package/dist/{ThreadObject-CugPnWsJ.d.mts → ThreadObject-BLYgzcdT.d.mts} +6 -6
- package/dist/{ThreadObject-CGIaz6Jv.mjs → ThreadObject-C2LF3btz.mjs} +13 -14
- package/dist/ThreadObject-C2LF3btz.mjs.map +1 -0
- package/dist/ThreadObject.d.mts +1 -1
- package/dist/ThreadObject.mjs +1 -1
- package/dist/WakeScheduler.d.mts +1 -1
- package/dist/WakeScheduler.mjs +8 -3
- package/dist/WakeScheduler.mjs.map +1 -1
- package/dist/index.d.mts +3 -3
- package/dist/index.mjs +5 -5
- package/dist/{prepared-admission-CSdzFM_v.mjs → prepared-admission-BoUPHSNQ.mjs} +2 -2
- package/dist/{prepared-admission-CSdzFM_v.mjs.map → prepared-admission-BoUPHSNQ.mjs.map} +1 -1
- package/package.json +1 -1
- package/src/Alarm.ts +82 -39
- package/src/BrowserRestCapture.ts +1 -0
- package/src/BrowserRestCrawl.ts +1 -0
- package/src/BrowserSession.ts +3 -2
- package/src/BrowserUse.ts +287 -1504
- package/src/CloudflareCodeMode.ts +6 -0
- package/src/CloudflareScheduling.ts +103 -103
- package/src/CloudflareSubscriptions.ts +192 -199
- package/src/CloudflareThreadClient.ts +256 -268
- package/src/InteractiveBrowser.ts +43 -17
- package/src/ThreadObject.ts +35 -24
- package/src/WakeScheduler.ts +12 -9
- package/src/internal/browser-binding.ts +8 -0
- package/src/internal/browser-credentials.ts +18 -13
- package/src/internal/browser-file-selection.ts +13 -2
- package/src/internal/browser-quick-action.ts +1 -0
- package/src/internal/browser-session-lifecycle.ts +32 -36
- package/src/internal/due-queue.ts +38 -19
- package/src/internal/layers.ts +53 -53
- package/dist/Alarm-BMEAZo3p.mjs.map +0 -1
- package/dist/BrowserSession-BfNmyayH.mjs.map +0 -1
- package/dist/BrowserUse-Bc2JdLW2.mjs +0 -1528
- package/dist/BrowserUse-Bc2JdLW2.mjs.map +0 -1
- package/dist/CloudflareThreadClient-DgZVrZzF.mjs.map +0 -1
- package/dist/InteractiveBrowser-LdKzQeLR.mjs.map +0 -1
- package/dist/ThreadObject-CGIaz6Jv.mjs.map +0 -1
- package/dist/page-function-CmUCcyNP.mjs +0 -11
- package/dist/page-function-CmUCcyNP.mjs.map +0 -1
- package/src/internal/browser-dom.ts +0 -886
- package/src/internal/browser-jev-dom.ts +0 -362
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CloudflareCodeMode.mjs","names":[],"sources":["../src/CloudflareCodeMode.ts"],"sourcesContent":["import {\n CodeExecutionHost,\n CodeExecutionResourceUse,\n CodeExecutionResult,\n CodeExecutionTimeoutError,\n CodeExecutor,\n CodeExecutorStartError,\n CodeExecutorTerminatedError,\n CodeExecutorUnsupportedError,\n CodeExecutionProtocolError,\n CodeHostCall,\n CodeHostCallLimitError,\n CodeHostCallResult,\n CodeOutputLimitError,\n CodeProgramFailedError,\n CodeSourceError,\n type CodeExecutorExecute,\n type CodeExecutionRequest,\n} from \"@yielded/agent/code-executor\";\nimport { SandboxImplementation } from \"@yielded/agent/sandbox\";\nimport { RpcTarget } from \"cloudflare:workers\";\nimport { Clock, Duration, Effect, Exit, Fiber, Layer, Option, Queue, Schema } from \"effect\";\n\nimport { safeCauseDiagnostic, safeCauseMessage } from \"./internal/boundary.ts\";\n\n/**\n * The Cloudflare Dynamic Worker `CodeExecutor` adapter (C4 of ADR-0017;\n * DEPLOY-011). Each pass loads one fresh Worker through the Worker Loader\n * with `globalOutbound: null`, so generated code has no ambient network,\n * bindings, or secrets; its only authority is the pass-scoped RPC target that\n * routes back into the owning event's `CodeExecutionHost` service. Platform\n * CPU limits stop synchronous runaway programs; the executor-owned wall-clock\n * deadline interrupts asynchronously suspended passes. Deployment class `E`\n * only: the adapter records no persistent state and a later pass may run in a\n * completely different isolate.\n */\nexport const dynamicWorkerImplementation = SandboxImplementation.make({\n isolation: \"isolated\",\n identity: \"cloudflare-dynamic-worker\",\n});\n\ninterface CodeModePassHost extends Rpc.RpcTargetBranded {\n readonly call: (hostCall: unknown) => Promise<unknown>;\n}\n\ninterface CodeModeHarnessEntrypoint extends Rpc.WorkerEntrypointBranded {\n readonly run: (host: CodeModePassHost) => Promise<unknown>;\n}\n\n/**\n * One object-capability endpoint for one execution pass. Workers RPC invokes\n * the target in the request context where it was created, so the native\n * Promise returned by `dispatch` and the Effect fiber that settles it share\n * one I/O owner. Passing the target as `run()`'s argument also scopes the\n * remote stub to that RPC call; no request state lives at module scope.\n */\nclass CodeModePassHostTarget extends RpcTarget implements CodeModePassHost {\n readonly #dispatch: (hostCall: unknown) => Promise<unknown>;\n\n constructor(dispatch: (hostCall: unknown) => Promise<unknown>) {\n super();\n this.#dispatch = dispatch;\n }\n\n call(hostCall: unknown): Promise<unknown> {\n return this.#dispatch(hostCall);\n }\n}\n\n/**\n * The fixed harness loaded as the dynamic worker's main module. The generated\n * source becomes `program.mjs` (`export default (<expression>);`) — a module,\n * never `eval`. The harness installs namespace globals and a bounded console,\n * imports the program, invokes it exactly once, and returns one envelope the\n * host validates through Effect Schema.\n */\nconst HARNESS_MODULE = String.raw`\nimport { WorkerEntrypoint } from \"cloudflare:workers\";\nimport programDefault from \"./program.js\";\n\nconst encoder = new TextEncoder();\nconst utf8 = (text) => encoder.encode(text).byteLength;\nconst safeText = (value) => {\n try {\n if (value instanceof Error) return (value.name + \": \" + value.message).slice(0, 4000);\n if (typeof value === \"string\") return value.slice(0, 4000);\n const encoded = JSON.stringify(value);\n return (encoded === undefined ? String(value) : encoded).slice(0, 4000);\n } catch {\n return \"[unserializable value]\";\n }\n};\nconst safeJson = (value) => {\n try {\n const encoded = JSON.stringify(value);\n if (encoded !== undefined && encoded.length <= 4000) return JSON.parse(encoded);\n } catch {}\n return safeText(value);\n};\n\nexport default class CodeModeHarness extends WorkerEntrypoint {\n async run(host) {\n const config = this.env.CODE_MODE_PASS;\n const limits = config.limits;\n const logs = [];\n let logBytes = 0;\n let fatal;\n const boundedLogs = () => logs.slice(0, 4096);\n const write = (...values) => {\n const joined = values.map(safeText).join(\" \");\n const line = joined.length > 16000 ? joined.slice(0, 15999) + \"…\" : joined;\n const bytes = utf8(line);\n if (logs.length >= 4096 || logBytes + bytes > limits.maxLogBytes) {\n fatal = fatal ?? { _tag: \"log-limit\", observed: logBytes + bytes, logs: boundedLogs() };\n throw new Error(\"code-mode log limit exceeded\");\n }\n logs.push(line);\n logBytes += bytes;\n };\n globalThis.console = { log: write, info: write, warn: write, error: write, debug: write };\n\n let hostCalls = 0;\n const makeMethod = (namespace, method) => async (argument) => {\n hostCalls += 1;\n if (hostCalls > limits.maxHostCalls) {\n fatal = fatal ?? { _tag: \"host-call-limit\", logs: boundedLogs() };\n throw new Error(\"code-mode host-call limit exceeded\");\n }\n let argText;\n try {\n argText = JSON.stringify(argument);\n } catch {}\n if (argText === undefined || utf8(argText) > limits.maxHostCallArgumentBytes) {\n fatal = fatal ?? {\n _tag: \"argument-limit\",\n observed: argText === undefined ? 0 : utf8(argText),\n logs: boundedLogs(),\n };\n throw new Error(\"code-mode host-call argument limit exceeded\");\n }\n const outcome = await host.call({\n namespace,\n method,\n argument: JSON.parse(argText),\n });\n if (outcome !== null && typeof outcome === \"object\" && outcome._tag === \"CodeHostCallSuccess\") {\n return outcome.value;\n }\n if (outcome !== null && typeof outcome === \"object\" && outcome._tag === \"CodeHostCallFailure\") {\n throw outcome.error;\n }\n fatal = fatal ?? { _tag: \"protocol\", message: \"host returned an unrecognized outcome\" };\n throw new Error(\"code-mode host protocol violation\");\n };\n for (const namespace of config.namespaces) {\n const methods = {};\n for (const method of namespace.methods) {\n methods[method] = makeMethod(namespace.name, method);\n }\n globalThis[namespace.name] = methods;\n }\n\n // program.js is imported statically at the top of this module, so a\n // syntactically invalid program fails the whole harness at load (mapped\n // to a source error by the host). Using a static import keeps this module\n // free of dynamic-import expressions, which single-script Miniflare hosts\n // reject. The isolation boundary does NOT depend on the ordering of this\n // import versus the console/namespace shims installed below: the loaded\n // Worker has globalOutbound: null and no bindings, secrets, or env from\n // the Worker Loader config BEFORE any module in the graph evaluates, so\n // module-level program code has no ambient authority regardless. The\n // shims below are usability wrappers (bounded console, namespace globals),\n // and the accepted program is a single async-function expression whose\n // body runs only when invoked here — after the shims exist.\n const program = programDefault;\n if (typeof program !== \"function\") {\n return { _tag: \"source-not-a-function\", actual: typeof program };\n }\n try {\n const value = await program();\n if (fatal !== undefined) return fatal;\n let text;\n try {\n text = JSON.stringify(value);\n } catch {}\n if (text === undefined) {\n return {\n _tag: \"program-failed\",\n reason: \"non-json-result\",\n thrown: null,\n message: \"The program must return a JSON value\",\n logs: boundedLogs(),\n };\n }\n const resultBytes = utf8(text);\n if (resultBytes > limits.maxResultBytes) {\n return { _tag: \"result-limit\", observed: resultBytes, logs: boundedLogs() };\n }\n return {\n _tag: \"completed\",\n value: JSON.parse(text),\n logs: boundedLogs(),\n hostCalls,\n logBytes,\n resultBytes,\n };\n } catch (cause) {\n if (fatal !== undefined) return fatal;\n return {\n _tag: \"program-failed\",\n reason: cause instanceof Error ? \"threw\" : \"rejected\",\n thrown: safeJson(cause),\n message: safeText(cause),\n logs: boundedLogs(),\n };\n }\n }\n}\n`;\n\nconst BoundedLogs = Schema.Array(Schema.String.check(Schema.isMaxLength(16 * 1024))).check(\n Schema.isMaxLength(4_096),\n);\n\nconst HarnessCompleted = Schema.TaggedStruct(\"completed\", {\n value: Schema.Json,\n logs: BoundedLogs,\n hostCalls: Schema.Natural,\n logBytes: Schema.Natural,\n resultBytes: Schema.Natural,\n});\n\nconst HarnessNotAFunction = Schema.TaggedStruct(\"source-not-a-function\", {\n actual: Schema.String,\n});\n\nconst HarnessProgramFailed = Schema.TaggedStruct(\"program-failed\", {\n reason: Schema.Literals([\"threw\", \"rejected\", \"non-json-result\"]),\n thrown: Schema.Json,\n message: Schema.String,\n logs: BoundedLogs,\n});\n\nconst HarnessLogLimit = Schema.TaggedStruct(\"log-limit\", {\n observed: Schema.Natural,\n logs: BoundedLogs,\n});\n\nconst HarnessArgumentLimit = Schema.TaggedStruct(\"argument-limit\", {\n observed: Schema.Natural,\n logs: BoundedLogs,\n});\n\nconst HarnessResultLimit = Schema.TaggedStruct(\"result-limit\", {\n observed: Schema.Natural,\n logs: BoundedLogs,\n});\n\nconst HarnessHostCallLimit = Schema.TaggedStruct(\"host-call-limit\", {\n logs: BoundedLogs,\n});\n\nconst HarnessProtocol = Schema.TaggedStruct(\"protocol\", {\n message: Schema.String,\n});\n\nconst HarnessOutcome = Schema.Union([\n HarnessCompleted,\n HarnessNotAFunction,\n HarnessProgramFailed,\n HarnessLogLimit,\n HarnessArgumentLimit,\n HarnessResultLimit,\n HarnessHostCallLimit,\n HarnessProtocol,\n]);\n\nconst HarnessPassConfig = Schema.Struct({\n namespaces: Schema.Array(\n Schema.Struct({\n name: Schema.NonEmptyString,\n methods: Schema.Array(Schema.NonEmptyString).check(Schema.isMaxLength(64)),\n }),\n ).check(Schema.isMaxLength(32)),\n limits: Schema.Struct({\n maxLogBytes: Schema.Natural,\n maxResultBytes: Schema.Natural,\n maxHostCalls: Schema.Natural,\n maxHostCallArgumentBytes: Schema.Natural,\n }),\n});\n\nconst encodeHarnessPassConfig = Schema.encodeSync(HarnessPassConfig);\nconst encodeJsonPayload = Schema.encodeSync(Schema.fromJsonString(Schema.Json));\nconst decodeJsonPayload = Schema.decodeUnknownOption(Schema.fromJsonString(Schema.Json));\n\nconst decodeHarnessOutcome = (value: unknown) => {\n try {\n return Schema.decodeUnknownOption(HarnessOutcome)(value);\n } catch {\n return Option.none<typeof HarnessOutcome.Type>();\n }\n};\n\nconst decodeHostCall = (value: unknown) => {\n try {\n return Schema.decodeUnknownOption(CodeHostCall)(value);\n } catch {\n return Option.none<CodeHostCall>();\n }\n};\n\nconst decodeHostCallResult = (value: unknown) => {\n try {\n return Schema.decodeUnknownOption(CodeHostCallResult)(value);\n } catch {\n return Option.none<CodeHostCallResult>();\n }\n};\n\n/** Dispose a Cloudflare RPC handle when the runtime supplies its untyped disposal hook. @internal */\nexport const disposeRpcHandle = (handle: unknown): Effect.Effect<void> =>\n Effect.try({\n try: () => {\n if ((typeof handle !== \"object\" && typeof handle !== \"function\") || handle === null) return;\n if (!(Symbol.dispose in handle)) return;\n const dispose = Reflect.get(handle, Symbol.dispose);\n\n if (typeof dispose === \"function\") {\n Reflect.apply(dispose, handle, []);\n }\n },\n catch: (cause) =>\n safeCauseDiagnostic(cause, \"The Cloudflare RPC disposal hook failed without a diagnostic\"),\n }).pipe(\n Effect.catch((diagnostic) =>\n Effect.logWarning(`Cloudflare RPC handle disposal failed: ${diagnostic}`).pipe(\n Effect.ignoreCause,\n ),\n ),\n );\n\n/**\n * Project a host outcome to the plain JSON envelope the harness reads. A\n * `CodeExecutionHost` may return either real `CodeHostCallResult` instances\n * (the substitute and conformance kit) or plain-object equivalents (the Code\n * Mode capability's broker route), so this reads the shared fields rather than\n * `Schema.encodeSync`, which would reject a plain object.\n */\ninterface EncodedHostResultPayload {\n readonly encodedPayload: string;\n readonly resultBytes: number;\n}\n\nconst encodeHostResultPayload = (\n outcome: CodeHostCallResult,\n): EncodedHostResultPayload | undefined => {\n try {\n const payload = outcome._tag === \"CodeHostCallSuccess\" ? outcome.value : outcome.error;\n const encodedPayload = encodeJsonPayload(payload);\n\n return {\n encodedPayload,\n resultBytes: utf8ByteLength(encodedPayload),\n };\n } catch {\n return undefined;\n }\n};\n\nconst utf8ByteLength = (value: string): number => {\n let total = 0;\n\n for (const character of value) {\n const codePoint = character.codePointAt(0) ?? 0;\n\n total += codePoint <= 0x7f ? 1 : codePoint <= 0x7ff ? 2 : codePoint <= 0xffff ? 3 : 4;\n }\n\n return total;\n};\n\ninterface QueuedHostCall {\n readonly call: CodeHostCall;\n readonly resolve: (value: unknown) => void;\n readonly reject: (reason: unknown) => void;\n}\n\ntype HostWork =\n | { readonly _tag: \"call\"; readonly queued: QueuedHostCall }\n | { readonly _tag: \"limit\" };\n\ntype HostDispatchError =\n | CodeExecutionTimeoutError\n | CodeOutputLimitError\n | CodeExecutionProtocolError\n | CodeHostCallLimitError;\n\n/** Reserved global names the harness owns inside the dynamic worker. */\nconst reservedHarnessGlobals = new Set([\"console\"]);\n\nexport interface DynamicWorkerCodeExecutorOptions {\n /** The `worker_loader` binding. */\n readonly loader: WorkerLoader;\n /** Compatibility date for dynamic workers; defaults to `2025-05-01`. */\n readonly compatibilityDate?: string | undefined;\n}\n\nconst makeExecute = (\n options: DynamicWorkerCodeExecutorOptions,\n clock: Clock.Clock,\n): CodeExecutorExecute =>\n Effect.fnUntraced(function* (request: CodeExecutionRequest) {\n if (request.network._tag !== \"NetworkDisabled\") {\n return yield* CodeExecutorUnsupportedError.make({\n implementation: dynamicWorkerImplementation,\n feature: \"network\",\n message:\n \"The Dynamic Worker executor denies all egress with globalOutbound: null; an allowlist is not supported in the first slice\",\n });\n }\n const sourceBytes = utf8ByteLength(request.source);\n\n if (sourceBytes > request.limits.maxSourceBytes) {\n return yield* CodeSourceError.make({\n implementation: dynamicWorkerImplementation,\n reason: \"oversized\",\n message: `Source is ${sourceBytes} bytes; the request allows ${request.limits.maxSourceBytes}`,\n });\n }\n for (const namespace of request.namespaces) {\n if (reservedHarnessGlobals.has(namespace.name)) {\n return yield* CodeExecutorUnsupportedError.make({\n implementation: dynamicWorkerImplementation,\n feature: \"namespaces\",\n message: `Namespace ${namespace.name} collides with a harness binding`,\n });\n }\n }\n const host = yield* CodeExecutionHost;\n\n // This synchronous clock access is confined to callbacks that must compute a timeout\n // immediately. The Clock service remains the authority, so tests and hosts can replace it.\n const startedAt = clock.monotonicTimeNanosUnsafe();\n const passDeadline = startedAt + Duration.toNanosUnsafe(request.limits.maxWallTime);\n\n const remainingPassWallTime = (): Duration.Duration => {\n const now = clock.monotonicTimeNanosUnsafe();\n\n return Duration.nanos(passDeadline > now ? passDeadline - now : 0n);\n };\n\n let issuedHostCalls = 0;\n let passOpen = true;\n const queuedHostCalls: Array<QueuedHostCall> = [];\n let passFailure: HostDispatchError | undefined;\n\n const failPass = (error: HostDispatchError): void => {\n if (passFailure === undefined) passFailure = error;\n };\n\n const rejectQueuedHostCalls = (reason: Error): void => {\n for (const queued of queuedHostCalls.splice(0)) {\n queued.reject(reason);\n }\n };\n\n const queue = yield* Queue.unbounded<HostWork>();\n\n const deliverHostOutcome = (\n queued: QueuedHostCall,\n outcome: CodeHostCallResult,\n ): Effect.Effect<void, CodeExecutionProtocolError | CodeOutputLimitError> =>\n Effect.gen(function* () {\n const decoded = decodeHostCallResult(outcome);\n\n if (Option.isNone(decoded)) {\n const error = CodeExecutionProtocolError.make({\n implementation: dynamicWorkerImplementation,\n message: \"The execution host returned a value outside the CodeHostCallResult schema\",\n });\n\n failPass(error);\n\n return yield* error;\n }\n const encoded = encodeHostResultPayload(decoded.value);\n\n if (encoded === undefined || encoded.resultBytes > request.limits.maxHostCallResultBytes) {\n const error = CodeOutputLimitError.make({\n implementation: dynamicWorkerImplementation,\n surface: \"host-call-result\",\n limit: request.limits.maxHostCallResultBytes,\n observed: encoded?.resultBytes ?? 0,\n logs: [],\n });\n\n failPass(error);\n\n return yield* error;\n }\n const normalizedPayload = decodeJsonPayload(encoded.encodedPayload);\n\n if (Option.isNone(normalizedPayload)) {\n const error = CodeExecutionProtocolError.make({\n implementation: dynamicWorkerImplementation,\n message: \"The execution host returned a result that could not cross the JSON boundary\",\n });\n\n failPass(error);\n\n return yield* error;\n }\n queued.resolve(\n decoded.value._tag === \"CodeHostCallSuccess\"\n ? { _tag: \"CodeHostCallSuccess\", value: normalizedPayload.value }\n : { _tag: \"CodeHostCallFailure\", error: normalizedPayload.value },\n );\n });\n\n // Workers RPC into the loader isolate cannot settle on the fiber blocked\n // in `entrypoint.run()`. A Scope-owned sibling fiber keeps that\n // independence while inheriting the pass Context and dying with the Scope.\n const serveHostCalls = Effect.gen(function* () {\n while (true) {\n const work = yield* Queue.take(queue);\n\n if (work._tag === \"limit\") {\n const error = CodeHostCallLimitError.make({\n implementation: dynamicWorkerImplementation,\n limit: request.limits.maxHostCalls,\n logs: [],\n });\n\n failPass(error);\n\n return yield* error;\n }\n const queued = work.queued;\n\n yield* host.call(queued.call).pipe(\n Effect.timeoutOrElse({\n duration: remainingPassWallTime(),\n orElse: () => {\n const error = CodeExecutionTimeoutError.make({\n implementation: dynamicWorkerImplementation,\n kind: \"wall-clock\",\n maxWallTime: request.limits.maxWallTime,\n logs: [],\n });\n\n failPass(error);\n\n return error;\n },\n }),\n Effect.flatMap((outcome) => deliverHostOutcome(queued, outcome)),\n Effect.tapError(() =>\n Effect.sync(() => queued.reject(new Error(\"Code Mode host call failed\"))),\n ),\n Effect.onInterrupt(() =>\n Effect.sync(() => queued.reject(new Error(\"Code Mode pass is closing\"))),\n ),\n );\n }\n });\n\n const concurrency = request.limits.maxHostCallConcurrency ?? 4;\n\n const server = yield* Effect.all(\n Array.from({ length: concurrency }, () => serveHostCalls),\n { concurrency, discard: true },\n ).pipe(Effect.andThen(Effect.never), Effect.forkScoped);\n\n const dispatch = (hostCall: unknown): Promise<unknown> => {\n if (!passOpen) {\n return Promise.reject(new Error(\"Code Mode pass is closing\"));\n }\n issuedHostCalls += 1;\n if (issuedHostCalls > request.limits.maxHostCalls) {\n const error = CodeHostCallLimitError.make({\n implementation: dynamicWorkerImplementation,\n limit: request.limits.maxHostCalls,\n logs: [],\n });\n\n failPass(error);\n Queue.offerUnsafe(queue, { _tag: \"limit\" });\n\n return Promise.reject(new Error(\"host-call limit exceeded\"));\n }\n const decoded = decodeHostCall(hostCall);\n\n if (Option.isNone(decoded)) {\n return Promise.reject(new TypeError(\"host calls must match the CodeHostCall schema\"));\n }\n\n return new Promise((resolve, reject) => {\n const queued = { call: decoded.value, resolve, reject };\n\n queuedHostCalls.push(queued);\n Queue.offerUnsafe(queue, { _tag: \"call\", queued });\n });\n };\n\n const closeAdmission = Effect.sync(() => {\n passOpen = false;\n rejectQueuedHostCalls(new Error(\"Code Mode pass is closing\"));\n });\n\n yield* Effect.addFinalizer(() => closeAdmission.pipe(Effect.andThen(Fiber.interrupt(server))));\n\n // No `allowExperimental`: the runtime only accepts it when the CALLING\n // worker carries the `experimental` compatibility flag, which deployed\n // consumers cannot set — the option would reject every pass in\n // production. The harness needs no experimental runtime features.\n const workerCode: WorkerLoaderWorkerCode = {\n compatibilityDate: options.compatibilityDate ?? \"2025-05-01\",\n mainModule: \"harness.js\",\n modules: {\n \"harness.js\": HARNESS_MODULE,\n \"program.js\": `export default (\\n${request.source}\\n);`,\n },\n env: {\n CODE_MODE_PASS: encodeHarnessPassConfig({\n namespaces: request.namespaces.map((namespace) => ({\n name: namespace.name,\n methods: namespace.methods,\n })),\n limits: {\n maxLogBytes: request.limits.maxLogBytes,\n maxResultBytes: request.limits.maxResultBytes,\n maxHostCalls: request.limits.maxHostCalls,\n maxHostCallArgumentBytes: request.limits.maxHostCallArgumentBytes,\n },\n }),\n },\n globalOutbound: null,\n ...(request.limits.cpuMillis === undefined\n ? {}\n : {\n limits: {\n cpuMs: request.limits.cpuMillis,\n subRequests: request.limits.maxHostCalls + 8,\n },\n }),\n };\n\n const worker = yield* Effect.acquireRelease(\n Effect.try({\n try: () => options.loader.load(workerCode),\n catch: (cause) => {\n const text = safeCauseMessage(cause, \"The Worker Loader failed without a diagnostic\");\n\n // Blame the program's source ONLY on a genuine compile diagnostic;\n // any other load rejection is an infrastructure start failure, not\n // the model's fault (see classifyWorkerFailure for the same split).\n if (/syntaxerror|failed to (compile|parse)/i.test(text)) {\n return CodeSourceError.make({\n implementation: dynamicWorkerImplementation,\n reason: \"invalid\",\n message: text.slice(0, 8_000),\n });\n }\n\n return CodeExecutorStartError.make({\n implementation: dynamicWorkerImplementation,\n message: `The Worker Loader rejected the pass: ${text}`.slice(0, 8_000),\n cause,\n });\n },\n }),\n disposeRpcHandle,\n );\n\n const entrypoint = yield* Effect.acquireRelease(\n Effect.try({\n try: () => worker.getEntrypoint<CodeModeHarnessEntrypoint>(),\n catch: (cause) => classifyWorkerFailure(cause, request.limits.maxWallTime),\n }),\n disposeRpcHandle,\n );\n\n const rpc = Effect.tryPromise({\n try: () => entrypoint.run(new CodeModePassHostTarget(dispatch)),\n catch: (cause) => classifyWorkerFailure(cause, request.limits.maxWallTime),\n });\n\n const exit = yield* Effect.raceFirst(\n rpc.pipe(\n Effect.timeoutOrElse({\n duration: remainingPassWallTime(),\n orElse: () =>\n CodeExecutionTimeoutError.make({\n implementation: dynamicWorkerImplementation,\n kind: \"wall-clock\",\n maxWallTime: request.limits.maxWallTime,\n logs: [],\n }),\n }),\n ),\n Fiber.join(server),\n ).pipe(Effect.exit);\n\n yield* closeAdmission;\n yield* Fiber.interrupt(server);\n if (passFailure !== undefined) {\n return yield* passFailure;\n }\n if (Exit.isFailure(exit)) {\n return yield* Effect.failCause(exit.cause);\n }\n const raw = exit.value;\n const finishedAt = clock.monotonicTimeNanosUnsafe();\n\n const outcome = decodeHarnessOutcome(raw);\n\n if (Option.isNone(outcome)) {\n return yield* CodeExecutionProtocolError.make({\n implementation: dynamicWorkerImplementation,\n message: \"The dynamic worker returned a value outside the harness envelope schema\",\n });\n }\n switch (outcome.value._tag) {\n case \"completed\": {\n return CodeExecutionResult.make({\n implementation: dynamicWorkerImplementation,\n value: outcome.value.value,\n logs: outcome.value.logs,\n resourceUse: CodeExecutionResourceUse.make({\n wallTime: Duration.nanos(finishedAt > startedAt ? finishedAt - startedAt : 0n),\n hostCalls: outcome.value.hostCalls,\n logBytes: outcome.value.logBytes,\n resultBytes: outcome.value.resultBytes,\n }),\n });\n }\n case \"source-not-a-function\": {\n return yield* CodeSourceError.make({\n implementation: dynamicWorkerImplementation,\n reason: \"not-a-function\",\n message: `The source expression evaluated to ${outcome.value.actual}; it must evaluate to one async function`,\n });\n }\n case \"program-failed\": {\n return yield* CodeProgramFailedError.make({\n implementation: dynamicWorkerImplementation,\n reason: outcome.value.reason,\n thrown: outcome.value.thrown,\n message: outcome.value.message.slice(0, 8_000),\n logs: outcome.value.logs,\n });\n }\n case \"log-limit\": {\n return yield* CodeOutputLimitError.make({\n implementation: dynamicWorkerImplementation,\n surface: \"logs\",\n limit: request.limits.maxLogBytes,\n observed: outcome.value.observed,\n logs: outcome.value.logs,\n });\n }\n case \"argument-limit\": {\n return yield* CodeOutputLimitError.make({\n implementation: dynamicWorkerImplementation,\n surface: \"host-call-argument\",\n limit: request.limits.maxHostCallArgumentBytes,\n observed: outcome.value.observed,\n logs: outcome.value.logs,\n });\n }\n case \"result-limit\": {\n return yield* CodeOutputLimitError.make({\n implementation: dynamicWorkerImplementation,\n surface: \"result\",\n limit: request.limits.maxResultBytes,\n observed: outcome.value.observed,\n logs: outcome.value.logs,\n });\n }\n case \"host-call-limit\": {\n return yield* CodeHostCallLimitError.make({\n implementation: dynamicWorkerImplementation,\n limit: request.limits.maxHostCalls,\n logs: outcome.value.logs,\n });\n }\n case \"protocol\": {\n return yield* CodeExecutionProtocolError.make({\n implementation: dynamicWorkerImplementation,\n message: outcome.value.message.slice(0, 8_000),\n });\n }\n }\n });\n\n/**\n * Expected worker-level failures map into the typed union with bounded\n * diagnostics; anything unrecognized stays a start/termination error rather\n * than a fabricated program result.\n */\nconst classifyWorkerFailure = (\n cause: unknown,\n maxWallTime: Duration.Duration,\n):\n | CodeExecutionTimeoutError\n | CodeExecutorTerminatedError\n | CodeExecutorStartError\n | CodeSourceError => {\n const text = safeCauseDiagnostic(cause, \"[unserializable worker failure]\");\n\n // `WorkerLoader.load()` is lazy, so a module-compile error in the generated\n // program surfaces here at first use. Blame the program's source ONLY on a\n // genuine compile diagnostic (a `SyntaxError` or an explicit compile\n // failure) — the fixed harness is valid, so the fault is in program.js. A\n // bare \"failed to start Worker\" without a compile diagnostic is an\n // infrastructure start failure, not the model's fault, so it must NOT be\n // misclassified as a source error.\n if (/syntaxerror|failed to (compile|parse)/i.test(text)) {\n return CodeSourceError.make({\n implementation: dynamicWorkerImplementation,\n reason: \"invalid\",\n message: text.slice(0, 8_000),\n });\n }\n if (/cpu/i.test(text)) {\n return CodeExecutionTimeoutError.make({\n implementation: dynamicWorkerImplementation,\n kind: \"cpu\",\n maxWallTime,\n logs: [],\n });\n }\n if (/failed to start worker/i.test(text)) {\n return CodeExecutorStartError.make({\n implementation: dynamicWorkerImplementation,\n message: text.slice(0, 8_000),\n cause,\n });\n }\n\n return CodeExecutorTerminatedError.make({\n implementation: dynamicWorkerImplementation,\n message: text.slice(0, 8_000),\n });\n};\n\n/** Layer building the Dynamic Worker `CodeExecutor` from resolved bindings. */\nexport const dynamicWorkerCodeExecutorLayer = (\n options: DynamicWorkerCodeExecutorOptions,\n): Layer.Layer<CodeExecutor> =>\n Layer.effect(\n CodeExecutor,\n Effect.gen(function* () {\n const clock = yield* Clock.Clock;\n\n return CodeExecutor.of({ execute: makeExecute(options, clock) });\n }),\n );\n\n/** Assemble Code Mode handlers with the isolated Dynamic Worker executor. */\nexport const CloudflareCodeMode = {\n /**\n * Provide the selected tool handlers at construction, where Code Mode captures them.\n * Their errors and remaining dependencies stay visible. The definition still owns the\n * allowlist and limits; the runtime supplies the live Tool broker for each scoped pass.\n */\n layer: <A, E, R, Handlers, HandlerError, HandlerRequirements>(\n definition: { readonly handlers: Layer.Layer<A, E, R> },\n options: DynamicWorkerCodeExecutorOptions & {\n readonly handlers: Layer.Layer<Handlers, HandlerError, HandlerRequirements>;\n },\n ) =>\n definition.handlers.pipe(\n Layer.provide(options.handlers),\n Layer.provide(dynamicWorkerCodeExecutorLayer(options)),\n ),\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CloudflareCodeMode.mjs","names":[],"sources":["../src/CloudflareCodeMode.ts"],"sourcesContent":["import {\n CodeExecutionHost,\n CodeExecutionResourceUse,\n CodeExecutionResult,\n CodeExecutionTimeoutError,\n CodeExecutor,\n CodeExecutorStartError,\n CodeExecutorTerminatedError,\n CodeExecutorUnsupportedError,\n CodeExecutionProtocolError,\n CodeHostCall,\n CodeHostCallLimitError,\n CodeHostCallResult,\n CodeOutputLimitError,\n CodeProgramFailedError,\n CodeSourceError,\n type CodeExecutorExecute,\n type CodeExecutionRequest,\n} from \"@yielded/agent/code-executor\";\nimport { SandboxImplementation } from \"@yielded/agent/sandbox\";\nimport { RpcTarget } from \"cloudflare:workers\";\nimport { Clock, Duration, Effect, Exit, Fiber, Layer, Option, Queue, Schema } from \"effect\";\n\nimport { safeCauseDiagnostic, safeCauseMessage } from \"./internal/boundary.ts\";\n\n/**\n * The Cloudflare Dynamic Worker `CodeExecutor` adapter (C4 of ADR-0017;\n * DEPLOY-011). Each pass loads one fresh Worker through the Worker Loader\n * with `globalOutbound: null`, so generated code has no ambient network,\n * bindings, or secrets; its only authority is the pass-scoped RPC target that\n * routes back into the owning event's `CodeExecutionHost` service. Platform\n * CPU limits stop synchronous runaway programs; the executor-owned wall-clock\n * deadline interrupts asynchronously suspended passes. Deployment class `E`\n * only: the adapter records no persistent state and a later pass may run in a\n * completely different isolate.\n */\nexport const dynamicWorkerImplementation = SandboxImplementation.make({\n isolation: \"isolated\",\n identity: \"cloudflare-dynamic-worker\",\n});\n\ninterface CodeModePassHost extends Rpc.RpcTargetBranded {\n readonly call: (hostCall: unknown) => Promise<unknown>;\n}\n\ninterface CodeModeHarnessEntrypoint extends Rpc.WorkerEntrypointBranded {\n readonly run: (host: CodeModePassHost) => Promise<unknown>;\n}\n\n/**\n * One object-capability endpoint for one execution pass. Workers RPC invokes\n * the target in the request context where it was created, so the native\n * Promise returned by `dispatch` and the Effect fiber that settles it share\n * one I/O owner. Passing the target as `run()`'s argument also scopes the\n * remote stub to that RPC call; no request state lives at module scope.\n */\nclass CodeModePassHostTarget extends RpcTarget implements CodeModePassHost {\n readonly #dispatch: (hostCall: unknown) => Promise<unknown>;\n\n constructor(dispatch: (hostCall: unknown) => Promise<unknown>) {\n super();\n this.#dispatch = dispatch;\n }\n\n call(hostCall: unknown): Promise<unknown> {\n return this.#dispatch(hostCall);\n }\n}\n\n/**\n * The fixed harness loaded as the dynamic worker's main module. The generated\n * source becomes `program.mjs` (`export default (<expression>);`) — a module,\n * never `eval`. The harness installs namespace globals and a bounded console,\n * imports the program, invokes it exactly once, and returns one envelope the\n * host validates through Effect Schema.\n */\nconst HARNESS_MODULE = String.raw`\nimport { WorkerEntrypoint } from \"cloudflare:workers\";\nimport programDefault from \"./program.js\";\n\nconst encoder = new TextEncoder();\nconst utf8 = (text) => encoder.encode(text).byteLength;\nconst safeText = (value) => {\n try {\n if (value instanceof Error) return (value.name + \": \" + value.message).slice(0, 4000);\n if (typeof value === \"string\") return value.slice(0, 4000);\n const encoded = JSON.stringify(value);\n return (encoded === undefined ? String(value) : encoded).slice(0, 4000);\n } catch {\n return \"[unserializable value]\";\n }\n};\nconst safeJson = (value) => {\n try {\n const encoded = JSON.stringify(value);\n if (encoded !== undefined && encoded.length <= 4000) return JSON.parse(encoded);\n } catch {}\n return safeText(value);\n};\n\nexport default class CodeModeHarness extends WorkerEntrypoint {\n async run(host) {\n const config = this.env.CODE_MODE_PASS;\n const limits = config.limits;\n const logs = [];\n let logBytes = 0;\n let fatal;\n const boundedLogs = () => logs.slice(0, 4096);\n const write = (...values) => {\n const joined = values.map(safeText).join(\" \");\n const line = joined.length > 16000 ? joined.slice(0, 15999) + \"…\" : joined;\n const bytes = utf8(line);\n if (logs.length >= 4096 || logBytes + bytes > limits.maxLogBytes) {\n fatal = fatal ?? { _tag: \"log-limit\", observed: logBytes + bytes, logs: boundedLogs() };\n throw new Error(\"code-mode log limit exceeded\");\n }\n logs.push(line);\n logBytes += bytes;\n };\n globalThis.console = { log: write, info: write, warn: write, error: write, debug: write };\n\n let hostCalls = 0;\n const makeMethod = (namespace, method) => async (argument) => {\n hostCalls += 1;\n if (hostCalls > limits.maxHostCalls) {\n fatal = fatal ?? { _tag: \"host-call-limit\", logs: boundedLogs() };\n throw new Error(\"code-mode host-call limit exceeded\");\n }\n let argText;\n try {\n argText = JSON.stringify(argument);\n } catch {}\n if (argText === undefined || utf8(argText) > limits.maxHostCallArgumentBytes) {\n fatal = fatal ?? {\n _tag: \"argument-limit\",\n observed: argText === undefined ? 0 : utf8(argText),\n logs: boundedLogs(),\n };\n throw new Error(\"code-mode host-call argument limit exceeded\");\n }\n const outcome = await host.call({\n namespace,\n method,\n argument: JSON.parse(argText),\n });\n if (outcome !== null && typeof outcome === \"object\" && outcome._tag === \"CodeHostCallSuccess\") {\n return outcome.value;\n }\n if (outcome !== null && typeof outcome === \"object\" && outcome._tag === \"CodeHostCallFailure\") {\n throw outcome.error;\n }\n fatal = fatal ?? { _tag: \"protocol\", message: \"host returned an unrecognized outcome\" };\n throw new Error(\"code-mode host protocol violation\");\n };\n for (const namespace of config.namespaces) {\n const methods = {};\n for (const method of namespace.methods) {\n methods[method] = makeMethod(namespace.name, method);\n }\n globalThis[namespace.name] = methods;\n }\n\n // program.js is imported statically at the top of this module, so a\n // syntactically invalid program fails the whole harness at load (mapped\n // to a source error by the host). Using a static import keeps this module\n // free of dynamic-import expressions, which single-script Miniflare hosts\n // reject. The isolation boundary does NOT depend on the ordering of this\n // import versus the console/namespace shims installed below: the loaded\n // Worker has globalOutbound: null and no bindings, secrets, or env from\n // the Worker Loader config BEFORE any module in the graph evaluates, so\n // module-level program code has no ambient authority regardless. The\n // shims below are usability wrappers (bounded console, namespace globals),\n // and the accepted program is a single async-function expression whose\n // body runs only when invoked here — after the shims exist.\n const program = programDefault;\n if (typeof program !== \"function\") {\n return { _tag: \"source-not-a-function\", actual: typeof program };\n }\n try {\n const value = await program();\n if (fatal !== undefined) return fatal;\n let text;\n try {\n text = JSON.stringify(value);\n } catch {}\n if (text === undefined) {\n return {\n _tag: \"program-failed\",\n reason: \"non-json-result\",\n thrown: null,\n message: \"The program must return a JSON value\",\n logs: boundedLogs(),\n };\n }\n const resultBytes = utf8(text);\n if (resultBytes > limits.maxResultBytes) {\n return { _tag: \"result-limit\", observed: resultBytes, logs: boundedLogs() };\n }\n return {\n _tag: \"completed\",\n value: JSON.parse(text),\n logs: boundedLogs(),\n hostCalls,\n logBytes,\n resultBytes,\n };\n } catch (cause) {\n if (fatal !== undefined) return fatal;\n return {\n _tag: \"program-failed\",\n reason: cause instanceof Error ? \"threw\" : \"rejected\",\n thrown: safeJson(cause),\n message: safeText(cause),\n logs: boundedLogs(),\n };\n }\n }\n}\n`;\n\nconst BoundedLogs = Schema.Array(Schema.String.check(Schema.isMaxLength(16 * 1024))).check(\n Schema.isMaxLength(4_096),\n);\n\nconst HarnessCompleted = Schema.TaggedStruct(\"completed\", {\n value: Schema.Json,\n logs: BoundedLogs,\n hostCalls: Schema.Natural,\n logBytes: Schema.Natural,\n resultBytes: Schema.Natural,\n});\n\nconst HarnessNotAFunction = Schema.TaggedStruct(\"source-not-a-function\", {\n actual: Schema.String,\n});\n\nconst HarnessProgramFailed = Schema.TaggedStruct(\"program-failed\", {\n reason: Schema.Literals([\"threw\", \"rejected\", \"non-json-result\"]),\n thrown: Schema.Json,\n message: Schema.String,\n logs: BoundedLogs,\n});\n\nconst HarnessLogLimit = Schema.TaggedStruct(\"log-limit\", {\n observed: Schema.Natural,\n logs: BoundedLogs,\n});\n\nconst HarnessArgumentLimit = Schema.TaggedStruct(\"argument-limit\", {\n observed: Schema.Natural,\n logs: BoundedLogs,\n});\n\nconst HarnessResultLimit = Schema.TaggedStruct(\"result-limit\", {\n observed: Schema.Natural,\n logs: BoundedLogs,\n});\n\nconst HarnessHostCallLimit = Schema.TaggedStruct(\"host-call-limit\", {\n logs: BoundedLogs,\n});\n\nconst HarnessProtocol = Schema.TaggedStruct(\"protocol\", {\n message: Schema.String,\n});\n\nconst HarnessOutcome = Schema.Union([\n HarnessCompleted,\n HarnessNotAFunction,\n HarnessProgramFailed,\n HarnessLogLimit,\n HarnessArgumentLimit,\n HarnessResultLimit,\n HarnessHostCallLimit,\n HarnessProtocol,\n]);\n\nconst HarnessPassConfig = Schema.Struct({\n namespaces: Schema.Array(\n Schema.Struct({\n name: Schema.NonEmptyString,\n methods: Schema.Array(Schema.NonEmptyString).check(Schema.isMaxLength(64)),\n }),\n ).check(Schema.isMaxLength(32)),\n limits: Schema.Struct({\n maxLogBytes: Schema.Natural,\n maxResultBytes: Schema.Natural,\n maxHostCalls: Schema.Natural,\n maxHostCallArgumentBytes: Schema.Natural,\n }),\n});\n\nconst encodeHarnessPassConfig = Schema.encodeSync(HarnessPassConfig);\nconst encodeJsonPayload = Schema.encodeSync(Schema.fromJsonString(Schema.Json));\nconst decodeJsonPayload = Schema.decodeUnknownOption(Schema.fromJsonString(Schema.Json));\n\nconst decodeHarnessOutcome = (value: unknown) => {\n try {\n return Schema.decodeUnknownOption(HarnessOutcome)(value);\n } catch {\n return Option.none<typeof HarnessOutcome.Type>();\n }\n};\n\nconst decodeHostCall = (value: unknown) => {\n try {\n return Schema.decodeUnknownOption(CodeHostCall)(value);\n } catch {\n return Option.none<CodeHostCall>();\n }\n};\n\nconst decodeHostCallResult = (value: unknown) => {\n try {\n return Schema.decodeUnknownOption(CodeHostCallResult)(value);\n } catch {\n return Option.none<CodeHostCallResult>();\n }\n};\n\n/** Dispose a Cloudflare RPC handle when the runtime supplies its untyped disposal hook. @internal */\nexport const disposeRpcHandle = (handle: unknown): Effect.Effect<void> =>\n Effect.try({\n try: () => {\n if ((typeof handle !== \"object\" && typeof handle !== \"function\") || handle === null) return;\n if (!(Symbol.dispose in handle)) return;\n const dispose = Reflect.get(handle, Symbol.dispose);\n\n if (typeof dispose === \"function\") {\n Reflect.apply(dispose, handle, []);\n }\n },\n catch: (cause) =>\n safeCauseDiagnostic(cause, \"The Cloudflare RPC disposal hook failed without a diagnostic\"),\n }).pipe(\n Effect.catch((diagnostic) =>\n Effect.logWarning(`Cloudflare RPC handle disposal failed: ${diagnostic}`).pipe(\n Effect.ignoreCause,\n ),\n ),\n );\n\n/**\n * Project a host outcome to the plain JSON envelope the harness reads. A\n * `CodeExecutionHost` may return either real `CodeHostCallResult` instances\n * (the substitute and conformance kit) or plain-object equivalents (the Code\n * Mode capability's broker route), so this reads the shared fields rather than\n * `Schema.encodeSync`, which would reject a plain object.\n */\ninterface EncodedHostResultPayload {\n readonly encodedPayload: string;\n readonly resultBytes: number;\n}\n\nconst encodeHostResultPayload = (\n outcome: CodeHostCallResult,\n): EncodedHostResultPayload | undefined => {\n try {\n const payload = outcome._tag === \"CodeHostCallSuccess\" ? outcome.value : outcome.error;\n const encodedPayload = encodeJsonPayload(payload);\n\n return {\n encodedPayload,\n resultBytes: utf8ByteLength(encodedPayload),\n };\n } catch {\n return undefined;\n }\n};\n\nconst utf8ByteLength = (value: string): number => {\n let total = 0;\n\n for (const character of value) {\n const codePoint = character.codePointAt(0) ?? 0;\n\n total += codePoint <= 0x7f ? 1 : codePoint <= 0x7ff ? 2 : codePoint <= 0xffff ? 3 : 4;\n }\n\n return total;\n};\n\ninterface QueuedHostCall {\n readonly call: CodeHostCall;\n readonly resolve: (value: unknown) => void;\n readonly reject: (reason: unknown) => void;\n}\n\ntype HostWork =\n | { readonly _tag: \"call\"; readonly queued: QueuedHostCall }\n | { readonly _tag: \"limit\" };\n\ntype HostDispatchError =\n | CodeExecutionTimeoutError\n | CodeOutputLimitError\n | CodeExecutionProtocolError\n | CodeHostCallLimitError;\n\n/** Reserved global names the harness owns inside the dynamic worker. */\nconst reservedHarnessGlobals = new Set([\"console\"]);\n\nexport interface DynamicWorkerCodeExecutorOptions {\n /** The `worker_loader` binding. */\n readonly loader: WorkerLoader;\n /** Compatibility date for dynamic workers; defaults to `2025-05-01`. */\n readonly compatibilityDate?: string | undefined;\n}\n\nconst makeExecute = (\n options: DynamicWorkerCodeExecutorOptions,\n clock: Clock.Clock,\n): CodeExecutorExecute =>\n Effect.fnUntraced(function* (request: CodeExecutionRequest) {\n if (request.network._tag !== \"NetworkDisabled\") {\n return yield* CodeExecutorUnsupportedError.make({\n implementation: dynamicWorkerImplementation,\n feature: \"network\",\n message:\n \"The Dynamic Worker executor denies all egress with globalOutbound: null; an allowlist is not supported in the first slice\",\n });\n }\n const sourceBytes = utf8ByteLength(request.source);\n\n if (sourceBytes > request.limits.maxSourceBytes) {\n return yield* CodeSourceError.make({\n implementation: dynamicWorkerImplementation,\n reason: \"oversized\",\n message: `Source is ${sourceBytes} bytes; the request allows ${request.limits.maxSourceBytes}`,\n });\n }\n for (const namespace of request.namespaces) {\n if (reservedHarnessGlobals.has(namespace.name)) {\n return yield* CodeExecutorUnsupportedError.make({\n implementation: dynamicWorkerImplementation,\n feature: \"namespaces\",\n message: `Namespace ${namespace.name} collides with a harness binding`,\n });\n }\n }\n const host = yield* CodeExecutionHost;\n\n // This synchronous clock access is confined to callbacks that must compute a timeout\n // immediately. The Clock service remains the authority, so tests and hosts can replace it.\n const startedAt = clock.monotonicTimeNanosUnsafe();\n const passDeadline = startedAt + Duration.toNanosUnsafe(request.limits.maxWallTime);\n\n const remainingPassWallTime = (): Duration.Duration => {\n const now = clock.monotonicTimeNanosUnsafe();\n\n return Duration.nanos(passDeadline > now ? passDeadline - now : 0n);\n };\n\n let issuedHostCalls = 0;\n let passOpen = true;\n const queuedHostCalls: Array<QueuedHostCall> = [];\n let passFailure: HostDispatchError | undefined;\n\n const failPass = (error: HostDispatchError): void => {\n if (passFailure === undefined) passFailure = error;\n };\n\n const rejectQueuedHostCalls = (reason: Error): void => {\n for (const queued of queuedHostCalls.splice(0)) {\n queued.reject(reason);\n }\n };\n\n const queue = yield* Queue.unbounded<HostWork>();\n\n const deliverHostOutcome = (\n queued: QueuedHostCall,\n outcome: CodeHostCallResult,\n ): Effect.Effect<void, CodeExecutionProtocolError | CodeOutputLimitError> =>\n Effect.gen(function* () {\n const decoded = decodeHostCallResult(outcome);\n\n if (Option.isNone(decoded)) {\n const error = CodeExecutionProtocolError.make({\n implementation: dynamicWorkerImplementation,\n message: \"The execution host returned a value outside the CodeHostCallResult schema\",\n });\n\n failPass(error);\n\n return yield* error;\n }\n const encoded = encodeHostResultPayload(decoded.value);\n\n if (encoded === undefined || encoded.resultBytes > request.limits.maxHostCallResultBytes) {\n const error = CodeOutputLimitError.make({\n implementation: dynamicWorkerImplementation,\n surface: \"host-call-result\",\n limit: request.limits.maxHostCallResultBytes,\n observed: encoded?.resultBytes ?? 0,\n logs: [],\n });\n\n failPass(error);\n\n return yield* error;\n }\n const normalizedPayload = decodeJsonPayload(encoded.encodedPayload);\n\n if (Option.isNone(normalizedPayload)) {\n const error = CodeExecutionProtocolError.make({\n implementation: dynamicWorkerImplementation,\n message: \"The execution host returned a result that could not cross the JSON boundary\",\n });\n\n failPass(error);\n\n return yield* error;\n }\n queued.resolve(\n decoded.value._tag === \"CodeHostCallSuccess\"\n ? { _tag: \"CodeHostCallSuccess\", value: normalizedPayload.value }\n : { _tag: \"CodeHostCallFailure\", error: normalizedPayload.value },\n );\n });\n\n // Workers RPC into the loader isolate cannot settle on the fiber blocked\n // in `entrypoint.run()`. A Scope-owned sibling fiber keeps that\n // independence while inheriting the pass Context and dying with the Scope.\n const serveHostCalls = Effect.gen(function* () {\n while (true) {\n const work = yield* Queue.take(queue);\n\n if (work._tag === \"limit\") {\n const error = CodeHostCallLimitError.make({\n implementation: dynamicWorkerImplementation,\n limit: request.limits.maxHostCalls,\n logs: [],\n });\n\n failPass(error);\n\n return yield* error;\n }\n const queued = work.queued;\n\n yield* host.call(queued.call).pipe(\n Effect.timeoutOrElse({\n duration: remainingPassWallTime(),\n orElse: () => {\n const error = CodeExecutionTimeoutError.make({\n implementation: dynamicWorkerImplementation,\n kind: \"wall-clock\",\n maxWallTime: request.limits.maxWallTime,\n logs: [],\n });\n\n failPass(error);\n\n return error;\n },\n }),\n Effect.flatMap((outcome) => deliverHostOutcome(queued, outcome)),\n Effect.tapError(() =>\n // oxlint-disable-next-line effect/no-native-error -- Native Worker RPC rejection settles the sandbox program Promise; typed host failure is tracked separately.\n Effect.sync(() => queued.reject(new Error(\"Code Mode host call failed\"))),\n ),\n Effect.onInterrupt(() =>\n // oxlint-disable-next-line effect/no-native-error -- Native Worker RPC rejection settles the sandbox program Promise; typed host failure is tracked separately.\n Effect.sync(() => queued.reject(new Error(\"Code Mode pass is closing\"))),\n ),\n );\n }\n });\n\n const concurrency = request.limits.maxHostCallConcurrency ?? 4;\n\n const server = yield* Effect.all(\n Array.from({ length: concurrency }, () => serveHostCalls),\n { concurrency, discard: true },\n ).pipe(Effect.andThen(Effect.never), Effect.forkScoped);\n\n const dispatch = (hostCall: unknown): Promise<unknown> => {\n if (!passOpen) {\n // oxlint-disable-next-line effect/no-native-error -- Native Worker RPC rejection settles the sandbox program Promise; typed host failure is tracked separately.\n return Promise.reject(new Error(\"Code Mode pass is closing\"));\n }\n issuedHostCalls += 1;\n if (issuedHostCalls > request.limits.maxHostCalls) {\n const error = CodeHostCallLimitError.make({\n implementation: dynamicWorkerImplementation,\n limit: request.limits.maxHostCalls,\n logs: [],\n });\n\n failPass(error);\n Queue.offerUnsafe(queue, { _tag: \"limit\" });\n\n // oxlint-disable-next-line effect/no-native-error -- Native Worker RPC rejection settles the sandbox program Promise; typed host failure is tracked separately.\n return Promise.reject(new Error(\"host-call limit exceeded\"));\n }\n const decoded = decodeHostCall(hostCall);\n\n if (Option.isNone(decoded)) {\n // oxlint-disable-next-line effect/no-native-error -- Native sandbox RPC rejects invalid input through its Promise; the Effect host classifies the result.\n return Promise.reject(new TypeError(\"host calls must match the CodeHostCall schema\"));\n }\n\n return new Promise((resolve, reject) => {\n const queued = { call: decoded.value, resolve, reject };\n\n queuedHostCalls.push(queued);\n Queue.offerUnsafe(queue, { _tag: \"call\", queued });\n });\n };\n\n const closeAdmission = Effect.sync(() => {\n passOpen = false;\n // oxlint-disable-next-line effect/no-native-error -- Native Worker RPC rejection settles the sandbox program Promise; typed host failure is tracked separately.\n rejectQueuedHostCalls(new Error(\"Code Mode pass is closing\"));\n });\n\n yield* Effect.addFinalizer(() => closeAdmission.pipe(Effect.andThen(Fiber.interrupt(server))));\n\n // No `allowExperimental`: the runtime only accepts it when the CALLING\n // worker carries the `experimental` compatibility flag, which deployed\n // consumers cannot set — the option would reject every pass in\n // production. The harness needs no experimental runtime features.\n const workerCode: WorkerLoaderWorkerCode = {\n compatibilityDate: options.compatibilityDate ?? \"2025-05-01\",\n mainModule: \"harness.js\",\n modules: {\n \"harness.js\": HARNESS_MODULE,\n \"program.js\": `export default (\\n${request.source}\\n);`,\n },\n env: {\n CODE_MODE_PASS: encodeHarnessPassConfig({\n namespaces: request.namespaces.map((namespace) => ({\n name: namespace.name,\n methods: namespace.methods,\n })),\n limits: {\n maxLogBytes: request.limits.maxLogBytes,\n maxResultBytes: request.limits.maxResultBytes,\n maxHostCalls: request.limits.maxHostCalls,\n maxHostCallArgumentBytes: request.limits.maxHostCallArgumentBytes,\n },\n }),\n },\n globalOutbound: null,\n ...(request.limits.cpuMillis === undefined\n ? {}\n : {\n limits: {\n cpuMs: request.limits.cpuMillis,\n subRequests: request.limits.maxHostCalls + 8,\n },\n }),\n };\n\n const worker = yield* Effect.acquireRelease(\n Effect.try({\n try: () => options.loader.load(workerCode),\n catch: (cause) => {\n const text = safeCauseMessage(cause, \"The Worker Loader failed without a diagnostic\");\n\n // Blame the program's source ONLY on a genuine compile diagnostic;\n // any other load rejection is an infrastructure start failure, not\n // the model's fault (see classifyWorkerFailure for the same split).\n if (/syntaxerror|failed to (compile|parse)/i.test(text)) {\n return CodeSourceError.make({\n implementation: dynamicWorkerImplementation,\n reason: \"invalid\",\n message: text.slice(0, 8_000),\n });\n }\n\n return CodeExecutorStartError.make({\n implementation: dynamicWorkerImplementation,\n message: `The Worker Loader rejected the pass: ${text}`.slice(0, 8_000),\n cause,\n });\n },\n }),\n disposeRpcHandle,\n );\n\n const entrypoint = yield* Effect.acquireRelease(\n Effect.try({\n try: () => worker.getEntrypoint<CodeModeHarnessEntrypoint>(),\n catch: (cause) => classifyWorkerFailure(cause, request.limits.maxWallTime),\n }),\n disposeRpcHandle,\n );\n\n const rpc = Effect.tryPromise({\n try: () => entrypoint.run(new CodeModePassHostTarget(dispatch)),\n catch: (cause) => classifyWorkerFailure(cause, request.limits.maxWallTime),\n });\n\n const exit = yield* Effect.raceFirst(\n rpc.pipe(\n Effect.timeoutOrElse({\n duration: remainingPassWallTime(),\n orElse: () =>\n CodeExecutionTimeoutError.make({\n implementation: dynamicWorkerImplementation,\n kind: \"wall-clock\",\n maxWallTime: request.limits.maxWallTime,\n logs: [],\n }),\n }),\n ),\n Fiber.join(server),\n ).pipe(Effect.exit);\n\n yield* closeAdmission;\n yield* Fiber.interrupt(server);\n if (passFailure !== undefined) {\n return yield* passFailure;\n }\n if (Exit.isFailure(exit)) {\n return yield* Effect.failCause(exit.cause);\n }\n const raw = exit.value;\n const finishedAt = clock.monotonicTimeNanosUnsafe();\n\n const outcome = decodeHarnessOutcome(raw);\n\n if (Option.isNone(outcome)) {\n return yield* CodeExecutionProtocolError.make({\n implementation: dynamicWorkerImplementation,\n message: \"The dynamic worker returned a value outside the harness envelope schema\",\n });\n }\n switch (outcome.value._tag) {\n case \"completed\": {\n return CodeExecutionResult.make({\n implementation: dynamicWorkerImplementation,\n value: outcome.value.value,\n logs: outcome.value.logs,\n resourceUse: CodeExecutionResourceUse.make({\n wallTime: Duration.nanos(finishedAt > startedAt ? finishedAt - startedAt : 0n),\n hostCalls: outcome.value.hostCalls,\n logBytes: outcome.value.logBytes,\n resultBytes: outcome.value.resultBytes,\n }),\n });\n }\n case \"source-not-a-function\": {\n return yield* CodeSourceError.make({\n implementation: dynamicWorkerImplementation,\n reason: \"not-a-function\",\n message: `The source expression evaluated to ${outcome.value.actual}; it must evaluate to one async function`,\n });\n }\n case \"program-failed\": {\n return yield* CodeProgramFailedError.make({\n implementation: dynamicWorkerImplementation,\n reason: outcome.value.reason,\n thrown: outcome.value.thrown,\n message: outcome.value.message.slice(0, 8_000),\n logs: outcome.value.logs,\n });\n }\n case \"log-limit\": {\n return yield* CodeOutputLimitError.make({\n implementation: dynamicWorkerImplementation,\n surface: \"logs\",\n limit: request.limits.maxLogBytes,\n observed: outcome.value.observed,\n logs: outcome.value.logs,\n });\n }\n case \"argument-limit\": {\n return yield* CodeOutputLimitError.make({\n implementation: dynamicWorkerImplementation,\n surface: \"host-call-argument\",\n limit: request.limits.maxHostCallArgumentBytes,\n observed: outcome.value.observed,\n logs: outcome.value.logs,\n });\n }\n case \"result-limit\": {\n return yield* CodeOutputLimitError.make({\n implementation: dynamicWorkerImplementation,\n surface: \"result\",\n limit: request.limits.maxResultBytes,\n observed: outcome.value.observed,\n logs: outcome.value.logs,\n });\n }\n case \"host-call-limit\": {\n return yield* CodeHostCallLimitError.make({\n implementation: dynamicWorkerImplementation,\n limit: request.limits.maxHostCalls,\n logs: outcome.value.logs,\n });\n }\n case \"protocol\": {\n return yield* CodeExecutionProtocolError.make({\n implementation: dynamicWorkerImplementation,\n message: outcome.value.message.slice(0, 8_000),\n });\n }\n }\n });\n\n/**\n * Expected worker-level failures map into the typed union with bounded\n * diagnostics; anything unrecognized stays a start/termination error rather\n * than a fabricated program result.\n */\nconst classifyWorkerFailure = (\n cause: unknown,\n maxWallTime: Duration.Duration,\n):\n | CodeExecutionTimeoutError\n | CodeExecutorTerminatedError\n | CodeExecutorStartError\n | CodeSourceError => {\n const text = safeCauseDiagnostic(cause, \"[unserializable worker failure]\");\n\n // `WorkerLoader.load()` is lazy, so a module-compile error in the generated\n // program surfaces here at first use. Blame the program's source ONLY on a\n // genuine compile diagnostic (a `SyntaxError` or an explicit compile\n // failure) — the fixed harness is valid, so the fault is in program.js. A\n // bare \"failed to start Worker\" without a compile diagnostic is an\n // infrastructure start failure, not the model's fault, so it must NOT be\n // misclassified as a source error.\n if (/syntaxerror|failed to (compile|parse)/i.test(text)) {\n return CodeSourceError.make({\n implementation: dynamicWorkerImplementation,\n reason: \"invalid\",\n message: text.slice(0, 8_000),\n });\n }\n if (/cpu/i.test(text)) {\n return CodeExecutionTimeoutError.make({\n implementation: dynamicWorkerImplementation,\n kind: \"cpu\",\n maxWallTime,\n logs: [],\n });\n }\n if (/failed to start worker/i.test(text)) {\n return CodeExecutorStartError.make({\n implementation: dynamicWorkerImplementation,\n message: text.slice(0, 8_000),\n cause,\n });\n }\n\n return CodeExecutorTerminatedError.make({\n implementation: dynamicWorkerImplementation,\n message: text.slice(0, 8_000),\n });\n};\n\n/** Layer building the Dynamic Worker `CodeExecutor` from resolved bindings. */\nexport const dynamicWorkerCodeExecutorLayer = (\n options: DynamicWorkerCodeExecutorOptions,\n): Layer.Layer<CodeExecutor> =>\n Layer.effect(\n CodeExecutor,\n Effect.gen(function* () {\n const clock = yield* Clock.Clock;\n\n return CodeExecutor.of({ execute: makeExecute(options, clock) });\n }),\n );\n\n/** Assemble Code Mode handlers with the isolated Dynamic Worker executor. */\nexport const CloudflareCodeMode = {\n /**\n * Provide the selected tool handlers at construction, where Code Mode captures them.\n * Their errors and remaining dependencies stay visible. The definition still owns the\n * allowlist and limits; the runtime supplies the live Tool broker for each scoped pass.\n */\n layer: <A, E, R, Handlers, HandlerError, HandlerRequirements>(\n definition: { readonly handlers: Layer.Layer<A, E, R> },\n options: DynamicWorkerCodeExecutorOptions & {\n readonly handlers: Layer.Layer<Handlers, HandlerError, HandlerRequirements>;\n },\n ) =>\n definition.handlers.pipe(\n Layer.provide(options.handlers),\n Layer.provide(dynamicWorkerCodeExecutorLayer(options)),\n ),\n};\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
|
|
2
|
-
import { X as cloudflareCryptoLayer, o as CloudflareThreadClient } from "./CloudflareThreadClient-
|
|
3
|
-
import { n as cloudflareScheduledInputAdmissionLayer, t as cloudflarePreparedInputAdmissionLayer } from "./prepared-admission-
|
|
2
|
+
import { X as cloudflareCryptoLayer, o as CloudflareThreadClient } from "./CloudflareThreadClient-DU548EEj.mjs";
|
|
3
|
+
import { n as cloudflareScheduledInputAdmissionLayer, t as cloudflarePreparedInputAdmissionLayer } from "./prepared-admission-BoUPHSNQ.mjs";
|
|
4
4
|
import "@yielded/agent/durable-agent-runtime";
|
|
5
5
|
import { AgentId } from "@yielded/agent/identifiers";
|
|
6
6
|
import { AdmissionFence } from "@yielded/agent/submission-ledger";
|
|
@@ -152,7 +152,7 @@ var CloudflareSchedulingClient = class {
|
|
|
152
152
|
const encoded = yield* Schema.encodeEffect(agent.definition.input)(input).pipe(Effect.mapError(() => ScheduleValidationError.make({ message: "Unable to encode Agent input" })));
|
|
153
153
|
return yield* Schema.decodeUnknownEffect(PersistedJson)(encoded).pipe(Effect.mapError(() => ScheduleValidationError.make({ message: "Agent input does not satisfy the canonical persistence bounds" })));
|
|
154
154
|
});
|
|
155
|
-
const create = (agent, input, options)
|
|
155
|
+
const create = Effect.fnUntraced(function* (agent, input, options) {
|
|
156
156
|
const payload = yield* encodeInput(agent, input);
|
|
157
157
|
const response = yield* call(options.scope.owner, {
|
|
158
158
|
_tag: "Create",
|
|
@@ -166,7 +166,7 @@ var CloudflareSchedulingClient = class {
|
|
|
166
166
|
reason: "corrupt"
|
|
167
167
|
});
|
|
168
168
|
});
|
|
169
|
-
const update = (agent, input, options)
|
|
169
|
+
const update = Effect.fnUntraced(function* (agent, input, options) {
|
|
170
170
|
const payload = yield* encodeInput(agent, input);
|
|
171
171
|
const response = yield* call(options.scope.owner, {
|
|
172
172
|
_tag: "Update",
|
|
@@ -180,7 +180,7 @@ var CloudflareSchedulingClient = class {
|
|
|
180
180
|
reason: "corrupt"
|
|
181
181
|
});
|
|
182
182
|
});
|
|
183
|
-
const get =
|
|
183
|
+
const get = Effect.fnUntraced(function* (scope, scheduleId) {
|
|
184
184
|
const response = yield* call(scope.owner, {
|
|
185
185
|
_tag: "Get",
|
|
186
186
|
schemaVersion: 1,
|
|
@@ -192,7 +192,7 @@ var CloudflareSchedulingClient = class {
|
|
|
192
192
|
reason: "corrupt"
|
|
193
193
|
});
|
|
194
194
|
});
|
|
195
|
-
const list = (scope, options = {})
|
|
195
|
+
const list = Effect.fnUntraced(function* (scope, options = {}) {
|
|
196
196
|
const response = yield* call(scope.owner, {
|
|
197
197
|
_tag: "List",
|
|
198
198
|
schemaVersion: 1,
|
|
@@ -205,7 +205,7 @@ var CloudflareSchedulingClient = class {
|
|
|
205
205
|
reason: "corrupt"
|
|
206
206
|
});
|
|
207
207
|
});
|
|
208
|
-
const control = (operation, scope, scheduleId, expectedRevision)
|
|
208
|
+
const control = Effect.fnUntraced(function* (operation, scope, scheduleId, expectedRevision) {
|
|
209
209
|
const response = yield* call(scope.owner, {
|
|
210
210
|
_tag: "Control",
|
|
211
211
|
schemaVersion: 1,
|
|
@@ -226,7 +226,7 @@ var CloudflareSchedulingClient = class {
|
|
|
226
226
|
list,
|
|
227
227
|
pause: (scope, id, revision) => control("pause", scope, id, revision),
|
|
228
228
|
resume: (scope, id, revision) => control("resume", scope, id, revision),
|
|
229
|
-
recover: (scope, scheduleId, expectedRevision, expectedGeneration)
|
|
229
|
+
recover: Effect.fnUntraced(function* (scope, scheduleId, expectedRevision, expectedGeneration) {
|
|
230
230
|
const response = yield* call(scope.owner, {
|
|
231
231
|
_tag: "Recover",
|
|
232
232
|
schemaVersion: 1,
|
|
@@ -259,7 +259,7 @@ const alarmStorageError = (operation) => (error) => ScheduleStorageError.make({
|
|
|
259
259
|
});
|
|
260
260
|
const transactionLayer = Layer.effect(DoScheduleTransaction, Effect.gen(function* () {
|
|
261
261
|
const alarms = yield* DurableObjectAlarm.DurableObjectAlarm;
|
|
262
|
-
return DoScheduleTransaction.of({ run:
|
|
262
|
+
return DoScheduleTransaction.of({ run: Effect.fnUntraced(function* (body) {
|
|
263
263
|
const nowMillis = yield* Clock.currentTimeMillis;
|
|
264
264
|
return yield* alarms.transaction((transaction) => body((replacement) => replacement.deadlineAtMillis === null ? transaction.cancelAlarm({
|
|
265
265
|
id: SCHEDULE_ALARM_ID,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CloudflareScheduling.mjs","names":["ScheduleScopeSchema","ScheduleSnapshotPageSchema","EffectCfDurableObjectState","EffectCfDurableObject"],"sources":["../src/CloudflareScheduling.ts"],"sourcesContent":["import { SqliteClient } from \"@effect/sql-sqlite-do\";\nimport {\n DoScheduleAlarmControl,\n DoScheduleTransaction,\n scheduleStoreLayer,\n} from \"@yielded/agent-storage-cloudflare/do-schedule-store\";\nimport { type DurableSubmitAgent } from \"@yielded/agent/durable-agent-runtime\";\nimport { AgentId } from \"@yielded/agent/identifiers\";\nimport { DefinitionDigests, PersistedJson } from \"@yielded/agent/records\";\nimport {\n ScheduleAuthorizationError,\n type ScheduleAuthorizer,\n ScheduleCapacityError,\n ScheduleConflict,\n ScheduleDestination,\n ScheduleFailpointError,\n ScheduleId,\n type SchedulingLimits,\n ScheduleNotFound,\n ScheduleOwner,\n type ScheduleScope,\n ScheduleScope as ScheduleScopeSchema,\n ScheduleSnapshot,\n ScheduleSnapshotPage as ScheduleSnapshotPageSchema,\n ScheduleStorageError,\n ScheduleTimingRequest,\n ScheduleValidationError,\n defaultSchedulingLimits,\n} from \"@yielded/agent/schedule\";\nimport { scheduleOwnerKey } from \"@yielded/agent/schedule-transition\";\nimport {\n Scheduling,\n ScheduleDriver,\n type ScheduleManagementFailure,\n ScheduleWakeNoop,\n} from \"@yielded/agent/scheduling\";\nimport { AdmissionFence } from \"@yielded/agent/submission-ledger\";\nimport { Clock, Context, DateTime, Effect, Layer, Schema } from \"effect\";\nimport {\n DurableObject as EffectCfDurableObject,\n DurableObjectAlarm,\n RpcTargets,\n DurableObjectState as EffectCfDurableObjectState,\n type WorkerEnvironment,\n} from \"effect-cf\";\n\nimport type { ThreadObjectNamespace } from \"./CloudflareBindings.ts\";\nimport { CloudflareThreadClient } from \"./CloudflareThreadClient.ts\";\nimport { cloudflareCryptoLayer } from \"./internal/crypto.ts\";\nimport {\n cloudflarePreparedInputAdmissionLayer,\n cloudflareScheduledInputAdmissionLayer,\n} from \"./internal/prepared-admission.ts\";\n\nconst SCHEDULE_ALARM_TAG = \"effect-agent/ScheduleOwnerWake\";\nconst SCHEDULE_ALARM_ID = \"driver\";\n\nconst ScheduleAlarmPayload = Schema.Struct({\n schemaVersion: Schema.Literal(1),\n generation: Schema.Int.check(Schema.isGreaterThan(0)),\n});\n\nexport class ScheduleAlarmProtocolError extends Schema.TaggedError<ScheduleAlarmProtocolError>()(\n \"ScheduleAlarmProtocolError\",\n { message: Schema.String },\n) {}\n\nconst boundedProtocolMessage = (message: string): string =>\n message.length <= 4_096 ? message : `${message.slice(0, 4_093)}...`;\n\nexport class ScheduleOwnerProtocolError extends Schema.TaggedError<ScheduleOwnerProtocolError>()(\n \"ScheduleOwnerProtocolError\",\n { message: Schema.String.check(Schema.isMaxLength(4_096)) },\n) {}\n\nconst ScheduleMutationRequestFields = {\n schemaVersion: Schema.Literal(1),\n agentId: AgentId,\n input: PersistedJson,\n scope: ScheduleScopeSchema,\n scheduleId: ScheduleId,\n timing: ScheduleTimingRequest,\n destination: ScheduleDestination,\n deliveryPrincipal: ScheduleScopeSchema.fields.principal,\n definitions: DefinitionDigests,\n admissionGroup: Schema.optionalKey(Schema.NonEmptyString.check(Schema.isMaxLength(256))),\n admissionFence: Schema.optionalKey(AdmissionFence),\n};\n\nconst ScheduleCreateRequest = Schema.TaggedStruct(\"Create\", ScheduleMutationRequestFields);\n\nconst ScheduleUpdateRequest = Schema.TaggedStruct(\"Update\", {\n ...ScheduleMutationRequestFields,\n expectedRevision: Schema.Int.check(Schema.isGreaterThan(0)),\n});\n\nconst ScheduleGetRequest = Schema.TaggedStruct(\"Get\", {\n schemaVersion: Schema.Literal(1),\n scope: ScheduleScopeSchema,\n scheduleId: ScheduleId,\n});\n\nconst ScheduleListRequest = Schema.TaggedStruct(\"List\", {\n schemaVersion: Schema.Literal(1),\n scope: ScheduleScopeSchema,\n after: Schema.optionalKey(ScheduleId),\n limit: Schema.optionalKey(\n Schema.Int.check(Schema.isGreaterThan(0), Schema.isLessThanOrEqualTo(100)),\n ),\n});\n\nconst ScheduleControlRequest = Schema.TaggedStruct(\"Control\", {\n schemaVersion: Schema.Literal(1),\n operation: Schema.Literals([\"pause\", \"resume\", \"cancel\"]),\n scope: ScheduleScopeSchema,\n scheduleId: ScheduleId,\n expectedRevision: Schema.Int.check(Schema.isGreaterThan(0)),\n});\n\nconst ScheduleRecoverRequest = Schema.TaggedStruct(\"Recover\", {\n schemaVersion: Schema.Literal(1),\n scope: ScheduleScopeSchema,\n scheduleId: ScheduleId,\n expectedRevision: Schema.Int.check(Schema.isGreaterThan(0)),\n expectedGeneration: Schema.Natural,\n});\n\nconst ScheduleOwnerRequest = Schema.Union([\n ScheduleRecoverRequest,\n ScheduleCreateRequest,\n ScheduleUpdateRequest,\n ScheduleGetRequest,\n ScheduleListRequest,\n ScheduleControlRequest,\n]);\n\ntype ScheduleOwnerRequest = typeof ScheduleOwnerRequest.Type;\n\nconst ScheduleOwnerFailure = Schema.Union([\n ScheduleValidationError,\n ScheduleAuthorizationError,\n ScheduleConflict,\n ScheduleNotFound,\n ScheduleCapacityError,\n ScheduleStorageError,\n ScheduleFailpointError,\n ScheduleOwnerProtocolError,\n]);\n\ntype ScheduleOwnerFailure = typeof ScheduleOwnerFailure.Type;\n\nconst ScheduleOwnerResponse = Schema.Union([\n Schema.TaggedStruct(\"Snapshot\", { value: ScheduleSnapshot }),\n Schema.TaggedStruct(\"Page\", { value: ScheduleSnapshotPageSchema }),\n Schema.TaggedStruct(\"Failed\", { failure: ScheduleOwnerFailure }),\n]);\n\ntype ScheduleOwnerResponse = typeof ScheduleOwnerResponse.Type;\n\nconst decodeScheduleOwnerRequest = Schema.decodeUnknownEffect(ScheduleOwnerRequest);\nconst encodeScheduleOwnerRequest = Schema.encodeEffect(ScheduleOwnerRequest);\nconst decodeScheduleOwnerResponse = Schema.decodeUnknownEffect(ScheduleOwnerResponse);\nconst encodeScheduleOwnerResponse = Schema.encodeEffect(ScheduleOwnerResponse);\n\nconst scheduleProtocolFailure = (message: string): ScheduleOwnerResponse => ({\n _tag: \"Failed\",\n failure: ScheduleOwnerProtocolError.make({ message: boundedProtocolMessage(message) }),\n});\n\nexport interface ScheduleOwnerObjectRpc extends Rpc.DurableObjectBranded {\n schedule(encoded: unknown): Promise<unknown>;\n}\n\nexport class ScheduleOwnerNamespace extends Context.Service<\n ScheduleOwnerNamespace,\n { readonly namespace: DurableObjectNamespace<ScheduleOwnerObjectRpc> }\n>()(\"@effect-agent/platform-cloudflare/ScheduleOwnerNamespace\") {}\n\nconst passthroughAgent = (agentId: AgentId): DurableSubmitAgent<typeof PersistedJson> => ({\n definition: { id: agentId, input: PersistedJson },\n});\n\nconst requestOwner = (request: ScheduleOwnerRequest): ScheduleOwner => request.scope.owner;\n\n/** Provides the same authorized management service as NodeScheduling.layer. */\nexport class CloudflareSchedulingClient {\n static readonly layer: Layer.Layer<Scheduling, never, ScheduleOwnerNamespace> = Layer.effect(\n Scheduling,\n Effect.gen(function* () {\n const { namespace } = yield* ScheduleOwnerNamespace;\n\n const call = Effect.fnUntraced(function* (\n owner: ScheduleOwner,\n request: ScheduleOwnerRequest,\n ): Effect.fn.Return<ScheduleOwnerResponse, ScheduleManagementFailure> {\n const encoded = yield* encodeScheduleOwnerRequest(request).pipe(\n Effect.mapError(() =>\n ScheduleStorageError.make({ operation: \"Schedule Owner protocol\", reason: \"corrupt\" }),\n ),\n );\n\n const unavailable = (cause: unknown) => {\n const error = ScheduleStorageError.make({\n operation: \"call Schedule Owner\",\n reason: \"unavailable\",\n });\n\n error.cause = cause;\n\n return error;\n };\n\n const address = scheduleOwnerKey(owner);\n\n const target = yield* RpcTargets.get(namespace, address, () =>\n namespace.get(namespace.idFromName(address)),\n ).pipe(Effect.mapError(unavailable));\n\n const raw = yield* Effect.tryPromise({\n try: () => target.schedule(encoded),\n catch: unavailable,\n }).pipe(Effect.tapCause(() => RpcTargets.invalidate(target)));\n\n const response = yield* decodeScheduleOwnerResponse(raw).pipe(\n Effect.mapError(() =>\n ScheduleStorageError.make({ operation: \"Schedule Owner protocol\", reason: \"corrupt\" }),\n ),\n );\n\n if (response._tag !== \"Failed\") return response;\n\n return yield* response.failure._tag === \"ScheduleOwnerProtocolError\"\n ? ScheduleStorageError.make({ operation: \"Schedule Owner protocol\", reason: \"corrupt\" })\n : response.failure;\n });\n\n const encodeInput = Effect.fnUntraced(function* <InputSchema extends Schema.Top>(\n agent: DurableSubmitAgent<InputSchema>,\n input: InputSchema[\"Type\"],\n ): Effect.fn.Return<PersistedJson, ScheduleValidationError, InputSchema[\"EncodingServices\"]> {\n const encoded = yield* Schema.encodeEffect(agent.definition.input)(input).pipe(\n Effect.mapError(() =>\n ScheduleValidationError.make({\n message: \"Unable to encode Agent input\",\n }),\n ),\n );\n\n return yield* Schema.decodeUnknownEffect(PersistedJson)(encoded).pipe(\n Effect.mapError(() =>\n ScheduleValidationError.make({\n message: \"Agent input does not satisfy the canonical persistence bounds\",\n }),\n ),\n );\n });\n\n const create: Scheduling[\"Service\"][\"create\"] = (agent, input, options) =>\n Effect.gen(function* () {\n const payload = yield* encodeInput(agent, input);\n\n const response = yield* call(options.scope.owner, {\n _tag: \"Create\",\n schemaVersion: 1,\n agentId: agent.definition.id,\n input: payload,\n ...options,\n });\n\n return response._tag === \"Snapshot\"\n ? response.value\n : yield* ScheduleStorageError.make({\n operation: \"Schedule Owner protocol\",\n reason: \"corrupt\",\n });\n });\n\n const update: Scheduling[\"Service\"][\"update\"] = (agent, input, options) =>\n Effect.gen(function* () {\n const payload = yield* encodeInput(agent, input);\n\n const response = yield* call(options.scope.owner, {\n _tag: \"Update\",\n schemaVersion: 1,\n agentId: agent.definition.id,\n input: payload,\n ...options,\n });\n\n return response._tag === \"Snapshot\"\n ? response.value\n : yield* ScheduleStorageError.make({\n operation: \"Schedule Owner protocol\",\n reason: \"corrupt\",\n });\n });\n\n const get: Scheduling[\"Service\"][\"get\"] = (scope, scheduleId) =>\n Effect.gen(function* () {\n const response = yield* call(scope.owner, {\n _tag: \"Get\",\n schemaVersion: 1,\n scope,\n scheduleId,\n });\n\n return response._tag === \"Snapshot\"\n ? response.value\n : yield* ScheduleStorageError.make({\n operation: \"Schedule Owner protocol\",\n reason: \"corrupt\",\n });\n });\n\n const list: Scheduling[\"Service\"][\"list\"] = (scope, options = {}) =>\n Effect.gen(function* () {\n const response = yield* call(scope.owner, {\n _tag: \"List\",\n schemaVersion: 1,\n scope,\n ...(options.after === undefined ? {} : { after: options.after }),\n ...(options.limit === undefined ? {} : { limit: options.limit }),\n });\n\n return response._tag === \"Page\"\n ? response.value\n : yield* ScheduleStorageError.make({\n operation: \"Schedule Owner protocol\",\n reason: \"corrupt\",\n });\n });\n\n const control = (\n operation: \"pause\" | \"resume\" | \"cancel\",\n scope: ScheduleScope,\n scheduleId: ScheduleId,\n expectedRevision: number,\n ) =>\n Effect.gen(function* () {\n const response = yield* call(scope.owner, {\n _tag: \"Control\",\n schemaVersion: 1,\n operation,\n scope,\n scheduleId,\n expectedRevision,\n });\n\n return response._tag === \"Snapshot\"\n ? response.value\n : yield* ScheduleStorageError.make({\n operation: \"Schedule Owner protocol\",\n reason: \"corrupt\",\n });\n });\n\n return Scheduling.of({\n create,\n update,\n get,\n list,\n pause: (scope, id, revision) => control(\"pause\", scope, id, revision),\n resume: (scope, id, revision) => control(\"resume\", scope, id, revision),\n recover: (scope, scheduleId, expectedRevision, expectedGeneration) =>\n Effect.gen(function* () {\n const response = yield* call(scope.owner, {\n _tag: \"Recover\",\n schemaVersion: 1,\n scope,\n scheduleId,\n expectedRevision,\n expectedGeneration,\n });\n\n return response._tag === \"Snapshot\"\n ? response.value\n : yield* ScheduleStorageError.make({\n operation: \"Schedule Owner protocol\",\n reason: \"corrupt\",\n });\n }),\n cancel: (scope, id, revision) => control(\"cancel\", scope, id, revision),\n });\n }),\n );\n}\n\nexport class ScheduleOwnerIdentity extends Context.Service<\n ScheduleOwnerIdentity,\n { readonly owner: ScheduleOwner }\n>()(\"@effect-agent/platform-cloudflare/ScheduleOwnerIdentity\") {}\n\nconst decodeOwnerName = Effect.fnUntraced(function* (\n name: string | null | undefined,\n): Effect.fn.Return<ScheduleOwner, ScheduleOwnerProtocolError> {\n if (name === null || name === undefined) {\n return yield* ScheduleOwnerProtocolError.make({\n message: \"Schedule Owner objects require an idFromName identity\",\n });\n }\n\n const tuple = yield* Schema.decodeEffect(\n Schema.fromJsonString(Schema.Tuple([Schema.String, Schema.String])),\n )(name).pipe(\n Effect.mapError(() =>\n ScheduleOwnerProtocolError.make({ message: \"Schedule Owner object name is malformed\" }),\n ),\n );\n\n return yield* Schema.decodeEffect(ScheduleOwner)({\n tenantId: tuple[0],\n ownerId: tuple[1],\n }).pipe(\n Effect.mapError(() =>\n ScheduleOwnerProtocolError.make({ message: \"Schedule Owner object identity is invalid\" }),\n ),\n );\n});\n\nconst alarmStorageError = (operation: string) => (error: { readonly _tag: string }) =>\n ScheduleStorageError.make({\n operation,\n reason: error._tag === \"StorageOperationError\" ? \"unavailable\" : \"corrupt\",\n });\n\nconst transactionLayer: Layer.Layer<\n DoScheduleTransaction,\n never,\n DurableObjectAlarm.DurableObjectAlarm\n> = Layer.effect(\n DoScheduleTransaction,\n Effect.gen(function* () {\n const alarms = yield* DurableObjectAlarm.DurableObjectAlarm;\n\n return DoScheduleTransaction.of({\n run: (body) =>\n Effect.gen(function* () {\n const nowMillis = yield* Clock.currentTimeMillis;\n\n return yield* alarms\n .transaction((transaction) =>\n body((replacement) =>\n replacement.deadlineAtMillis === null\n ? transaction\n .cancelAlarm({ id: SCHEDULE_ALARM_ID, tag: SCHEDULE_ALARM_TAG })\n .pipe(Effect.mapError(alarmStorageError(\"cancel Schedule Owner alarm\")))\n : Effect.fromOption(\n DateTime.make(Math.max(replacement.deadlineAtMillis, nowMillis + 1)),\n ).pipe(\n Effect.mapError(() =>\n ScheduleStorageError.make({\n operation: \"validate Schedule Owner alarm deadline\",\n reason: \"corrupt\",\n }),\n ),\n Effect.flatMap((runAt) =>\n transaction\n .scheduleAlarm({\n id: SCHEDULE_ALARM_ID,\n tag: SCHEDULE_ALARM_TAG,\n runAt,\n payload: {\n schemaVersion: 1,\n generation: replacement.generation,\n },\n })\n .pipe(\n Effect.mapError(alarmStorageError(\"schedule Schedule Owner alarm\")),\n ),\n ),\n ),\n ),\n )\n .pipe(\n Effect.catchTag(\"StorageOperationError\", () =>\n ScheduleStorageError.make({\n operation: \"commit Schedule Owner transaction\",\n reason: \"unavailable\",\n }),\n ),\n );\n }),\n });\n }),\n);\n\ntype ScheduleRuntimeServices =\n | Scheduling\n | ScheduleDriver\n | DoScheduleAlarmControl\n | ScheduleOwnerIdentity\n | DurableObjectAlarm.DurableObjectAlarm;\n\nconst ensureOwner = (\n expected: ScheduleOwner,\n request: ScheduleOwnerRequest,\n): Effect.Effect<void, ScheduleOwnerProtocolError> => {\n const observed = requestOwner(request);\n\n return observed.tenantId === expected.tenantId && observed.ownerId === expected.ownerId\n ? Effect.void\n : Effect.fail(\n ScheduleOwnerProtocolError.make({\n message: \"The request owner does not match the addressed Schedule Owner object\",\n }),\n );\n};\n\nconst handleScheduleRequest = Effect.fnUntraced(function* (\n encoded: unknown,\n): Effect.fn.Return<unknown, never, Scheduling | ScheduleOwnerIdentity> {\n const decoded = yield* decodeScheduleOwnerRequest(encoded).pipe(Effect.result);\n\n if (decoded._tag === \"Failure\") {\n return yield* encodeScheduleOwnerResponse(\n scheduleProtocolFailure(\"The Schedule request could not be decoded\"),\n ).pipe(Effect.orDie);\n }\n const request = decoded.success;\n const { owner } = yield* ScheduleOwnerIdentity;\n const scheduling = yield* Scheduling;\n\n const response = yield* Effect.gen(function* () {\n yield* ensureOwner(owner, request);\n switch (request._tag) {\n case \"Create\": {\n const value = yield* scheduling.create(passthroughAgent(request.agentId), request.input, {\n scope: request.scope,\n scheduleId: request.scheduleId,\n timing: request.timing,\n destination: request.destination,\n deliveryPrincipal: request.deliveryPrincipal,\n definitions: request.definitions,\n ...(request.admissionGroup === undefined\n ? {}\n : { admissionGroup: request.admissionGroup }),\n ...(request.admissionFence === undefined\n ? {}\n : { admissionFence: request.admissionFence }),\n });\n\n return { _tag: \"Snapshot\" as const, value };\n }\n case \"Update\": {\n const value = yield* scheduling.update(passthroughAgent(request.agentId), request.input, {\n scope: request.scope,\n scheduleId: request.scheduleId,\n timing: request.timing,\n destination: request.destination,\n deliveryPrincipal: request.deliveryPrincipal,\n definitions: request.definitions,\n ...(request.admissionGroup === undefined\n ? {}\n : { admissionGroup: request.admissionGroup }),\n ...(request.admissionFence === undefined\n ? {}\n : { admissionFence: request.admissionFence }),\n expectedRevision: request.expectedRevision,\n });\n\n return { _tag: \"Snapshot\" as const, value };\n }\n case \"Get\":\n return {\n _tag: \"Snapshot\" as const,\n value: yield* scheduling.get(request.scope, request.scheduleId),\n };\n case \"List\":\n return {\n _tag: \"Page\" as const,\n value: yield* scheduling.list(request.scope, {\n ...(request.after === undefined ? {} : { after: request.after }),\n ...(request.limit === undefined ? {} : { limit: request.limit }),\n }),\n };\n case \"Recover\":\n return {\n _tag: \"Snapshot\" as const,\n value: yield* scheduling.recover(\n request.scope,\n request.scheduleId,\n request.expectedRevision,\n request.expectedGeneration,\n ),\n };\n case \"Control\": {\n const value =\n request.operation === \"pause\"\n ? yield* scheduling.pause(request.scope, request.scheduleId, request.expectedRevision)\n : request.operation === \"resume\"\n ? yield* scheduling.resume(\n request.scope,\n request.scheduleId,\n request.expectedRevision,\n )\n : yield* scheduling.cancel(\n request.scope,\n request.scheduleId,\n request.expectedRevision,\n );\n\n return { _tag: \"Snapshot\" as const, value };\n }\n }\n }).pipe(\n Effect.map((value): ScheduleOwnerResponse => value),\n Effect.catch((failure) =>\n Schema.is(ScheduleOwnerFailure)(failure)\n ? Effect.succeed({ _tag: \"Failed\" as const, failure })\n : Effect.succeed(\n scheduleProtocolFailure(\"The Schedule operation failed outside its public contract\"),\n ),\n ),\n );\n\n return yield* encodeScheduleOwnerResponse(response).pipe(Effect.orDie);\n});\n\n/** @internal The complete native alarm operation, including its event deadline. */\nexport const scheduleAlarmHandler = (limits: SchedulingLimits) =>\n DurableObjectAlarm.processDue((event) =>\n Effect.gen(function* () {\n if (event.tag !== SCHEDULE_ALARM_TAG || event.id !== SCHEDULE_ALARM_ID) {\n return yield* ScheduleAlarmProtocolError.make({\n message: `Unsupported Schedule Owner alarm ${event.tag}/${event.id}`,\n });\n }\n yield* Schema.decodeUnknownEffect(ScheduleAlarmPayload)(event.payload).pipe(\n Effect.mapError(() =>\n ScheduleAlarmProtocolError.make({\n message: \"Unsupported Schedule Owner alarm payload version\",\n }),\n ),\n );\n const scheduling = yield* ScheduleDriver;\n const alarmControl = yield* DoScheduleAlarmControl;\n const { owner } = yield* ScheduleOwnerIdentity;\n const nowMillis = yield* Clock.currentTimeMillis;\n\n yield* alarmControl.prearm(nowMillis + limits.recoveryPollMillis);\n const pass = yield* scheduling.runDue(owner);\n\n if (pass.failed > 0) {\n yield* alarmControl.prearm((yield* Clock.currentTimeMillis) + limits.recoveryPollMillis);\n } else {\n yield* alarmControl.reconcile;\n }\n }),\n ).pipe(\n // Bound due acquisition and acknowledgement as well as admission. Prepared occurrences\n // and their replacement alarm survive interruption and retain their idempotency keys.\n Effect.timeout(\"14 minutes\"),\n Effect.asVoid,\n );\n\nexport interface ScheduleOwnerObjectInstance extends InstanceType<\n EffectCfDurableObject.DurableObjectClass<Record<never, never>, ScheduleRuntimeServices>\n> {\n schedule(encoded: unknown): Promise<unknown>;\n alarm(alarmInfo?: AlarmInvocationInfo): Promise<void> | void;\n}\n\nexport interface ScheduleOwnerObjectClass {\n new (ctx: DurableObjectState, env: Cloudflare.Env): ScheduleOwnerObjectInstance;\n}\n\n/**\n * The host Layer supplies authorization and routing and is cached for the object incarnation.\n * Cloudflare eviction does not guarantee its finalizers run. Do not acquire resources requiring\n * cleanup in this Layer; acquire them inside scoped `manage` / `prepare` operations instead.\n * Native services belong to effect-cf; the database and alarm runtime remain instance-owned.\n */\nexport const makeScheduleOwnerObjectClass = <E>(\n host: Layer.Layer<\n ScheduleAuthorizer | ThreadObjectNamespace,\n E,\n EffectCfDurableObjectState.DurableObjectState | WorkerEnvironment | ScheduleOwnerIdentity\n >,\n limits: SchedulingLimits = defaultSchedulingLimits,\n): ScheduleOwnerObjectClass => {\n const ownerLayer = Layer.effect(\n ScheduleOwnerIdentity,\n Effect.gen(function* () {\n const state = yield* EffectCfDurableObjectState.DurableObjectState;\n\n return ScheduleOwnerIdentity.of({ owner: yield* decodeOwnerName(state.raw.id.name) });\n }),\n );\n\n const sqlLayer = Layer.unwrap(\n Effect.map(EffectCfDurableObjectState.DurableObjectState, (state) =>\n SqliteClient.layer({ storage: state.raw.storage }),\n ),\n );\n\n const application = Layer.merge(Scheduling.layer(limits), ScheduleDriver.layer(limits)).pipe(\n Layer.provideMerge(\n scheduleStoreLayer.pipe(Layer.provide(transactionLayer), Layer.provide(sqlLayer)),\n ),\n Layer.provide(\n cloudflareScheduledInputAdmissionLayer.pipe(\n Layer.provide(cloudflarePreparedInputAdmissionLayer),\n Layer.provide(CloudflareThreadClient.layer),\n ),\n ),\n Layer.provide(ScheduleWakeNoop),\n Layer.provide(cloudflareCryptoLayer),\n Layer.provideMerge(DurableObjectAlarm.DurableObjectAlarm.layer),\n Layer.provide(host),\n Layer.provideMerge(ownerLayer),\n );\n\n const runtime: Layer.Layer<\n ScheduleRuntimeServices,\n E | ScheduleStorageError | ScheduleOwnerProtocolError | ScheduleValidationError,\n EffectCfDurableObjectState.DurableObjectState | WorkerEnvironment\n > = Layer.effectContext(\n Effect.gen(function* () {\n const state = yield* EffectCfDurableObjectState.DurableObjectState;\n const scope = yield* Effect.scope;\n\n return yield* state.blockConcurrencyWhile(Layer.buildWithScope(application, scope));\n }),\n );\n\n const rpc = {\n schedule: (encoded: unknown) => handleScheduleRequest(encoded),\n } satisfies EffectCfDurableObject.DurableObjectRpc<ScheduleRuntimeServices>;\n\n const ScheduleOwnerObject = EffectCfDurableObject.make(runtime, {\n initialize: Effect.void,\n rpc,\n alarms: scheduleAlarmHandler(limits),\n });\n\n return ScheduleOwnerObject;\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CloudflareScheduling.mjs","names":["ScheduleScopeSchema","ScheduleSnapshotPageSchema","EffectCfDurableObjectState","EffectCfDurableObject"],"sources":["../src/CloudflareScheduling.ts"],"sourcesContent":["import { SqliteClient } from \"@effect/sql-sqlite-do\";\nimport {\n DoScheduleAlarmControl,\n DoScheduleTransaction,\n scheduleStoreLayer,\n} from \"@yielded/agent-storage-cloudflare/do-schedule-store\";\nimport { type DurableSubmitAgent } from \"@yielded/agent/durable-agent-runtime\";\nimport { AgentId } from \"@yielded/agent/identifiers\";\nimport { DefinitionDigests, PersistedJson } from \"@yielded/agent/records\";\nimport {\n ScheduleAuthorizationError,\n type ScheduleAuthorizer,\n ScheduleCapacityError,\n ScheduleConflict,\n ScheduleDestination,\n ScheduleFailpointError,\n ScheduleId,\n type SchedulingLimits,\n ScheduleNotFound,\n ScheduleOwner,\n type ScheduleScope,\n ScheduleScope as ScheduleScopeSchema,\n ScheduleSnapshot,\n ScheduleSnapshotPage as ScheduleSnapshotPageSchema,\n ScheduleStorageError,\n ScheduleTimingRequest,\n ScheduleValidationError,\n defaultSchedulingLimits,\n} from \"@yielded/agent/schedule\";\nimport { scheduleOwnerKey } from \"@yielded/agent/schedule-transition\";\nimport {\n Scheduling,\n ScheduleDriver,\n type ScheduleManagementFailure,\n ScheduleWakeNoop,\n} from \"@yielded/agent/scheduling\";\nimport { AdmissionFence } from \"@yielded/agent/submission-ledger\";\nimport { Clock, Context, DateTime, Effect, Layer, Schema } from \"effect\";\nimport {\n DurableObject as EffectCfDurableObject,\n DurableObjectAlarm,\n RpcTargets,\n DurableObjectState as EffectCfDurableObjectState,\n type WorkerEnvironment,\n} from \"effect-cf\";\n\nimport type { ThreadObjectNamespace } from \"./CloudflareBindings.ts\";\nimport { CloudflareThreadClient } from \"./CloudflareThreadClient.ts\";\nimport { cloudflareCryptoLayer } from \"./internal/crypto.ts\";\nimport {\n cloudflarePreparedInputAdmissionLayer,\n cloudflareScheduledInputAdmissionLayer,\n} from \"./internal/prepared-admission.ts\";\n\nconst SCHEDULE_ALARM_TAG = \"effect-agent/ScheduleOwnerWake\";\nconst SCHEDULE_ALARM_ID = \"driver\";\n\nconst ScheduleAlarmPayload = Schema.Struct({\n schemaVersion: Schema.Literal(1),\n generation: Schema.Int.check(Schema.isGreaterThan(0)),\n});\n\nexport class ScheduleAlarmProtocolError extends Schema.TaggedError<ScheduleAlarmProtocolError>()(\n \"ScheduleAlarmProtocolError\",\n { message: Schema.String },\n) {}\n\nconst boundedProtocolMessage = (message: string): string =>\n message.length <= 4_096 ? message : `${message.slice(0, 4_093)}...`;\n\nexport class ScheduleOwnerProtocolError extends Schema.TaggedError<ScheduleOwnerProtocolError>()(\n \"ScheduleOwnerProtocolError\",\n { message: Schema.String.check(Schema.isMaxLength(4_096)) },\n) {}\n\nconst ScheduleMutationRequestFields = {\n schemaVersion: Schema.Literal(1),\n agentId: AgentId,\n input: PersistedJson,\n scope: ScheduleScopeSchema,\n scheduleId: ScheduleId,\n timing: ScheduleTimingRequest,\n destination: ScheduleDestination,\n deliveryPrincipal: ScheduleScopeSchema.fields.principal,\n definitions: DefinitionDigests,\n admissionGroup: Schema.optionalKey(Schema.NonEmptyString.check(Schema.isMaxLength(256))),\n admissionFence: Schema.optionalKey(AdmissionFence),\n};\n\nconst ScheduleCreateRequest = Schema.TaggedStruct(\"Create\", ScheduleMutationRequestFields);\n\nconst ScheduleUpdateRequest = Schema.TaggedStruct(\"Update\", {\n ...ScheduleMutationRequestFields,\n expectedRevision: Schema.Int.check(Schema.isGreaterThan(0)),\n});\n\nconst ScheduleGetRequest = Schema.TaggedStruct(\"Get\", {\n schemaVersion: Schema.Literal(1),\n scope: ScheduleScopeSchema,\n scheduleId: ScheduleId,\n});\n\nconst ScheduleListRequest = Schema.TaggedStruct(\"List\", {\n schemaVersion: Schema.Literal(1),\n scope: ScheduleScopeSchema,\n after: Schema.optionalKey(ScheduleId),\n limit: Schema.optionalKey(\n Schema.Int.check(Schema.isGreaterThan(0), Schema.isLessThanOrEqualTo(100)),\n ),\n});\n\nconst ScheduleControlRequest = Schema.TaggedStruct(\"Control\", {\n schemaVersion: Schema.Literal(1),\n operation: Schema.Literals([\"pause\", \"resume\", \"cancel\"]),\n scope: ScheduleScopeSchema,\n scheduleId: ScheduleId,\n expectedRevision: Schema.Int.check(Schema.isGreaterThan(0)),\n});\n\nconst ScheduleRecoverRequest = Schema.TaggedStruct(\"Recover\", {\n schemaVersion: Schema.Literal(1),\n scope: ScheduleScopeSchema,\n scheduleId: ScheduleId,\n expectedRevision: Schema.Int.check(Schema.isGreaterThan(0)),\n expectedGeneration: Schema.Natural,\n});\n\nconst ScheduleOwnerRequest = Schema.Union([\n ScheduleRecoverRequest,\n ScheduleCreateRequest,\n ScheduleUpdateRequest,\n ScheduleGetRequest,\n ScheduleListRequest,\n ScheduleControlRequest,\n]);\n\ntype ScheduleOwnerRequest = typeof ScheduleOwnerRequest.Type;\n\nconst ScheduleOwnerFailure = Schema.Union([\n ScheduleValidationError,\n ScheduleAuthorizationError,\n ScheduleConflict,\n ScheduleNotFound,\n ScheduleCapacityError,\n ScheduleStorageError,\n ScheduleFailpointError,\n ScheduleOwnerProtocolError,\n]);\n\ntype ScheduleOwnerFailure = typeof ScheduleOwnerFailure.Type;\n\nconst ScheduleOwnerResponse = Schema.Union([\n Schema.TaggedStruct(\"Snapshot\", { value: ScheduleSnapshot }),\n Schema.TaggedStruct(\"Page\", { value: ScheduleSnapshotPageSchema }),\n Schema.TaggedStruct(\"Failed\", { failure: ScheduleOwnerFailure }),\n]);\n\ntype ScheduleOwnerResponse = typeof ScheduleOwnerResponse.Type;\n\nconst decodeScheduleOwnerRequest = Schema.decodeUnknownEffect(ScheduleOwnerRequest);\nconst encodeScheduleOwnerRequest = Schema.encodeEffect(ScheduleOwnerRequest);\nconst decodeScheduleOwnerResponse = Schema.decodeUnknownEffect(ScheduleOwnerResponse);\nconst encodeScheduleOwnerResponse = Schema.encodeEffect(ScheduleOwnerResponse);\n\nconst scheduleProtocolFailure = (message: string): ScheduleOwnerResponse => ({\n _tag: \"Failed\",\n failure: ScheduleOwnerProtocolError.make({ message: boundedProtocolMessage(message) }),\n});\n\nexport interface ScheduleOwnerObjectRpc extends Rpc.DurableObjectBranded {\n schedule(encoded: unknown): Promise<unknown>;\n}\n\nexport class ScheduleOwnerNamespace extends Context.Service<\n ScheduleOwnerNamespace,\n { readonly namespace: DurableObjectNamespace<ScheduleOwnerObjectRpc> }\n>()(\"@effect-agent/platform-cloudflare/ScheduleOwnerNamespace\") {}\n\nconst passthroughAgent = (agentId: AgentId): DurableSubmitAgent<typeof PersistedJson> => ({\n definition: { id: agentId, input: PersistedJson },\n});\n\nconst requestOwner = (request: ScheduleOwnerRequest): ScheduleOwner => request.scope.owner;\n\n/** Provides the same authorized management service as NodeScheduling.layer. */\nexport class CloudflareSchedulingClient {\n static readonly layer: Layer.Layer<Scheduling, never, ScheduleOwnerNamespace> = Layer.effect(\n Scheduling,\n Effect.gen(function* () {\n const { namespace } = yield* ScheduleOwnerNamespace;\n\n const call = Effect.fnUntraced(function* (\n owner: ScheduleOwner,\n request: ScheduleOwnerRequest,\n ): Effect.fn.Return<ScheduleOwnerResponse, ScheduleManagementFailure> {\n const encoded = yield* encodeScheduleOwnerRequest(request).pipe(\n Effect.mapError(() =>\n ScheduleStorageError.make({ operation: \"Schedule Owner protocol\", reason: \"corrupt\" }),\n ),\n );\n\n const unavailable = (cause: unknown) => {\n const error = ScheduleStorageError.make({\n operation: \"call Schedule Owner\",\n reason: \"unavailable\",\n });\n\n error.cause = cause;\n\n return error;\n };\n\n const address = scheduleOwnerKey(owner);\n\n const target = yield* RpcTargets.get(namespace, address, () =>\n namespace.get(namespace.idFromName(address)),\n ).pipe(Effect.mapError(unavailable));\n\n const raw = yield* Effect.tryPromise({\n try: () => target.schedule(encoded),\n catch: unavailable,\n }).pipe(Effect.tapCause(() => RpcTargets.invalidate(target)));\n\n const response = yield* decodeScheduleOwnerResponse(raw).pipe(\n Effect.mapError(() =>\n ScheduleStorageError.make({ operation: \"Schedule Owner protocol\", reason: \"corrupt\" }),\n ),\n );\n\n if (response._tag !== \"Failed\") return response;\n\n return yield* response.failure._tag === \"ScheduleOwnerProtocolError\"\n ? ScheduleStorageError.make({ operation: \"Schedule Owner protocol\", reason: \"corrupt\" })\n : response.failure;\n });\n\n const encodeInput = Effect.fnUntraced(function* <InputSchema extends Schema.Top>(\n agent: DurableSubmitAgent<InputSchema>,\n input: InputSchema[\"Type\"],\n ): Effect.fn.Return<PersistedJson, ScheduleValidationError, InputSchema[\"EncodingServices\"]> {\n const encoded = yield* Schema.encodeEffect(agent.definition.input)(input).pipe(\n Effect.mapError(() =>\n ScheduleValidationError.make({\n message: \"Unable to encode Agent input\",\n }),\n ),\n );\n\n return yield* Schema.decodeUnknownEffect(PersistedJson)(encoded).pipe(\n Effect.mapError(() =>\n ScheduleValidationError.make({\n message: \"Agent input does not satisfy the canonical persistence bounds\",\n }),\n ),\n );\n });\n\n const create: Scheduling[\"Service\"][\"create\"] = Effect.fnUntraced(\n function* (agent, input, options) {\n const payload = yield* encodeInput(agent, input);\n\n const response = yield* call(options.scope.owner, {\n _tag: \"Create\",\n schemaVersion: 1,\n agentId: agent.definition.id,\n input: payload,\n ...options,\n });\n\n return response._tag === \"Snapshot\"\n ? response.value\n : yield* ScheduleStorageError.make({\n operation: \"Schedule Owner protocol\",\n reason: \"corrupt\",\n });\n },\n );\n\n const update: Scheduling[\"Service\"][\"update\"] = Effect.fnUntraced(\n function* (agent, input, options) {\n const payload = yield* encodeInput(agent, input);\n\n const response = yield* call(options.scope.owner, {\n _tag: \"Update\",\n schemaVersion: 1,\n agentId: agent.definition.id,\n input: payload,\n ...options,\n });\n\n return response._tag === \"Snapshot\"\n ? response.value\n : yield* ScheduleStorageError.make({\n operation: \"Schedule Owner protocol\",\n reason: \"corrupt\",\n });\n },\n );\n\n const get: Scheduling[\"Service\"][\"get\"] = Effect.fnUntraced(function* (scope, scheduleId) {\n const response = yield* call(scope.owner, {\n _tag: \"Get\",\n schemaVersion: 1,\n scope,\n scheduleId,\n });\n\n return response._tag === \"Snapshot\"\n ? response.value\n : yield* ScheduleStorageError.make({\n operation: \"Schedule Owner protocol\",\n reason: \"corrupt\",\n });\n });\n\n const list: Scheduling[\"Service\"][\"list\"] = Effect.fnUntraced(function* (\n scope,\n options = {},\n ) {\n const response = yield* call(scope.owner, {\n _tag: \"List\",\n schemaVersion: 1,\n scope,\n ...(options.after === undefined ? {} : { after: options.after }),\n ...(options.limit === undefined ? {} : { limit: options.limit }),\n });\n\n return response._tag === \"Page\"\n ? response.value\n : yield* ScheduleStorageError.make({\n operation: \"Schedule Owner protocol\",\n reason: \"corrupt\",\n });\n });\n\n const control = Effect.fnUntraced(function* (\n operation: \"pause\" | \"resume\" | \"cancel\",\n scope: ScheduleScope,\n scheduleId: ScheduleId,\n expectedRevision: number,\n ) {\n const response = yield* call(scope.owner, {\n _tag: \"Control\",\n schemaVersion: 1,\n operation,\n scope,\n scheduleId,\n expectedRevision,\n });\n\n return response._tag === \"Snapshot\"\n ? response.value\n : yield* ScheduleStorageError.make({\n operation: \"Schedule Owner protocol\",\n reason: \"corrupt\",\n });\n });\n\n return Scheduling.of({\n create,\n update,\n get,\n list,\n pause: (scope, id, revision) => control(\"pause\", scope, id, revision),\n resume: (scope, id, revision) => control(\"resume\", scope, id, revision),\n recover: Effect.fnUntraced(\n function* (scope, scheduleId, expectedRevision, expectedGeneration) {\n const response = yield* call(scope.owner, {\n _tag: \"Recover\",\n schemaVersion: 1,\n scope,\n scheduleId,\n expectedRevision,\n expectedGeneration,\n });\n\n return response._tag === \"Snapshot\"\n ? response.value\n : yield* ScheduleStorageError.make({\n operation: \"Schedule Owner protocol\",\n reason: \"corrupt\",\n });\n },\n ),\n cancel: (scope, id, revision) => control(\"cancel\", scope, id, revision),\n });\n }),\n );\n}\n\nexport class ScheduleOwnerIdentity extends Context.Service<\n ScheduleOwnerIdentity,\n { readonly owner: ScheduleOwner }\n>()(\"@effect-agent/platform-cloudflare/ScheduleOwnerIdentity\") {}\n\nconst decodeOwnerName = Effect.fnUntraced(function* (\n name: string | null | undefined,\n): Effect.fn.Return<ScheduleOwner, ScheduleOwnerProtocolError> {\n if (name === null || name === undefined) {\n return yield* ScheduleOwnerProtocolError.make({\n message: \"Schedule Owner objects require an idFromName identity\",\n });\n }\n\n const tuple = yield* Schema.decodeEffect(\n Schema.fromJsonString(Schema.Tuple([Schema.String, Schema.String])),\n )(name).pipe(\n Effect.mapError(() =>\n ScheduleOwnerProtocolError.make({ message: \"Schedule Owner object name is malformed\" }),\n ),\n );\n\n return yield* Schema.decodeEffect(ScheduleOwner)({\n tenantId: tuple[0],\n ownerId: tuple[1],\n }).pipe(\n Effect.mapError(() =>\n ScheduleOwnerProtocolError.make({ message: \"Schedule Owner object identity is invalid\" }),\n ),\n );\n});\n\nconst alarmStorageError = (operation: string) => (error: { readonly _tag: string }) =>\n ScheduleStorageError.make({\n operation,\n reason: error._tag === \"StorageOperationError\" ? \"unavailable\" : \"corrupt\",\n });\n\nconst transactionLayer: Layer.Layer<\n DoScheduleTransaction,\n never,\n DurableObjectAlarm.DurableObjectAlarm\n> = Layer.effect(\n DoScheduleTransaction,\n Effect.gen(function* () {\n const alarms = yield* DurableObjectAlarm.DurableObjectAlarm;\n\n return DoScheduleTransaction.of({\n run: Effect.fnUntraced(function* (body) {\n const nowMillis = yield* Clock.currentTimeMillis;\n\n return yield* alarms\n .transaction((transaction) =>\n body((replacement) =>\n replacement.deadlineAtMillis === null\n ? transaction\n .cancelAlarm({ id: SCHEDULE_ALARM_ID, tag: SCHEDULE_ALARM_TAG })\n .pipe(Effect.mapError(alarmStorageError(\"cancel Schedule Owner alarm\")))\n : Effect.fromOption(\n DateTime.make(Math.max(replacement.deadlineAtMillis, nowMillis + 1)),\n ).pipe(\n Effect.mapError(() =>\n ScheduleStorageError.make({\n operation: \"validate Schedule Owner alarm deadline\",\n reason: \"corrupt\",\n }),\n ),\n Effect.flatMap((runAt) =>\n transaction\n .scheduleAlarm({\n id: SCHEDULE_ALARM_ID,\n tag: SCHEDULE_ALARM_TAG,\n runAt,\n payload: {\n schemaVersion: 1,\n generation: replacement.generation,\n },\n })\n .pipe(Effect.mapError(alarmStorageError(\"schedule Schedule Owner alarm\"))),\n ),\n ),\n ),\n )\n .pipe(\n Effect.catchTag(\"StorageOperationError\", () =>\n ScheduleStorageError.make({\n operation: \"commit Schedule Owner transaction\",\n reason: \"unavailable\",\n }),\n ),\n );\n }),\n });\n }),\n);\n\ntype ScheduleRuntimeServices =\n | Scheduling\n | ScheduleDriver\n | DoScheduleAlarmControl\n | ScheduleOwnerIdentity\n | DurableObjectAlarm.DurableObjectAlarm;\n\nconst ensureOwner = (\n expected: ScheduleOwner,\n request: ScheduleOwnerRequest,\n): Effect.Effect<void, ScheduleOwnerProtocolError> => {\n const observed = requestOwner(request);\n\n return observed.tenantId === expected.tenantId && observed.ownerId === expected.ownerId\n ? Effect.void\n : Effect.fail(\n ScheduleOwnerProtocolError.make({\n message: \"The request owner does not match the addressed Schedule Owner object\",\n }),\n );\n};\n\nconst handleScheduleRequest = Effect.fnUntraced(function* (\n encoded: unknown,\n): Effect.fn.Return<unknown, never, Scheduling | ScheduleOwnerIdentity> {\n const decoded = yield* decodeScheduleOwnerRequest(encoded).pipe(Effect.result);\n\n if (decoded._tag === \"Failure\") {\n return yield* encodeScheduleOwnerResponse(\n scheduleProtocolFailure(\"The Schedule request could not be decoded\"),\n ).pipe(Effect.orDie);\n }\n const request = decoded.success;\n const { owner } = yield* ScheduleOwnerIdentity;\n const scheduling = yield* Scheduling;\n\n const response = yield* Effect.gen(function* () {\n yield* ensureOwner(owner, request);\n switch (request._tag) {\n case \"Create\": {\n const value = yield* scheduling.create(passthroughAgent(request.agentId), request.input, {\n scope: request.scope,\n scheduleId: request.scheduleId,\n timing: request.timing,\n destination: request.destination,\n deliveryPrincipal: request.deliveryPrincipal,\n definitions: request.definitions,\n ...(request.admissionGroup === undefined\n ? {}\n : { admissionGroup: request.admissionGroup }),\n ...(request.admissionFence === undefined\n ? {}\n : { admissionFence: request.admissionFence }),\n });\n\n return { _tag: \"Snapshot\" as const, value };\n }\n case \"Update\": {\n const value = yield* scheduling.update(passthroughAgent(request.agentId), request.input, {\n scope: request.scope,\n scheduleId: request.scheduleId,\n timing: request.timing,\n destination: request.destination,\n deliveryPrincipal: request.deliveryPrincipal,\n definitions: request.definitions,\n ...(request.admissionGroup === undefined\n ? {}\n : { admissionGroup: request.admissionGroup }),\n ...(request.admissionFence === undefined\n ? {}\n : { admissionFence: request.admissionFence }),\n expectedRevision: request.expectedRevision,\n });\n\n return { _tag: \"Snapshot\" as const, value };\n }\n case \"Get\":\n return {\n _tag: \"Snapshot\" as const,\n value: yield* scheduling.get(request.scope, request.scheduleId),\n };\n case \"List\":\n return {\n _tag: \"Page\" as const,\n value: yield* scheduling.list(request.scope, {\n ...(request.after === undefined ? {} : { after: request.after }),\n ...(request.limit === undefined ? {} : { limit: request.limit }),\n }),\n };\n case \"Recover\":\n return {\n _tag: \"Snapshot\" as const,\n value: yield* scheduling.recover(\n request.scope,\n request.scheduleId,\n request.expectedRevision,\n request.expectedGeneration,\n ),\n };\n case \"Control\": {\n const value =\n request.operation === \"pause\"\n ? yield* scheduling.pause(request.scope, request.scheduleId, request.expectedRevision)\n : request.operation === \"resume\"\n ? yield* scheduling.resume(\n request.scope,\n request.scheduleId,\n request.expectedRevision,\n )\n : yield* scheduling.cancel(\n request.scope,\n request.scheduleId,\n request.expectedRevision,\n );\n\n return { _tag: \"Snapshot\" as const, value };\n }\n }\n }).pipe(\n Effect.map((value): ScheduleOwnerResponse => value),\n Effect.catch((failure) =>\n Schema.is(ScheduleOwnerFailure)(failure)\n ? Effect.succeed({ _tag: \"Failed\" as const, failure })\n : Effect.succeed(\n scheduleProtocolFailure(\"The Schedule operation failed outside its public contract\"),\n ),\n ),\n );\n\n return yield* encodeScheduleOwnerResponse(response).pipe(Effect.orDie);\n});\n\n/** @internal The complete native alarm operation, including its event deadline. */\nexport const scheduleAlarmHandler = (limits: SchedulingLimits) =>\n DurableObjectAlarm.processDue((event) =>\n Effect.gen(function* () {\n if (event.tag !== SCHEDULE_ALARM_TAG || event.id !== SCHEDULE_ALARM_ID) {\n return yield* ScheduleAlarmProtocolError.make({\n message: `Unsupported Schedule Owner alarm ${event.tag}/${event.id}`,\n });\n }\n yield* Schema.decodeUnknownEffect(ScheduleAlarmPayload)(event.payload).pipe(\n Effect.mapError(() =>\n ScheduleAlarmProtocolError.make({\n message: \"Unsupported Schedule Owner alarm payload version\",\n }),\n ),\n );\n const scheduling = yield* ScheduleDriver;\n const alarmControl = yield* DoScheduleAlarmControl;\n const { owner } = yield* ScheduleOwnerIdentity;\n const nowMillis = yield* Clock.currentTimeMillis;\n\n yield* alarmControl.prearm(nowMillis + limits.recoveryPollMillis);\n const pass = yield* scheduling.runDue(owner);\n\n if (pass.failed > 0) {\n yield* alarmControl.prearm((yield* Clock.currentTimeMillis) + limits.recoveryPollMillis);\n } else {\n yield* alarmControl.reconcile;\n }\n }),\n ).pipe(\n // Bound due acquisition and acknowledgement as well as admission. Prepared occurrences\n // and their replacement alarm survive interruption and retain their idempotency keys.\n Effect.timeout(\"14 minutes\"),\n Effect.asVoid,\n );\n\nexport interface ScheduleOwnerObjectInstance extends InstanceType<\n EffectCfDurableObject.DurableObjectClass<Record<never, never>, ScheduleRuntimeServices>\n> {\n schedule(encoded: unknown): Promise<unknown>;\n alarm(alarmInfo?: AlarmInvocationInfo): Promise<void> | void;\n}\n\nexport interface ScheduleOwnerObjectClass {\n new (ctx: DurableObjectState, env: Cloudflare.Env): ScheduleOwnerObjectInstance;\n}\n\n/**\n * The host Layer supplies authorization and routing and is cached for the object incarnation.\n * Cloudflare eviction does not guarantee its finalizers run. Do not acquire resources requiring\n * cleanup in this Layer; acquire them inside scoped `manage` / `prepare` operations instead.\n * Native services belong to effect-cf; the database and alarm runtime remain instance-owned.\n */\nexport const makeScheduleOwnerObjectClass = <E>(\n host: Layer.Layer<\n ScheduleAuthorizer | ThreadObjectNamespace,\n E,\n EffectCfDurableObjectState.DurableObjectState | WorkerEnvironment | ScheduleOwnerIdentity\n >,\n limits: SchedulingLimits = defaultSchedulingLimits,\n): ScheduleOwnerObjectClass => {\n const ownerLayer = Layer.effect(\n ScheduleOwnerIdentity,\n Effect.gen(function* () {\n const state = yield* EffectCfDurableObjectState.DurableObjectState;\n\n return ScheduleOwnerIdentity.of({ owner: yield* decodeOwnerName(state.raw.id.name) });\n }),\n );\n\n const sqlLayer = Layer.unwrap(\n Effect.map(EffectCfDurableObjectState.DurableObjectState, (state) =>\n SqliteClient.layer({ storage: state.raw.storage }),\n ),\n );\n\n const application = Layer.merge(Scheduling.layer(limits), ScheduleDriver.layer(limits)).pipe(\n Layer.provideMerge(\n scheduleStoreLayer.pipe(Layer.provide(transactionLayer), Layer.provide(sqlLayer)),\n ),\n Layer.provide(\n cloudflareScheduledInputAdmissionLayer.pipe(\n Layer.provide(cloudflarePreparedInputAdmissionLayer),\n Layer.provide(CloudflareThreadClient.layer),\n ),\n ),\n Layer.provide(ScheduleWakeNoop),\n Layer.provide(cloudflareCryptoLayer),\n Layer.provideMerge(DurableObjectAlarm.DurableObjectAlarm.layer),\n Layer.provide(host),\n Layer.provideMerge(ownerLayer),\n );\n\n const runtime: Layer.Layer<\n ScheduleRuntimeServices,\n E | ScheduleStorageError | ScheduleOwnerProtocolError | ScheduleValidationError,\n EffectCfDurableObjectState.DurableObjectState | WorkerEnvironment\n > = Layer.effectContext(\n Effect.gen(function* () {\n const state = yield* EffectCfDurableObjectState.DurableObjectState;\n const scope = yield* Effect.scope;\n\n return yield* state.blockConcurrencyWhile(Layer.buildWithScope(application, scope));\n }),\n );\n\n const rpc = {\n schedule: (encoded: unknown) => handleScheduleRequest(encoded),\n } satisfies EffectCfDurableObject.DurableObjectRpc<ScheduleRuntimeServices>;\n\n const ScheduleOwnerObject = EffectCfDurableObject.make(runtime, {\n initialize: Effect.void,\n rpc,\n alarms: scheduleAlarmHandler(limits),\n });\n\n return ScheduleOwnerObject;\n};\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
|
|
2
|
-
import { X as cloudflareCryptoLayer, o as CloudflareThreadClient } from "./CloudflareThreadClient-
|
|
3
|
-
import { t as cloudflarePreparedInputAdmissionLayer } from "./prepared-admission-
|
|
2
|
+
import { X as cloudflareCryptoLayer, o as CloudflareThreadClient } from "./CloudflareThreadClient-DU548EEj.mjs";
|
|
3
|
+
import { t as cloudflarePreparedInputAdmissionLayer } from "./prepared-admission-BoUPHSNQ.mjs";
|
|
4
4
|
import { Principal } from "@yielded/agent/submission-ledger";
|
|
5
5
|
import { Cause, Clock, Context, DateTime, Effect, Layer, Schema } from "effect";
|
|
6
6
|
import { DurableObject, DurableObjectAlarm, DurableObjectState } from "effect-cf";
|
|
@@ -50,17 +50,17 @@ const makeSubscriptionPartitionAlarmHandler = Effect.fnUntraced(function* (optio
|
|
|
50
50
|
const services = (yield* Effect.context()).pipe(Context.omit(Subscriptions, SubscriptionIntake, SubscriptionDriver));
|
|
51
51
|
return {
|
|
52
52
|
tag: options.tag,
|
|
53
|
-
handle:
|
|
53
|
+
handle: Effect.fnUntraced(function* (event) {
|
|
54
54
|
if (event.tag !== options.tag) return yield* SubscriptionAlarmProtocolError.make({ message: "Ancillary alarm tag mismatch" });
|
|
55
55
|
const payload = yield* Schema.decodeEffect(options.payload)(event.payload).pipe(Effect.mapError(() => SubscriptionAlarmProtocolError.make({ message: "Invalid ancillary alarm payload" })));
|
|
56
56
|
yield* options.handle({
|
|
57
57
|
...event,
|
|
58
58
|
payload
|
|
59
59
|
});
|
|
60
|
-
}).pipe(Effect.scoped, Effect.timeoutOrElse({
|
|
60
|
+
}, (effect) => effect.pipe(Effect.scoped, Effect.timeoutOrElse({
|
|
61
61
|
duration: options.timeoutMillis,
|
|
62
62
|
orElse: () => SubscriptionAlarmExtensionError.make({ code: "timeout" })
|
|
63
|
-
}), Effect.provideContext(services))
|
|
63
|
+
}), Effect.provideContext(services)))
|
|
64
64
|
};
|
|
65
65
|
});
|
|
66
66
|
var SubscriptionPartitionProtocolError = class extends Schema.TaggedError()("SubscriptionPartitionProtocolError", { message: Schema.String.check(Schema.isMaxLength(4096)) }) {};
|
|
@@ -242,7 +242,7 @@ var CloudflareSubscriptionsClient = class {
|
|
|
242
242
|
});
|
|
243
243
|
const subscriptions = Subscriptions.of({
|
|
244
244
|
recoverSubscription: (scope, key, revision) => changeState(scope, key, revision, "RecoverSubscription"),
|
|
245
|
-
getSubscription:
|
|
245
|
+
getSubscription: Effect.fnUntraced(function* (scope, key) {
|
|
246
246
|
const response = yield* call(scope.partition, {
|
|
247
247
|
_tag: "GetSubscription",
|
|
248
248
|
schemaVersion: 1,
|
|
@@ -253,7 +253,7 @@ var CloudflareSubscriptionsClient = class {
|
|
|
253
253
|
const failure = failed(response);
|
|
254
254
|
return yield* failure._tag === "SubscriptionError" ? failure : asProtocolError();
|
|
255
255
|
}),
|
|
256
|
-
recoverDelivery: (scope, key, expectedGeneration)
|
|
256
|
+
recoverDelivery: Effect.fnUntraced(function* (scope, key, expectedGeneration) {
|
|
257
257
|
const response = yield* call(scope.partition, {
|
|
258
258
|
_tag: "RecoverDelivery",
|
|
259
259
|
expectedGeneration,
|
|
@@ -265,7 +265,7 @@ var CloudflareSubscriptionsClient = class {
|
|
|
265
265
|
const failure = failed(response);
|
|
266
266
|
return yield* failure._tag === "SubscriptionError" || failure._tag === "SubscriptionFailpointError" ? failure : asProtocolError();
|
|
267
267
|
}),
|
|
268
|
-
updateSubscription: (scope, key, expectedRevision, options)
|
|
268
|
+
updateSubscription: Effect.fnUntraced(function* (scope, key, expectedRevision, options) {
|
|
269
269
|
const response = yield* call(scope.partition, {
|
|
270
270
|
_tag: "UpdateSubscription",
|
|
271
271
|
schemaVersion: 1,
|
|
@@ -280,7 +280,7 @@ var CloudflareSubscriptionsClient = class {
|
|
|
280
280
|
}),
|
|
281
281
|
pauseSubscription: (scope, key, revision) => changeState(scope, key, revision, "PauseSubscription"),
|
|
282
282
|
resumeSubscription: (scope, key, revision) => changeState(scope, key, revision, "ResumeSubscription"),
|
|
283
|
-
subscribe:
|
|
283
|
+
subscribe: Effect.fnUntraced(function* (scope, options) {
|
|
284
284
|
const response = yield* call(scope.partition, {
|
|
285
285
|
_tag: "Subscribe",
|
|
286
286
|
schemaVersion: 1,
|
|
@@ -292,7 +292,7 @@ var CloudflareSubscriptionsClient = class {
|
|
|
292
292
|
if (failure._tag === "SubscriptionError" || failure._tag === "SubscriptionSourceError" || failure._tag === "SubscriptionFailpointError") return yield* failure;
|
|
293
293
|
return yield* asProtocolError();
|
|
294
294
|
}),
|
|
295
|
-
listSubscriptions: (scope, after, limit)
|
|
295
|
+
listSubscriptions: Effect.fnUntraced(function* (scope, after, limit) {
|
|
296
296
|
const response = yield* call(scope.partition, {
|
|
297
297
|
_tag: "ListSubscriptions",
|
|
298
298
|
schemaVersion: 1,
|
|
@@ -304,7 +304,7 @@ var CloudflareSubscriptionsClient = class {
|
|
|
304
304
|
const failure = failed(response);
|
|
305
305
|
return yield* failure._tag === "SubscriptionError" ? failure : asProtocolError();
|
|
306
306
|
}),
|
|
307
|
-
cancelSubscription: (scope, key, expectedRevision)
|
|
307
|
+
cancelSubscription: Effect.fnUntraced(function* (scope, key, expectedRevision) {
|
|
308
308
|
const response = yield* call(scope.partition, {
|
|
309
309
|
_tag: "CancelSubscription",
|
|
310
310
|
...expectedRevision === void 0 ? {} : { expectedRevision },
|
|
@@ -317,7 +317,7 @@ var CloudflareSubscriptionsClient = class {
|
|
|
317
317
|
if (failure._tag === "SubscriptionError" || failure._tag === "SubscriptionFailpointError") return yield* failure;
|
|
318
318
|
return yield* asProtocolError();
|
|
319
319
|
}),
|
|
320
|
-
listDeliveries: (scope, key, after, limit)
|
|
320
|
+
listDeliveries: Effect.fnUntraced(function* (scope, key, after, limit) {
|
|
321
321
|
const response = yield* call(scope.partition, {
|
|
322
322
|
_tag: "ListDeliveries",
|
|
323
323
|
schemaVersion: 1,
|
|
@@ -332,7 +332,7 @@ var CloudflareSubscriptionsClient = class {
|
|
|
332
332
|
})
|
|
333
333
|
});
|
|
334
334
|
const intake = SubscriptionIntake.of({
|
|
335
|
-
accept: (principal, source, payload)
|
|
335
|
+
accept: Effect.fnUntraced(function* (principal, source, payload) {
|
|
336
336
|
const request = yield* Schema.decodeUnknownEffect(AcceptRequest)({
|
|
337
337
|
_tag: "Accept",
|
|
338
338
|
schemaVersion: 1,
|
|
@@ -350,7 +350,7 @@ var CloudflareSubscriptionsClient = class {
|
|
|
350
350
|
if (failure._tag === "SubscriptionError" || failure._tag === "SubscriptionSourceError" || failure._tag === "SubscriptionFailpointError") return yield* failure;
|
|
351
351
|
return yield* asProtocolError();
|
|
352
352
|
}),
|
|
353
|
-
status: (principal, source, eventId)
|
|
353
|
+
status: Effect.fnUntraced(function* (principal, source, eventId) {
|
|
354
354
|
const response = yield* call(partition, {
|
|
355
355
|
_tag: "Status",
|
|
356
356
|
schemaVersion: 1,
|
|
@@ -447,7 +447,7 @@ const handleRequest = Effect.fnUntraced(function* (encoded) {
|
|
|
447
447
|
const alarmStorageError = (code) => () => storageFailure(code);
|
|
448
448
|
const transactionLayer = Layer.effect(DoSubscriptionTransaction, Effect.gen(function* () {
|
|
449
449
|
const alarms = yield* DurableObjectAlarm.DurableObjectAlarm;
|
|
450
|
-
return DoSubscriptionTransaction.of({ run:
|
|
450
|
+
return DoSubscriptionTransaction.of({ run: Effect.fnUntraced(function* (body) {
|
|
451
451
|
const nowMillis = yield* Clock.currentTimeMillis;
|
|
452
452
|
return yield* alarms.transaction((transaction) => body((replacement) => replacement.deadlineAtMillis === null ? transaction.cancelAlarm({
|
|
453
453
|
id: SUBSCRIPTION_ALARM_ID,
|