@effect-agent/platform-cloudflare 0.1.0-beta.120 → 0.1.0-beta.122

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.
@@ -1545,8 +1545,50 @@ export declare const encodeHostResponse: (input: AbortRecorded | ApprovalRecorde
1545
1545
  readonly message: string;
1546
1546
  readonly cause?: Schema.Json | undefined;
1547
1547
  } | {
1548
- readonly _tag: "ThreadNotMaterialized";
1548
+ readonly _tag: "HostProtocolError";
1549
+ readonly message: string;
1550
+ } | {
1551
+ readonly _tag: "AgentInputError";
1552
+ readonly message: string;
1553
+ } | {
1554
+ readonly _tag: "DigestError";
1555
+ readonly message: string;
1556
+ readonly cause?: Schema.Json | undefined;
1557
+ } | {
1558
+ readonly _tag: "AdmissionConflict";
1549
1559
  readonly threadId: string;
1560
+ readonly principal: string;
1561
+ readonly idempotencyKey: string;
1562
+ readonly existingInputDigest: string;
1563
+ readonly attemptedInputDigest: string;
1564
+ } | {
1565
+ readonly _tag: "AdmissionPolicyError";
1566
+ readonly reason: "occupied" | "refused" | "unavailable";
1567
+ readonly code: string;
1568
+ readonly cause?: import("effect-agent/failure-diagnostic").Diagnostic | undefined;
1569
+ readonly stack?: string | undefined;
1570
+ } | {
1571
+ readonly _tag: "SettlementConflict";
1572
+ readonly submissionId: string;
1573
+ readonly existingOutcome: "aborted" | "completed" | "failed";
1574
+ } | {
1575
+ readonly _tag: "ApprovalConflict";
1576
+ readonly submissionId: string;
1577
+ readonly toolCallId: string;
1578
+ readonly existingDecision: "approved" | "denied";
1579
+ } | {
1580
+ readonly _tag: "UnknownResolutionConflict";
1581
+ readonly submissionId: string;
1582
+ readonly toolCallId: string;
1583
+ } | {
1584
+ readonly _tag: "JoinedToHost";
1585
+ readonly submissionId: string;
1586
+ readonly hostSubmissionId: string;
1587
+ } | {
1588
+ readonly _tag: "LedgerError";
1589
+ readonly operation: string;
1590
+ readonly message: string;
1591
+ readonly cause?: import("effect-agent/failure-diagnostic").Diagnostic | undefined;
1550
1592
  } | {
1551
1593
  readonly _tag: "ThreadStoreError";
1552
1594
  readonly operation: string;
@@ -1560,10 +1602,8 @@ export declare const encodeHostResponse: (input: AbortRecorded | ApprovalRecorde
1560
1602
  readonly sequence?: number | undefined;
1561
1603
  } | undefined;
1562
1604
  } | {
1563
- readonly _tag: "LedgerError";
1564
- readonly operation: string;
1565
- readonly message: string;
1566
- readonly cause?: import("effect-agent/failure-diagnostic").Diagnostic | undefined;
1605
+ readonly _tag: "ThreadNotMaterialized";
1606
+ readonly threadId: string;
1567
1607
  } | {
1568
1608
  readonly _tag: "AppendConflict";
1569
1609
  readonly threadId: string;
@@ -1576,60 +1616,20 @@ export declare const encodeHostResponse: (input: AbortRecorded | ApprovalRecorde
1576
1616
  readonly threadId: string;
1577
1617
  readonly actualEpoch: number;
1578
1618
  readonly attemptedEpoch: number;
1579
- } | {
1580
- readonly _tag: "OperationDenied";
1581
- readonly operation: "abort" | "awaitSettlement" | "explain" | "observe" | "resolveApproval" | "resolveUnknown" | "retry" | "scanObligations" | "verify" | "wake";
1582
- readonly reason: string;
1583
- readonly threadId?: string | undefined;
1584
- readonly submissionId?: string | undefined;
1585
- } | {
1586
- readonly _tag: "AdmissionConflict";
1587
- readonly threadId: string;
1588
- readonly principal: string;
1589
- readonly idempotencyKey: string;
1590
- readonly existingInputDigest: string;
1591
- readonly attemptedInputDigest: string;
1592
- } | {
1593
- readonly _tag: "AdmissionPolicyError";
1594
- readonly reason: "occupied" | "refused" | "unavailable";
1595
- readonly code: string;
1596
- readonly cause?: import("effect-agent/failure-diagnostic").Diagnostic | undefined;
1597
- readonly stack?: string | undefined;
1598
- } | {
1599
- readonly _tag: "AgentInputError";
1600
- readonly message: string;
1601
- } | {
1602
- readonly _tag: "DigestError";
1603
- readonly message: string;
1604
- readonly cause?: Schema.Json | undefined;
1605
1619
  } | {
1606
1620
  readonly _tag: "DurableRuntimeFailpointError";
1607
1621
  readonly location: "abort:after-intent" | "approval:after-request-append" | "approval:after-suspend" | "checkpoint:after-save" | "checkpoint:before-save" | "claim:after-claim" | "compaction:after-canonical-append" | "compaction:before-canonical-append" | "input:after-canonical-append" | "join:after-canonical-append" | "join:after-claim" | "policy:after-reservation-append" | "policy:before-reservation-append" | "resolve:after-intent" | "run:after-duration-append" | "run:after-start-append" | "run:before-duration-append" | "run:before-start-append" | "step:after-step-append" | "subagent:after-admit" | "subagent:after-child-abort-intent" | "subagent:after-child-ready" | "subagent:after-join-append" | "subagent:after-release" | "subagent:after-release-pending" | "subagent:after-request-append" | "subagent:after-reserve" | "subagent:after-sibling-settle" | "subagent:after-start-append" | "subagent:after-suspend" | "subagent:before-join-append" | "submit:after-admit" | "submit:after-materialize" | "terminalize:after-canonical-append" | "terminalize:after-reserve" | "tools:after-prepared-append" | "tools:after-unavailable-append" | "tools:before-prepared-append" | "tools:before-unavailable-append" | "turn:after-canonical-append" | "turn:after-response-append" | "turn:after-results-append" | "update:after-canonical-append" | "update:after-delivery-insert" | "update:before-canonical-append" | "update:before-delivery-insert" | "worker:after-completion-append" | "worker:after-origin-append" | "worker:after-report-append" | "worker:after-report-delivery" | "worker:after-source-append" | "worker:after-stop-append" | "worker:after-stop-seal" | "worker:after-subtree-append" | "worker:before-completion-append" | "worker:before-origin-append" | "worker:before-report-append" | "worker:before-report-delivery" | "worker:before-source-append" | "worker:before-stop-append" | "worker:before-stop-seal" | "worker:before-subtree-append";
1608
- } | {
1609
- readonly _tag: "SettlementConflict";
1610
- readonly submissionId: string;
1611
- readonly existingOutcome: "aborted" | "completed" | "failed";
1612
- } | {
1613
- readonly _tag: "JoinedToHost";
1614
- readonly submissionId: string;
1615
- readonly hostSubmissionId: string;
1616
1622
  } | {
1617
1623
  readonly _tag: "AdmissionLimitExceeded";
1618
1624
  readonly limit: "database-bytes" | "input-bytes" | "queue-depth";
1619
1625
  readonly actual: number;
1620
1626
  readonly maximum: number;
1621
1627
  } | {
1622
- readonly _tag: "HostProtocolError";
1623
- readonly message: string;
1624
- } | {
1625
- readonly _tag: "ApprovalConflict";
1626
- readonly submissionId: string;
1627
- readonly toolCallId: string;
1628
- readonly existingDecision: "approved" | "denied";
1629
- } | {
1630
- readonly _tag: "UnknownResolutionConflict";
1631
- readonly submissionId: string;
1632
- readonly toolCallId: string;
1628
+ readonly _tag: "OperationDenied";
1629
+ readonly operation: "abort" | "awaitSettlement" | "explain" | "observe" | "resolveApproval" | "resolveUnknown" | "retry" | "scanObligations" | "verify" | "wake";
1630
+ readonly reason: string;
1631
+ readonly threadId?: string | undefined;
1632
+ readonly submissionId?: string | undefined;
1633
1633
  };
1634
1634
  }, Schema.SchemaError, never>;
