@yielded/agent-platform-cloudflare 0.1.0-beta.173 → 0.1.0-beta.175
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-B44efvB1.mjs} +162 -103
- package/dist/Alarm-B44efvB1.mjs.map +1 -0
- package/dist/Alarm.d.mts +2 -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-Ai3MTs3X.mjs} +43 -40
- package/dist/CloudflareThreadClient-Ai3MTs3X.mjs.map +1 -0
- 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-CRbLbdXM.d.mts → ThreadObject-CxNlhoPL.d.mts} +3 -3
- package/dist/{ThreadObject-CGIaz6Jv.mjs → ThreadObject-DGvlHWYi.mjs} +50 -52
- package/dist/ThreadObject-DGvlHWYi.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 +2 -2
- package/dist/index.mjs +5 -5
- package/dist/{prepared-admission-CSdzFM_v.mjs → prepared-admission-DYdffQ8K.mjs} +2 -2
- package/dist/{prepared-admission-CSdzFM_v.mjs.map → prepared-admission-DYdffQ8K.mjs.map} +1 -1
- package/package.json +1 -1
- package/src/Alarm.ts +293 -155
- 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 +258 -269
- package/src/InteractiveBrowser.ts +43 -17
- package/src/ThreadObject.ts +51 -45
- 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 +108 -87
- package/src/internal/message-delivery.ts +61 -37
- 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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InteractiveBrowser-BHNlwjZL.mjs","names":[],"sources":["../src/internal/browser-failure.ts","../src/internal/browser-binding.ts","../src/internal/page-function.ts","../src/internal/browser-file-selection.ts","../src/internal/browser-session-lifecycle.ts","../src/InteractiveBrowser.ts"],"sourcesContent":["import type { Effect } from \"effect\";\nimport { Cause, Data, ErrorReporter, Predicate, Schema } from \"effect\";\n\n/** Source-authored stages and classifications only; never retain SDK text or session capabilities. */\nexport class BrowserRunFailure extends Data.TaggedError(\"BrowserRunFailure\")<{\n readonly operation: string;\n readonly reason:\n | \"provider\"\n | \"timeout\"\n | \"malformed\"\n | \"configuration\"\n | \"authorization\"\n | \"rate-limited\"\n | \"pending\";\n readonly status?: number;\n readonly cause?: BrowserRunFailure | { readonly name: string };\n}> {\n readonly [ErrorReporter.severity] = \"Error\" as const;\n}\n\n/** A public projection of an already reported private failure must not produce another issue. */\nexport const reportedBrowserError = <A extends object>(error: A): A =>\n Object.assign(error, { [ErrorReporter.ignore]: true });\n\nexport const inheritBrowserReport = <A extends object>(original: unknown, error: A): A =>\n ErrorReporter.isIgnored(original) ? reportedBrowserError(error) : error;\n\nconst reasonSchema = Schema.Literals([\n \"provider\",\n \"timeout\",\n \"malformed\",\n \"configuration\",\n \"authorization\",\n \"rate-limited\",\n \"pending\",\n]);\n\nconst statusSchema = Schema.Int.check(Schema.isBetween({ minimum: 100, maximum: 599 }));\n\nconst failureNames = new Set([\n \"TypeError\",\n \"RangeError\",\n \"SyntaxError\",\n \"TimeoutError\",\n \"SchemaError\",\n]);\n\nexport const browserFailure = (operation: string, cause?: unknown): BrowserRunFailure =>\n cause instanceof BrowserRunFailure\n ? cause\n : new BrowserRunFailure({\n operation,\n reason:\n Predicate.isObject(cause) && \"reason\" in cause && Schema.is(reasonSchema)(cause.reason)\n ? cause.reason\n : \"provider\",\n ...(Predicate.isObject(cause) && \"status\" in cause && Schema.is(statusSchema)(cause.status)\n ? { status: cause.status }\n : {}),\n ...(Predicate.isObject(cause) &&\n \"cause\" in cause &&\n cause.cause instanceof BrowserRunFailure\n ? { cause: cause.cause }\n : Predicate.isObject(cause) &&\n \"name\" in cause &&\n typeof cause.name === \"string\" &&\n failureNames.has(cause.name)\n ? { cause: { name: cause.name } }\n : {}),\n });\n\n/** Keep mixed defects and interruptions distinct while discarding all foreign diagnostic content. */\nexport const reportBrowserCause = <E>(\n operation: string,\n cause: Cause.Cause<E>,\n): Effect.Effect<void> =>\n ErrorReporter.report(\n Cause.fromReasons(\n cause.reasons\n .filter((reason) => !Cause.isFailReason(reason) || !ErrorReporter.isIgnored(reason.error))\n .map((reason) => {\n switch (reason._tag) {\n case \"Fail\":\n return Cause.makeFailReason(browserFailure(operation, reason.error));\n case \"Die\":\n return Cause.makeDieReason(browserFailure(operation, reason.defect));\n case \"Interrupt\":\n return reason;\n }\n }),\n ),\n );\n","/// <reference types=\"@cloudflare/workers-types\" />\nimport { Cause, Context, Effect, Layer, Schema } from \"effect\";\nimport puppeteer, {\n type Browser,\n type ConnectionTransport,\n} from \"puppeteer-core/lib/esm/puppeteer/puppeteer-core-browser.js\";\n\nimport {\n browserFailure,\n BrowserRunFailure,\n reportBrowserCause,\n reportedBrowserError,\n} from \"./browser-failure.ts\";\n\nconst Acquired = Schema.Struct({ sessionId: Schema.String.check(Schema.isUUID()) });\n\nconst VersionReply = Schema.fromJsonString(\n Schema.Struct({\n id: Schema.optionalKey(Schema.Int),\n result: Schema.optionalKey(Schema.Unknown),\n error: Schema.optionalKey(Schema.Unknown),\n }),\n);\n\nconst Version = Schema.Struct({\n product: Schema.NonEmptyString,\n protocolVersion: Schema.NonEmptyString,\n});\n\n/** Private attachment ownership is available before asynchronous SDK initialization completes. */\nexport interface BrowserRunAttachment {\n readonly browser: Promise<Browser>;\n /** Fence SDK dispatch/callbacks and await local socket closure; never terminate the provider. */\n readonly retire: Effect.Effect<void, BrowserRunFailure>;\n}\n\n/** Native transport port shared by both scoped adapters; the Layer owns the foreign binding. */\nexport class BrowserRunBinding extends Context.Service<\n BrowserRunBinding,\n {\n readonly acquire: (\n keepAliveMillis: number,\n operation: \"interactive.acquire\" | \"session.acquire\",\n ) => Promise<string>;\n readonly connect: (\n sessionId: string,\n operation: string,\n signal?: AbortSignal,\n ) => BrowserRunAttachment;\n readonly keepAlive: (sessionId: string) => Effect.Effect<void, BrowserRunFailure>;\n }\n>()(\"@effect-agent/platform-cloudflare/internal/BrowserRunBinding\") {\n static layer(browser: Pick<BrowserRun, \"fetch\">) {\n const upgrade = async (sessionId: string, operation: string, signal?: AbortSignal) => {\n const response = await browser.fetch(\n `https://browser-rendering.cloudflare.com/v1/devtools/browser/${sessionId}`,\n { headers: { Upgrade: \"websocket\" }, ...(signal === undefined ? {} : { signal }) },\n );\n\n if (response.status !== 101) {\n const failure = new BrowserRunFailure({\n operation,\n reason: \"provider\",\n status: response.status,\n });\n\n try {\n await response.body?.cancel();\n } catch {\n // Preserve the provider refusal when local response release also fails.\n }\n // oxlint-disable-next-line effect/no-untyped-throw -- Native BrowserRun acquisition Promise preserves the provider refusal after body cleanup.\n throw failure;\n }\n const socket = response.webSocket;\n\n // oxlint-disable-next-line effect/no-untyped-throw -- Native BrowserRun upgrade Promise must reject a malformed WebSocket response.\n if (socket === null) throw new BrowserRunFailure({ operation, reason: \"malformed\" });\n\n return socket;\n };\n\n return Layer.succeed(this)({\n // One allocation path, with recording explicitly disabled for private sessions.\n acquire: async (keepAliveMillis, operation) => {\n const response = await browser.fetch(\n `https://browser-rendering.cloudflare.com/v1/devtools/browser?keep_alive=${keepAliveMillis}&recording=false`,\n { method: \"POST\" },\n );\n\n if (response.status !== 200) {\n const failure = new BrowserRunFailure({\n operation,\n reason: \"provider\",\n status: response.status,\n });\n\n try {\n await response.body?.cancel();\n } catch {\n // Body cancellation cannot replace the acquisition refusal.\n }\n // oxlint-disable-next-line effect/no-untyped-throw -- Native BrowserRun acquisition Promise preserves the provider refusal after body cleanup.\n throw failure;\n }\n\n return Schema.decodeUnknownSync(Acquired)(await response.json()).sessionId;\n },\n connect: (sessionId, operation, signal) => {\n let socket: WebSocket | undefined;\n let retired = false;\n let closedByAbort = false;\n let retirementFailure: BrowserRunFailure | undefined;\n\n const disconnectOperation =\n operation === \"session.connect\" ? \"session.disconnect\" : \"interactive.disconnect\";\n\n const transport: ConnectionTransport = {\n send: (message) => {\n if (retired || socket === undefined)\n // oxlint-disable-next-line effect/no-untyped-throw -- Native Puppeteer transport rejects fenced dispatch or initialization; its Effect owner maps the failure.\n throw new BrowserRunFailure({ operation, reason: \"provider\" });\n socket.send(message);\n },\n close: () => retireNow(),\n };\n\n const onMessage = (event: MessageEvent) => {\n if (!retired) transport.onmessage?.(event.data);\n };\n\n const fence = () => {\n if (retired) return;\n retired = true;\n const notify = transport.onclose;\n\n transport.onmessage = undefined;\n transport.onclose = undefined;\n // Notify the SDK before touching the socket: disposal must reject pending CDP calls\n // even when the raw transport cannot close. The send fence also covers queued work.\n try {\n notify?.();\n } finally {\n socket?.removeEventListener(\"message\", onMessage);\n }\n };\n\n const retireNow = () => {\n try {\n fence();\n } catch (cause) {\n retirementFailure ??= browserFailure(disconnectOperation, cause);\n }\n try {\n // Manual-close runtimes also require a reply when the peer leaves us CLOSING.\n if (socket !== undefined && socket.readyState < WebSocket.CLOSED) socket.close();\n } catch (cause) {\n retirementFailure ??= browserFailure(disconnectOperation, cause);\n }\n // oxlint-disable-next-line effect/no-untyped-throw -- Native transport close callback preserves the first retirement failure for its Effect owner.\n if (retirementFailure !== undefined) throw retirementFailure;\n };\n\n const abort = () => {\n closedByAbort = socket?.readyState === WebSocket.OPEN;\n try {\n retireNow();\n } catch {\n // The attachment owner observes this separately from the initiating failure.\n }\n };\n\n signal?.addEventListener(\"abort\", abort, { once: true });\n\n const initialized = (async () => {\n try {\n signal?.throwIfAborted();\n socket = await upgrade(sessionId, operation, signal);\n socket.accept();\n if (retired || signal?.aborted) {\n // No SDK command may escape a late upgrade. Preserve a late local-close\n // failure independently of the cancellation already returned to the owner.\n retireNow();\n signal?.throwIfAborted();\n // oxlint-disable-next-line effect/no-untyped-throw -- Native Puppeteer transport rejects fenced dispatch or initialization; its Effect owner maps the failure.\n throw new BrowserRunFailure({ operation, reason: \"provider\" });\n }\n socket.addEventListener(\"message\", onMessage);\n socket.addEventListener(\n \"close\",\n () => {\n try {\n retireNow();\n } catch (cause) {\n retirementFailure ??= browserFailure(disconnectOperation, cause);\n }\n },\n { once: true },\n );\n\n // Attaching must not replace the viewport owned by the host or another viewer.\n return await puppeteer.connect({ transport, defaultViewport: null });\n } catch (cause) {\n try {\n retireNow();\n } catch {\n // Preserve both facts: initialization failed, and retirement may be unconfirmed.\n }\n const failure = browserFailure(operation, cause);\n\n const localCancellation =\n cause instanceof Error &&\n signal?.aborted === true &&\n (cause === signal.reason || (closedByAbort && cause.name === \"TargetCloseError\"));\n\n // oxlint-disable-next-line effect/no-untyped-throw -- Native SDK initialization Promise preserves cancellation provenance after transport retirement.\n throw localCancellation ? reportedBrowserError(failure) : failure;\n } finally {\n signal?.removeEventListener(\"abort\", abort);\n }\n })();\n\n return {\n browser: initialized,\n retire: Effect.callback<void, BrowserRunFailure>((resume) => {\n const connected = socket;\n const onClose = () => resume(Effect.void);\n\n try {\n retireNow();\n if (connected === undefined || connected.readyState === WebSocket.CLOSED)\n resume(Effect.void);\n else connected.addEventListener(\"close\", onClose, { once: true });\n } catch (cause) {\n resume(Effect.fail(browserFailure(disconnectOperation, cause)));\n }\n\n return Effect.sync(() => connected?.removeEventListener(\"close\", onClose));\n }),\n };\n },\n keepAlive: Effect.fnUntraced(function* (sessionId: string) {\n const operation = \"session.keepAlive\";\n const runReport = Effect.runPromiseWith(yield* Effect.context<never>());\n\n const release = (socket: WebSocket) =>\n Effect.sync(() => socket.close()).pipe(\n Effect.catchCause((cause) => reportBrowserCause(operation, cause)),\n );\n\n const socket = yield* Effect.acquireRelease(\n Effect.tryPromise({\n try: async (signal) => {\n let acquired: WebSocket | undefined;\n\n try {\n acquired = await upgrade(sessionId, operation, signal);\n acquired.accept();\n // The binding may resolve an upgrade after the Effect was interrupted.\n signal.throwIfAborted();\n\n return acquired;\n } catch (cause) {\n if (acquired !== undefined) await runReport(release(acquired));\n if (signal.aborted && cause !== signal.reason)\n await runReport(reportBrowserCause(operation, Cause.fail(cause)));\n // oxlint-disable-next-line effect/no-untyped-throw -- Rethrow the foreign upgrade failure after late-acquisition cleanup, preserving abort identity.\n throw cause;\n }\n },\n catch: (cause) => browserFailure(operation, cause),\n }),\n release,\n { interruptible: true },\n );\n\n yield* Effect.callback<void, BrowserRunFailure>((resume) => {\n const finish = (result: Effect.Effect<void, BrowserRunFailure>) => {\n removeListeners();\n resume(result);\n };\n\n const fail = (reason: BrowserRunFailure[\"reason\"]) =>\n finish(Effect.fail(new BrowserRunFailure({ operation, reason })));\n\n const onMessage = (event: MessageEvent) => {\n try {\n if (typeof event.data !== \"string\" || event.data.length > 16_384) {\n fail(\"malformed\");\n\n return;\n }\n const reply = Schema.decodeSync(VersionReply)(event.data);\n\n if (reply.id !== 1) return;\n if (reply.error !== undefined) {\n fail(\"provider\");\n\n return;\n }\n Schema.decodeUnknownSync(Version)(reply.result);\n finish(Effect.void);\n } catch {\n fail(\"malformed\");\n }\n };\n\n const onClose = () => fail(\"provider\");\n\n const removeListeners = () => {\n socket.removeEventListener(\"message\", onMessage);\n socket.removeEventListener(\"close\", onClose);\n socket.removeEventListener(\"error\", onClose);\n };\n\n socket.addEventListener(\"message\", onMessage);\n socket.addEventListener(\"close\", onClose);\n socket.addEventListener(\"error\", onClose);\n try {\n socket.send(JSON.stringify({ id: 1, method: \"Browser.getVersion\" }));\n } catch (cause) {\n finish(Effect.fail(browserFailure(operation, cause)));\n }\n\n return Effect.sync(removeListeners);\n });\n }, Effect.scoped),\n });\n }\n}\n","/**\n * Puppeteer sends a page function's source to the browser. Bundlers that keep function names,\n * including Wrangler by default, insert `__name(...)` calls into that source, and the page has no\n * such helper. The returned function's source declares a local no-op `__name` first.\n */\nexport const pageFunction = <A extends ReadonlyArray<unknown>, R>(\n fn: (...args: A) => R,\n): ((...args: A) => R) =>\n Object.assign((...args: A) => fn(...args), {\n toString: () =>\n `(...args) => { const __name = (target) => target; return (${Function.prototype.toString.call(fn)})(...args); }`,\n });\n","import type { BrowserSelectFileRequest } from \"@yielded/agent/interactive-browser\";\nimport { Base64 } from \"effect/encoding\";\nimport type { Page } from \"puppeteer-core/lib/esm/puppeteer/puppeteer-core-browser.js\";\n\nimport { pageFunction } from \"./page-function.ts\";\n\ntype Element = NonNullable<Awaited<ReturnType<Page[\"$\"]>>>;\n\n// Both calls run this fixed function in Chromium. No caller-provided code or\n// filesystem path is evaluated, and none of the file bytes enter diagnostics.\nfunction setFileSelection(element: object, encoded: string, name: string, type: string): void {\n if (\n Reflect.get(element, \"type\") !== \"file\" ||\n Reflect.get(element, \"disabled\") ||\n Reflect.get(element, \"webkitdirectory\")\n ) {\n // oxlint-disable-next-line effect/no-untyped-throw, effect/no-native-error -- Runs in Chromium; a native exception is the CDP evaluation failure protocol.\n throw new Error(\"The target is not an enabled file input\");\n }\n const bytes = Uint8Array.from(atob(encoded), (character) => character.charCodeAt(0));\n const Transfer = Reflect.get(globalThis, \"DataTransfer\");\n const transfer = new Transfer();\n\n transfer.items.add(new File([bytes], name, { type }));\n Reflect.set(element, \"files\", transfer.files);\n const selected = Reflect.get(element, \"files\");\n\n if (\n selected?.length !== 1 ||\n selected[0]?.size !== bytes.length ||\n selected[0]?.name !== name ||\n selected[0]?.type !== type\n ) {\n // oxlint-disable-next-line effect/no-untyped-throw, effect/no-native-error -- Runs in Chromium; a native exception is the CDP evaluation failure protocol.\n throw new Error(\"The input did not retain the selected file\");\n }\n const dispatch = Reflect.get(element, \"dispatchEvent\");\n\n Reflect.apply(dispatch, element, [new Event(\"input\", { bubbles: true })]);\n Reflect.apply(dispatch, element, [new Event(\"change\", { bubbles: true })]);\n}\n\nexport const makeFileSelection =\n (page: Page) => async (request: BrowserSelectFileRequest, signal: AbortSignal) => {\n const encoded = Base64.encode(request.bytes);\n const session = request.target === \"chooser\" ? await page.createCDPSession() : undefined;\n\n if (session !== undefined) {\n try {\n await session.send(\"Page.enable\");\n await session.send(\"Page.setInterceptFileChooserDialog\", { enabled: true });\n } catch (cause) {\n // Initialization remains the primary failure if best-effort cleanup also rejects.\n await session.detach().catch(() => {});\n // oxlint-disable-next-line effect/no-untyped-throw -- Preserve the original CDP initialization failure after detaching its session.\n throw cause;\n }\n }\n\n const select = async (element: Element): Promise<void> => {\n if (session === undefined)\n return element.evaluate(\n pageFunction(setFileSelection),\n encoded,\n request.fileName,\n request.mediaType,\n );\n let onOpened: (event: { backendNodeId?: number }) => void = () => {};\n let onAbort: () => void = () => {};\n let timer: ReturnType<typeof setTimeout> | undefined;\n\n const opened = new Promise<number>((resolve, reject) => {\n onOpened = (event) =>\n event.backendNodeId === undefined\n ? // oxlint-disable-next-line effect/no-native-error -- Native CDP file-chooser port rejects through its Promise; its Effect caller owns typed error mapping.\n reject(new Error(\"The chooser has no file input\"))\n : resolve(event.backendNodeId);\n // oxlint-disable-next-line effect/no-native-error -- Native CDP file-chooser port rejects through its Promise; its Effect caller owns typed error mapping.\n onAbort = () => reject(new Error(\"File selection interrupted\"));\n session.on(\"Page.fileChooserOpened\", onOpened);\n signal.addEventListener(\"abort\", onAbort, { once: true });\n // oxlint-disable-next-line effect/no-native-error -- Native CDP file-chooser port rejects through its Promise; its Effect caller owns typed error mapping.\n timer = setTimeout(() => reject(new Error(\"No file chooser opened\")), 5_000);\n if (signal.aborted) onAbort();\n });\n\n try {\n const [backendNodeId] = await Promise.all([opened, element.click()]);\n\n // oxlint-disable-next-line effect/no-untyped-throw, effect/no-native-error -- Native CDP file-chooser port rejects through its Promise; its Effect caller owns typed error mapping.\n if (signal.aborted) throw new Error(\"File selection interrupted\");\n const resolved = await session.send(\"DOM.resolveNode\", { backendNodeId });\n\n const objectId = resolved.object.objectId;\n\n // oxlint-disable-next-line effect/no-untyped-throw, effect/no-native-error -- Native CDP file-chooser port rejects through its Promise; its Effect caller owns typed error mapping.\n if (objectId === undefined) throw new Error(\"The chooser has no file input\");\n // oxlint-disable-next-line effect/no-untyped-throw, effect/no-native-error -- Native CDP file-chooser port rejects through its Promise; its Effect caller owns typed error mapping.\n if (signal.aborted) throw new Error(\"File selection interrupted\");\n\n const result = await session.send(\"Runtime.callFunctionOn\", {\n objectId,\n functionDeclaration: `function(encoded, name, type) { (${setFileSelection.toString()})(this, encoded, name, type); }`,\n arguments: [\n { value: encoded },\n { value: request.fileName },\n { value: request.mediaType },\n ],\n returnByValue: true,\n });\n\n if (result.exceptionDetails !== undefined)\n // oxlint-disable-next-line effect/no-untyped-throw, effect/no-native-error -- Native CDP file-chooser port rejects through its Promise; its Effect caller owns typed error mapping.\n throw new Error(\"The chooser did not select the file\");\n } finally {\n clearTimeout(timer);\n session.off(\"Page.fileChooserOpened\", onOpened);\n signal.removeEventListener(\"abort\", onAbort);\n // Detaching the owned session releases all remote object handles, including\n // after timeout, interruption, or a navigation during change handlers.\n }\n };\n\n return {\n validate: async (element: Element): Promise<boolean> =>\n request.target === \"chooser\" ||\n (await element.evaluate(\n (input) =>\n Reflect.get(input, \"type\") === \"file\" &&\n !Reflect.get(input, \"disabled\") &&\n !Reflect.get(input, \"webkitdirectory\"),\n )),\n select,\n close: async (): Promise<void> => {\n if (session !== undefined) {\n try {\n await session.send(\"Page.setInterceptFileChooserDialog\", { enabled: false });\n } finally {\n await session.detach();\n }\n }\n },\n };\n };\n","import { Context, Effect, Layer, Option, Redacted, Schema, Stream } from \"effect\";\nimport { FetchHttpClient, HttpClient, HttpClientRequest } from \"effect/http\";\n\nimport { browserFailure } from \"./browser-failure.ts\";\n\nexport class BrowserRunCleanupError extends Schema.TaggedError<BrowserRunCleanupError>()(\n \"BrowserRunCleanupError\",\n {\n reason: Schema.Literals([\n \"configuration\",\n \"authorization\",\n \"rate-limited\",\n \"provider\",\n \"malformed\",\n \"timeout\",\n \"pending\",\n ]),\n status: Schema.optionalKey(Schema.Int),\n cause: Schema.optionalKey(Schema.Defect()),\n },\n) {}\n\nexport interface BrowserRunLifecycleOptions {\n readonly accountId: string;\n readonly apiToken: Redacted.Redacted<string>;\n}\n\nconst Identity = Schema.String.check(Schema.isUUID());\nconst Account = Schema.String.check(Schema.isPattern(/^[a-f0-9]{32}$/));\nconst Closed = Schema.Struct({ status: Schema.Literals([\"closing\", \"closed\"]) });\nconst Metadata = Schema.Struct({ sessionId: Identity, endTime: Schema.optionalKey(Schema.Finite) });\n// This exact provider response is accepted only on a fixed-origin, authenticated,\n// exact-session request. An arbitrary 404 or a listing omission is never absence.\nconst Absent = Schema.Struct({ error: Schema.Literal(\"Session not found\") });\n\nexport class BrowserRunSessionLifecycle extends Context.Service<\n BrowserRunSessionLifecycle,\n {\n readonly close: (\n sessionId: Redacted.Redacted<string>,\n ) => Effect.Effect<void, BrowserRunCleanupError>;\n }\n>()(\"@effect-agent/platform-cloudflare/BrowserRunSessionLifecycle\") {\n static layer(options: BrowserRunLifecycleOptions) {\n return Layer.effect(\n this,\n Effect.gen(function* () {\n if (\n !Schema.is(Account)(options.accountId) ||\n Redacted.value(options.apiToken).length === 0\n ) {\n return yield* BrowserRunCleanupError.make({ reason: \"configuration\" });\n }\n const client = yield* HttpClient.HttpClient;\n\n const request = Effect.fnUntraced(function* (method: \"GET\" | \"DELETE\", sessionId: string) {\n const path = method === \"DELETE\" ? \"browser\" : \"session\";\n\n const response = yield* client\n .execute(\n HttpClientRequest.make(method)(\n `https://api.cloudflare.com/client/v4/accounts/${options.accountId}/browser-rendering/devtools/${path}/${sessionId}`,\n ).pipe(HttpClientRequest.bearerToken(options.apiToken)),\n )\n .pipe(\n // workerd supports manual/follow, not error. Reject every redirect below.\n Effect.provideService(FetchHttpClient.RequestInit, { redirect: \"manual\" }),\n Effect.mapError((cause) =>\n BrowserRunCleanupError.make({\n reason: \"provider\",\n cause: browserFailure(\"browser.close.request\", cause),\n }),\n ),\n );\n\n if (response.status === 401 || response.status === 403)\n return yield* BrowserRunCleanupError.make({\n reason: \"authorization\",\n status: response.status,\n });\n if (response.status === 429)\n return yield* BrowserRunCleanupError.make({\n reason: \"rate-limited\",\n status: response.status,\n });\n if (response.status !== 200 && response.status !== 404)\n return yield* BrowserRunCleanupError.make({\n reason: \"provider\",\n status: response.status,\n });\n if (response.headers[\"content-type\"]?.split(\";\", 1)[0]?.trim() !== \"application/json\")\n return yield* BrowserRunCleanupError.make({ reason: \"malformed\" });\n\n const bytes = yield* Stream.runFoldEffect(\n response.stream,\n () => new Uint8Array(),\n (body, chunk) => {\n if (body.byteLength + chunk.byteLength > 16_384)\n return Effect.fail(BrowserRunCleanupError.make({ reason: \"malformed\" }));\n const combined = new Uint8Array(body.byteLength + chunk.byteLength);\n\n combined.set(body);\n combined.set(chunk, body.byteLength);\n\n return Effect.succeed(combined);\n },\n ).pipe(\n Effect.mapError((cause) =>\n BrowserRunCleanupError.make({\n reason: \"malformed\",\n cause: browserFailure(\"browser.close.response\", cause),\n }),\n ),\n );\n\n const body = yield* Effect.try({\n try: () => new TextDecoder(\"utf-8\", { fatal: true, ignoreBOM: false }).decode(bytes),\n catch: (cause) =>\n BrowserRunCleanupError.make({\n reason: \"malformed\",\n cause: browserFailure(\"browser.close.decode\", cause),\n }),\n });\n\n if (response.status === 404) {\n const absent = Schema.decodeOption(Schema.fromJsonString(Absent))(body, {\n onExcessProperty: \"error\",\n });\n\n if (Option.isSome(absent)) return true;\n\n return yield* BrowserRunCleanupError.make({ reason: \"malformed\" });\n }\n if (method === \"DELETE\") {\n const result = yield* Schema.decodeEffect(Schema.fromJsonString(Closed))(body).pipe(\n Effect.mapError((cause) =>\n BrowserRunCleanupError.make({\n reason: \"malformed\",\n cause: browserFailure(\"browser.close.response\", cause),\n }),\n ),\n );\n\n return result.status === \"closed\";\n }\n\n const result = yield* Schema.decodeEffect(Schema.fromJsonString(Metadata))(body).pipe(\n Effect.mapError((cause) =>\n BrowserRunCleanupError.make({\n reason: \"malformed\",\n cause: browserFailure(\"browser.close.response\", cause),\n }),\n ),\n );\n\n if (result.sessionId !== sessionId)\n return yield* BrowserRunCleanupError.make({ reason: \"malformed\" });\n\n return result.endTime !== undefined && result.endTime > 0;\n });\n\n const close = Effect.fnUntraced(\n function* (sessionId: Redacted.Redacted<string>) {\n const id = yield* Schema.decodeEffect(Identity)(Redacted.value(sessionId)).pipe(\n Effect.mapError(() => BrowserRunCleanupError.make({ reason: \"configuration\" })),\n );\n\n if (yield* request(\"DELETE\", id)) return;\n for (let read = 0; read < 2; read++) {\n if (yield* request(\"GET\", id)) return;\n }\n\n return yield* BrowserRunCleanupError.make({ reason: \"pending\" });\n },\n Effect.timeoutOrElse({\n duration: \"10 seconds\",\n orElse: () => Effect.fail(BrowserRunCleanupError.make({ reason: \"timeout\" })),\n }),\n Effect.withTracerEnabled(false),\n );\n\n return { close };\n }),\n );\n }\n}\n","/// <reference types=\"@cloudflare/workers-types\" />\n\nimport {\n BrowserActionResult,\n BrowserExpectedTargetState,\n BrowserSelectFileRequest,\n BrowserFileSelectionResult,\n BrowserScreenshotRequest,\n BrowserScrollRequest,\n BrowserNavigationResult,\n BrowserTextResult,\n InteractiveBrowser,\n InteractiveBrowserActionError,\n InteractiveBrowserBusyError,\n InteractiveBrowserCapacityError,\n InteractiveBrowserExpiredError,\n InteractiveBrowserLimitError,\n InteractiveBrowserPolicy,\n InteractiveBrowserPolicyDeniedError,\n InteractiveBrowserProtocolError,\n InteractiveBrowserTargetUrl,\n InteractiveBrowserUnsupportedError,\n type BrowserHandle,\n type BrowserExpectedTarget,\n type InteractiveBrowserError,\n type InteractiveBrowserFailureEvidence,\n type InteractiveBrowserNetworkPolicy,\n} from \"@yielded/agent/interactive-browser\";\nimport { PageScreenshotResult } from \"@yielded/agent/page-screenshot\";\nimport { SandboxImplementation } from \"@yielded/agent/sandbox\";\nimport {\n Cause,\n Context,\n Clock,\n Duration,\n Effect,\n Layer,\n Redacted,\n Schema,\n Semaphore,\n Scope,\n} from \"effect\";\nimport {\n type Browser,\n type BrowserContext,\n type CDPSession,\n ElementHandle,\n type HTTPRequest,\n type JSHandle,\n type Page,\n} from \"puppeteer-core/lib/esm/puppeteer/puppeteer-core-browser.js\";\n\nimport { BrowserRunBinding } from \"./internal/browser-binding.ts\";\nimport {\n BrowserRunFailure,\n reportBrowserCause,\n reportedBrowserError,\n} from \"./internal/browser-failure.ts\";\nimport { makeFileSelection } from \"./internal/browser-file-selection.ts\";\nimport {\n BrowserRunSessionLifecycle,\n type BrowserRunLifecycleOptions,\n} from \"./internal/browser-session-lifecycle.ts\";\nimport { pageFunction } from \"./internal/page-function.ts\";\n\nexport {\n BrowserRunCleanupError,\n BrowserRunSessionLifecycle,\n} from \"./internal/browser-session-lifecycle.ts\";\n\nexport const browserRunInteractiveImplementation = SandboxImplementation.make({\n isolation: \"isolated\",\n identity: \"cloudflare-browser-run-interactive\",\n});\n\nconst MIN_KEEP_ALIVE_MILLIS = 10_000;\nconst MAX_KEEP_ALIVE_MILLIS = 600_000;\nconst MAX_TEXT_LENGTH = 8 * 1024 * 1024;\nconst MAX_SCREENSHOT_BYTES = 8 * 1024 * 1024;\nconst MIN_LIVE_VIEW_EXPIRY_MILLIS = 60_000;\nconst MAX_LIVE_VIEW_EXPIRY_MILLIS = 60 * 60_000;\nconst MAX_HANDOFF_TIMEOUT_MILLIS = 30 * 60_000;\nconst MAX_HOST_TEXT_LENGTH = 8 * 1024;\nconst CLEANUP_STEP_TIMEOUT_MILLIS = 10_000;\nconst ACTION_NETWORK_QUIET_MILLIS = 200;\nconst ACTION_NETWORK_SETTLE_MILLIS = 2_000;\nconst ACTION_POST_STATE_MILLIS = 250;\nconst MAX_OBSERVED_CONTROLS = 64;\nconst PositiveInt = Schema.Int.check(Schema.isGreaterThan(0));\n\nconst BoundedHostText = Schema.String.check(\n Schema.isMinLength(1),\n Schema.isMaxLength(MAX_HOST_TEXT_LENGTH),\n);\n\nconst BoundedRemoteText = Schema.String.check(Schema.isMaxLength(MAX_TEXT_LENGTH));\n\nconst TextObservation = Schema.Union([\n Schema.Struct({ _tag: Schema.Literal(\"Text\"), text: BoundedRemoteText }),\n Schema.Struct({ _tag: Schema.Literal(\"MissingElement\") }),\n Schema.Struct({ _tag: Schema.Literal(\"OverLimit\"), observed: Schema.Natural }),\n]);\n\nconst ActionTargetState = Schema.Struct({\n matchCount: Schema.Natural,\n invalidSelector: Schema.optionalKey(Schema.Boolean),\n kind: Schema.optionalKey(\n Schema.Literals([\"button\", \"checkbox\", \"radio\", \"select\", \"text\", \"link\", \"other\"]),\n ),\n checked: Schema.optionalKey(Schema.Boolean),\n selected: Schema.optionalKey(Schema.Boolean),\n disabled: Schema.optionalKey(Schema.Boolean),\n required: Schema.optionalKey(Schema.Boolean),\n valid: Schema.optionalKey(Schema.Boolean),\n formValid: Schema.optionalKey(Schema.Boolean),\n});\n\nconst ActionNetworkState = Schema.Struct({\n total: Schema.Natural,\n status2xx: Schema.Natural,\n status3xx: Schema.Natural,\n status4xx: Schema.Natural,\n status5xx: Schema.Natural,\n failed: Schema.Natural,\n pending: Schema.Natural,\n settleTimedOut: Schema.Boolean,\n});\n\nconst ActionObservation = Schema.Struct({\n before: ActionTargetState,\n after: Schema.optionalKey(ActionTargetState),\n afterUnavailable: Schema.Boolean,\n network: ActionNetworkState,\n inputMillis: Schema.optionalKey(Schema.Finite),\n observationMillis: Schema.optionalKey(Schema.Finite),\n});\n\nexport const BrowserRunPageObservation = Schema.fromJsonString(\n Schema.Struct({\n documentId: Schema.NonEmptyString,\n pageText: BoundedRemoteText,\n selectorMatchCount: Schema.Natural,\n controlsTruncated: Schema.Boolean,\n controls: Schema.Array(\n Schema.Struct({\n nodeId: Schema.NonEmptyString,\n selector: BoundedRemoteText,\n ...BrowserExpectedTargetState.fields,\n }),\n ).check(Schema.isMaxLength(MAX_OBSERVED_CONTROLS)),\n }),\n);\n\nconst PngBytes = Schema.Uint8Array.check(\n Schema.isMaxLength(MAX_SCREENSHOT_BYTES),\n Schema.makeFilter(\n (bytes) =>\n bytes.length >= 8 &&\n bytes[0] === 0x89 &&\n bytes[1] === 0x50 &&\n bytes[2] === 0x4e &&\n bytes[3] === 0x47 &&\n bytes[4] === 0x0d &&\n bytes[5] === 0x0a &&\n bytes[6] === 0x1a &&\n bytes[7] === 0x0a,\n { title: \"PNG bytes\" },\n ),\n);\n\nconst BrowserRunSessionId = Schema.String.check(\n Schema.isMinLength(1),\n Schema.isMaxLength(256),\n Schema.makeFilter((value) => /^[A-Za-z0-9_-]+$/.test(value), {\n title: \"a Browser Run session identifier\",\n }),\n);\n\nconst LiveViewUrl = Schema.String.check(\n Schema.isMaxLength(MAX_HOST_TEXT_LENGTH),\n Schema.makeFilter(\n (value) => {\n try {\n const url = new URL(value);\n\n return (\n url.protocol === \"https:\" &&\n url.host === \"live.browser.run\" &&\n url.username === \"\" &&\n url.password === \"\" &&\n url.pathname === \"/ui/view\" &&\n url.searchParams.get(\"mode\") === \"tab\" &&\n (url.searchParams.get(\"wss\") ?? \"\").startsWith(\"live.browser.run/api/devtools/browser/\")\n );\n } catch {\n return false;\n }\n },\n { title: \"a Cloudflare Live View HTTPS URL\" },\n ),\n);\n\nconst LiveViewObservation = Schema.Struct({ devtoolsFrontendUrl: LiveViewUrl });\nconst HandoffObservation = Schema.Struct({ handoffId: BoundedHostText });\n\nconst HandoffDuration = Schema.Natural.check(\n Schema.isLessThanOrEqualTo(MAX_HANDOFF_TIMEOUT_MILLIS),\n);\n\nconst HandoffStateObservation = Schema.Union([\n Schema.Struct({\n active: Schema.Literal(true),\n handoffId: BoundedHostText,\n durationMs: HandoffDuration,\n }),\n Schema.Struct({\n active: Schema.Literal(false),\n handoffId: Schema.optionalKey(BoundedHostText),\n durationMs: Schema.optionalKey(HandoffDuration),\n }),\n]);\n\n/**\n * Host presentation state in CSS pixels. Dimensions are integers in 1..2048,\n * density is finite in 1..2 (default 1), and neither scaled dimension may exceed\n * 2048 pixels. Mobile, touch, and orientation emulation are not supported.\n */\nexport class BrowserRunViewport extends Schema.Class<BrowserRunViewport>(\"BrowserRunViewport\")(\n Schema.Struct({\n width: PositiveInt.check(Schema.isLessThanOrEqualTo(2_048)),\n height: PositiveInt.check(Schema.isLessThanOrEqualTo(2_048)),\n deviceScaleFactor: Schema.optionalKey(\n Schema.Finite.check(Schema.isBetween({ minimum: 1, maximum: 2 })),\n ),\n }).check(\n Schema.makeFilter(\n (viewport) =>\n Math.max(viewport.width, viewport.height) * (viewport.deviceScaleFactor ?? 1) <= 2_048,\n { title: \"a viewport with scaled dimensions no larger than 2048 pixels\" },\n ),\n ),\n) {}\n\nconst decodeViewport = (input: BrowserRunViewport) =>\n Schema.decodeEffect(BrowserRunViewport)(input, { onExcessProperty: \"error\" }).pipe(\n Effect.mapError(() => policyError(\"The browser viewport is malformed\")),\n // Copy only presentation fields, including for Schema class instances.\n Effect.map((viewport) => ({\n width: viewport.width,\n height: viewport.height,\n deviceScaleFactor: viewport.deviceScaleFactor ?? 1,\n })),\n );\n\n/** Host-only request for a redacted Cloudflare Live View URL. */\nexport class BrowserRunLiveViewRequest extends Schema.Class<BrowserRunLiveViewRequest>(\n \"BrowserRunLiveViewRequest\",\n)({\n mode: Schema.Literal(\"tab\"),\n expiresInMs: PositiveInt.check(\n Schema.isBetween({\n minimum: MIN_LIVE_VIEW_EXPIRY_MILLIS,\n maximum: MAX_LIVE_VIEW_EXPIRY_MILLIS,\n }),\n ),\n}) {}\n\nexport class BrowserRunLiveViewResult extends Schema.Class<BrowserRunLiveViewResult>(\n \"BrowserRunLiveViewResult\",\n)({ devtoolsFrontendUrl: Schema.Redacted(LiveViewUrl) }) {}\n\n/** Start one bounded handoff; controller ownership remains a consumer concern. */\nexport class BrowserRunHandoffRequest extends Schema.Class<BrowserRunHandoffRequest>(\n \"BrowserRunHandoffRequest\",\n)({\n instructions: BoundedHostText.check(Schema.isMaxLength(1_024)),\n timeout: PositiveInt.check(Schema.isLessThanOrEqualTo(MAX_HANDOFF_TIMEOUT_MILLIS)),\n}) {}\n\nexport class BrowserRunHandoffResult extends Schema.Class<BrowserRunHandoffResult>(\n \"BrowserRunHandoffResult\",\n)({ handoffId: Schema.Redacted(BoundedHostText) }) {}\n\nexport class BrowserRunHandoffState extends Schema.Class<BrowserRunHandoffState>(\n \"BrowserRunHandoffState\",\n)({\n active: Schema.Boolean,\n handoffId: Schema.optionalKey(Schema.Redacted(BoundedHostText)),\n durationMs: Schema.optionalKey(HandoffDuration),\n}) {}\n\ntype BrowserFailure = typeof InteractiveBrowserError.Type;\ntype BrowserOperation = InteractiveBrowserActionError[\"operation\"];\n\ninterface InteractiveBrowserPolicySnapshot {\n readonly network: Exclude<InteractiveBrowserNetworkPolicy, { readonly _tag: \"PublicWeb\" }>;\n readonly maxActions: number;\n readonly maxElapsedMillis: number;\n readonly maxReturnedBytes: number;\n}\n\n/** One intercepted Puppeteer request, narrowed to the policy-relevant surface. */\nexport interface BrowserRunInteractiveRequest {\n readonly url: () => string;\n readonly abort: () => Promise<void>;\n readonly continue: () => Promise<void>;\n}\n\nexport type BrowserRunInteractiveRequestListener = (request: BrowserRunInteractiveRequest) => void;\n\nexport type BrowserRunCloudflareCommand =\n | \"Cloudflare.getLiveView\"\n | \"Cloudflare.handoff\"\n | \"Cloudflare.getHandoffState\";\n\n/** Narrow CDP boundary for Cloudflare commands absent from the pinned protocol types. */\nexport interface BrowserRunInteractiveCdpSession {\n readonly send: (command: BrowserRunCloudflareCommand, parameters: unknown) => Promise<unknown>;\n readonly detach: () => Promise<void>;\n}\n\n/** Narrow page boundary used by deterministic tests; SDK values remain in this package. */\nexport interface BrowserRunInteractivePage {\n readonly identity?: () => Promise<BrowserRunPageIdentity>;\n readonly close: () => Promise<void>;\n readonly setBypassServiceWorker: (enabled: boolean) => Promise<void>;\n readonly setRequestInterception: (enabled: boolean) => Promise<void>;\n readonly onRequest: (listener: BrowserRunInteractiveRequestListener) => void;\n readonly offRequest: (listener: BrowserRunInteractiveRequestListener) => void;\n readonly goto: (url: string) => Promise<void>;\n readonly url: () => unknown;\n readonly readText: (selector: string | undefined, maximumBytes: number) => Promise<unknown>;\n readonly fill: (\n selector: string,\n value: string,\n signal: AbortSignal,\n onDispatch: () => void,\n onComplete?: () => void,\n expectedTarget?: BrowserExpectedTarget,\n ) => Promise<unknown>;\n readonly click: (\n selector: string,\n signal: AbortSignal,\n onDispatch: () => void,\n onComplete?: () => void,\n expectedTarget?: BrowserExpectedTarget,\n ) => Promise<unknown>;\n readonly selectFile: (\n request: BrowserSelectFileRequest,\n signal: AbortSignal,\n onDispatch: () => void,\n onComplete?: () => void,\n ) => Promise<unknown>;\n readonly screenshot: (fullPage: boolean) => Promise<unknown>;\n readonly scroll: (deltaX: number, deltaY: number) => Promise<void>;\n readonly setViewport: (viewport: BrowserRunViewport) => Promise<void>;\n readonly createCdpSession: () => Promise<BrowserRunInteractiveCdpSession>;\n}\n\nexport interface BrowserRunInteractiveContext {\n readonly newPage: () => Promise<BrowserRunInteractivePage>;\n readonly close: () => Promise<void>;\n}\n\nexport interface BrowserRunInteractiveBrowser {\n readonly detach?: () => Promise<void>;\n readonly reattach?: (\n identity: BrowserRunPageIdentity,\n ) => Promise<\n | { readonly context: BrowserRunInteractiveContext; readonly page: BrowserRunInteractivePage }\n | undefined\n >;\n readonly createContext: () => Promise<BrowserRunInteractiveContext>;\n readonly close: () => Promise<void>;\n readonly sessionId: () => unknown;\n readonly isConnected: () => boolean;\n readonly onDisconnected: (listener: () => void) => void;\n readonly offDisconnected: (listener: () => void) => void;\n}\n\n/** Host-supplied Browser Run allocation and connection transport. */\nexport class BrowserRunInteractiveBinding extends Context.Service<\n BrowserRunInteractiveBinding,\n {\n readonly acquire: (keepAliveMillis: number) => Promise<unknown>;\n readonly connect: (\n sessionId: string,\n signal?: AbortSignal,\n ) => Promise<BrowserRunInteractiveBrowser>;\n /** Success proves whole-browser termination or exact-session absence. */\n readonly closeSession: (\n sessionId: Redacted.Redacted<string>,\n ) => Effect.Effect<void, InteractiveBrowserError>;\n }\n>()(\"@effect-agent/platform-cloudflare/BrowserRunInteractiveBinding\") {\n static layer(options: {\n readonly browser: Pick<BrowserRun, \"fetch\">;\n readonly viewport?: BrowserRunViewport;\n }): Layer.Layer<\n BrowserRunInteractiveBinding,\n InteractiveBrowserPolicyDeniedError,\n BrowserRunSessionLifecycle\n > {\n return Layer.effect(BrowserRunInteractiveBinding)(\n Effect.gen(function* () {\n const lifecycle = yield* BrowserRunSessionLifecycle;\n const binding = yield* BrowserRunBinding;\n\n const viewport =\n options.viewport === undefined ? undefined : yield* decodeViewport(options.viewport);\n\n return {\n acquire: async (keepAliveMillis: number) =>\n binding.acquire(keepAliveMillis, \"interactive.acquire\"),\n connect: async (sessionId: string, signal?: AbortSignal) =>\n makeProductionBrowser(\n await binding.connect(sessionId, \"interactive.connect\", signal).browser,\n sessionId,\n viewport,\n ),\n closeSession: (sessionId: Redacted.Redacted<string>) =>\n lifecycle\n .close(sessionId)\n .pipe(Effect.mapError((cause) => actionError(\"close\", cause))),\n };\n }),\n ).pipe(Layer.provide(BrowserRunBinding.layer(options.browser)));\n }\n}\n\n/** Private target identity; never include this checkpoint in model-visible records. */\nexport class BrowserRunPageIdentity extends Schema.Class<BrowserRunPageIdentity>(\n \"BrowserRunPageIdentity\",\n)({\n contextId: BrowserRunSessionId,\n targetId: BrowserRunSessionId,\n}) {}\n\n/** Host-owned recovery data. Persist with the application's input receipts and ownership fence. */\nexport class BrowserRunInteractiveCheckpoint extends Schema.Class<BrowserRunInteractiveCheckpoint>(\n \"BrowserRunInteractiveCheckpoint\",\n)({\n sessionId: Schema.RedactedFromValue(BrowserRunSessionId),\n page: BrowserRunPageIdentity,\n policy: InteractiveBrowserPolicy,\n startedAt: Schema.Natural,\n consumedActions: Schema.Natural.check(Schema.isLessThanOrEqualTo(1_000)),\n inputState: Schema.Literals([\"idle\", \"running\", \"unknown\"]),\n}) {}\n\nexport type BrowserRunInputState = \"idle\" | \"running\" | \"unknown\";\n\nexport interface BrowserRunInteractiveSession {\n readonly handle: BrowserHandle;\n readonly checkpoint: Effect.Effect<BrowserRunInteractiveCheckpoint, InteractiveBrowserError>;\n /** Invalidate this owner and disconnect locally, retaining the exact remote page until its deadline.\n * Checkpoint and durable input receipts must be persisted first. Never grants another owner authority.\n */\n readonly detach: Effect.Effect<void, InteractiveBrowserError>;\n readonly inputState: Effect.Effect<BrowserRunInputState>;\n /** Wait at most 500 ms for local SDK input. A restart/transport-unknown fence cannot be drained. */\n readonly drainInput: Effect.Effect<BrowserRunInputState>;\n readonly sessionId: Redacted.Redacted<string>;\n /**\n * Resize without charging an agent action or changing emulation modes. Shares\n * the handle's fail-fast lock, page-policy preflight, and elapsed deadline.\n * An interrupted resize fences further input until the SDK settles; no resize is retried.\n * The host must authorize callers. No viewer ownership or durable state is added.\n */\n readonly resizeViewport: (\n viewport: BrowserRunViewport,\n ) => Effect.Effect<void, InteractiveBrowserError>;\n readonly getLiveView: (\n request: BrowserRunLiveViewRequest,\n ) => Effect.Effect<BrowserRunLiveViewResult, InteractiveBrowserError>;\n readonly handoff: (\n request: BrowserRunHandoffRequest,\n ) => Effect.Effect<BrowserRunHandoffResult, InteractiveBrowserError>;\n readonly getHandoffState: Effect.Effect<BrowserRunHandoffState, InteractiveBrowserError>;\n readonly close: Effect.Effect<void, InteractiveBrowserError>;\n}\n\n/** Persist the private cleanup identity before connecting or creating a page. */\nexport interface BrowserRunInteractiveAcquisition {\n readonly sessionId: Redacted.Redacted<string>;\n /** Connect at most once, within the acquisition's original scope and elapsed deadline. */\n readonly connect: Effect.Effect<BrowserRunInteractiveSession, InteractiveBrowserError>;\n}\n\n/** Cloudflare host authority kept separate from the provider-neutral browser handle. */\nexport class BrowserRunInteractiveHost extends Context.Service<\n BrowserRunInteractiveHost,\n {\n readonly cleanupSemantics?: \"confirmed-terminal\";\n readonly acquire: (\n policy: InteractiveBrowserPolicy,\n ) => Effect.Effect<BrowserRunInteractiveAcquisition, InteractiveBrowserError, Scope.Scope>;\n readonly open: (\n policy: InteractiveBrowserPolicy,\n ) => Effect.Effect<BrowserRunInteractiveSession, InteractiveBrowserError, Scope.Scope>;\n /** Requires exclusive host ownership. Never allocates a replacement page or replays an action.\n * pendingInput must include durable receipts written after the checkpoint. Unknown input keeps\n * mutations and human control fenced; reads remain available. Only confirmed close ends that fence.\n */\n readonly resume: (\n checkpoint: BrowserRunInteractiveCheckpoint,\n options: { readonly pendingInput: boolean },\n ) => Effect.Effect<BrowserRunInteractiveSession, InteractiveBrowserError, Scope.Scope>;\n readonly closeSession: (\n sessionId: Redacted.Redacted<string>,\n ) => Effect.Effect<void, InteractiveBrowserError>;\n }\n>()(\"@effect-agent/platform-cloudflare/BrowserRunInteractiveHost\") {}\n\nconst makeProductionRequest = (request: HTTPRequest): BrowserRunInteractiveRequest => ({\n url: () => request.url(),\n abort: () => request.abort(\"blockedbyclient\"),\n continue: () => request.continue(),\n});\n\nconst makeProductionCdpSession = (session: CDPSession): BrowserRunInteractiveCdpSession => ({\n send: async (command, parameters) => {\n const send = Reflect.get(session, \"send\");\n\n return await Reflect.apply(send, session, [command, parameters]);\n },\n detach: () => session.detach(),\n});\n\n// Native Puppeteer adapter control signal; never enters the Effect failure channel.\n// @effect-diagnostics-next-line extendsNativeError:off\nclass BrowserRunActionUndispatched extends Error {\n readonly matchCount: number;\n\n constructor(matchCount: number) {\n super(\"The browser action selector did not resolve to exactly one element\");\n this.matchCount = matchCount;\n }\n}\n\nconst readActionTarget = (page: Page, selector: string): Promise<unknown> =>\n page.evaluate((requestedSelector) => {\n const pageDocument = Reflect.get(globalThis, \"document\");\n let matches;\n\n try {\n matches = Reflect.apply(Reflect.get(pageDocument, \"querySelectorAll\"), pageDocument, [\n requestedSelector,\n ]);\n } catch (cause) {\n if (cause instanceof Error && cause.name === \"SyntaxError\") {\n return { matchCount: 0, invalidSelector: true };\n }\n // oxlint-disable-next-line effect/no-untyped-throw -- Preserve the original Chromium/Puppeteer exception at this native SDK callback boundary.\n throw cause;\n }\n // oxlint-disable-next-line effect/no-untyped-throw, effect/no-native-error -- Runs in Chromium through page.evaluate; Effect is unavailable in that realm.\n if (typeof matches !== \"object\" || matches === null) throw new Error(\"Invalid query result\");\n const matchCount = Math.min(10_000, Reflect.get(matches, \"length\"));\n const element = Reflect.get(matches, 0);\n\n if (element === undefined) return { matchCount };\n\n const associated = Reflect.get(element, \"control\") ?? element;\n const tagName = String(Reflect.get(associated, \"tagName\") ?? \"\").toLowerCase();\n const inputType = String(Reflect.get(associated, \"type\") ?? \"\").toLowerCase();\n\n const role = String(\n Reflect.apply(Reflect.get(element, \"getAttribute\"), element, [\"role\"]) ?? \"\",\n ).toLowerCase();\n\n const kind =\n tagName === \"button\" || role === \"button\"\n ? \"button\"\n : inputType === \"checkbox\" || role === \"checkbox\" || role === \"switch\"\n ? \"checkbox\"\n : inputType === \"radio\" || role === \"radio\"\n ? \"radio\"\n : tagName === \"select\"\n ? \"select\"\n : tagName === \"input\" || tagName === \"textarea\"\n ? \"text\"\n : tagName === \"a\"\n ? \"link\"\n : \"other\";\n\n const checked = Reflect.get(associated, \"checked\");\n\n const selected =\n tagName === \"select\"\n ? Reflect.get(associated, \"selectedIndex\") >= 0\n : Reflect.get(associated, \"selected\");\n\n const disabled = Reflect.get(associated, \"disabled\");\n const required = Reflect.get(associated, \"required\");\n const validity = Reflect.get(associated, \"validity\");\n const form = Reflect.get(associated, \"form\");\n\n const formMatches =\n form === null || form === undefined ? undefined : Reflect.get(form, \"matches\");\n\n const ariaChecked = Reflect.apply(Reflect.get(element, \"getAttribute\"), element, [\n \"aria-checked\",\n ]);\n\n const ariaDisabled = Reflect.apply(Reflect.get(element, \"getAttribute\"), element, [\n \"aria-disabled\",\n ]);\n\n const ariaSelected = Reflect.apply(Reflect.get(element, \"getAttribute\"), element, [\n \"aria-selected\",\n ]);\n\n return {\n matchCount,\n kind,\n ...(typeof checked === \"boolean\"\n ? { checked }\n : ariaChecked === \"true\" || ariaChecked === \"false\"\n ? { checked: ariaChecked === \"true\" }\n : {}),\n ...(typeof selected === \"boolean\"\n ? { selected }\n : ariaSelected === \"true\" || ariaSelected === \"false\"\n ? { selected: ariaSelected === \"true\" }\n : {}),\n disabled: typeof disabled === \"boolean\" ? disabled : ariaDisabled === \"true\",\n ...(typeof required === \"boolean\" ? { required } : {}),\n ...(validity !== undefined && typeof Reflect.get(validity, \"valid\") === \"boolean\"\n ? { valid: Reflect.get(validity, \"valid\") }\n : {}),\n ...(typeof formMatches === \"function\"\n ? { formValid: Reflect.apply(formMatches, form, [\":valid\"]) }\n : {}),\n };\n }, selector);\n\n// SDK promises cannot be cancelled. Clear our timer and observe late rejections;\n// the owning browser Scope is responsible for terminating the remote session.\nconst boundedBestEffort = async <A>(\n promise: Promise<A>,\n millis: number,\n): Promise<A | undefined> => {\n let timer: ReturnType<typeof setTimeout> | number | undefined;\n\n try {\n return await Promise.race([\n promise.catch(() => undefined),\n new Promise<undefined>((resolve) => {\n timer = setTimeout(resolve, millis);\n }),\n ]);\n } finally {\n clearTimeout(timer);\n }\n};\n\nconst readActionTargetAfter = (page: Page, selector: string) =>\n boundedBestEffort(\n readActionTarget(page, selector).then(Schema.decodeUnknownSync(ActionTargetState)),\n ACTION_POST_STATE_MILLIS,\n );\n\nconst makeActionRequestTracker = (page: Page, signal: AbortSignal) => {\n const pending = new Set<HTTPRequest>();\n let total = 0;\n let status2xx = 0;\n let status3xx = 0;\n let status4xx = 0;\n let status5xx = 0;\n let failed = 0;\n let lastChange = performance.now();\n let closed = false;\n let wake: (() => void) | undefined;\n let timer: ReturnType<typeof setTimeout> | number | undefined;\n\n const relevant = (request: HTTPRequest) => {\n const resourceType = request.resourceType();\n\n return resourceType === \"fetch\" || resourceType === \"xhr\";\n };\n\n const onRequest = (request: HTTPRequest) => {\n if (!relevant(request)) return;\n pending.add(request);\n total++;\n lastChange = performance.now();\n };\n\n const onFinished = (request: HTTPRequest) => {\n if (!pending.delete(request)) return;\n let status: number | undefined;\n\n try {\n status = request.response()?.status();\n } catch {\n // Provider response details remain intentionally unavailable to diagnostics.\n }\n if (status !== undefined) {\n if (status >= 200 && status < 300) status2xx++;\n else if (status >= 300 && status < 400) status3xx++;\n else if (status >= 400 && status < 500) status4xx++;\n else if (status >= 500 && status < 600) status5xx++;\n }\n lastChange = performance.now();\n };\n\n const onFailed = (request: HTTPRequest) => {\n if (!pending.delete(request)) return;\n failed++;\n lastChange = performance.now();\n };\n\n const close = () => {\n if (closed) return;\n closed = true;\n page.off(\"request\", onRequest);\n page.off(\"requestfinished\", onFinished);\n page.off(\"requestfailed\", onFailed);\n signal.removeEventListener(\"abort\", close);\n clearTimeout(timer);\n wake?.();\n };\n\n try {\n page.on(\"request\", onRequest);\n page.on(\"requestfinished\", onFinished);\n page.on(\"requestfailed\", onFailed);\n signal.addEventListener(\"abort\", close, { once: true });\n if (signal.aborted) close();\n } catch (cause) {\n close();\n // oxlint-disable-next-line effect/no-untyped-throw -- Preserve the original Chromium/Puppeteer exception at this native SDK callback boundary.\n throw cause;\n }\n\n const wait = async () => {\n const startedAt = performance.now();\n let settleTimedOut = false;\n\n while (!closed) {\n const now = performance.now();\n\n if (pending.size === 0 && now - lastChange >= ACTION_NETWORK_QUIET_MILLIS) break;\n if (now - startedAt >= ACTION_NETWORK_SETTLE_MILLIS) {\n settleTimedOut = true;\n break;\n }\n await new Promise<void>((resolve) => {\n wake = resolve;\n timer = setTimeout(() => resolve(), 50);\n });\n wake = undefined;\n }\n\n return {\n total,\n status2xx,\n status3xx,\n status4xx,\n status5xx,\n failed,\n pending: pending.size,\n settleTimedOut,\n };\n };\n\n return {\n wait,\n close,\n markActionSettled: () => {\n lastChange = performance.now();\n },\n };\n};\n\nconst disposeActionHandles = async (handles: ReadonlyArray<{ dispose: () => Promise<void> }>) => {\n await boundedBestEffort(\n Promise.allSettled(handles.map(async (handle) => handle.dispose())),\n ACTION_POST_STATE_MILLIS,\n );\n};\n\n/** Runs entirely in the page realm for both observations and the last bound-element guard. */\nconst observePage = pageFunction(\n (\n target: object | undefined,\n requestedSelector: string | undefined,\n maximum: number,\n maximumControls: number,\n input?: {\n readonly mode: \"click\" | \"fill\";\n readonly expectedTarget: BrowserExpectedTarget;\n readonly value?: string;\n },\n ) => {\n const pageDocument = Reflect.get(globalThis, \"document\");\n\n const matches =\n requestedSelector === undefined\n ? undefined\n : Reflect.apply(Reflect.get(pageDocument, \"querySelectorAll\"), pageDocument, [\n requestedSelector,\n ]);\n\n const selectorMatchCount =\n matches === undefined || matches === null\n ? 1\n : Math.min(10_000, Reflect.get(matches, \"length\"));\n\n const element =\n target ??\n (matches === undefined || matches === null\n ? Reflect.get(pageDocument, \"body\")\n : Reflect.get(matches, 0));\n\n if (target !== undefined && Reflect.get(target, \"isConnected\") !== true)\n return { _tag: \"MissingElement\" };\n\n if (element === null) return { _tag: \"MissingElement\" };\n if (element === undefined) return { _tag: \"MissingElement\" };\n const innerText = Reflect.get(element, \"innerText\");\n const textContent = Reflect.get(element, \"textContent\");\n\n const pageText =\n typeof innerText === \"string\"\n ? innerText\n : typeof textContent === \"string\"\n ? textContent\n : \"\";\n\n const primaryControlSelector =\n 'input,select,textarea,label,button,[role=\"checkbox\"],[role=\"radio\"],[role=\"option\"],[role=\"switch\"],[role=\"tab\"],[role=\"button\"]';\n\n const optionSelector = \"select option\";\n const secondaryControlSelector = \"a[href]\";\n const controlSelector = `${primaryControlSelector},${optionSelector},${secondaryControlSelector}`;\n\n const selectorFor = (candidate: object) => {\n const parts: Array<string> = [];\n let current: object | null = candidate;\n\n while (current !== null && current !== undefined) {\n const tagName = String(Reflect.get(current, \"tagName\") ?? \"\").toLowerCase();\n\n if (tagName === \"\") break;\n const parent: object | null = Reflect.get(current, \"parentElement\");\n\n if (parent === null) {\n parts.push(tagName);\n break;\n }\n let sibling = Reflect.get(current, \"previousElementSibling\");\n let index = 1;\n\n while (sibling !== null && sibling !== undefined) {\n if (String(Reflect.get(sibling, \"tagName\") ?? \"\").toLowerCase() === tagName) index++;\n sibling = Reflect.get(sibling, \"previousElementSibling\");\n }\n parts.push(`${tagName}:nth-of-type(${index})`);\n current = parent;\n }\n\n return parts.reverse().join(\" > \");\n };\n\n const visible = (candidate: object) => {\n const hidden = Reflect.get(candidate, \"hidden\");\n\n const ariaHidden = Reflect.apply(Reflect.get(candidate, \"getAttribute\"), candidate, [\n \"aria-hidden\",\n ]);\n\n const rects = Reflect.apply(Reflect.get(candidate, \"getClientRects\"), candidate, []);\n\n return (\n hidden !== true &&\n ariaHidden !== \"true\" &&\n typeof rects === \"object\" &&\n rects !== null &&\n Reflect.get(rects, \"length\") > 0\n );\n };\n\n const candidates: Array<object> = [];\n let controlsTruncated = false;\n\n const consider = (candidate: object) => {\n const tagName = String(Reflect.get(candidate, \"tagName\") ?? \"\").toLowerCase();\n\n // Collapsed native options have no client rects. Their owning\n // select determines visibility; observe text/selection, never value.\n const visibilityTarget =\n tagName === \"option\"\n ? Reflect.apply(Reflect.get(candidate, \"closest\"), candidate, [\"select\"])\n : candidate;\n\n const actionable = tagName !== \"label\" || Reflect.get(candidate, \"control\") !== null;\n\n if (\n !actionable ||\n typeof visibilityTarget !== \"object\" ||\n visibilityTarget === null ||\n !visible(visibilityTarget)\n )\n return;\n candidates.push(candidate);\n if (candidates.length > maximumControls) controlsTruncated = true;\n };\n\n const elementMatches = Reflect.get(element, \"matches\");\n\n if (\n typeof elementMatches === \"function\" &&\n Reflect.apply(elementMatches, element, [controlSelector])\n ) {\n consider(element);\n }\n\n const considerSelector = (candidateSelector: string) => {\n const descendants = Reflect.apply(Reflect.get(element, \"querySelectorAll\"), element, [\n candidateSelector,\n ]);\n\n if (typeof descendants !== \"object\" || descendants === null) return;\n const descendantCount = Reflect.get(descendants, \"length\");\n\n for (let index = 0; index < descendantCount && !controlsTruncated; index++) {\n consider(Reflect.get(descendants, index));\n }\n };\n\n considerSelector(primaryControlSelector);\n if (!controlsTruncated) considerSelector(optionSelector);\n if (!controlsTruncated) considerSelector(secondaryControlSelector);\n\n const identityKey = Symbol.for(\"@effect-agent/browser-observation\");\n let identity = Reflect.get(globalThis, identityKey);\n\n if (identity === undefined || identity.document !== pageDocument) {\n identity = {\n document: pageDocument,\n documentId: crypto.getRandomValues(new Uint32Array(4)).join(\"-\"),\n nodes: new WeakMap<object, string>(),\n };\n Reflect.set(globalThis, identityKey, identity);\n }\n\n const controls = candidates.slice(0, maximumControls).map((candidate) => {\n let nodeId = identity.nodes.get(candidate);\n\n if (nodeId === undefined) {\n nodeId = crypto.getRandomValues(new Uint32Array(4)).join(\"-\");\n identity.nodes.set(candidate, nodeId);\n }\n const associated = Reflect.get(candidate, \"control\") ?? candidate;\n const tagName = String(Reflect.get(candidate, \"tagName\") ?? \"\").toLowerCase();\n const inputType = String(Reflect.get(associated, \"type\") ?? \"\").toLowerCase();\n\n const role = String(\n Reflect.apply(Reflect.get(candidate, \"getAttribute\"), candidate, [\"role\"]) ?? \"\",\n ).toLowerCase();\n\n const ariaLabel = Reflect.apply(Reflect.get(candidate, \"getAttribute\"), candidate, [\n \"aria-label\",\n ]);\n\n const candidateText =\n tagName === \"textarea\" || tagName === \"input\" || tagName === \"select\"\n ? undefined\n : Reflect.get(candidate, tagName === \"option\" ? \"label\" : \"innerText\");\n\n const associatedLabels = Reflect.get(associated, \"labels\");\n\n const associatedLabel =\n associatedLabels !== undefined &&\n associatedLabels !== null &&\n Reflect.get(associatedLabels, \"length\") > 0\n ? Reflect.get(Reflect.get(associatedLabels, 0), \"innerText\")\n : undefined;\n\n const label = String(\n typeof ariaLabel === \"string\" && ariaLabel !== \"\"\n ? ariaLabel\n : typeof candidateText === \"string\" && candidateText !== \"\"\n ? candidateText\n : (associatedLabel ?? \"\"),\n )\n .replace(/\\s+/g, \" \")\n .trim()\n .slice(0, 200);\n\n const checked = Reflect.get(associated, \"checked\");\n\n const selected =\n tagName === \"select\"\n ? Reflect.get(associated, \"selectedIndex\") >= 0\n : Reflect.get(associated, \"selected\");\n\n const disabled = Reflect.get(associated, \"disabled\");\n const required = Reflect.get(associated, \"required\");\n const validity = Reflect.get(associated, \"validity\");\n const form = Reflect.get(associated, \"form\");\n\n const formMatches =\n form === null || form === undefined ? undefined : Reflect.get(form, \"matches\");\n\n const ariaChecked = Reflect.apply(Reflect.get(candidate, \"getAttribute\"), candidate, [\n \"aria-checked\",\n ]);\n\n const ariaSelected = Reflect.apply(Reflect.get(candidate, \"getAttribute\"), candidate, [\n \"aria-selected\",\n ]);\n\n const ariaDisabled = Reflect.apply(Reflect.get(candidate, \"getAttribute\"), candidate, [\n \"aria-disabled\",\n ]);\n\n return {\n nodeId,\n ...(inputType === \"\" ? {} : { inputType: inputType.slice(0, 64) }),\n selector: selectorFor(candidate),\n kind: (tagName === \"label\"\n ? `label:${inputType || \"control\"}`\n : tagName === \"input\"\n ? `input:${inputType || \"text\"}`\n : role !== \"\"\n ? `role:${role}`\n : tagName\n ).slice(0, 128),\n ...(label === \"\" ? {} : { label }),\n ...(typeof checked === \"boolean\"\n ? { checked }\n : ariaChecked === \"true\" || ariaChecked === \"false\"\n ? { checked: ariaChecked === \"true\" }\n : {}),\n ...(typeof selected === \"boolean\"\n ? { selected }\n : ariaSelected === \"true\" || ariaSelected === \"false\"\n ? { selected: ariaSelected === \"true\" }\n : {}),\n ...(typeof disabled === \"boolean\"\n ? { disabled }\n : ariaDisabled === \"true\" || ariaDisabled === \"false\"\n ? { disabled: ariaDisabled === \"true\" }\n : {}),\n ...(typeof required === \"boolean\" ? { required } : {}),\n ...(validity !== undefined && typeof Reflect.get(validity, \"valid\") === \"boolean\"\n ? { valid: Reflect.get(validity, \"valid\") }\n : {}),\n ...(typeof formMatches === \"function\"\n ? { formValid: Reflect.apply(formMatches, form, [\":valid\"]) }\n : {}),\n };\n });\n\n if (input !== undefined) {\n const expected = input.expectedTarget;\n const control = controls.find((candidate) => candidate.nodeId === expected.nodeId);\n\n const fields = [\n \"kind\",\n \"inputType\",\n \"label\",\n \"checked\",\n \"selected\",\n \"disabled\",\n \"required\",\n \"valid\",\n \"formValid\",\n ] as const;\n\n if (\n target === undefined ||\n identity.documentId !== expected.documentId ||\n identity.nodes.get(target) !== expected.nodeId ||\n control === undefined ||\n (expected.state !== undefined &&\n fields.some((field) => control[field] !== expected.state?.[field])) ||\n Reflect.get(target, \"isConnected\") !== true\n )\n return { _tag: \"MissingElement\" };\n if (expected.scopeSelector !== undefined) {\n let roots;\n\n try {\n roots = Reflect.apply(Reflect.get(pageDocument, \"querySelectorAll\"), pageDocument, [\n expected.scopeSelector,\n ]);\n } catch {\n return { _tag: \"MissingElement\" };\n }\n if (typeof roots !== \"object\" || roots === null) return { _tag: \"MissingElement\" };\n const root = Reflect.get(roots, 0);\n\n if (\n Reflect.get(roots, \"length\") !== 1 ||\n root === undefined ||\n !Reflect.apply(Reflect.get(root, \"contains\"), root, [target])\n )\n return { _tag: \"MissingElement\" };\n }\n // Validation and dispatch share one page JS task. No coordinate lookup, selector\n // re-resolution, or asynchronous boundary can select a replacement node.\n if (input.mode === \"click\") {\n const prototype = Reflect.get(Reflect.get(globalThis, \"HTMLElement\"), \"prototype\");\n\n Reflect.apply(Reflect.get(prototype, \"click\"), target, []);\n } else {\n let prototype = Reflect.getPrototypeOf(target);\n let setValue: ((value: string) => void) | undefined;\n\n while (prototype !== null) {\n const setter = Reflect.getOwnPropertyDescriptor(prototype, \"value\")?.set;\n\n if (typeof setter === \"function\") {\n setValue = setter;\n break;\n }\n prototype = Reflect.getPrototypeOf(prototype);\n }\n if (setValue === undefined || input.value === undefined) return { _tag: \"MissingElement\" };\n Reflect.apply(setValue, target, [input.value]);\n const dispatchEvent = Reflect.get(target, \"dispatchEvent\");\n\n Reflect.apply(dispatchEvent, target, [new Event(\"input\", { bubbles: true })]);\n Reflect.apply(dispatchEvent, target, [new Event(\"change\", { bubbles: true })]);\n }\n\n return { _tag: \"Text\", text: \"\" };\n }\n\n // JSON is the bounded wire representation of this existing text result.\n // eslint-disable-next-line no-restricted-properties\n const text = JSON.stringify({\n documentId: identity.documentId,\n pageText,\n selectorMatchCount,\n controls,\n controlsTruncated,\n });\n\n const observed = new TextEncoder().encode(text).byteLength;\n\n return observed > maximum ? { _tag: \"OverLimit\", observed } : { _tag: \"Text\", text };\n },\n);\n\nconst runObservedPageAction = async (\n page: Page,\n selector: string,\n signal: AbortSignal,\n onDispatch: () => void,\n action: (element: NonNullable<Awaited<ReturnType<Page[\"$\"]>>>) => Promise<void>,\n validate?: (element: NonNullable<Awaited<ReturnType<Page[\"$\"]>>>) => Promise<boolean>,\n onComplete?: () => void,\n): Promise<unknown> => {\n // oxlint-disable-next-line effect/no-untyped-throw -- Native Puppeteer input port reports non-dispatch before the Effect owner classifies the result.\n if (signal.aborted) throw new BrowserRunActionUndispatched(0);\n\n const before = Schema.decodeUnknownSync(ActionTargetState)(\n await readActionTarget(page, selector),\n );\n\n if (before.matchCount !== 1 || before.invalidSelector === true) {\n // oxlint-disable-next-line effect/no-untyped-throw -- Native Puppeteer input port reports non-dispatch before the Effect owner classifies the result.\n throw new BrowserRunActionUndispatched(before.matchCount);\n }\n // Resolve one CSS match inside this action's native adapter boundary. The\n // isolated lookup avoids materializing and transferring an entire handle list.\n const frame = page.mainFrame();\n\n const target: JSHandle<unknown> = await frame\n .isolatedRealm()\n .evaluateHandle((requestedSelector) => {\n const pageDocument = Reflect.get(globalThis, \"document\");\n\n const matches = Reflect.apply(Reflect.get(pageDocument, \"querySelectorAll\"), pageDocument, [\n requestedSelector,\n ]);\n\n // oxlint-disable-next-line effect/no-untyped-throw, effect/no-native-error -- Runs in Chromium through page.evaluate; Effect is unavailable in that realm.\n if (typeof matches !== \"object\" || matches === null) throw new Error(\"Invalid query result\");\n const count = Reflect.get(matches, \"length\");\n\n return count === 1 ? Reflect.get(matches, 0) : Math.min(10_000, count);\n }, selector);\n\n let element: NonNullable<Awaited<ReturnType<Page[\"$\"]>>>;\n\n try {\n if (!(target instanceof ElementHandle)) {\n // oxlint-disable-next-line effect/no-untyped-throw -- Native Puppeteer input port reports non-dispatch before the Effect owner classifies the result.\n throw new BrowserRunActionUndispatched(\n Schema.decodeUnknownSync(Schema.Natural)(await target.jsonValue()),\n );\n }\n\n // Guarded input observes identity in the main realm, as Puppeteer's $$ does.\n element = await frame.mainRealm().adoptHandle(target);\n } finally {\n await disposeActionHandles([target]);\n }\n if (signal.aborted) {\n await disposeActionHandles([element]);\n // oxlint-disable-next-line effect/no-untyped-throw -- Native Puppeteer input port reports non-dispatch before the Effect owner classifies the result.\n throw new BrowserRunActionUndispatched(1);\n }\n\n let tracker: ReturnType<typeof makeActionRequestTracker> | undefined;\n let disposing: Promise<void> | undefined;\n const dispose = () => (disposing ??= disposeActionHandles([element]));\n\n const onAbort = () => {\n void dispose();\n };\n\n signal.addEventListener(\"abort\", onAbort, { once: true });\n try {\n if (validate !== undefined && !(await validate(element)))\n // oxlint-disable-next-line effect/no-untyped-throw -- Native Puppeteer input port reports non-dispatch before the Effect owner classifies the result.\n throw new BrowserRunActionUndispatched(1);\n tracker = makeActionRequestTracker(page, signal);\n // No await between the final cancellation fence and SDK dispatch. Once\n // dispatched, interruption is uncertain, even if the SDK later resolves.\n // oxlint-disable-next-line effect/no-untyped-throw -- Native Puppeteer input port reports non-dispatch before the Effect owner classifies the result.\n if (signal.aborted) throw new BrowserRunActionUndispatched(1);\n onDispatch();\n const inputStarted = performance.now();\n\n await action(element);\n const inputFinished = performance.now();\n\n onComplete?.();\n tracker.markActionSettled();\n const network = await tracker.wait();\n const after = signal.aborted ? undefined : await readActionTargetAfter(page, selector);\n\n return {\n before,\n inputMillis: Math.max(0, inputFinished - inputStarted),\n observationMillis: Math.max(0, performance.now() - inputFinished),\n ...(after === undefined ? {} : { after }),\n afterUnavailable: after === undefined,\n network,\n };\n } finally {\n tracker?.close();\n signal.removeEventListener(\"abort\", onAbort);\n await dispose();\n }\n};\n\nconst guardedPageInput = async (\n element: NonNullable<Awaited<ReturnType<Page[\"$\"]>>>,\n expectedTarget: BrowserExpectedTarget,\n mode: \"click\" | \"fill\",\n value?: string,\n): Promise<void> => {\n const observed = Schema.decodeUnknownSync(TextObservation)(\n await element.evaluate(observePage, undefined, 256 * 1024, 1, {\n mode,\n expectedTarget,\n ...(value === undefined ? {} : { value }),\n }),\n );\n\n // oxlint-disable-next-line effect/no-untyped-throw -- Native Puppeteer input port reports non-dispatch before the Effect owner classifies the result.\n if (observed._tag !== \"Text\") throw new BrowserRunActionUndispatched(1);\n};\n\nconst makeProductionPage = (page: Page): BrowserRunInteractivePage => {\n const prepareFileSelection = makeFileSelection(page);\n const listeners = new Map<BrowserRunInteractiveRequestListener, (request: HTTPRequest) => void>();\n\n return {\n identity: async () => {\n const cdp = await page.createCDPSession();\n\n try {\n const { targetInfo } = await cdp.send(\"Target.getTargetInfo\");\n\n return Schema.decodeUnknownSync(BrowserRunPageIdentity)({\n contextId: targetInfo.browserContextId,\n targetId: targetInfo.targetId,\n });\n } finally {\n await cdp.detach();\n }\n },\n close: async () => {\n if (!page.browser().isConnected()) return;\n try {\n await page.close();\n } catch (cause) {\n // oxlint-disable-next-line effect/no-untyped-throw -- Preserve the original Chromium/Puppeteer exception at this native SDK callback boundary.\n if (!isRemoteClosure(cause)) throw cause;\n }\n },\n setBypassServiceWorker: (enabled) => page.setBypassServiceWorker(enabled),\n setRequestInterception: (enabled) => page.setRequestInterception(enabled),\n onRequest: (listener) => {\n const sdkListener = (request: HTTPRequest) => listener(makeProductionRequest(request));\n\n listeners.set(listener, sdkListener);\n page.on(\"request\", sdkListener);\n },\n offRequest: (listener) => {\n const sdkListener = listeners.get(listener);\n\n if (sdkListener !== undefined) {\n page.off(\"request\", sdkListener);\n listeners.delete(listener);\n }\n },\n goto: async (url) => {\n await page.goto(url, { waitUntil: \"domcontentloaded\", timeout: 30_000 });\n },\n url: () => page.url(),\n readText: async (selector, maximumBytes) => {\n const observation = Schema.decodeUnknownSync(TextObservation)(\n await page.evaluate(observePage, undefined, selector, maximumBytes, MAX_OBSERVED_CONTROLS),\n );\n\n if (observation._tag === \"Text\")\n Schema.decodeSync(BrowserRunPageObservation)(observation.text);\n\n return observation;\n },\n fill: (selector, value, signal, onDispatch, onComplete, expectedTarget) =>\n runObservedPageAction(\n page,\n selector,\n signal,\n onDispatch,\n (element) =>\n expectedTarget !== undefined\n ? guardedPageInput(element, expectedTarget, \"fill\", value)\n : element.evaluate((element, nextValue) => {\n // Bypass instance setters so React can detect the change when events fire.\n let prototype = Reflect.getPrototypeOf(element);\n let setValue: ((value: string) => void) | undefined;\n\n while (prototype !== null) {\n const setter = Reflect.getOwnPropertyDescriptor(prototype, \"value\")?.set;\n\n if (typeof setter === \"function\") {\n setValue = setter;\n break;\n }\n prototype = Reflect.getPrototypeOf(prototype);\n }\n if (setValue === undefined) {\n // oxlint-disable-next-line effect/no-untyped-throw, effect/no-native-error -- Runs inside the Chromium evaluate callback, whose failures cross CDP as native exceptions.\n throw new Error(\"The selector did not resolve to a fillable field\");\n }\n const focus = Reflect.get(element, \"focus\");\n\n if (typeof focus === \"function\") Reflect.apply(focus, element, []);\n Reflect.apply(setValue, element, [nextValue]);\n const dispatchEvent = Reflect.get(element, \"dispatchEvent\");\n\n if (typeof dispatchEvent === \"function\") {\n Reflect.apply(dispatchEvent, element, [new Event(\"input\", { bubbles: true })]);\n Reflect.apply(dispatchEvent, element, [new Event(\"change\", { bubbles: true })]);\n }\n }, value),\n undefined,\n onComplete,\n ),\n click: (selector, signal, onDispatch, onComplete, expectedTarget) =>\n runObservedPageAction(\n page,\n selector,\n signal,\n onDispatch,\n (element) =>\n expectedTarget === undefined\n ? element.click()\n : guardedPageInput(element, expectedTarget, \"click\"),\n undefined,\n onComplete,\n ),\n selectFile: async (request, signal, onDispatch, onComplete) => {\n const selection = await prepareFileSelection(request, signal);\n\n try {\n return await runObservedPageAction(\n page,\n request.selector,\n signal,\n onDispatch,\n selection.select,\n selection.validate,\n onComplete,\n );\n } finally {\n await selection.close();\n }\n },\n // Puppeteer materializes the complete image before returning. The adapter\n // validates the 8 MiB Schema ceiling and pass limit immediately afterward.\n screenshot: (fullPage) => page.screenshot({ type: \"png\", fullPage }),\n scroll: (deltaX, deltaY) =>\n page.evaluate(\n (x, y) => {\n const scrollBy = Reflect.get(globalThis, \"scrollBy\");\n\n Reflect.apply(scrollBy, globalThis, [{ left: x, top: y, behavior: \"instant\" }]);\n },\n deltaX,\n deltaY,\n ),\n createCdpSession: async () => makeProductionCdpSession(await page.createCDPSession()),\n setViewport: (viewport) => page.setViewport(viewport),\n };\n};\n\nconst makeProductionContext = (\n context: BrowserContext,\n viewport?: BrowserRunViewport,\n): BrowserRunInteractiveContext => ({\n newPage: async () => {\n const page = await context.newPage();\n\n if (viewport !== undefined) await page.setViewport(viewport);\n\n return makeProductionPage(page);\n },\n close: async () => {\n if (!context.browser().isConnected()) return;\n try {\n await context.close();\n } catch (cause) {\n // oxlint-disable-next-line effect/no-untyped-throw -- Preserve the original Chromium/Puppeteer exception at this native SDK callback boundary.\n if (!isRemoteClosure(cause)) throw cause;\n }\n },\n});\n\nconst makeProductionBrowser = (\n browser: Browser,\n sessionId: string,\n viewport?: BrowserRunViewport,\n): BrowserRunInteractiveBrowser => ({\n detach: () => browser.disconnect(),\n reattach: async (identity) => {\n const context = browser\n .browserContexts()\n .find((candidate) => candidate.id === identity.contextId);\n\n if (context === undefined) return undefined;\n const pages = await context.pages();\n\n // oxlint-disable-next-line effect/no-untyped-throw, effect/no-native-error -- Native browser reattachment port rejects an oversized SDK inventory; the Effect caller maps the failure.\n if (pages.length > 64) throw new Error(\"The browser target inventory exceeds its bound\");\n for (const candidate of pages) {\n const page = makeProductionPage(candidate);\n const current = await page.identity?.();\n\n if (current?.targetId === identity.targetId)\n return { context: makeProductionContext(context), page };\n }\n\n return undefined;\n },\n createContext: async () => makeProductionContext(await browser.createBrowserContext(), viewport),\n // Exact-session termination may already have closed the provider transport.\n close: async () => {\n if (!browser.isConnected()) return;\n try {\n await browser.close();\n } catch (cause) {\n // oxlint-disable-next-line effect/no-untyped-throw -- Preserve the original Chromium/Puppeteer exception at this native SDK callback boundary.\n if (!isRemoteClosure(cause)) throw cause;\n }\n },\n sessionId: () => sessionId,\n isConnected: () => browser.isConnected(),\n onDisconnected: (listener) => {\n browser.on(\"disconnected\", listener);\n },\n offDisconnected: (listener) => {\n browser.off(\"disconnected\", listener);\n },\n});\n\nconst protocolError = (message: string, cause?: unknown): InteractiveBrowserProtocolError =>\n InteractiveBrowserProtocolError.make({\n implementation: browserRunInteractiveImplementation,\n message,\n ...(cause === undefined ? {} : { cause }),\n });\n\nconst failReportedProtocol = (\n operation: string,\n error: InteractiveBrowserProtocolError,\n evidence = error.evidence,\n) =>\n reportBrowserCause(operation, Cause.fail(error)).pipe(\n Effect.andThen(\n Effect.fail(\n reportedBrowserError(\n InteractiveBrowserProtocolError.make({\n implementation: browserRunInteractiveImplementation,\n message: error.message,\n ...(evidence === undefined ? {} : { evidence }),\n }),\n ),\n ),\n ),\n );\n\nconst actionError = (\n operation: BrowserOperation,\n cause?: unknown,\n evidence?: InteractiveBrowserFailureEvidence,\n): InteractiveBrowserActionError =>\n InteractiveBrowserActionError.make({\n implementation: browserRunInteractiveImplementation,\n operation,\n ...(evidence === undefined ? {} : { evidence }),\n message: `The interactive browser ${operation} operation failed`,\n ...(cause === undefined ? {} : { cause }),\n });\n\nconst undispatchedActionError = (operation: BrowserOperation): InteractiveBrowserActionError =>\n InteractiveBrowserActionError.make({\n implementation: browserRunInteractiveImplementation,\n operation,\n message: `The interactive browser ${operation} operation was not dispatched`,\n evidence: { stage: \"preparation\", dispatch: \"not-dispatched\", session: \"attached\" },\n });\n\n/** Recognizes a local pre-dispatch refusal without exposing selector or page content. */\nexport const isBrowserRunUndispatchedActionError = (error: unknown): boolean =>\n Schema.is(InteractiveBrowserActionError)(error) &&\n error.implementation.identity === browserRunInteractiveImplementation.identity &&\n error.evidence?.dispatch === \"not-dispatched\";\n\nconst policyError = (message: string): InteractiveBrowserPolicyDeniedError =>\n InteractiveBrowserPolicyDeniedError.make({\n implementation: browserRunInteractiveImplementation,\n message,\n });\n\nconst expiredError = (session: \"lost\" | \"disconnected\" = \"lost\"): InteractiveBrowserExpiredError =>\n InteractiveBrowserExpiredError.make({\n implementation: browserRunInteractiveImplementation,\n message: \"The remote browser is no longer usable\",\n evidence: { stage: \"preparation\", dispatch: \"not-dispatched\", session },\n });\n\nconst causeText = (cause: unknown): string => {\n if (cause instanceof Error) return cause.message.slice(0, 8_000);\n\n return String(cause).slice(0, 8_000);\n};\n\nconst isCapacityRefusal = (cause: unknown): boolean =>\n cause instanceof BrowserRunFailure && cause.status === 429;\n\nconst isRemoteClosure = (cause: unknown): boolean =>\n /target closed|browser.*closed|session.*closed|connection.*closed|not connected|websocket.*closed/i.test(\n causeText(cause),\n );\n\nconst inputMayStillRun = (cause: unknown): boolean =>\n isRemoteClosure(cause) ||\n (cause instanceof Error && cause.name === \"TimeoutError\") ||\n (cause instanceof BrowserRunFailure && cause.reason === \"timeout\");\n\nconst snapshotPolicy = Effect.fnUntraced(function* (\n input: InteractiveBrowserPolicy,\n): Effect.fn.Return<\n InteractiveBrowserPolicySnapshot,\n InteractiveBrowserPolicyDeniedError | InteractiveBrowserUnsupportedError\n> {\n const decoded = yield* Schema.decodeEffect(InteractiveBrowserPolicy, {\n onExcessProperty: \"error\",\n })(input).pipe(Effect.mapError(() => policyError(\"The interactive browser policy is malformed\")));\n\n if (decoded.network._tag === \"PublicWeb\") {\n return yield* InteractiveBrowserUnsupportedError.make({\n implementation: browserRunInteractiveImplementation,\n feature: \"policy\",\n message:\n \"Cloudflare Browser Run cannot enforce the PublicWeb network policy for all session traffic\",\n });\n }\n\n return Object.freeze({\n network:\n decoded.network._tag === \"ExactHosts\"\n ? Object.freeze({\n _tag: decoded.network._tag,\n allowedHosts: Object.freeze([...decoded.network.allowedHosts]),\n })\n : Object.freeze({ _tag: decoded.network._tag }),\n maxActions: decoded.maxActions,\n maxElapsedMillis: decoded.maxElapsedMillis,\n maxReturnedBytes: decoded.maxReturnedBytes,\n });\n});\n\nconst hostAllowed = (policy: InteractiveBrowserPolicySnapshot, value: string): boolean => {\n if (policy.network._tag === \"Unrestricted\") return true;\n try {\n const url = new URL(value);\n\n return (\n url.protocol === \"https:\" &&\n url.username === \"\" &&\n url.password === \"\" &&\n policy.network.allowedHosts.some((host) => host === url.host)\n );\n } catch {\n return false;\n }\n};\n\nconst keepAliveMillis = (policy: InteractiveBrowserPolicySnapshot): number =>\n Math.max(MIN_KEEP_ALIVE_MILLIS, Math.min(MAX_KEEP_ALIVE_MILLIS, policy.maxElapsedMillis));\n\n// Native acquisition cancellation signal, intercepted before mapping to an Effect failure.\n// @effect-diagnostics-next-line extendsNativeError:off\nclass LateBrowserAcquisition extends Error {}\n\nconst closeLateAcquisition = async <A>(\n signal: AbortSignal,\n acquire: () => Promise<A>,\n close: (acquired: A) => Promise<void>,\n): Promise<A> => {\n const acquired = await acquire();\n\n if (!signal.aborted) return acquired;\n\n // The SDK does not accept AbortSignal. If an acquisition settles after Effect\n // has interrupted it, ownership never reaches Scope, so close it here instead.\n try {\n await close(acquired);\n } catch {\n // The captured runtime reports cleanup failures before this callback absorbs rejection.\n }\n // oxlint-disable-next-line effect/no-untyped-throw -- Reject a late native SDK acquisition after cleanup; the interrupted Effect no longer owns it.\n throw new LateBrowserAcquisition(\"The interrupted browser acquisition completed late\");\n};\n\nconst closeWithWarning = (close: () => Promise<void>, warning: string): Effect.Effect<void> =>\n Effect.tryPromise({\n try: close,\n catch: (cause) => protocolError(warning, cause),\n }).pipe(\n Effect.timeoutOrElse({\n duration: Duration.millis(CLEANUP_STEP_TIMEOUT_MILLIS),\n orElse: () => Effect.fail(protocolError(warning)),\n }),\n Effect.catchCause((cause) =>\n reportBrowserCause(\"interactive.cleanup\", cause).pipe(\n Effect.andThen(Effect.logWarning(warning)),\n ),\n ),\n );\n\nconst deadlineError = Effect.fnUntraced(function* (\n policy: InteractiveBrowserPolicySnapshot,\n startedAt: number,\n) {\n const now = yield* Effect.clockWith((clock) => clock.currentTimeMillis);\n\n return yield* InteractiveBrowserLimitError.make({\n implementation: browserRunInteractiveImplementation,\n limit: \"elapsed\",\n maximum: policy.maxElapsedMillis,\n observed: Math.max(policy.maxElapsedMillis, now - startedAt),\n message: \"The browser elapsed-time limit was reached\",\n });\n});\n\nconst withinDeadline = Effect.fnUntraced(function* <A, E, R>(\n effect: Effect.Effect<A, E, R>,\n policy: InteractiveBrowserPolicySnapshot,\n startedAt: number,\n onTimeout?: () => void,\n): Effect.fn.Return<A, E | InteractiveBrowserLimitError, R> {\n const now = yield* Effect.clockWith((clock) => clock.currentTimeMillis);\n const elapsed = Math.max(0, now - startedAt);\n const remaining = policy.maxElapsedMillis - elapsed;\n\n if (remaining <= 0) return yield* deadlineError(policy, startedAt);\n\n return yield* effect.pipe(\n Effect.timeoutOrElse({\n duration: Duration.millis(remaining),\n orElse: () =>\n Effect.sync(() => onTimeout?.()).pipe(Effect.andThen(deadlineError(policy, startedAt))),\n }),\n );\n});\n\ninterface HandleState {\n readonly closed: { value: boolean };\n readonly disconnected: { value: boolean };\n readonly uncertain: { value: boolean };\n readonly pendingInputs: Set<Promise<unknown>>;\n readonly actions: { value: number };\n readonly violation: { value: BrowserFailure | undefined };\n readonly pendingRequests: Set<Promise<void>>;\n}\n\nconst trackPendingInput = <A>(state: HandleState, pending: Promise<A>): Promise<A> => {\n state.pendingInputs.add(pending);\n void pending.then(\n () => state.pendingInputs.delete(pending),\n (cause) => {\n state.pendingInputs.delete(pending);\n if (state.disconnected.value || inputMayStillRun(cause)) state.uncertain.value = true;\n if (isRemoteClosure(cause)) state.disconnected.value = true;\n },\n );\n\n return pending;\n};\n\nconst makeHostInputObserver = Effect.fnUntraced(function* (state: HandleState, operation: string) {\n const reporterContext = yield* Effect.context<never>();\n\n return <A>(pending: Promise<A>, signal: AbortSignal): Promise<A> => {\n void pending.then(undefined, (cause) => {\n if (signal.aborted)\n return Effect.runPromiseWith(reporterContext)(\n reportBrowserCause(operation, Cause.fail(cause)),\n );\n });\n\n return trackPendingInput(state, pending);\n };\n});\n\nconst stateFailure = (state: HandleState): BrowserFailure | undefined => {\n if (state.violation.value !== undefined) return state.violation.value;\n if (state.closed.value) return expiredError();\n if (state.disconnected.value) return expiredError(\"disconnected\");\n\n return undefined;\n};\n\ninterface CloseFailure {\n readonly error: InteractiveBrowserActionError;\n readonly warning: string;\n}\n\ninterface CloseEntry {\n readonly close: Effect.Effect<void, InteractiveBrowserActionError>;\n readonly warning: string;\n}\n\ninterface HandleRuntime {\n readonly handle: BrowserHandle;\n readonly run: <A>(\n effect: Effect.Effect<A, BrowserFailure>,\n preflight?: Effect.Effect<void, BrowserFailure>,\n consumeAction?: boolean,\n mutating?: boolean,\n ) => Effect.Effect<A, BrowserFailure>;\n}\n\nclass BrowserRunRemoteFailure {\n readonly cause: unknown;\n\n constructor(cause: unknown) {\n this.cause = cause;\n }\n}\n\nconst awaitPendingRequests = (state: HandleState): Effect.Effect<void> =>\n Effect.suspend(() => {\n const pending = [...state.pendingRequests];\n\n return pending.length === 0\n ? Effect.void\n : Effect.promise(() => Promise.all(pending)).pipe(\n Effect.asVoid,\n Effect.andThen(awaitPendingRequests(state)),\n );\n });\n\nconst decodeNavigationResult = Effect.fnUntraced(function* (\n page: BrowserRunInteractivePage,\n policy: InteractiveBrowserPolicySnapshot,\n) {\n const url = yield* Effect.try({\n try: page.url,\n catch: (cause) => protocolError(\"Reading the browser navigation URL failed\", cause),\n });\n\n const result = yield* Schema.decodeUnknownEffect(BrowserNavigationResult)({\n url,\n }).pipe(\n Effect.mapError((cause) =>\n protocolError(\"The browser returned a malformed navigation URL\", cause),\n ),\n );\n\n if (!hostAllowed(policy, result.url)) {\n return yield* policyError(\"The browser returned an off-policy page URL\");\n }\n\n return result;\n});\n\nconst decodeActionResult = Effect.fnUntraced(function* (\n page: BrowserRunInteractivePage,\n policy: InteractiveBrowserPolicySnapshot,\n) {\n const url = yield* Effect.try({\n try: page.url,\n catch: (cause) => protocolError(\"Reading the browser page URL failed\", cause),\n });\n\n const result = yield* Schema.decodeUnknownEffect(BrowserActionResult)({ url }).pipe(\n Effect.mapError((cause) => protocolError(\"The browser returned a malformed page URL\", cause)),\n );\n\n if (!hostAllowed(policy, result.url)) {\n return yield* policyError(\"The browser returned an off-policy page URL\");\n }\n\n return result;\n});\n\nconst makeRequestListener =\n (\n policy: InteractiveBrowserPolicySnapshot,\n state: HandleState,\n ): BrowserRunInteractiveRequestListener =>\n (request) => {\n let allowed = false;\n\n try {\n allowed = hostAllowed(policy, request.url());\n } catch {\n allowed = false;\n }\n if (!allowed) {\n state.violation.value = policyError(\"The browser requested an off-policy URL\");\n }\n\n let settlement: Promise<void>;\n\n try {\n settlement = allowed ? request.continue() : request.abort();\n } catch (cause) {\n state.violation.value = protocolError(\n \"Resolving an intercepted browser request failed\",\n cause,\n );\n\n return;\n }\n\n const observed = settlement\n .catch((cause) => {\n state.violation.value = protocolError(\n \"Resolving an intercepted browser request failed\",\n cause,\n );\n })\n .finally(() => {\n state.pendingRequests.delete(observed);\n });\n\n state.pendingRequests.add(observed);\n };\n\nconst makeHandle = Effect.fnUntraced(function* (\n page: BrowserRunInteractivePage,\n policy: InteractiveBrowserPolicySnapshot,\n startedAt: number,\n state: HandleState,\n close: Effect.Effect<void, InteractiveBrowserError>,\n): Effect.fn.Return<HandleRuntime> {\n const permits = yield* Semaphore.make(1);\n let currentOperation: BrowserOperation | undefined;\n let generation = 0;\n\n let evidence: InteractiveBrowserFailureEvidence = {\n stage: \"preparation\",\n dispatch: \"not-dispatched\",\n session: \"attached\",\n };\n\n const reporterContext = yield* Effect.context<never>();\n\n const remote = <A>(\n operation: BrowserOperation,\n evaluate: (signal: AbortSignal) => Promise<A>,\n observed = false,\n ) =>\n Effect.suspend(() => {\n currentOperation = operation;\n const mutating = operation !== \"read-text\" && operation !== \"screenshot\";\n const currentGeneration = ++generation;\n\n evidence = {\n stage: observed ? \"preparation\" : mutating ? \"input\" : \"observation\",\n dispatch: observed || !mutating ? \"not-dispatched\" : \"running\",\n session: \"attached\",\n };\n\n return Effect.tryPromise({\n try: (signal) => {\n const pending = evaluate(signal);\n\n if (mutating) trackPendingInput(state, pending);\n void pending.then(\n () => {\n if (mutating && generation === currentGeneration)\n evidence = { ...evidence, stage: \"observation\", dispatch: \"completed\" };\n },\n (cause) => {\n if (state.disconnected.value || isRemoteClosure(cause)) {\n state.disconnected.value = true;\n if (mutating) state.uncertain.value = true;\n }\n if (generation === currentGeneration && evidence.dispatch === \"running\")\n evidence = { ...evidence, dispatch: \"unknown\" };\n if (signal.aborted && !(cause instanceof BrowserRunActionUndispatched))\n void Effect.runPromiseWith(reporterContext)(\n reportBrowserCause(\"interactive.input.late\", Cause.fail(cause)),\n );\n },\n );\n\n return pending;\n },\n catch: (cause) => new BrowserRunRemoteFailure(cause),\n }).pipe(\n Effect.catch((failure) => {\n if (failure.cause instanceof BrowserRunActionUndispatched)\n return Effect.logInfo(\"Browser interactive action was not dispatched\").pipe(\n Effect.annotateLogs({\n \"browser.action\": operation,\n \"browser.selector_match_count\": failure.cause.matchCount,\n }),\n Effect.andThen(Effect.fail(undispatchedActionError(operation))),\n );\n if (mutating && inputMayStillRun(failure.cause)) state.uncertain.value = true;\n if (isRemoteClosure(failure.cause)) {\n state.disconnected.value = true;\n if (mutating) state.uncertain.value = true;\n }\n evidence = {\n ...evidence,\n dispatch: evidence.dispatch === \"running\" ? \"unknown\" : evidence.dispatch,\n session: state.disconnected.value ? \"disconnected\" : \"attached\",\n };\n\n return reportBrowserCause(\n `interactive.${operation}.${evidence.stage}.${evidence.dispatch}`,\n Cause.fail(failure.cause),\n ).pipe(\n Effect.andThen(\n Effect.fail(reportedBrowserError(actionError(operation, undefined, evidence))),\n ),\n );\n }),\n );\n });\n\n const observedAction = (\n operation: \"fill\" | \"click\" | \"select-file\",\n evaluate: (\n signal: AbortSignal,\n onDispatch: () => void,\n onComplete: () => void,\n ) => Promise<unknown>,\n ) =>\n remote(\n operation,\n (signal) => {\n const observedGeneration = generation;\n\n return evaluate(\n signal,\n () => {\n if (generation === observedGeneration)\n evidence = { ...evidence, stage: \"input\", dispatch: \"running\" };\n },\n () => {\n if (generation === observedGeneration)\n evidence = { ...evidence, stage: \"observation\", dispatch: \"completed\" };\n },\n );\n },\n true,\n ).pipe(\n Effect.onInterrupt(() =>\n Effect.logWarning(\"Browser interactive action interrupted\").pipe(\n Effect.annotateLogs({\n \"browser.action\": operation,\n \"browser.action_dispatched\": evidence.dispatch !== \"not-dispatched\",\n \"browser.action_outcome_unknown\":\n evidence.dispatch === \"running\" || evidence.dispatch === \"unknown\",\n }),\n ),\n ),\n );\n\n const decodeActionObservation = (raw: unknown) =>\n Schema.decodeUnknownEffect(ActionObservation)(raw).pipe(\n Effect.mapError((cause) =>\n protocolError(\"The browser returned a malformed action observation\", cause),\n ),\n );\n\n const logActionObservation = (\n operation: \"fill\" | \"click\" | \"select-file\",\n observation: typeof ActionObservation.Type,\n ) =>\n Effect.logInfo(\"Browser interactive action observed\").pipe(\n Effect.annotateLogs({\n \"browser.action\": operation,\n \"browser.input_millis\": observation.inputMillis,\n \"browser.observation_millis\": observation.observationMillis,\n \"browser.selector_match_count\": observation.before.matchCount,\n ...(observation.before.kind === undefined\n ? {}\n : { \"browser.target_kind\": observation.before.kind }),\n ...(observation.before.checked === undefined\n ? {}\n : { \"browser.target_checked_before\": observation.before.checked }),\n ...(observation.after?.checked === undefined\n ? {}\n : { \"browser.target_checked_after\": observation.after.checked }),\n ...(observation.before.selected === undefined\n ? {}\n : { \"browser.target_selected_before\": observation.before.selected }),\n ...(observation.after?.selected === undefined\n ? {}\n : { \"browser.target_selected_after\": observation.after.selected }),\n ...(observation.before.disabled === undefined\n ? {}\n : { \"browser.target_disabled_before\": observation.before.disabled }),\n ...(observation.after?.disabled === undefined\n ? {}\n : { \"browser.target_disabled_after\": observation.after.disabled }),\n ...(observation.before.required === undefined\n ? {}\n : { \"browser.target_required_before\": observation.before.required }),\n ...(observation.after?.required === undefined\n ? {}\n : { \"browser.target_required_after\": observation.after.required }),\n ...(observation.before.valid === undefined\n ? {}\n : { \"browser.target_valid_before\": observation.before.valid }),\n ...(observation.after?.valid === undefined\n ? {}\n : { \"browser.target_valid_after\": observation.after.valid }),\n ...(observation.before.formValid === undefined\n ? {}\n : { \"browser.form_valid_before\": observation.before.formValid }),\n ...(observation.after?.formValid === undefined\n ? {}\n : { \"browser.form_valid_after\": observation.after.formValid }),\n \"browser.target_after_unavailable\": observation.afterUnavailable,\n \"browser.fetch_xhr_total\": observation.network.total,\n \"browser.fetch_xhr_2xx\": observation.network.status2xx,\n \"browser.fetch_xhr_3xx\": observation.network.status3xx,\n \"browser.fetch_xhr_4xx\": observation.network.status4xx,\n \"browser.fetch_xhr_5xx\": observation.network.status5xx,\n \"browser.fetch_xhr_failed\": observation.network.failed,\n \"browser.fetch_xhr_pending\": observation.network.pending,\n \"browser.network_settle_timed_out\": observation.network.settleTimedOut,\n }),\n );\n\n const run = <A>(\n effect: Effect.Effect<A, BrowserFailure>,\n preflight: Effect.Effect<void, BrowserFailure> = Effect.void,\n consumeAction = true,\n mutating = true,\n ) =>\n permits\n .withPermitsIfAvailable(1)(\n Effect.gen(function* () {\n const unavailable = stateFailure(state);\n\n if (unavailable !== undefined) {\n if (unavailable._tag === \"InteractiveBrowserProtocolError\") {\n yield* reportBrowserCause(\"interactive.policy\", Cause.fail(unavailable));\n\n const safe = reportedBrowserError(\n InteractiveBrowserProtocolError.make({\n implementation: browserRunInteractiveImplementation,\n message: unavailable.message,\n evidence: unavailable.evidence ?? {\n stage: \"preparation\",\n dispatch: \"not-dispatched\",\n session: \"attached\",\n },\n }),\n );\n\n if (state.violation.value === unavailable) state.violation.value = safe;\n\n return yield* safe;\n }\n\n return yield* unavailable;\n }\n if (mutating && (state.uncertain.value || state.pendingInputs.size > 0))\n return yield* InteractiveBrowserBusyError.make({\n implementation: browserRunInteractiveImplementation,\n message: \"Earlier browser input has not been proven stopped\",\n });\n currentOperation = undefined;\n generation++;\n yield* preflight;\n\n if (consumeAction) {\n const admitted = {\n allowed: state.actions.value < policy.maxActions,\n observed: state.actions.value + 1,\n };\n\n if (admitted.allowed) state.actions.value++;\n\n if (!admitted.allowed) {\n return yield* InteractiveBrowserLimitError.make({\n implementation: browserRunInteractiveImplementation,\n limit: \"actions\",\n maximum: policy.maxActions,\n observed: admitted.observed,\n message: \"The browser action limit was reached\",\n });\n }\n }\n\n const completed = effect.pipe(\n Effect.flatMap((result) =>\n awaitPendingRequests(state).pipe(\n Effect.andThen(\n Effect.suspend(() => {\n const failure = stateFailure(state);\n\n return failure === undefined ? Effect.succeed(result) : Effect.fail(failure);\n }),\n ),\n ),\n ),\n );\n\n return yield* withinDeadline(completed, policy, startedAt).pipe(\n Effect.mapError((error) =>\n currentOperation === undefined\n ? error\n : error._tag === \"InteractiveBrowserLimitError\"\n ? InteractiveBrowserLimitError.make({\n implementation: error.implementation,\n limit: error.limit,\n maximum: error.maximum,\n observed: error.observed,\n message: error.message,\n evidence,\n })\n : error._tag === \"InteractiveBrowserPolicyDeniedError\"\n ? InteractiveBrowserPolicyDeniedError.make({\n implementation: error.implementation,\n message: error.message,\n evidence,\n })\n : error,\n ),\n Effect.catchIf(\n (error) =>\n currentOperation !== undefined &&\n error._tag !== \"InteractiveBrowserActionError\" &&\n error._tag !== \"InteractiveBrowserLimitError\" &&\n error._tag !== \"InteractiveBrowserPolicyDeniedError\" &&\n error._tag !== \"InteractiveBrowserExpiredError\",\n (error) => {\n const safe = reportedBrowserError(\n error._tag === \"InteractiveBrowserProtocolError\"\n ? InteractiveBrowserProtocolError.make({\n implementation: browserRunInteractiveImplementation,\n message: error.message,\n evidence,\n })\n : actionError(currentOperation ?? \"read-text\", undefined, evidence),\n );\n\n if (state.violation.value === error) state.violation.value = safe;\n\n return reportBrowserCause(\n `interactive.${currentOperation}.observation`,\n Cause.fail(error),\n ).pipe(Effect.andThen(Effect.fail(safe)));\n },\n ),\n );\n }),\n )\n .pipe(\n Effect.flatMap(\n Effect.fromOption(() =>\n InteractiveBrowserBusyError.make({\n implementation: browserRunInteractiveImplementation,\n message: \"The browser handle already has an operation in flight\",\n }),\n ),\n ),\n );\n\n const handle: BrowserHandle = {\n navigate: (request) =>\n run(\n Effect.gen(function* () {\n yield* remote(\"navigate\", () => page.goto(request.url));\n\n return yield* decodeNavigationResult(page, policy);\n }),\n Effect.suspend(() =>\n Schema.is(InteractiveBrowserTargetUrl)(request.url) && hostAllowed(policy, request.url)\n ? Effect.void\n : Effect.fail(policyError(\"The navigation URL is outside the browser policy\")),\n ),\n ),\n readText: (request) =>\n run(\n Effect.gen(function* () {\n const raw = yield* remote(\"read-text\", () =>\n page.readText(request.selector, policy.maxReturnedBytes),\n );\n\n const observation = yield* Schema.decodeUnknownEffect(TextObservation)(raw).pipe(\n Effect.mapError((cause) =>\n protocolError(\"The browser returned a malformed text observation\", cause),\n ),\n );\n\n if (observation._tag === \"MissingElement\") {\n return yield* actionError(\"read-text\", undefined, evidence);\n }\n if (observation._tag === \"OverLimit\") {\n return yield* InteractiveBrowserLimitError.make({\n implementation: browserRunInteractiveImplementation,\n limit: \"returned-bytes\",\n maximum: policy.maxReturnedBytes,\n observed: observation.observed,\n message: \"The browser returned-text limit was reached\",\n });\n }\n const observed = new TextEncoder().encode(observation.text).byteLength;\n\n if (observed > policy.maxReturnedBytes) {\n return yield* InteractiveBrowserLimitError.make({\n implementation: browserRunInteractiveImplementation,\n limit: \"returned-bytes\",\n maximum: policy.maxReturnedBytes,\n observed,\n message: \"The browser returned-text limit was reached\",\n });\n }\n\n return yield* Schema.decodeEffect(BrowserTextResult)({\n text: observation.text,\n }).pipe(\n Effect.mapError((cause) =>\n protocolError(\"The browser returned malformed page text\", cause),\n ),\n );\n }),\n Effect.void,\n true,\n false,\n ),\n fill: (request) =>\n run(\n Effect.gen(function* () {\n const observation = yield* observedAction(\"fill\", (signal, onDispatch, onComplete) =>\n page.fill(\n request.selector,\n request.value,\n signal,\n onDispatch,\n onComplete,\n request.expectedTarget,\n ),\n ).pipe(Effect.flatMap(decodeActionObservation));\n\n yield* logActionObservation(\"fill\", observation);\n\n return yield* decodeActionResult(page, policy);\n }),\n ),\n click: (request) =>\n run(\n Effect.gen(function* () {\n const observation = yield* observedAction(\"click\", (signal, onDispatch, onComplete) =>\n page.click(request.selector, signal, onDispatch, onComplete, request.expectedTarget),\n ).pipe(Effect.flatMap(decodeActionObservation));\n\n yield* logActionObservation(\"click\", observation);\n\n return yield* decodeActionResult(page, policy);\n }),\n ),\n selectFile: (request) =>\n Schema.decodeEffect(BrowserSelectFileRequest)(request).pipe(\n Effect.mapError(() => policyError(\"The browser file selection request is malformed\")),\n Effect.flatMap((decoded) =>\n run(\n Effect.gen(function* () {\n const observation = yield* observedAction(\n \"select-file\",\n (signal, onDispatch, onComplete) =>\n page.selectFile(decoded, signal, onDispatch, onComplete),\n ).pipe(Effect.flatMap(decodeActionObservation));\n\n yield* logActionObservation(\"select-file\", observation);\n const result = yield* decodeActionResult(page, policy);\n\n return BrowserFileSelectionResult.make({\n url: result.url,\n fileName: decoded.fileName,\n mediaType: decoded.mediaType,\n size: decoded.bytes.length,\n });\n }),\n ),\n ),\n ),\n screenshot: (request) =>\n Schema.decodeEffect(BrowserScreenshotRequest)(request).pipe(\n Effect.mapError(() => policyError(\"The browser screenshot request is malformed\")),\n Effect.flatMap((decoded) =>\n run(\n Effect.gen(function* () {\n const raw = yield* remote(\"screenshot\", () => page.screenshot(decoded.fullPage));\n\n const bytes = yield* Schema.decodeUnknownEffect(PngBytes)(raw).pipe(\n Effect.mapError(() =>\n protocolError(\"The browser returned a malformed PNG screenshot\"),\n ),\n );\n\n if (bytes.length > policy.maxReturnedBytes) {\n return yield* InteractiveBrowserLimitError.make({\n implementation: browserRunInteractiveImplementation,\n limit: \"returned-bytes\",\n maximum: policy.maxReturnedBytes,\n observed: bytes.length,\n message: \"The browser screenshot byte limit was reached\",\n });\n }\n\n return yield* Schema.decodeEffect(PageScreenshotResult)({\n implementation: browserRunInteractiveImplementation,\n mediaType: \"image/png\",\n bytes: new Uint8Array(bytes),\n }).pipe(\n Effect.mapError(() =>\n protocolError(\"The browser returned a malformed PNG screenshot\"),\n ),\n );\n }),\n decodeActionResult(page, policy).pipe(Effect.asVoid),\n true,\n false,\n ),\n ),\n ),\n scroll: (request) =>\n Schema.decodeEffect(BrowserScrollRequest)(request).pipe(\n Effect.mapError(() => policyError(\"The browser scroll request is malformed\")),\n Effect.flatMap((decoded) =>\n run(\n remote(\"scroll\", () => page.scroll(decoded.deltaX, decoded.deltaY)).pipe(\n Effect.andThen(decodeActionResult(page, policy)),\n ),\n decodeActionResult(page, policy).pipe(Effect.asVoid),\n ),\n ),\n ),\n close,\n };\n\n return { handle, run };\n});\n\nconst remainingMillis = Effect.fnUntraced(function* (\n policy: InteractiveBrowserPolicySnapshot,\n startedAt: number,\n) {\n const now = yield* Effect.clockWith((clock) => clock.currentTimeMillis);\n\n return Math.max(0, policy.maxElapsedMillis - Math.max(0, now - startedAt));\n});\n\nconst closeEntry = (close: () => Promise<void>, warning: string): CloseEntry => ({\n close: Effect.tryPromise({\n try: close,\n catch: (cause) => actionError(\"close\", cause),\n }).pipe(\n Effect.timeoutOrElse({\n duration: Duration.millis(CLEANUP_STEP_TIMEOUT_MILLIS),\n orElse: () => Effect.fail(actionError(\"close\")),\n }),\n ),\n warning,\n});\n\nconst syncCloseEntry = (close: () => void, warning: string): CloseEntry => ({\n close: Effect.try({\n try: close,\n catch: (cause) => actionError(\"close\", cause),\n }),\n warning,\n});\n\nconst runTeardown = (\n entries: ReadonlyArray<CloseEntry>,\n): Effect.Effect<ReadonlyArray<CloseFailure>> =>\n Effect.forEach([...entries].reverse(), (entry) =>\n entry.close.pipe(\n Effect.match({\n onFailure: (error): CloseFailure | undefined => ({ error, warning: entry.warning }),\n onSuccess: (): CloseFailure | undefined => undefined,\n }),\n ),\n ).pipe(Effect.map((failures) => failures.filter((failure) => failure !== undefined)));\n\nconst cdpCommand = <A>(\n page: BrowserRunInteractivePage,\n state: HandleState,\n command: BrowserRunCloudflareCommand,\n parameters: unknown,\n output: Schema.Codec<A>,\n malformedMessage: string,\n): Effect.Effect<A, InteractiveBrowserError> =>\n Effect.scoped(\n Effect.gen(function* () {\n const cleanupContext = yield* Effect.context<never>();\n const observeInput = yield* makeHostInputObserver(state, \"interactive.control.late\");\n\n const cdp = yield* Effect.acquireRelease(\n Effect.tryPromise({\n try: (signal) => {\n const pending = closeLateAcquisition(signal, page.createCdpSession, (acquired) =>\n Effect.runPromiseWith(cleanupContext)(\n Effect.tryPromise({\n try: () => acquired.detach(),\n catch: (cause) => actionError(\"close\", cause),\n }).pipe(\n Effect.tapCause((cause) => reportBrowserCause(\"interactive.lateDetach\", cause)),\n ),\n ),\n );\n\n void pending.then(undefined, (cause) => {\n if (signal.aborted && !(cause instanceof LateBrowserAcquisition))\n return Effect.runPromiseWith(cleanupContext)(\n reportBrowserCause(\"interactive.connect\", Cause.fail(cause)),\n );\n });\n\n return pending;\n },\n catch: (cause) =>\n state.disconnected.value || isRemoteClosure(cause)\n ? expiredError()\n : protocolError(\"Creating the Cloudflare browser control session failed\", cause),\n }),\n (acquired) =>\n closeWithWarning(\n acquired.detach,\n \"Detaching the Cloudflare browser control session failed\",\n ),\n { interruptible: true },\n );\n\n const raw = yield* Effect.tryPromise({\n try: (signal) => {\n const pending = cdp.send(command, parameters);\n\n return command === \"Cloudflare.getHandoffState\" ? pending : observeInput(pending, signal);\n },\n catch: (cause) =>\n state.disconnected.value || isRemoteClosure(cause)\n ? expiredError()\n : protocolError(\"The Cloudflare browser control command failed\", cause),\n });\n\n return yield* Schema.decodeUnknownEffect(output)(raw).pipe(\n Effect.catch((error) =>\n reportBrowserCause(\"interactive.command.decode\", Cause.fail(error)).pipe(\n Effect.andThen(Effect.fail(reportedBrowserError(protocolError(malformedMessage)))),\n ),\n ),\n );\n }),\n ).pipe(\n Effect.catchTag(\"InteractiveBrowserProtocolError\", (error) =>\n failReportedProtocol(\"interactive.control\", error),\n ),\n );\n\nconst makeHostService = (\n binding: BrowserRunInteractiveBinding[\"Service\"],\n): BrowserRunInteractiveHost[\"Service\"] => {\n const owners = new Map<string, symbol>();\n\n const closeSession: BrowserRunInteractiveHost[\"Service\"][\"closeSession\"] = (sessionId) =>\n binding.closeSession(sessionId).pipe(\n Effect.tap(() =>\n Effect.sync(() => {\n owners.delete(Redacted.value(sessionId));\n }),\n ),\n );\n\n const terminate = Effect.fnUntraced(function* (\n sessionId: Redacted.Redacted<string>,\n entries: ReadonlyArray<CloseEntry>,\n ) {\n const deadline = (yield* Clock.currentTimeMillis) + 10_000;\n\n yield* closeSession(sessionId).pipe(\n Effect.interruptible,\n Effect.timeoutOrElse({\n duration: \"10 seconds\",\n orElse: () => Effect.fail(actionError(\"close\")),\n }),\n );\n const remaining = deadline - (yield* Clock.currentTimeMillis);\n\n if (remaining <= 0)\n return yield* Effect.logWarning(\n \"Local browser teardown skipped after confirmed termination deadline\",\n );\n // Remote termination is authoritative. Local cleanup must not veto it or extend the deadline.\n yield* runTeardown(entries).pipe(\n Effect.flatMap((failures) =>\n Effect.forEach(\n failures,\n (failure) =>\n reportBrowserCause(\"interactive.cleanup\", Cause.fail(failure.error)).pipe(\n Effect.andThen(Effect.logWarning(failure.warning)),\n ),\n {\n discard: true,\n },\n ),\n ),\n Effect.interruptible,\n Effect.timeout(`${remaining} millis`),\n Effect.catchCause((cause) =>\n reportBrowserCause(\"interactive.cleanup\", cause).pipe(\n Effect.andThen(\n Effect.logWarning(\"Local browser teardown incomplete after confirmed termination\"),\n ),\n ),\n ),\n );\n });\n\n const closeAcquired = Effect.fnUntraced(function* (browser: BrowserRunInteractiveBrowser) {\n const sessionId = yield* Effect.try({\n try: browser.sessionId,\n catch: (cause) => actionError(\"close\", cause),\n }).pipe(\n Effect.flatMap(Schema.decodeUnknownEffect(BrowserRunSessionId)),\n Effect.mapError((cause) => actionError(\"close\", cause)),\n Effect.onError(() =>\n closeWithWarning(browser.close, \"Closing an unidentified browser failed\"),\n ),\n );\n\n yield* terminate(Redacted.make(sessionId), [\n closeEntry(browser.close, \"Closing the local browser connection failed\"),\n ]);\n });\n\n const acquire = Effect.fnUntraced(function* (\n policy: InteractiveBrowserPolicy,\n resume?: BrowserRunInteractiveCheckpoint,\n pendingInput = false,\n ): Effect.fn.Return<BrowserRunInteractiveAcquisition, InteractiveBrowserError, Scope.Scope> {\n const scope = yield* Scope.Scope;\n const fixedPolicy = yield* snapshotPolicy(policy);\n const startedAt = resume?.startedAt ?? (yield* Clock.currentTimeMillis);\n\n // Late SDK replies retain this pass's clock and private reporting scope.\n const runCleanup = <A, E>(effect: Effect.Effect<A, E>) =>\n Effect.runPromiseWith(cleanupContext)(\n effect.pipe(\n Effect.tapCause((cause) => reportBrowserCause(\"interactive.lateCleanup\", cause)),\n ),\n );\n\n const cleanupContext = yield* Effect.context<never>();\n\n const observeLate = <A>(signal: AbortSignal, pending: Promise<A>): Promise<A> => {\n // Observe the original Promise without creating another rejected continuation.\n void pending.then(undefined, (cause) => {\n if (signal.aborted && !(cause instanceof LateBrowserAcquisition))\n return runCleanup(reportBrowserCause(\"interactive.acquire\", Cause.fail(cause)));\n });\n\n return pending;\n };\n\n const state: HandleState = {\n closed: { value: false },\n disconnected: { value: false },\n uncertain: { value: pendingInput || (resume !== undefined && resume.inputState !== \"idle\") },\n pendingInputs: new Set(),\n actions: { value: resume?.consumedActions ?? 0 },\n violation: { value: undefined },\n pendingRequests: new Set(),\n };\n\n const lifecycle = {\n managedTeardownInstalled: false,\n retained: resume !== undefined,\n };\n\n const closers: Array<CloseEntry> = [];\n\n const releaseBeforeManaged = (entry: CloseEntry): Effect.Effect<void> =>\n Effect.suspend(() =>\n lifecycle.managedTeardownInstalled || lifecycle.retained\n ? Effect.void\n : entry.close.pipe(\n Effect.catchCause((cause) =>\n reportBrowserCause(\"interactive.cleanup\", cause).pipe(\n Effect.andThen(Effect.logWarning(entry.warning)),\n ),\n ),\n ),\n );\n\n const sessionIdValue = yield* Effect.acquireRelease(\n withinDeadline(\n resume === undefined\n ? Effect.tryPromise({\n try: (signal) =>\n observeLate(\n signal,\n closeLateAcquisition(\n signal,\n () => binding.acquire(keepAliveMillis(fixedPolicy)),\n (id) =>\n runCleanup(\n Schema.decodeUnknownEffect(BrowserRunSessionId)(id).pipe(\n Effect.flatMap((value) => terminate(Redacted.make(value), [])),\n ),\n ),\n ),\n ),\n catch: (cause) =>\n isCapacityRefusal(cause)\n ? InteractiveBrowserCapacityError.make({\n implementation: browserRunInteractiveImplementation,\n message: \"Browser Run has no capacity for a new browser session\",\n })\n : protocolError(\"Acquiring the Browser Run session failed\", cause),\n }).pipe(\n Effect.flatMap(Schema.decodeUnknownEffect(BrowserRunSessionId)),\n Effect.catchTag(\"SchemaError\", () =>\n protocolError(\"The Browser Run session identity was malformed\"),\n ),\n )\n : Effect.succeed(Redacted.value(resume.sessionId)),\n fixedPolicy,\n startedAt,\n ),\n (id) =>\n Effect.suspend(() => {\n state.closed.value = true;\n state.disconnected.value = true;\n\n return lifecycle.managedTeardownInstalled || lifecycle.retained\n ? Effect.void\n : terminate(Redacted.make(id), []).pipe(\n Effect.catchCause((cause) =>\n reportBrowserCause(\"interactive.close\", cause).pipe(\n Effect.andThen(Effect.logWarning(\"Whole-browser cleanup remains unconfirmed\")),\n ),\n ),\n );\n }),\n { interruptible: true },\n );\n\n const owner = Symbol();\n\n const releaseOwner = () => {\n if (owners.get(sessionIdValue) === owner) owners.delete(sessionIdValue);\n };\n\n const connect = yield* Effect.cached(\n Effect.gen(function* (): Effect.fn.Return<\n BrowserRunInteractiveSession,\n InteractiveBrowserError,\n Scope.Scope\n > {\n if (owners.has(sessionIdValue))\n return yield* InteractiveBrowserBusyError.make({\n implementation: browserRunInteractiveImplementation,\n message: \"The previous local browser owner must detach before resuming\",\n });\n yield* Effect.acquireRelease(\n Effect.sync(() => {\n owners.set(sessionIdValue, owner);\n }),\n () =>\n Effect.sync(() => {\n if (!lifecycle.managedTeardownInstalled) releaseOwner();\n }),\n );\n\n const browser = yield* Effect.acquireRelease(\n withinDeadline(\n Effect.tryPromise({\n try: (signal) =>\n observeLate(\n signal,\n closeLateAcquisition(\n signal,\n () => binding.connect(sessionIdValue, signal),\n (acquired) =>\n runCleanup(\n resume === undefined\n ? closeAcquired(acquired)\n : closeEntry(\n acquired.detach ?? (async () => {}),\n \"Detaching the browser failed\",\n ).close,\n ),\n ),\n ),\n catch: (cause) =>\n resume !== undefined &&\n cause instanceof BrowserRunFailure &&\n (cause.status === 404 || cause.status === 410)\n ? expiredError()\n : protocolError(\"Connecting to the Browser Run session failed\", cause),\n }).pipe(\n Effect.timeoutOrElse({\n duration: \"10 seconds\",\n orElse: () =>\n Effect.fail(protocolError(\"Connecting to the Browser Run session timed out\")),\n }),\n ),\n fixedPolicy,\n startedAt,\n ),\n (acquired) =>\n lifecycle.managedTeardownInstalled\n ? Effect.void\n : lifecycle.retained\n ? closeEntry(\n acquired.detach ?? (async () => {}),\n \"Detaching the browser failed\",\n ).close.pipe(\n Effect.tap(() => Effect.sync(releaseOwner)),\n Effect.catchCause((cause) => reportBrowserCause(\"interactive.detach\", cause)),\n )\n : releaseBeforeManaged(\n closeEntry(acquired.close, \"Closing the local browser connection failed\"),\n ),\n { interruptible: true },\n );\n\n if (resume !== undefined) {\n const actualSession = yield* Effect.try({\n try: browser.sessionId,\n catch: (cause) =>\n protocolError(\"Reading the reattached browser identity failed\", cause),\n });\n\n if (actualSession !== sessionIdValue)\n return yield* protocolError(\"The reattached browser session identity did not match\");\n }\n closers.push(closeEntry(browser.close, \"Closing the interactive browser failed\"));\n\n const disconnected = () => {\n state.disconnected.value = true;\n };\n\n yield* Effect.acquireRelease(\n Effect.try({\n try: () => browser.onDisconnected(disconnected),\n catch: (cause) =>\n protocolError(\"Installing the browser disconnect listener failed\", cause),\n }),\n () =>\n releaseBeforeManaged(\n syncCloseEntry(\n () => browser.offDisconnected(disconnected),\n \"Removing the browser disconnect listener failed\",\n ),\n ),\n );\n closers.push(\n syncCloseEntry(\n () => browser.offDisconnected(disconnected),\n \"Removing the browser disconnect listener failed\",\n ),\n );\n\n const connected = yield* Effect.try({\n try: browser.isConnected,\n catch: (cause) => protocolError(\"Reading the Browser Run connection state failed\", cause),\n });\n\n if (!connected) {\n state.disconnected.value = true;\n\n return yield* expiredError();\n }\n\n const reattached =\n resume === undefined\n ? undefined\n : yield* withinDeadline(\n Effect.gen(function* () {\n if (browser.reattach === undefined || browser.detach === undefined)\n return yield* protocolError(\n \"The browser binding does not support exact reattachment\",\n );\n\n const reattach = browser.reattach.bind(browser);\n\n return yield* Effect.tryPromise({\n try: () => reattach(resume.page),\n catch: (cause) =>\n protocolError(\"Reattaching the exact browser page failed\", cause),\n });\n }).pipe(\n Effect.timeoutOrElse({\n duration: \"10 seconds\",\n orElse: () =>\n Effect.fail(protocolError(\"Reattaching the exact browser page timed out\")),\n }),\n ),\n fixedPolicy,\n startedAt,\n );\n\n if (resume !== undefined && reattached === undefined) return yield* expiredError();\n\n const context =\n reattached?.context ??\n (yield* Effect.acquireRelease(\n withinDeadline(\n Effect.tryPromise({\n try: (signal) =>\n observeLate(\n signal,\n closeLateAcquisition(signal, browser.createContext, (acquired) =>\n runCleanup(\n Effect.tryPromise({\n try: () => acquired.close(),\n catch: (cause) => actionError(\"close\", cause),\n }),\n ),\n ),\n ),\n catch: (cause) =>\n state.disconnected.value || isRemoteClosure(cause)\n ? expiredError()\n : protocolError(\"Creating the browser context failed\", cause),\n }),\n fixedPolicy,\n startedAt,\n ),\n (acquired) =>\n releaseBeforeManaged(\n closeEntry(acquired.close, \"Closing the interactive browser context failed\"),\n ),\n { interruptible: true },\n ));\n\n closers.push(closeEntry(context.close, \"Closing the interactive browser context failed\"));\n\n const page =\n reattached?.page ??\n (yield* Effect.acquireRelease(\n withinDeadline(\n Effect.tryPromise({\n try: (signal) =>\n observeLate(\n signal,\n closeLateAcquisition(signal, context.newPage, (acquired) =>\n runCleanup(\n Effect.tryPromise({\n try: () => acquired.close(),\n catch: (cause) => actionError(\"close\", cause),\n }),\n ),\n ),\n ),\n catch: (cause) =>\n state.disconnected.value || isRemoteClosure(cause)\n ? expiredError()\n : protocolError(\"Creating the browser page failed\", cause),\n }),\n fixedPolicy,\n startedAt,\n ),\n (acquired) =>\n releaseBeforeManaged(\n closeEntry(acquired.close, \"Closing the interactive browser page failed\"),\n ),\n { interruptible: true },\n ));\n\n closers.push(closeEntry(page.close, \"Closing the interactive browser page failed\"));\n\n yield* withinDeadline(\n Effect.tryPromise({\n try: () => page.setBypassServiceWorker(true),\n catch: (cause) => protocolError(\"Bypassing browser service workers failed\", cause),\n }),\n fixedPolicy,\n startedAt,\n );\n\n const requestListener = makeRequestListener(fixedPolicy, state);\n\n yield* Effect.acquireRelease(\n Effect.try({\n try: () => page.onRequest(requestListener),\n catch: (cause) =>\n protocolError(\"Installing the browser request listener failed\", cause),\n }),\n () =>\n releaseBeforeManaged(\n syncCloseEntry(\n () => page.offRequest(requestListener),\n \"Removing the browser request policy failed\",\n ),\n ),\n );\n closers.push(\n syncCloseEntry(\n () => page.offRequest(requestListener),\n \"Removing the browser request policy failed\",\n ),\n );\n\n yield* withinDeadline(\n Effect.tryPromise({\n try: () => page.setRequestInterception(true),\n catch: (cause) => protocolError(\"Installing the browser request policy failed\", cause),\n }),\n fixedPolicy,\n startedAt,\n );\n\n yield* withinDeadline(awaitPendingRequests(state), fixedPolicy, startedAt);\n const setupFailure = stateFailure(state);\n\n if (setupFailure !== undefined) return yield* setupFailure;\n\n const detach = yield* Effect.cached(\n Effect.uninterruptible(\n Effect.gen(function* () {\n if (browser.detach === undefined)\n return yield* protocolError(\"The browser binding does not support detachment\");\n lifecycle.retained = true;\n state.closed.value = true;\n state.disconnected.value = true;\n if (state.pendingInputs.size > 0) state.uncertain.value = true;\n yield* closeEntry(async () => {\n page.offRequest(requestListener);\n browser.offDisconnected(disconnected);\n await browser.detach?.();\n }, \"Detaching the browser transport failed\").close;\n releaseOwner();\n }).pipe(\n Effect.catchTag(\"InteractiveBrowserActionError\", (error) =>\n reportBrowserCause(\"interactive.detach\", Cause.fail(error)).pipe(\n Effect.andThen(Effect.fail(reportedBrowserError(actionError(\"close\")))),\n ),\n ),\n Effect.catchTag(\"InteractiveBrowserProtocolError\", (error) =>\n failReportedProtocol(\"interactive.detach\", error),\n ),\n ),\n ),\n );\n\n const teardown = yield* Effect.uninterruptible(\n Effect.gen(function* () {\n const cached = yield* Effect.cached(\n terminate(Redacted.make(sessionIdValue), closers).pipe(\n Effect.tapCause((cause) => reportBrowserCause(\"interactive.close\", cause)),\n Effect.mapError(reportedBrowserError),\n ),\n );\n\n lifecycle.managedTeardownInstalled = true;\n lifecycle.retained = false;\n yield* Effect.addFinalizer(() =>\n Effect.uninterruptible(\n Effect.sync(() => {\n state.closed.value = true;\n state.disconnected.value = true;\n }).pipe(\n Effect.andThen(Effect.suspend(() => (lifecycle.retained ? detach : cached))),\n Effect.catchCause((cause) =>\n reportBrowserCause(\"interactive.close\", cause).pipe(\n Effect.andThen(\n Effect.logWarning(\"Whole-browser cleanup remains unconfirmed\"),\n ),\n ),\n ),\n ),\n ),\n );\n\n return cached;\n }),\n );\n\n const close: Effect.Effect<void, InteractiveBrowserError> = Effect.uninterruptible(\n Effect.suspend(() => {\n if (lifecycle.retained || owners.get(sessionIdValue) !== owner) return Effect.void;\n state.closed.value = true;\n state.disconnected.value = true;\n\n return teardown;\n }),\n );\n\n const runtime = yield* makeHandle(page, fixedPolicy, startedAt, state, close);\n const currentPagePreflight = decodeActionResult(page, fixedPolicy).pipe(Effect.asVoid);\n\n const requestFitsSession = (requestedMillis: number): Effect.Effect<void, BrowserFailure> =>\n remainingMillis(fixedPolicy, startedAt).pipe(\n Effect.flatMap((remaining) =>\n remaining > 0 && requestedMillis <= remaining\n ? Effect.void\n : Effect.fail(\n policyError(\"The host browser request exceeds the remaining session time\"),\n ),\n ),\n );\n\n const inputState = Effect.sync((): BrowserRunInputState =>\n state.uncertain.value ? \"unknown\" : state.pendingInputs.size > 0 ? \"running\" : \"idle\",\n );\n\n const pageIdentity = yield* Effect.cached(\n Effect.gen(function* () {\n if (page.identity === undefined)\n return yield* protocolError(\"The browser binding does not expose page identity\");\n const identity = page.identity.bind(page);\n\n return yield* Effect.tryPromise({\n try: () => identity(),\n catch: (cause) =>\n protocolError(\"Reading the exact browser page identity failed\", cause),\n });\n }).pipe(\n Effect.catchTag(\"InteractiveBrowserProtocolError\", (error) =>\n failReportedProtocol(\"interactive.checkpoint\", error),\n ),\n ),\n );\n\n const observeResize = yield* makeHostInputObserver(state, \"interactive.resize.late\");\n\n return {\n handle: runtime.handle,\n checkpoint: withinDeadline(\n Effect.gen(function* () {\n const identity = resume?.page ?? (yield* pageIdentity);\n\n return BrowserRunInteractiveCheckpoint.make({\n sessionId: Redacted.make(sessionIdValue),\n page: identity,\n policy: InteractiveBrowserPolicy.make(fixedPolicy),\n startedAt,\n consumedActions: state.actions.value,\n inputState: yield* inputState,\n });\n }),\n fixedPolicy,\n startedAt,\n ),\n detach,\n inputState,\n drainInput: Effect.suspend(() =>\n Effect.promise(() =>\n boundedBestEffort(Promise.allSettled(state.pendingInputs), 500),\n ).pipe(Effect.andThen(inputState)),\n ),\n sessionId: Redacted.make(sessionIdValue),\n resizeViewport: (viewport) =>\n decodeViewport(viewport).pipe(\n Effect.flatMap((decoded) =>\n runtime.run(\n Effect.tryPromise({\n try: (signal) => observeResize(page.setViewport(decoded), signal),\n catch: (cause) => {\n if (state.disconnected.value || isRemoteClosure(cause)) {\n state.disconnected.value = true;\n\n return expiredError();\n }\n\n return protocolError(\"Resizing the browser viewport failed\", cause);\n },\n }).pipe(\n Effect.catchTag(\"InteractiveBrowserProtocolError\", (error) =>\n failReportedProtocol(\"interactive.resize\", error),\n ),\n ),\n currentPagePreflight,\n false,\n ),\n ),\n ),\n getLiveView: (request) =>\n Schema.decodeEffect(BrowserRunLiveViewRequest)(request).pipe(\n Effect.mapError(() => policyError(\"The Live View request is malformed\")),\n Effect.flatMap((decoded) =>\n runtime.run(\n cdpCommand(\n page,\n state,\n \"Cloudflare.getLiveView\",\n { mode: decoded.mode, expiresInMs: decoded.expiresInMs },\n LiveViewObservation,\n \"Cloudflare returned a malformed Live View response\",\n ).pipe(\n Effect.flatMap((observation) =>\n Schema.decodeEffect(BrowserRunLiveViewResult)({\n devtoolsFrontendUrl: Redacted.make(observation.devtoolsFrontendUrl),\n }).pipe(\n Effect.mapError(() =>\n protocolError(\"Cloudflare returned a malformed Live View response\"),\n ),\n ),\n ),\n ),\n currentPagePreflight.pipe(\n Effect.andThen(requestFitsSession(decoded.expiresInMs)),\n ),\n true,\n true,\n ),\n ),\n ),\n handoff: (request) =>\n Schema.decodeEffect(BrowserRunHandoffRequest)(request).pipe(\n Effect.mapError(() => policyError(\"The browser handoff request is malformed\")),\n Effect.flatMap((decoded) =>\n runtime.run(\n cdpCommand(\n page,\n state,\n \"Cloudflare.handoff\",\n { instructions: decoded.instructions, timeout: decoded.timeout },\n HandoffObservation,\n \"Cloudflare returned a malformed browser handoff response\",\n ).pipe(\n Effect.flatMap((observation) =>\n Schema.decodeEffect(BrowserRunHandoffResult)({\n handoffId: Redacted.make(observation.handoffId),\n }).pipe(\n Effect.mapError(() =>\n protocolError(\"Cloudflare returned a malformed browser handoff response\"),\n ),\n ),\n ),\n ),\n currentPagePreflight.pipe(Effect.andThen(requestFitsSession(decoded.timeout))),\n ),\n ),\n ),\n getHandoffState: runtime.run(\n cdpCommand(\n page,\n state,\n \"Cloudflare.getHandoffState\",\n {},\n HandoffStateObservation,\n \"Cloudflare returned a malformed browser handoff state\",\n ).pipe(\n Effect.flatMap((observation) =>\n Schema.decodeEffect(BrowserRunHandoffState)({\n active: observation.active,\n ...(observation.handoffId === undefined\n ? {}\n : { handoffId: Redacted.make(observation.handoffId) }),\n ...(observation.durationMs === undefined\n ? {}\n : { durationMs: observation.durationMs }),\n }).pipe(\n Effect.mapError(() =>\n protocolError(\"Cloudflare returned a malformed browser handoff state\"),\n ),\n ),\n ),\n ),\n currentPagePreflight,\n true,\n false,\n ),\n close,\n };\n }).pipe(Effect.provideService(Scope.Scope, scope)),\n );\n\n return {\n sessionId: Redacted.make(sessionIdValue),\n connect: Effect.suspend(() => (state.closed.value ? expiredError() : connect)),\n };\n });\n\n return BrowserRunInteractiveHost.of({\n acquire,\n open: (policy) => acquire(policy).pipe(Effect.flatMap((acquired) => acquired.connect)),\n resume: (checkpoint, options) =>\n Schema.decodeEffect(Schema.toType(BrowserRunInteractiveCheckpoint))(checkpoint).pipe(\n Effect.mapError(() => policyError(\"The browser checkpoint is malformed\")),\n Effect.flatMap((decoded) => acquire(decoded.policy, decoded, options.pendingInput)),\n Effect.flatMap((acquired) => acquired.connect),\n Effect.catchTag(\"InteractiveBrowserProtocolError\", (error) =>\n failReportedProtocol(\"interactive.resume\", error, {\n stage: \"preparation\",\n dispatch: \"not-dispatched\",\n session: \"disconnected\",\n }),\n ),\n ),\n closeSession,\n cleanupSemantics: \"confirmed-terminal\",\n });\n};\n\n/** Cloudflare host controls and private session identity for one scoped Browser Run pass. */\nexport const browserRunInteractiveHostLayer = (): Layer.Layer<\n BrowserRunInteractiveHost,\n never,\n BrowserRunInteractiveBinding\n> =>\n Layer.effect(\n BrowserRunInteractiveHost,\n Effect.gen(function* () {\n return makeHostService(yield* BrowserRunInteractiveBinding);\n }),\n );\n\n/** Worker-only generic adapter; Cloudflare identity and controls remain host-only. */\nexport const browserRunInteractiveLayer = (): Layer.Layer<\n InteractiveBrowser,\n never,\n BrowserRunInteractiveBinding\n> =>\n Layer.effect(\n InteractiveBrowser,\n Effect.gen(function* () {\n const binding = yield* BrowserRunInteractiveBinding;\n const host = makeHostService(binding);\n\n return InteractiveBrowser.of({\n open: (policy) => host.open(policy).pipe(Effect.map((session) => session.handle)),\n });\n }),\n );\n\n/** Resolved Worker binding, cleanup credentials, and optional initial viewport. */\nexport interface CloudflareInteractiveBrowserOptions extends BrowserRunLifecycleOptions {\n readonly browser: Pick<BrowserRun, \"fetch\">;\n readonly viewport?: BrowserRunViewport;\n}\n\nconst interactiveBindingLayer = (options: CloudflareInteractiveBrowserOptions) =>\n BrowserRunInteractiveBinding.layer(options).pipe(\n Layer.provide(BrowserRunSessionLifecycle.layer(options)),\n );\n\n/** Worker-only assembly; importing ordinary capture never loads Puppeteer. */\nexport const CloudflareInteractiveBrowser = {\n /**\n * Assemble binding, confirmed-session cleanup, and the generic browser service.\n * HttpClient and construction errors remain visible. Opening a pass still requires\n * an explicit policy and Scope; no browser is launched during Layer construction.\n */\n layer: (options: CloudflareInteractiveBrowserOptions) =>\n browserRunInteractiveLayer().pipe(Layer.provide(interactiveBindingLayer(options))),\n /** Opt into private host controls instead of exposing them through the generic service. */\n hostLayer: (options: CloudflareInteractiveBrowserOptions) =>\n browserRunInteractiveHostLayer().pipe(Layer.provide(interactiveBindingLayer(options))),\n};\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { _ as BrowserRunCleanupError, a as BrowserRunInteractiveCheckpoint, c as BrowserRunLiveViewResult, d as BrowserRunViewport, f as CloudflareInteractiveBrowser, g as isBrowserRunUndispatchedActionError, h as browserRunInteractiveLayer, i as BrowserRunInteractiveBinding, l as BrowserRunPageIdentity, m as browserRunInteractiveImplementation, n as BrowserRunHandoffResult, o as BrowserRunInteractiveHost, p as browserRunInteractiveHostLayer, r as BrowserRunHandoffState, s as BrowserRunLiveViewRequest, t as BrowserRunHandoffRequest, u as BrowserRunPageObservation, v as BrowserRunSessionLifecycle } from "./InteractiveBrowser-
|
|
1
|
+
import { _ as BrowserRunCleanupError, a as BrowserRunInteractiveCheckpoint, c as BrowserRunLiveViewResult, d as BrowserRunViewport, f as CloudflareInteractiveBrowser, g as isBrowserRunUndispatchedActionError, h as browserRunInteractiveLayer, i as BrowserRunInteractiveBinding, l as BrowserRunPageIdentity, m as browserRunInteractiveImplementation, n as BrowserRunHandoffResult, o as BrowserRunInteractiveHost, p as browserRunInteractiveHostLayer, r as BrowserRunHandoffState, s as BrowserRunLiveViewRequest, t as BrowserRunHandoffRequest, u as BrowserRunPageObservation, v as BrowserRunSessionLifecycle } from "./InteractiveBrowser-BHNlwjZL.mjs";
|
|
2
2
|
export { BrowserRunCleanupError, BrowserRunHandoffRequest, BrowserRunHandoffResult, BrowserRunHandoffState, BrowserRunInteractiveBinding, BrowserRunInteractiveCheckpoint, BrowserRunInteractiveHost, BrowserRunLiveViewRequest, BrowserRunLiveViewResult, BrowserRunPageIdentity, BrowserRunPageObservation, BrowserRunSessionLifecycle, BrowserRunViewport, CloudflareInteractiveBrowser, browserRunInteractiveHostLayer, browserRunInteractiveImplementation, browserRunInteractiveLayer, isBrowserRunUndispatchedActionError };
|
|
@@ -194,7 +194,7 @@ interface ThreadPublicationOptions<E = never, R = never, P = never> {
|
|
|
194
194
|
* Tool, Schema, and model requirements remain visible until satisfied by Layer composition.
|
|
195
195
|
* Use Layer.unwrap for registration values that need effectful application setup.
|
|
196
196
|
*/
|
|
197
|
-
declare const registeredLayer: <const Entries extends ReadonlyArray<AgentRegistration>, E = never, R = never>(registrations: Entries, options?: ThreadPublicationOptions<E, R>) => Layer.Layer<import("@yielded/agent-storage-cloudflare/do-storage-config").DoStorageConfig | DurableAgentRuntime | DurableAlarmService | MessageDeliveryStore | ProgressWaitRegistry | RunStorage | SettlementPublisher | SqlClient | SqliteClient.SqliteClient | StorageOwner | SubmissionLedger | ThreadMaintenance | ThreadMutationGate | ThreadObjectPorts | ThreadProjectionMaintenance | ThreadPublication | ThreadReader | ThreadStore | WakeScheduler, E | DigestError | DurableAlarmError | MessageDeliveryError | DoStorageInitializationError, CloudflareDurableRuntimeConfig | Crypto.Crypto | DoStorageFailpoint | DurableObjectContext | DurableRuntimeConfig | DurableRuntimeFailpoint | RunToolAuthorization | ThreadMaintenanceAlarm | ThreadMaintenanceFailpoint | ThreadObjectNamespace | ThreadObjectPlacement | ToolReconciler | Exclude<
|
|
197
|
+
declare const registeredLayer: <const Entries extends ReadonlyArray<AgentRegistration>, E = never, R = never>(registrations: Entries, options?: ThreadPublicationOptions<E, R>) => Layer.Layer<import("@yielded/agent-storage-cloudflare/do-storage-config").DoStorageConfig | DurableAgentRuntime | DurableAlarmService | MessageDeliveryStore | ProgressWaitRegistry | RunStorage | SettlementPublisher | SqlClient | SqliteClient.SqliteClient | StorageOwner | SubmissionLedger | ThreadMaintenance | ThreadMutationGate | ThreadObjectPorts | ThreadProjectionMaintenance | ThreadPublication | ThreadReader | ThreadStore | WakeScheduler, E | DigestError | DurableAlarmError | MessageDeliveryError | DoStorageInitializationError, CloudflareDurableRuntimeConfig | Crypto.Crypto | DoStorageFailpoint | DurableObjectContext | DurableRuntimeConfig | DurableRuntimeFailpoint | RunToolAuthorization | ThreadMaintenanceAlarm | ThreadMaintenanceFailpoint | ThreadObjectNamespace | ThreadObjectPlacement | ToolReconciler | Exclude<Entries[number] extends (infer T_2) ? T_2 extends Entries[number] ? T_2 extends unknown ? ("attemptLayer" extends keyof T_2 ? T_2[keyof T_2 & "attemptLayer"] : undefined) extends (infer T_3) ? T_3 extends ("attemptLayer" extends keyof T_2 ? T_2[keyof T_2 & "attemptLayer"] : undefined) ? T_3 extends ((context: import("@yielded/agent/agent-registration").AgentAttemptContext) => Layer.Layer<infer Provides, never, infer Requires>) ? Requires | Exclude<T_2 extends {
|
|
198
198
|
readonly agent: infer A extends import("@yielded/agent/agent-registration").ExecutableAgentBinding;
|
|
199
199
|
} ? import("@yielded/agent/durable-agent-runtime").DurableWorkerRequirements<A> : T_2 extends {
|
|
200
200
|
readonly agent: infer D extends import("@yielded/agent/agent").Definition<Schema.Top, Schema.Top, unknown, import("effect/ai/Toolkit").Any, import("@yielded/agent/agent").RunDispositionDeclaration<never, Schema.Top> | undefined, unknown, Schema.Top | undefined> & {
|
|
@@ -216,7 +216,7 @@ declare const registeredLayer: <const Entries extends ReadonlyArray<AgentRegistr
|
|
|
216
216
|
} ? import("@yielded/agent/durable-agent-runtime").DurableWorkerRequirements<{
|
|
217
217
|
readonly definition: D;
|
|
218
218
|
readonly model: M;
|
|
219
|
-
}> : never : never : never : never : never : never, import("effect/Scope").Scope>>;
|
|
219
|
+
}> : never : never : never : never : never : never, import("effect/Scope").Scope> | Exclude<Exclude<Exclude<Exclude<Exclude<R, SettlementPublisher | SqlClient | StorageOwner | SubmissionLedger | import("@yielded/agent/thread-import").ThreadImport | ThreadReader | ThreadStore>, never>, ThreadMutationGate>, import("@yielded/agent-storage-cloudflare/do-storage-config").DoStorageConfig | SqlClient>, SqlClient | SqliteClient.SqliteClient> | Exclude<Exclude<Exclude<Exclude<Exclude<Exclude<R, SettlementPublisher | SqlClient | StorageOwner | SubmissionLedger | import("@yielded/agent/thread-import").ThreadImport | ThreadReader | ThreadStore>, ThreadProjectionMaintenance>, never>, ThreadMutationGate>, import("@yielded/agent-storage-cloudflare/do-storage-config").DoStorageConfig | SqlClient>, SqlClient | SqliteClient.SqliteClient> | Exclude<Exclude<Exclude<Exclude<Exclude<Exclude<Exclude<Exclude<Exclude<R, SettlementPublisher | StorageOwner | SubmissionLedger | import("@yielded/agent/thread-import").ThreadImport | ThreadReader | ThreadStore>, DurableAgentRuntime | DurableAlarmService | MessageDeliveryStore | ProgressWaitRegistry | RunStorage | SettlementPublisher | StorageOwner | SubmissionLedger | ThreadObjectPorts | ThreadReader | ThreadStore | WakeScheduler>, never>, ThreadPublication>, ThreadProjectionMaintenance>, never>, ThreadMutationGate>, import("@yielded/agent-storage-cloudflare/do-storage-config").DoStorageConfig | SqlClient>, SqlClient | SqliteClient.SqliteClient> | Exclude<Exclude<Exclude<Exclude<Exclude<Exclude<Exclude<Exclude<Exclude<Exclude<R, never>, DurableAgentRuntime | DurableAlarmService | MessageDeliveryStore | ProgressWaitRegistry | RunStorage | SettlementPublisher | StorageOwner | SubmissionLedger | ThreadObjectPorts | ThreadReader | ThreadStore | WakeScheduler>, never>, never>, ThreadPublication>, ThreadProjectionMaintenance>, never>, ThreadMutationGate>, import("@yielded/agent-storage-cloudflare/do-storage-config").DoStorageConfig | SqlClient>, SqlClient | SqliteClient.SqliteClient> | Exclude<Exclude<Exclude<Exclude<Exclude<Exclude<Exclude<Exclude<Exclude<Exclude<R, SettlementPublisher | StorageOwner | SubmissionLedger | import("@yielded/agent/thread-import").ThreadImport | ThreadReader | ThreadStore>, DurableAgentRuntime | DurableAlarmService | MessageDeliveryStore | ProgressWaitRegistry | RunStorage | SettlementPublisher | StorageOwner | SubmissionLedger | ThreadObjectPorts | ThreadReader | ThreadStore | WakeScheduler>, never>, never>, ThreadPublication>, ThreadProjectionMaintenance>, never>, ThreadMutationGate>, import("@yielded/agent-storage-cloudflare/do-storage-config").DoStorageConfig | SqlClient>, SqlClient | SqliteClient.SqliteClient>>;
|
|
220
220
|
/** Preserve additional index services only when a projection Layer is actually supplied. */
|
|
221
221
|
declare function layer$1<const Entries extends ReadonlyArray<AgentRegistration>, E = never, R = never, P = never, PE = never, PR = never>(registrations: Entries, options: Omit<ThreadPublicationOptions<E, R>, "projection"> & {
|
|
222
222
|
readonly projection: Layer.Layer<ThreadProjectionMaintenance | P, PE, PR>;
|
|
@@ -888,4 +888,4 @@ interface Class<EventServices = never> {
|
|
|
888
888
|
declare const make: <ApplicationServices, ApplicationError, EventServices = never, EventLayerError = never, AlarmServices = never, AlarmError = never>(applicationLayer: Layer.Layer<CloudflareDurableRuntimeServices | ApplicationServices, ApplicationError, CloudflareBootstrapServices | ThreadMaintenanceAlarm | NoInfer<AlarmServices> | DurableObjectState$1.DurableObjectState | WorkerEnvironment | DurableObjectContext | ThreadObjectNamespace>, options: Options<ApplicationServices, EventServices, EventLayerError, AlarmServices, AlarmError>) => Class<ApplicationServices | EventServices | AlarmServices>;
|
|
889
889
|
//#endregion
|
|
890
890
|
export { ThreadHostMutation as A, make as C, CloudflareDurableRuntimeInitializationError as D, CloudflareBootstrapServices as E, layerHostConfig as F, layerInHost as I, ThreadPublicationOptions as M, layer$1 as N, CloudflareDurableRuntimeOptions as O, layerConfig as P, handleRpc as S, submit as T, decodeAdminResponse as _, AdminVerifyRequest as a, decodeRetryCommand as b, Instance as c, RetryExecuted as d, ThreadObject_d_exports as f, decodeAdminExplainRequest as g, alarms as h, AdminResponse as i, ThreadObjectPorts as j, CloudflareDurableRuntimeServices as k, ObligationsScanned as l, VerifiedIntegrity as m, AdminFailed as n, Class as o, ThreadRpcOperation as p, AdminFailure as r, ExplainedRecovery as s, AdminExplainRequest as t, Options as u, decodeAdminVerifyRequest as v, portCall as w, encodeAdminResponse as x, decodeObligationThresholds as y };
|
|
891
|
-
//# sourceMappingURL=ThreadObject-
|
|
891
|
+
//# sourceMappingURL=ThreadObject-CxNlhoPL.d.mts.map
|