1635
1635
  export declare const decodeHostResponse: (input: unknown, options?: import("effect/SchemaAST").ParseOptions) => Effect.Effect<AbortRecorded | ApprovalRecorded | HostFailed | ObservedPage | ProgressCancelled | ProgressObserved | SettlementReached | SubmissionStatusResponse | SubmitSucceeded | UnknownResolutionRecorded, Schema.SchemaError, never>;
@@ -129,7 +129,7 @@ interface BrowserRunInteractiveBrowser {
129
129
  }
130
130
  declare const BrowserRunInteractiveBinding_base: Context.ServiceClass<BrowserRunInteractiveBinding, "@effect-agent/platform-cloudflare/BrowserRunInteractiveBinding", {
131
131
  readonly acquire: (keepAliveMillis: number) => Promise<unknown>;
132
- readonly connect: (sessionId: string) => Promise<BrowserRunInteractiveBrowser>;
132
+ readonly connect: (sessionId: string, signal?: AbortSignal) => Promise<BrowserRunInteractiveBrowser>;
133
133
  /** Success proves whole-browser termination or exact-session absence. */
134
134
  readonly closeSession: (sessionId: Redacted.Redacted<string>) => Effect.Effect<void, InteractiveBrowserError>;
135
135
  }>;
@@ -225,4 +225,4 @@ declare const CloudflareInteractiveBrowser: {
225
225
  };
226
226
  //#endregion
227
227
  export { CloudflareInteractiveBrowserOptions as C, isBrowserRunUndispatchedActionError as D, browserRunInteractiveLayer as E, BrowserRunCleanupError as O, CloudflareInteractiveBrowser as S, browserRunInteractiveImplementation as T, BrowserRunLiveViewRequest as _, BrowserRunInputState as a, BrowserRunPageObservation as b, BrowserRunInteractiveBrowser as c, BrowserRunInteractiveContext as d, BrowserRunInteractiveHost as f, BrowserRunInteractiveSession as g, BrowserRunInteractiveRequestListener as h, BrowserRunHandoffState as i, BrowserRunSessionLifecycle as k, BrowserRunInteractiveCdpSession as l, BrowserRunInteractiveRequest as m, BrowserRunHandoffRequest as n, BrowserRunInteractiveAcquisition as o, BrowserRunInteractivePage as p, BrowserRunHandoffResult as r, BrowserRunInteractiveBinding as s, BrowserRunCloudflareCommand as t, BrowserRunInteractiveCheckpoint as u, BrowserRunLiveViewResult as v, browserRunInteractiveHostLayer as w, BrowserRunViewport as x, BrowserRunPageIdentity as y };
228
- //# sourceMappingURL=InteractiveBrowser-BQo7QKaP.d.mts.map
228
+ //# sourceMappingURL=InteractiveBrowser-Cm4xgiGy.d.mts.map
@@ -2,8 +2,8 @@ import { Cause, Clock, Context, Data, Duration, Effect, Encoding, ErrorReporter,
2
2
  import { PageScreenshotResult } from "effect-agent/page-screenshot";
3
3
  import { SandboxImplementation } from "effect-agent/sandbox";
4
4
  import { FetchHttpClient, HttpClient, HttpClientRequest } from "effect/unstable/http";
5
- import puppeteer from "@cloudflare/puppeteer";
6
5
  import { BrowserActionResult, BrowserExpectedTargetState, BrowserFileSelectionResult, BrowserNavigationResult, BrowserScreenshotRequest, BrowserScrollRequest, BrowserSelectFileRequest, BrowserTextResult, InteractiveBrowser, InteractiveBrowserActionError, InteractiveBrowserBusyError, InteractiveBrowserCapacityError, InteractiveBrowserExpiredError, InteractiveBrowserLimitError, InteractiveBrowserPolicy, InteractiveBrowserPolicyDeniedError, InteractiveBrowserProtocolError, InteractiveBrowserTargetUrl, InteractiveBrowserUnsupportedError } from "effect-agent/interactive-browser";
6
+ import puppeteer from "puppeteer-core/lib/esm/puppeteer/puppeteer-core-browser.js";
7
7
  //#region src/internal/browser-failure.ts
8
8
  /** Source-authored stages and classifications only; never retain SDK text or session capabilities. */
9
9
  var BrowserRunFailure = class extends Data.TaggedError("BrowserRunFailure") {
@@ -49,9 +49,41 @@ const reportBrowserCause = (operation, cause) => ErrorReporter.report(Cause.from
49
49
  //#endregion
50
50
  //#region src/internal/browser-binding.ts
51
51
  const Acquired = Schema.Struct({ sessionId: Schema.String.check(Schema.isUUID()) });
52
+ const VersionReply = Schema.fromJsonString(Schema.Struct({
53
+ id: Schema.optionalKey(Schema.Int),
54
+ result: Schema.optionalKey(Schema.Unknown),
55
+ error: Schema.optionalKey(Schema.Unknown)
56
+ }));
57
+ const Version = Schema.Struct({
58
+ product: Schema.NonEmptyString,
59
+ protocolVersion: Schema.NonEmptyString
60
+ });
52
61
  /** Native transport port shared by both scoped adapters; the Layer owns the foreign binding. */
53
62
  var BrowserRunBinding = class extends Context.Service()("@effect-agent/platform-cloudflare/internal/BrowserRunBinding") {
54
63
  static layer(browser) {
64
+ const upgrade = async (sessionId, operation, signal) => {
65
+ const response = await browser.fetch(`https://browser-rendering.cloudflare.com/v1/devtools/browser/${sessionId}`, {
66
+ headers: { Upgrade: "websocket" },
67
+ ...signal === void 0 ? {} : { signal }
68
+ });
69
+ if (response.status !== 101) {
70
+ const failure = new BrowserRunFailure({
71
+ operation,
72
+ reason: "provider",
73
+ status: response.status
74
+ });
75
+ try {
76
+ await response.body?.cancel();
77
+ } catch {}
78
+ throw failure;
79
+ }
80
+ const socket = response.webSocket;
81
+ if (socket === null) throw new BrowserRunFailure({
82
+ operation,
83
+ reason: "malformed"
84
+ });
85
+ return socket;
86
+ };
55
87
  return Layer.succeed(this)({
56
88
  acquire: async (keepAliveMillis, operation) => {
57
89
  const response = await browser.fetch(`https://browser-rendering.cloudflare.com/v1/devtools/browser?keep_alive=${keepAliveMillis}&recording=false`, { method: "POST" });
@@ -68,31 +100,171 @@ var BrowserRunBinding = class extends Context.Service()("@effect-agent/platform-
68
100
  }
69
101
  return Schema.decodeUnknownSync(Acquired)(await response.json()).sessionId;
70
102
  },
71
- connect: async (sessionId, operation) => {
72
- let failure;
73
- try {
74
- return await puppeteer.connect({ fetch: async (input, init) => {
103
+ connect: (sessionId, operation, signal) => {
104
+ let socket;
105
+ let retired = false;
106
+ let closedByAbort = false;
107
+ let retirementFailure;
108
+ const disconnectOperation = operation === "protected.connect" ? "protected.disconnect" : "interactive.disconnect";
109
+ const transport = {
110
+ send: (message) => {
111
+ if (retired || socket === void 0) throw new BrowserRunFailure({
112
+ operation,
113
+ reason: "provider"
114
+ });
115
+ socket.send(message);
116
+ },
117
+ close: () => retireNow()
118
+ };
119
+ const onMessage = (event) => {
120
+ if (!retired) transport.onmessage?.(event.data);
121
+ };
122
+ const fence = () => {
123
+ if (retired) return;
124
+ retired = true;
125
+ const notify = transport.onclose;
126
+ transport.onmessage = void 0;
127
+ transport.onclose = void 0;
128
+ try {
129
+ notify?.();
130
+ } finally {
131
+ socket?.removeEventListener("message", onMessage);
132
+ }
133
+ };
134
+ const retireNow = () => {
135
+ try {
136
+ fence();
137
+ } catch (cause) {
138
+ retirementFailure ??= browserFailure(disconnectOperation, cause);
139
+ }
140
+ try {
141
+ if (socket !== void 0 && socket.readyState < WebSocket.CLOSING) socket.close();
142
+ } catch (cause) {
143
+ retirementFailure ??= browserFailure(disconnectOperation, cause);
144
+ }
145
+ if (retirementFailure !== void 0) throw retirementFailure;
146
+ };
147
+ const abort = () => {
148
+ closedByAbort = socket?.readyState === WebSocket.OPEN;
149
+ try {
150
+ retireNow();
151
+ } catch {}
152
+ };
153
+ signal?.addEventListener("abort", abort, { once: true });
154
+ return {
155
+ browser: (async () => {
75
156
  try {
76
- const response = await browser.fetch(input, init);
77
- if (response.status !== 101) {
78
- failure = new BrowserRunFailure({
157
+ signal?.throwIfAborted();
158
+ socket = await upgrade(sessionId, operation, signal);
159
+ socket.accept();
160
+ if (retired || signal?.aborted) {
161
+ retireNow();
162
+ signal?.throwIfAborted();
163
+ throw new BrowserRunFailure({
79
164
  operation,
80
- reason: "provider",
81
- status: response.status
165
+ reason: "provider"
82
166
  });
83
- await response.body?.cancel();
84
- throw failure;
85
167
  }
86
- return response;
168
+ socket.addEventListener("message", onMessage);
169
+ socket.addEventListener("close", () => {
170
+ try {
171
+ fence();
172
+ } catch (cause) {
173
+ retirementFailure ??= browserFailure(disconnectOperation, cause);
174
+ }
175
+ }, { once: true });
176
+ return await puppeteer.connect({ transport });
87
177
  } catch (cause) {
88
- failure ??= browserFailure(operation, cause);
89
- throw failure;
178
+ try {
179
+ retireNow();
180
+ } catch {}
181
+ const failure = browserFailure(operation, cause);
182
+ throw cause instanceof Error && signal?.aborted === true && (cause === signal.reason || closedByAbort && cause.name === "TargetCloseError") ? reportedBrowserError(failure) : failure;
183
+ } finally {
184
+ signal?.removeEventListener("abort", abort);
90
185
  }
91
- } }, sessionId);
92
- } catch (cause) {
93
- throw failure ?? browserFailure(operation, cause);
94
- }
95
- }
186
+ })(),
187
+ retire: Effect.callback((resume) => {
188
+ const connected = socket;
189
+ const onClose = () => resume(Effect.void);
190
+ try {
191
+ retireNow();
192
+ if (connected === void 0 || connected.readyState === WebSocket.CLOSED) resume(Effect.void);
193
+ else connected.addEventListener("close", onClose, { once: true });
194
+ } catch (cause) {
195
+ resume(Effect.fail(browserFailure(disconnectOperation, cause)));
196
+ }
197
+ return Effect.sync(() => connected?.removeEventListener("close", onClose));
198
+ })
199
+ };
200
+ },
201
+ keepAlive: Effect.fnUntraced(function* (sessionId) {
202
+ const operation = "protected.keepAlive";
203
+ const runReport = Effect.runPromiseWith(yield* Effect.context());
204
+ const release = (socket) => Effect.sync(() => socket.close()).pipe(Effect.catchCause((cause) => reportBrowserCause(operation, cause)));
205
+ const socket = yield* Effect.acquireRelease(Effect.tryPromise({
206
+ try: async (signal) => {
207
+ let acquired;
208
+ try {
209
+ acquired = await upgrade(sessionId, operation, signal);
210
+ acquired.accept();
211
+ signal.throwIfAborted();
212
+ return acquired;
213
+ } catch (cause) {
214
+ if (acquired !== void 0) await runReport(release(acquired));
215
+ if (signal.aborted && cause !== signal.reason) await runReport(reportBrowserCause(operation, Cause.fail(cause)));
216
+ throw cause;
217
+ }
218
+ },
219
+ catch: (cause) => browserFailure(operation, cause)
220
+ }), release, { interruptible: true });
221
+ yield* Effect.callback((resume) => {
222
+ const finish = (result) => {
223
+ removeListeners();
224
+ resume(result);
225
+ };
226
+ const fail = (reason) => finish(Effect.fail(new BrowserRunFailure({
227
+ operation,
228
+ reason
229
+ })));
230
+ const onMessage = (event) => {
231
+ try {
232
+ if (typeof event.data !== "string" || event.data.length > 16384) {
233
+ fail("malformed");
234
+ return;
235
+ }
236
+ const reply = Schema.decodeSync(VersionReply)(event.data);
237
+ if (reply.id !== 1) return;
238
+ if (reply.error !== void 0) {
239
+ fail("provider");
240
+ return;
241
+ }
242
+ Schema.decodeUnknownSync(Version)(reply.result);
243
+ finish(Effect.void);
244
+ } catch {
245
+ fail("malformed");
246
+ }
247
+ };
248
+ const onClose = () => fail("provider");
249
+ const removeListeners = () => {
250
+ socket.removeEventListener("message", onMessage);
251
+ socket.removeEventListener("close", onClose);
252
+ socket.removeEventListener("error", onClose);
253
+ };
254
+ socket.addEventListener("message", onMessage);
255
+ socket.addEventListener("close", onClose);
256
+ socket.addEventListener("error", onClose);
257
+ try {
258
+ socket.send(JSON.stringify({
259
+ id: 1,
260
+ method: "Browser.getVersion"
261
+ }));
262
+ } catch (cause) {
263
+ finish(Effect.fail(browserFailure(operation, cause)));
264
+ }
265
+ return Effect.sync(removeListeners);
266
+ });
267
+ }, Effect.scoped)
96
268
  });
97
269
  }
98
270
  };
@@ -412,7 +584,7 @@ var BrowserRunInteractiveBinding = class BrowserRunInteractiveBinding extends Co
412
584
  const viewport = options.viewport === void 0 ? void 0 : yield* decodeViewport(options.viewport);
413
585
  return {
414
586
  acquire: async (keepAliveMillis) => binding.acquire(keepAliveMillis, "interactive.acquire"),
415
- connect: async (sessionId) => makeProductionBrowser(await binding.connect(sessionId, "interactive.connect"), viewport),
587
+ connect: async (sessionId, signal) => makeProductionBrowser(await binding.connect(sessionId, "interactive.connect", signal).browser, sessionId, viewport),
416
588
  closeSession: (sessionId) => lifecycle.close(sessionId).pipe(Effect.mapError((cause) => actionError("close", cause)))
417
589
  };
418
590
  })).pipe(Layer.provide(BrowserRunBinding.layer(options.browser)));
@@ -952,7 +1124,7 @@ const makeProductionContext = (context, viewport) => ({
952
1124
  }
953
1125
  }
954
1126
  });
955
- const makeProductionBrowser = (browser, viewport) => ({
1127
+ const makeProductionBrowser = (browser, sessionId, viewport) => ({
956
1128
  detach: () => browser.disconnect(),
957
1129
  reattach: async (identity) => {
958
1130
  const context = browser.browserContexts().find((candidate) => candidate.id === identity.contextId);
@@ -976,7 +1148,7 @@ const makeProductionBrowser = (browser, viewport) => ({
976
1148
  if (!isRemoteClosure(cause)) throw cause;
977
1149
  }
978
1150
  },
979
- sessionId: () => browser.sessionId(),
1151
+ sessionId: () => sessionId,
980
1152
  isConnected: () => browser.isConnected(),
981
1153
  onDisconnected: (listener) => {
982
1154
  browser.on("disconnected", listener);
@@ -1548,7 +1720,7 @@ const makeHostService = (binding) => {
1548
1720
  if (!lifecycle.managedTeardownInstalled) releaseOwner();
1549
1721
  }));
1550
1722
  const browser = yield* Effect.acquireRelease(withinDeadline(Effect.tryPromise({
1551
- try: (signal) => observeLate(signal, closeLateAcquisition(signal, () => binding.connect(sessionIdValue), (acquired) => runCleanup(resume === void 0 ? closeAcquired(acquired) : closeEntry(acquired.detach ?? (async () => {}), "Detaching the browser failed").close))),
1723
+ try: (signal) => observeLate(signal, closeLateAcquisition(signal, () => binding.connect(sessionIdValue, signal), (acquired) => runCleanup(resume === void 0 ? closeAcquired(acquired) : closeEntry(acquired.detach ?? (async () => {}), "Detaching the browser failed").close))),
1552
1724
  catch: (cause) => resume !== void 0 && cause instanceof BrowserRunFailure && (cause.status === 404 || cause.status === 410) ? expiredError() : protocolError("Connecting to the Browser Run session failed", cause)
1553
1725
  }).pipe(Effect.timeoutOrElse({
1554
1726
  duration: "10 seconds",
@@ -1746,4 +1918,4 @@ const CloudflareInteractiveBrowser = {
1746
1918
  //#endregion
1747
1919
  export { reportBrowserCause as C, inheritBrowserReport as S, BrowserRunCleanupError as _, BrowserRunInteractiveCheckpoint as a, BrowserRunFailure as b, BrowserRunLiveViewResult as c, BrowserRunViewport as d, CloudflareInteractiveBrowser as f, isBrowserRunUndispatchedActionError as g, browserRunInteractiveLayer as h, BrowserRunInteractiveBinding as i, BrowserRunPageIdentity as l, browserRunInteractiveImplementation as m, BrowserRunHandoffResult as n, BrowserRunInteractiveHost as o, browserRunInteractiveHostLayer as p, BrowserRunHandoffState as r, BrowserRunLiveViewRequest as s, BrowserRunHandoffRequest as t, BrowserRunPageObservation as u, BrowserRunSessionLifecycle as v, reportedBrowserError as w, browserFailure as x, BrowserRunBinding as y };
1748
1920
 
1749
- //# sourceMappingURL=InteractiveBrowser-CBUFAECo.mjs.map
1921
+ //# sourceMappingURL=InteractiveBrowser-DXwmvWdA.mjs.map