@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.
Files changed (70) hide show
  1. package/dist/{Alarm-BMEAZo3p.mjs → Alarm-B44efvB1.mjs} +162 -103
  2. package/dist/Alarm-B44efvB1.mjs.map +1 -0
  3. package/dist/Alarm.d.mts +2 -0
  4. package/dist/Alarm.mjs +1 -1
  5. package/dist/BrowserRestCapture.mjs.map +1 -1
  6. package/dist/BrowserRestCrawl.mjs.map +1 -1
  7. package/dist/{BrowserSession-Bx0V1-6_.d.mts → BrowserSession-Cojp7nth.d.mts} +3 -2
  8. package/dist/{BrowserSession-BfNmyayH.mjs → BrowserSession-aovMjfL4.mjs} +14 -14
  9. package/dist/BrowserSession-aovMjfL4.mjs.map +1 -0
  10. package/dist/BrowserSession.d.mts +1 -1
  11. package/dist/BrowserSession.mjs +2 -2
  12. package/dist/BrowserUse.d.mts +40 -64
  13. package/dist/BrowserUse.mjs +223 -2
  14. package/dist/BrowserUse.mjs.map +1 -0
  15. package/dist/CloudflareBrowser-Vt8qTdYW.mjs.map +1 -1
  16. package/dist/CloudflareCodeMode.mjs.map +1 -1
  17. package/dist/CloudflareScheduling.mjs +9 -9
  18. package/dist/CloudflareScheduling.mjs.map +1 -1
  19. package/dist/CloudflareSubscriptions.mjs +15 -15
  20. package/dist/CloudflareSubscriptions.mjs.map +1 -1
  21. package/dist/{CloudflareThreadClient-DgZVrZzF.mjs → CloudflareThreadClient-Ai3MTs3X.mjs} +43 -40
  22. package/dist/CloudflareThreadClient-Ai3MTs3X.mjs.map +1 -0
  23. package/dist/CloudflareThreadClient.mjs +1 -1
  24. package/dist/{InteractiveBrowser-LdKzQeLR.mjs → InteractiveBrowser-BHNlwjZL.mjs} +40 -31
  25. package/dist/InteractiveBrowser-BHNlwjZL.mjs.map +1 -0
  26. package/dist/InteractiveBrowser.mjs +1 -1
  27. package/dist/{ThreadObject-CRbLbdXM.d.mts → ThreadObject-CxNlhoPL.d.mts} +3 -3
  28. package/dist/{ThreadObject-CGIaz6Jv.mjs → ThreadObject-DGvlHWYi.mjs} +50 -52
  29. package/dist/ThreadObject-DGvlHWYi.mjs.map +1 -0
  30. package/dist/ThreadObject.d.mts +1 -1
  31. package/dist/ThreadObject.mjs +1 -1
  32. package/dist/WakeScheduler.d.mts +1 -1
  33. package/dist/WakeScheduler.mjs +8 -3
  34. package/dist/WakeScheduler.mjs.map +1 -1
  35. package/dist/index.d.mts +2 -2
  36. package/dist/index.mjs +5 -5
  37. package/dist/{prepared-admission-CSdzFM_v.mjs → prepared-admission-DYdffQ8K.mjs} +2 -2
  38. package/dist/{prepared-admission-CSdzFM_v.mjs.map → prepared-admission-DYdffQ8K.mjs.map} +1 -1
  39. package/package.json +1 -1
  40. package/src/Alarm.ts +293 -155
  41. package/src/BrowserRestCapture.ts +1 -0
  42. package/src/BrowserRestCrawl.ts +1 -0
  43. package/src/BrowserSession.ts +3 -2
  44. package/src/BrowserUse.ts +287 -1504
  45. package/src/CloudflareCodeMode.ts +6 -0
  46. package/src/CloudflareScheduling.ts +103 -103
  47. package/src/CloudflareSubscriptions.ts +192 -199
  48. package/src/CloudflareThreadClient.ts +258 -269
  49. package/src/InteractiveBrowser.ts +43 -17
  50. package/src/ThreadObject.ts +51 -45
  51. package/src/WakeScheduler.ts +12 -9
  52. package/src/internal/browser-binding.ts +8 -0
  53. package/src/internal/browser-credentials.ts +18 -13
  54. package/src/internal/browser-file-selection.ts +13 -2
  55. package/src/internal/browser-quick-action.ts +1 -0
  56. package/src/internal/browser-session-lifecycle.ts +32 -36
  57. package/src/internal/due-queue.ts +38 -19
  58. package/src/internal/layers.ts +108 -87
  59. package/src/internal/message-delivery.ts +61 -37
  60. package/dist/Alarm-BMEAZo3p.mjs.map +0 -1
  61. package/dist/BrowserSession-BfNmyayH.mjs.map +0 -1
  62. package/dist/BrowserUse-Bc2JdLW2.mjs +0 -1528
  63. package/dist/BrowserUse-Bc2JdLW2.mjs.map +0 -1
  64. package/dist/CloudflareThreadClient-DgZVrZzF.mjs.map +0 -1
  65. package/dist/InteractiveBrowser-LdKzQeLR.mjs.map +0 -1
  66. package/dist/ThreadObject-CGIaz6Jv.mjs.map +0 -1
  67. package/dist/page-function-CmUCcyNP.mjs +0 -11
  68. package/dist/page-function-CmUCcyNP.mjs.map +0 -1
  69. package/src/internal/browser-dom.ts +0 -886
  70. package/src/internal/browser-jev-dom.ts +0 -362
@@ -1 +0,0 @@
1
- {"version":3,"file":"BrowserUse-Bc2JdLW2.mjs","names":[],"sources":["../src/internal/browser-dom.ts","../src/internal/browser-jev-dom.ts","../src/BrowserUse.ts"],"sourcesContent":["/// <reference lib=\"dom\" />\n\nimport type { Control } from \"@yielded/agent/browser-use\";\n\nimport { pageFunction } from \"./page-function.ts\";\n\n/** Executor-owned input settling, matching jev-ultrafast's frame/option readiness predicate. */\nexport const settleInputDom = pageFunction(\n (ref: string | undefined) =>\n new Promise<void>((resolve) => {\n const field: Element | undefined =\n ref === undefined\n ? undefined\n : Reflect.get(globalThis, \"@effect-agent/native-browser\")?.get(ref);\n\n const autocomplete = field?.getAttribute(\"role\") === \"combobox\";\n let frames = 0;\n let stopped = false;\n let animation = 0;\n\n const finish = () => {\n if (stopped) return;\n stopped = true;\n clearTimeout(deadline);\n cancelAnimationFrame(animation);\n resolve();\n };\n\n const deadline = setTimeout(finish, autocomplete ? 200 : 50);\n\n const ready = () => {\n if (stopped) return;\n\n const ids = (field?.getAttribute(\"aria-controls\") || field?.getAttribute(\"aria-owns\") || \"\")\n .split(/\\s+/)\n .filter(Boolean);\n\n const roots = ids.length ? ids.map((id) => document.getElementById(id)) : [document];\n\n const options = roots.flatMap((root) => [\n ...(root?.querySelectorAll('[role=\"option\"]') ?? []),\n ]);\n\n if (\n ++frames >= 2 &&\n (!autocomplete ||\n options.some((element) => {\n const rect = element.getBoundingClientRect();\n\n return (\n rect.width &&\n rect.height &&\n rect.bottom > 0 &&\n rect.top < innerHeight &&\n element.checkVisibility({ checkOpacity: true, checkVisibilityCSS: true })\n );\n }))\n )\n finish();\n else animation = requestAnimationFrame(ready);\n };\n\n animation = requestAnimationFrame(ready);\n }),\n);\n\n/** Read-only executor settling: 100 ms without a DOM mutation, bounded by one second. */\nexport const settleDom = pageFunction(\n () =>\n new Promise<boolean>((resolve) => {\n let quiet: ReturnType<typeof setTimeout>;\n\n const observer = new MutationObserver(() => {\n clearTimeout(quiet);\n quiet = setTimeout(() => finish(true), 100);\n });\n\n const finish = (settled: boolean) => {\n observer.disconnect();\n clearTimeout(quiet);\n clearTimeout(deadline);\n resolve(settled);\n };\n\n const deadline = setTimeout(() => finish(false), 1_000);\n\n observer.observe(document, {\n subtree: true,\n childList: true,\n attributes: true,\n characterData: true,\n });\n quiet = setTimeout(() => finish(true), 100);\n }),\n);\n\n/** Executed in the isolated page realm; the page cannot forge the reference registry. */\nexport const inspectDom = pageFunction(\n (\n selector: string | undefined,\n prefix: string,\n maximum: number,\n optionFilter: string | undefined,\n viewportOnly = false,\n ) => {\n const registry = new Map<string, Element>();\n\n const nameChecks = new Map<\n string,\n { name: string; originalName: string; verify: () => boolean }\n >();\n\n Reflect.set(globalThis, \"@effect-agent/native-browser\", registry);\n Reflect.set(globalThis, \"@effect-agent/native-browser-name-checks\", nameChecks);\n const roots: Array<Document | ShadowRoot> = [document];\n\n const closedRoots: ReadonlyMap<Element, ShadowRoot> | undefined = Reflect.get(\n globalThis,\n \"@effect-agent/native-browser-closed-roots\",\n );\n\n const visited = new Set<Node>();\n let discoveredElements = 0;\n const candidates: Array<HTMLElement> = [];\n let scanned = 0;\n let truncated = false;\n let text = \"\";\n\n const controlSelector =\n 'button,a[href],input,textarea,select,label,[contenteditable=\"true\"],[role=\"button\"],[role=\"link\"],[role=\"checkbox\"],[role=\"radio\"],[role=\"switch\"],[role=\"tab\"],[role=\"option\"],[role=\"combobox\"],[role=\"textbox\"],[role=\"menuitem\"],[role=\"scrollbar\"]';\n\n const filter: NodeFilter = {\n acceptNode(node) {\n if (!(node instanceof Element)) return NodeFilter.FILTER_ACCEPT;\n const style = getComputedStyle(node);\n\n return node.matches('script,style,template,option,optgroup,[inert],[aria-hidden=\"true\"]') ||\n style.display === \"none\" ||\n style.opacity === \"0\" ||\n style.contentVisibility === \"hidden\"\n ? NodeFilter.FILTER_REJECT\n : NodeFilter.FILTER_ACCEPT;\n },\n };\n\n for (let index = 0; index < roots.length && !truncated; index++) {\n const root = roots[index];\n\n if (root === undefined) break;\n\n // Narrow inspection starts at matching roots, so unrelated page content\n // cannot exhaust its budget. Shadow-host discovery has a separate bound.\n if (selector !== undefined) {\n const discovery = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT, filter);\n let node = discovery.nextNode();\n\n while (node !== null) {\n if (++discoveredElements > 10_000) {\n truncated = true;\n break;\n }\n if (node instanceof Element) {\n const shadow = node.shadowRoot ?? closedRoots?.get(node);\n\n if (shadow !== undefined && shadow !== null) roots.push(shadow);\n }\n node = discovery.nextNode();\n }\n }\n const matches = selector === undefined ? [root] : Array.from(root.querySelectorAll(selector));\n const scopes = matches.slice(0, 256);\n const nodes: Array<Element> = [];\n\n truncated ||= matches.length > scopes.length;\n for (const scope of scopes) {\n if (scope instanceof Element && filter.acceptNode(scope) === NodeFilter.FILTER_REJECT)\n continue;\n\n const walker = document.createTreeWalker(\n scope,\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT,\n filter,\n );\n\n let node: Node | null = scope instanceof Element ? scope : walker.nextNode();\n\n while (node !== null) {\n if (visited.has(node)) {\n node = walker.nextNode();\n continue;\n }\n visited.add(node);\n if (++scanned > 10_000) {\n truncated = true;\n break;\n }\n if (node instanceof Element) {\n nodes.push(node);\n const shadow = node.shadowRoot ?? closedRoots?.get(node);\n\n if (selector === undefined && shadow !== undefined && shadow !== null)\n roots.push(shadow);\n } else if (node instanceof Text) {\n const parent = node.parentElement;\n\n // Select options have their own bounded lookup; collapsed option text\n // must not bury the current form's values and validation messages.\n if (\n parent instanceof HTMLElement &&\n parent.closest('select,script,style,[inert],[aria-hidden=\"true\"]') === null &&\n parent.checkVisibility({ checkOpacity: true, checkVisibilityCSS: true })\n ) {\n const value = node.textContent?.replace(/\\s+/g, \" \").trim() ?? \"\";\n\n if (value.length > 0) {\n const room = Math.max(0, 12_000 - text.length);\n\n text += `${value.slice(0, room)}\\n`;\n truncated ||= value.length >= room;\n }\n }\n }\n node = walker.nextNode();\n }\n if (scanned > 10_000) break;\n }\n for (const node of nodes) {\n if (selector !== undefined && !node.matches(selector) && node.closest(selector) === null)\n continue;\n if (!(node instanceof HTMLElement)) continue;\n\n const scrollable =\n node.scrollHeight > node.clientHeight &&\n [\"auto\", \"scroll\"].includes(getComputedStyle(node).overflowY);\n\n if (!node.matches(controlSelector) && !scrollable) continue;\n if (\n !node.checkVisibility({ checkOpacity: true, checkVisibilityCSS: true }) ||\n node.closest('[inert],[aria-hidden=\"true\"]') !== null\n )\n continue;\n const modal = document.querySelector(\"dialog:modal\");\n\n if (modal !== null && !modal.contains(node) && node.getRootNode() === document) continue;\n candidates.push(node);\n }\n }\n\n let retained = candidates;\n\n // A popup falls back to off-screen controls only when none of its controls\n // are in view. Do not restore an entire off-screen calendar beside visible days.\n if (viewportOnly || candidates.length > maximum) {\n const visible: Array<HTMLElement> = [];\n const popupControls = new Map<Element, Array<HTMLElement>>();\n const visiblePopups = new Set<Element>();\n const offscreen: Array<HTMLElement> = [];\n\n const popupSelector =\n 'dialog[open],[role=\"dialog\"],[role=\"listbox\"],[role=\"menu\"],:popover-open';\n\n for (const node of candidates) {\n const rect = node.getBoundingClientRect();\n const x = rect.x + rect.width / 2;\n const y = rect.y + rect.height / 2;\n\n const inView = x >= 0 && x < innerWidth && y >= 0 && y < innerHeight;\n\n if (viewportOnly) {\n let popup = node.closest(popupSelector);\n\n if (popup?.checkVisibility({ checkOpacity: true, checkVisibilityCSS: true })) {\n if (!inView) {\n const group = popupControls.get(popup) ?? [];\n\n group.push(node);\n popupControls.set(popup, group);\n continue;\n }\n while (popup !== null) {\n visiblePopups.add(popup);\n popup = popup.parentElement?.closest(popupSelector) ?? null;\n }\n }\n }\n (inView ? visible : offscreen).push(node);\n }\n\n const preferred = [\n ...visible,\n ...[...popupControls].flatMap(([popup, nodes]) => (visiblePopups.has(popup) ? [] : nodes)),\n ];\n\n retained = (\n viewportOnly ? (preferred.length > 0 ? preferred : offscreen) : [...visible, ...offscreen]\n ).slice(0, maximum);\n truncated ||= candidates.length > retained.length;\n }\n\n const readName = (node: HTMLElement) => {\n const associated = node instanceof HTMLLabelElement ? (node.control ?? node) : node;\n\n const nativeField =\n associated instanceof HTMLInputElement ||\n associated instanceof HTMLTextAreaElement ||\n associated instanceof HTMLSelectElement;\n\n const labels = nativeField ? associated.labels : null;\n const root = node.getRootNode();\n\n const labelledBy = (node.getAttribute(\"aria-labelledby\") ?? \"\")\n .split(/\\s+/)\n .map((id) =>\n root instanceof Document || root instanceof ShadowRoot\n ? (root.getElementById(id)?.textContent ?? \"\")\n : \"\",\n )\n .join(\" \");\n\n return (\n node.getAttribute(\"aria-label\") ||\n labelledBy.trim() ||\n (labels === null\n ? \"\"\n : Array.from(labels)\n .map((label) => label.textContent)\n .join(\" \")) ||\n (nativeField\n ? node.getAttribute(\"placeholder\")\n : node instanceof HTMLElement\n ? node.innerText\n : \"\") ||\n \"\"\n )\n .replace(/\\s+/g, \" \")\n .trim()\n .slice(0, 300);\n };\n\n const controls = retained.map((node, index) => {\n const ref = `${prefix}-${index}`;\n const tag = node.tagName.toLowerCase();\n const associated = node instanceof HTMLLabelElement ? (node.control ?? node) : node;\n const type = associated instanceof HTMLInputElement ? associated.type : \"\";\n\n const nativeField =\n associated instanceof HTMLInputElement ||\n associated instanceof HTMLTextAreaElement ||\n associated instanceof HTMLSelectElement;\n\n const role = node.getAttribute(\"role\");\n\n const kind =\n tag === \"label\" &&\n associated instanceof HTMLInputElement &&\n [\"checkbox\", \"radio\"].includes(type)\n ? type\n : (role ?? (type === \"checkbox\" || type === \"radio\" ? type : tag === \"a\" ? \"link\" : tag));\n\n const name = readName(node);\n\n const allOptions = node instanceof HTMLSelectElement ? Array.from(node.options) : [];\n\n const matchingOptions = allOptions.flatMap((option, index) =>\n option.selected ||\n optionFilter === undefined ||\n `${option.label}\\n${option.value}`.toLowerCase().includes(optionFilter.toLowerCase())\n ? [{ option, index }]\n : [],\n );\n\n // Keep selected state even when it falls beyond the bounded lookup window.\n const selectedOptions = matchingOptions.filter(({ option }) => option.selected);\n\n const visibleOptions = [\n ...selectedOptions.slice(0, 256),\n ...matchingOptions\n .filter(({ option }) => !option.selected)\n .slice(0, Math.max(0, 256 - selectedOptions.length)),\n ];\n\n if (matchingOptions.length > visibleOptions.length) truncated = true;\n\n const attributes = Object.fromEntries(\n [\n \"id\",\n \"name\",\n \"type\",\n \"role\",\n \"tabindex\",\n \"placeholder\",\n \"aria-label\",\n \"aria-labelledby\",\n \"aria-expanded\",\n \"aria-selected\",\n \"aria-checked\",\n \"aria-controls\",\n \"href\",\n ].flatMap((key) => {\n const value = node.getAttribute(key);\n\n return value === null ? [] : [[key, value.slice(0, 1_024)]];\n }),\n );\n\n registry.set(ref, node);\n nameChecks.set(ref, {\n name,\n originalName: name,\n verify: () => readName(node) === name,\n });\n const pointerEvents = getComputedStyle(node).pointerEvents?.slice(0, 64);\n\n return {\n ref,\n kind,\n name,\n attributes,\n ...(pointerEvents ? { pointerEvents } : {}),\n value:\n nativeField && type !== \"password\"\n ? associated.value.slice(0, 4_096)\n : node.isContentEditable\n ? node.innerText.slice(0, 4_096)\n : \"\",\n options: visibleOptions.map(({ option }) => option.value.slice(0, 4_096)),\n ...(node instanceof HTMLSelectElement\n ? {\n optionCount: allOptions.length,\n optionDetails: visibleOptions.map(({ option, index }) => ({\n index,\n value: option.value.slice(0, 4096),\n label: option.label.slice(0, 300),\n disabled:\n option.disabled ||\n (option.parentElement instanceof HTMLOptGroupElement &&\n option.parentElement.disabled),\n selected: option.selected,\n })),\n }\n : {}),\n disabled:\n associated.matches(\":disabled\") || associated.getAttribute(\"aria-disabled\") === \"true\",\n editable:\n (node instanceof HTMLInputElement &&\n !node.readOnly &&\n ![\"password\", \"file\", \"checkbox\", \"radio\", \"hidden\", \"submit\", \"button\"].includes(\n node.type,\n )) ||\n (node instanceof HTMLTextAreaElement && !node.readOnly) ||\n (node.isContentEditable && node.getAttribute(\"aria-readonly\") !== \"true\"),\n ...(associated instanceof HTMLInputElement && (type === \"checkbox\" || type === \"radio\")\n ? { checked: associated.checked }\n : {}),\n };\n });\n\n const names = new Map<string, number>();\n\n for (const control of controls) names.set(control.name, (names.get(control.name) ?? 0) + 1);\n\n const explicitLabel = (node: Element) => {\n const root = node.getRootNode();\n\n return (\n node.getAttribute(\"aria-label\") ||\n (node.getAttribute(\"aria-labelledby\") ?? \"\")\n .split(/\\s+/)\n .map((id) =>\n root instanceof Document || root instanceof ShadowRoot\n ? (root.getElementById(id)?.textContent ?? \"\")\n : \"\",\n )\n .join(\" \")\n )\n .replace(/\\s+/g, \" \")\n .trim();\n };\n\n for (const [index, control] of controls.entries()) {\n const node = retained[index];\n\n if (node === undefined || control.name.length === 0 || (names.get(control.name) ?? 0) < 2)\n continue;\n let branch: Element = node;\n\n for (let scope = node.parentElement; scope !== null; scope = scope.parentElement) {\n let source: Element | undefined = explicitLabel(scope) ? scope : undefined;\n let read = () => (source === undefined ? \"\" : explicitLabel(source));\n\n if (source === undefined) {\n for (\n let previous = branch.previousElementSibling;\n previous !== null;\n previous = previous.previousElementSibling\n ) {\n if (\n !(previous instanceof HTMLElement) ||\n !previous.checkVisibility({ checkOpacity: true, checkVisibilityCSS: true }) ||\n previous.closest('[inert],[aria-hidden=\"true\"]') !== null ||\n previous.matches(controlSelector) ||\n previous.querySelector(controlSelector) !== null ||\n (previous.childElementCount > 0 &&\n !previous.matches('h1,h2,h3,h4,h5,h6,caption,figcaption,legend,[role=\"heading\"]'))\n )\n continue;\n const caption = previous.innerText.replace(/\\s+/g, \" \").trim();\n\n // Short static leaf text also serves as a caption in unlabelled containers.\n if (caption.length === 0 || caption.length > 120) continue;\n source = previous;\n const captionElement = previous;\n\n read = () => captionElement.innerText.replace(/\\s+/g, \" \").trim();\n break;\n }\n }\n const context = read();\n\n if (source !== undefined && context.length > 0) {\n const originalName = control.name;\n const container = scope;\n const caption = source;\n\n control.name = `${originalName} (${context})`.slice(0, 300);\n // Keep raw-name and contextual identity checks in the isolated realm.\n // Presentation must not weaken the existing native dispatch guard.\n nameChecks.set(control.ref, {\n name: control.name,\n originalName,\n verify: () =>\n readName(node) === originalName &&\n container.isConnected &&\n container.contains(node) &&\n container.contains(caption) &&\n (caption === container ||\n (caption.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_FOLLOWING) !== 0) &&\n read() === context,\n });\n break;\n }\n branch = scope;\n }\n }\n\n return {\n text: text.slice(0, 12_000),\n controls,\n readyState: document.readyState,\n truncated: truncated || text.length > 12_000,\n };\n },\n);\n\n/** Current state after standard DOM scrolling. Pointer actions also require a hit test;\n * keyboard actions verify native focus at dispatch instead. Never dispatches input.\n */\nexport const checkDom = pageFunction(\n (target: Element | string, expected: typeof Control.Type, scroll: boolean, pointer: boolean) => {\n // A ref is looked up in this realm's registry, saving a handle round trip each way.\n const node: unknown =\n typeof target === \"string\"\n ? Reflect.get(globalThis, \"@effect-agent/native-browser\")?.get(target)\n : target;\n\n if (!(node instanceof HTMLElement) || !node.isConnected) return false;\n\n const nameCheck:\n | {\n name: string;\n originalName: string;\n kind?: string;\n viewport?: boolean;\n verify: () => boolean;\n }\n | undefined = Reflect.get(globalThis, \"@effect-agent/native-browser-name-checks\")?.get(\n expected.ref,\n );\n\n if (nameCheck !== undefined && (nameCheck.name !== expected.name || !nameCheck.verify()))\n return false;\n // Jev refs require their centers to remain in view. Do not move a visible\n // form or popup just to prepare input; the same native hit test still applies.\n if (scroll && !nameCheck?.viewport)\n node.scrollIntoView({ block: \"center\", inline: \"center\", behavior: \"instant\" });\n const associated = node instanceof HTMLLabelElement ? (node.control ?? node) : node;\n const type = associated instanceof HTMLInputElement ? associated.type : \"\";\n\n if (\n associated instanceof HTMLSelectElement &&\n expected.optionDetails !== undefined &&\n ((expected.optionCount === undefined\n ? expected.optionDetails.length\n : expected.optionCount) !== associated.options.length ||\n expected.optionDetails.some((option, index) => {\n const current = associated.options.item(option.index ?? index);\n\n return (\n current === null ||\n current.value !== option.value ||\n current.label.slice(0, 300) !== option.label ||\n current.selected !== option.selected ||\n (current.disabled ||\n (current.parentElement instanceof HTMLOptGroupElement &&\n current.parentElement.disabled)) !== option.disabled\n );\n }))\n )\n return false;\n if (node.isContentEditable && node.innerText.slice(0, 4_096) !== expected.value) return false;\n\n const kind =\n nameCheck?.kind ??\n (node instanceof HTMLLabelElement &&\n associated instanceof HTMLInputElement &&\n [\"checkbox\", \"radio\"].includes(type)\n ? type\n : (node.getAttribute(\"role\") ??\n (type === \"checkbox\" || type === \"radio\"\n ? type\n : node.tagName === \"A\"\n ? \"link\"\n : node.tagName.toLowerCase())));\n\n if (\n kind !== expected.kind ||\n associated.matches(\":disabled\") ||\n associated.getAttribute(\"aria-disabled\") === \"true\" ||\n !node.checkVisibility({ checkOpacity: true, checkVisibilityCSS: true })\n )\n return false;\n if (\n (associated instanceof HTMLInputElement ||\n associated instanceof HTMLTextAreaElement ||\n associated instanceof HTMLSelectElement) &&\n type !== \"password\" &&\n associated.value.slice(0, 4_096) !== expected.value\n )\n return false;\n if (\n !(\n associated instanceof HTMLInputElement ||\n associated instanceof HTMLTextAreaElement ||\n associated instanceof HTMLSelectElement\n ) &&\n !node.isContentEditable &&\n !node.hasAttribute(\"aria-label\") &&\n !node.hasAttribute(\"aria-labelledby\") &&\n node.innerText.replace(/\\s+/g, \" \").trim().slice(0, 300) !==\n (nameCheck?.originalName ?? expected.name)\n )\n return false;\n if (\n expected.checked !== undefined &&\n (!(associated instanceof HTMLInputElement) || associated.checked !== expected.checked)\n )\n return false;\n if (\n Object.entries(expected.attributes ?? {}).some(\n ([key, value]) => (node.getAttribute(key) ?? \"\").slice(0, 1_024) !== value,\n )\n )\n return false;\n const ancestors = new Set<Node>();\n let ancestor: Node | null = node;\n\n while (ancestor !== null) {\n if (ancestor instanceof Element && ancestor.matches('[inert],[aria-hidden=\"true\"]'))\n return false;\n ancestors.add(ancestor);\n ancestor = ancestor instanceof ShadowRoot ? ancestor.host : ancestor.parentNode;\n }\n\n const modalSelector =\n 'dialog:modal,[role=\"dialog\"][aria-modal=\"true\"],[role=\"alertdialog\"][aria-modal=\"true\"]';\n\n const roots = new Set([document, node.getRootNode()]);\n\n for (const root of roots) {\n if (!(root instanceof Document || root instanceof ShadowRoot)) continue;\n for (const modal of root.querySelectorAll(modalSelector)) {\n if (\n !(modal instanceof HTMLElement) ||\n ancestors.has(modal) ||\n !modal.checkVisibility({ checkOpacity: true, checkVisibilityCSS: true })\n )\n continue;\n const box = modal.getBoundingClientRect();\n\n // An ARIA modal without an on-screen box, such as a collapsed cart drawer, covers\n // nothing; the hit test below still refuses anything an open overlay obstructs.\n if (\n modal.matches(\"dialog:modal\") ||\n (box.width > 0 &&\n box.height > 0 &&\n box.right > 0 &&\n box.bottom > 0 &&\n box.left < innerWidth &&\n box.top < innerHeight)\n )\n return false;\n }\n }\n const rect = node.getBoundingClientRect();\n\n const x =\n Math.max(0, rect.left) + (Math.min(innerWidth, rect.right) - Math.max(0, rect.left)) / 2;\n\n const y =\n Math.max(0, rect.top) + (Math.min(innerHeight, rect.bottom) - Math.max(0, rect.top)) / 2;\n\n let hit = document.elementFromPoint(x, y);\n\n while (hit !== null && hit !== node && !node.contains(hit)) {\n const shadow: ShadowRoot | undefined | null =\n hit.shadowRoot ??\n Reflect.get(globalThis, \"@effect-agent/native-browser-closed-roots\")?.get(hit);\n\n if (shadow === undefined || shadow === null) break;\n const next = shadow.elementFromPoint(x, y);\n\n if (next === null || next === hit) break;\n hit = next;\n }\n\n // Keyboard-only overlays can sit above sibling card content. Require that\n // containing element to remain unobstructed, then verify native focus at dispatch.\n // This never permits a pointer click through the overlay.\n return rect.width > 0 &&\n rect.height > 0 &&\n node.isConnected &&\n (hit === node ||\n (hit !== null &&\n (node.contains(hit) ||\n (!pointer &&\n node.tabIndex >= 0 &&\n getComputedStyle(node).pointerEvents === \"none\" &&\n node.parentElement?.contains(hit)))))\n ? { x, y }\n : false;\n },\n);\n\n/** Translate a checked child point and refuse input through hidden/covered frame owners. */\nexport const checkFrameDom = pageFunction(\n async (node: Element, point: { x: number; y: number }, scroll: boolean) => {\n if (\n !(node instanceof HTMLElement) ||\n !node.isConnected ||\n !node.checkVisibility({ checkOpacity: true, checkVisibilityCSS: true })\n )\n return false;\n if (scroll) {\n node.scrollIntoView({ block: \"center\", inline: \"center\", behavior: \"instant\" });\n // Input into an out-of-process frame is routed by the compositor's last frame, not by\n // live layout. Let a frame with the new scroll position render before input follows.\n await new Promise((resolve) => requestAnimationFrame(() => requestAnimationFrame(resolve)));\n }\n const style = getComputedStyle(node);\n\n // The bounding rect already includes translations. Anything that scales, rotates, skews or\n // projects the frame needs a native geometry adapter; never guess.\n let ancestor: Element | null = node;\n\n while (ancestor !== null) {\n const current = getComputedStyle(ancestor);\n\n const matrix = new DOMMatrixReadOnly(\n current.transform === \"none\" ? undefined : current.transform,\n );\n\n if (\n ancestor.matches('[inert],[aria-hidden=\"true\"]') ||\n !(\n matrix.m11 === 1 &&\n matrix.m12 === 0 &&\n matrix.m13 === 0 &&\n matrix.m14 === 0 &&\n matrix.m21 === 0 &&\n matrix.m22 === 1 &&\n matrix.m23 === 0 &&\n matrix.m24 === 0 &&\n matrix.m31 === 0 &&\n matrix.m32 === 0 &&\n matrix.m33 === 1 &&\n matrix.m34 === 0 &&\n matrix.m44 === 1\n ) ||\n current.perspective !== \"none\" ||\n // Individual scale, rotate and motion-path properties apply outside `transform`.\n current.scale !== \"none\" ||\n current.rotate !== \"none\" ||\n current.offsetPath !== \"none\" ||\n (current.zoom !== \"1\" && current.zoom !== \"normal\")\n )\n return false;\n const root = ancestor.getRootNode();\n\n ancestor = ancestor.parentElement ?? (root instanceof ShadowRoot ? root.host : null);\n }\n const rect = node.getBoundingClientRect();\n\n const x =\n rect.left + parseFloat(style.borderLeftWidth) + parseFloat(style.paddingLeft) + point.x;\n\n const y = rect.top + parseFloat(style.borderTopWidth) + parseFloat(style.paddingTop) + point.y;\n let hit = document.elementFromPoint(x, y);\n\n while (hit !== null && hit !== node && !node.contains(hit)) {\n const shadow: ShadowRoot | undefined | null =\n hit.shadowRoot ??\n Reflect.get(globalThis, \"@effect-agent/native-browser-closed-roots\")?.get(hit);\n\n if (shadow === undefined || shadow === null) break;\n const next = shadow.elementFromPoint(x, y);\n\n if (next === null || next === hit) break;\n hit = next;\n }\n\n return hit === node ? { x, y } : false;\n },\n);\n\nexport const waitDom = pageFunction((selector: string, state: string, text: string | undefined) => {\n const roots: Array<Document | ShadowRoot> = [document];\n\n const closedRoots: ReadonlyMap<Element, ShadowRoot> | undefined = Reflect.get(\n globalThis,\n \"@effect-agent/native-browser-closed-roots\",\n );\n\n const expectedText = text?.replace(/\\s+/g, \" \").trim();\n let scanned = 0;\n\n for (let index = 0; index < roots.length; index++) {\n const root = roots[index];\n\n if (root === undefined) break;\n\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT, {\n acceptNode(node) {\n if (!(node instanceof Element)) return NodeFilter.FILTER_ACCEPT;\n const style = getComputedStyle(node);\n\n return node.matches('script,style,template,option,optgroup,[inert],[aria-hidden=\"true\"]') ||\n style.display === \"none\" ||\n style.opacity === \"0\" ||\n style.contentVisibility === \"hidden\"\n ? NodeFilter.FILTER_REJECT\n : NodeFilter.FILTER_ACCEPT;\n },\n });\n\n let node = walker.nextNode();\n\n while (node !== null) {\n if (++scanned > 10_000) return false;\n if (node instanceof Element) {\n const shadow = node.shadowRoot ?? closedRoots?.get(node);\n\n if (shadow !== undefined && shadow !== null) roots.push(shadow);\n if (\n node instanceof HTMLElement &&\n node.matches(selector) &&\n node.checkVisibility({ checkOpacity: true, checkVisibilityCSS: true }) &&\n (expectedText === undefined ||\n node.innerText.replace(/\\s+/g, \" \").trim().includes(expectedText))\n ) {\n if (state === \"hidden\") return false;\n if (\n state === \"visible\" ||\n (state === \"enabled\" &&\n !node.matches(\":disabled\") &&\n node.getAttribute(\"aria-disabled\") !== \"true\") ||\n (state === \"text\" && text !== undefined)\n )\n return true;\n }\n }\n node = walker.nextNode();\n }\n }\n\n return state === \"hidden\";\n});\n","/// <reference lib=\"dom\" />\n\n/* @license\n * Selection and accessible naming adapted from jev-ultrafast snapshot.js at 1231850.\n * Copyright (c) 2026 Browser Use\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport type { Control } from \"@yielded/agent/browser-use\";\n\nimport { pageFunction } from \"./page-function.ts\";\n\n/** Isolated-realm Jev observation. The same private refs and native guards own input. */\nexport const inspectJevDom = pageFunction(\n (\n selector: string | undefined,\n prefix: string,\n maximum: number,\n optionFilter: string | undefined,\n ) => {\n const registry = new Map<string, Element>();\n\n const checks = new Map<\n string,\n { name: string; originalName: string; kind: string; viewport: boolean; verify: () => boolean }\n >();\n\n Reflect.set(globalThis, \"@effect-agent/native-browser\", registry);\n Reflect.set(globalThis, \"@effect-agent/native-browser-name-checks\", checks);\n\n const visible = (node: Element) => {\n let ancestor: Element | null = node;\n\n while (ancestor !== null) {\n if (ancestor.matches('[aria-hidden=\"true\"],[inert]')) return false;\n const root = ancestor.getRootNode();\n\n ancestor = ancestor.parentElement ?? (root instanceof ShadowRoot ? root.host : null);\n }\n\n return node.checkVisibility({ checkOpacity: true, checkVisibilityCSS: true });\n };\n\n const inView = (node: Element) => {\n const rect = node.getBoundingClientRect();\n const x = rect.x + rect.width / 2;\n const y = rect.y + rect.height / 2;\n\n return (\n rect.width > 0 && rect.height > 0 && x >= 0 && y >= 0 && x < innerWidth && y < innerHeight\n );\n };\n\n const name = (node: Element | null, seen = new Set<Element>()): string => {\n if (node === null || seen.has(node) || seen.size >= 10_000) return \"\";\n seen.add(node);\n\n const referenced = (node.getAttribute(\"aria-labelledby\") ?? \"\")\n .split(/\\s+/)\n .map((id) => name(document.getElementById(id), seen))\n .filter(Boolean)\n .join(\" \");\n\n const labels =\n node instanceof HTMLInputElement ||\n node instanceof HTMLTextAreaElement ||\n node instanceof HTMLSelectElement\n ? node.labels\n : null;\n\n return (\n referenced ||\n node.getAttribute(\"aria-label\") ||\n Array.from(labels ?? [])\n .map((label) => name(label, seen))\n .filter(Boolean)\n .join(\" \") ||\n (node instanceof HTMLInputElement && [\"button\", \"submit\", \"reset\"].includes(node.type)\n ? node.value\n : \"\") ||\n node.getAttribute(\"alt\") ||\n (node.tagName === \"INPUT\"\n ? \"\"\n : Array.from(node.childNodes)\n .map((child) =>\n child instanceof Text\n ? child.textContent\n : child instanceof Element && child.getAttribute(\"aria-hidden\") !== \"true\"\n ? name(child, seen)\n : \"\",\n )\n .join(\" \")\n .trim()) ||\n node.getAttribute(\"title\") ||\n node.getAttribute(\"placeholder\") ||\n \"\"\n ).slice(0, 4_096);\n };\n\n const roles = [\n \"button\",\n \"link\",\n \"checkbox\",\n \"radio\",\n \"switch\",\n \"tab\",\n \"menuitem\",\n \"menuitemradio\",\n \"option\",\n \"gridcell\",\n \"combobox\",\n \"textbox\",\n \"searchbox\",\n \"spinbutton\",\n ];\n\n const role = (node: HTMLElement) => {\n const explicit = node.getAttribute(\"role\");\n\n if (explicit !== null && roles.includes(explicit)) return explicit;\n if (node.tagName === \"BUTTON\" || node.tagName === \"SUMMARY\") return \"button\";\n if (node.tagName === \"A\") return \"link\";\n if (node instanceof HTMLSelectElement) return \"combobox\";\n if (node instanceof HTMLTextAreaElement || node.isContentEditable) return \"textbox\";\n if (node instanceof HTMLInputElement) {\n if ([\"checkbox\", \"radio\"].includes(node.type)) return node.type;\n if ([\"button\", \"submit\", \"reset\", \"image\"].includes(node.type)) return \"button\";\n if (node.type === \"search\") return \"searchbox\";\n if (node.type === \"number\") return \"spinbutton\";\n if ([\"text\", \"email\", \"url\", \"tel\"].includes(node.type)) return \"textbox\";\n }\n\n return null;\n };\n\n const value = (node: HTMLElement) =>\n (\"value\" in node\n ? String(node.value)\n : node.isContentEditable || role(node) === \"combobox\"\n ? node.innerText.trim()\n : \"\"\n ).slice(0, 4_096);\n\n const readOnly = (node: HTMLElement) =>\n ((node instanceof HTMLInputElement || node instanceof HTMLTextAreaElement) &&\n node.readOnly) ||\n node.getAttribute(\"aria-readonly\") === \"true\";\n\n const closedRoots: ReadonlyMap<Element, ShadowRoot> | undefined = Reflect.get(\n globalThis,\n \"@effect-agent/native-browser-closed-roots\",\n );\n\n const candidates = [document, ...(closedRoots?.values() ?? [])].flatMap((root) =>\n Array.from(\n root.querySelectorAll(\n 'a[href],button,input,textarea,select,summary,[contenteditable=\"true\"],' +\n roles.map((role) => `[role=\"${role}\"]`).join(\",\"),\n ),\n ),\n );\n\n const controls: Array<typeof Control.Type> = [];\n let truncated = candidates.length > 10_000;\n // A modal dialog blocks background input; offer only its controls, as default observations do.\n const modal = document.querySelector(\"dialog:modal\");\n\n for (const node of Array.from(candidates).slice(0, 10_000)) {\n if (!(node instanceof HTMLElement)) continue;\n if (selector !== undefined && !node.matches(selector) && node.closest(selector) === null)\n continue;\n if (node instanceof HTMLInputElement && [\"password\", \"file\", \"hidden\"].includes(node.type))\n continue;\n if (\n !visible(node) ||\n !inView(node) ||\n (modal !== null && !modal.contains(node)) ||\n node.matches(\":disabled\") ||\n node.closest('[aria-disabled=\"true\"]')\n )\n continue;\n const kind = role(node);\n\n if (kind === null || (kind === \"gridcell\" && node.querySelector('button,[role=\"button\"]')))\n continue;\n if (controls.length >= maximum) {\n truncated = true;\n break;\n }\n const ref = `${prefix}-${controls.length}`;\n const label = name(node) || kind;\n const currentValue = value(node);\n const readonly = readOnly(node);\n const allOptions = node instanceof HTMLSelectElement ? Array.from(node.options) : [];\n\n const matching = allOptions.flatMap((option, index) =>\n option.selected ||\n optionFilter === undefined ||\n `${option.label}\\n${option.value}`.toLowerCase().includes(optionFilter.toLowerCase())\n ? [{ option, index }]\n : [],\n );\n\n const selected = matching.filter(({ option }) => option.selected);\n\n const options = [\n ...selected.slice(0, 256),\n ...matching\n .filter(({ option }) => !option.selected)\n .slice(0, Math.max(0, 256 - selected.length)),\n ];\n\n truncated ||= matching.length > options.length;\n registry.set(ref, node);\n checks.set(ref, {\n name: label,\n originalName: node.innerText.replace(/\\s+/g, \" \").trim().slice(0, 300),\n kind,\n viewport: true,\n verify: () =>\n role(node) === kind &&\n (name(node) || kind) === label &&\n value(node) === currentValue &&\n readOnly(node) === readonly &&\n node.closest('[aria-disabled=\"true\"]') === null &&\n inView(node),\n });\n controls.push({\n ref,\n kind,\n name: label,\n value: currentValue,\n disabled: false,\n editable:\n !readonly &&\n ([\"textbox\", \"searchbox\", \"spinbutton\"].includes(kind) ||\n (kind === \"combobox\" &&\n (node instanceof HTMLInputElement || node instanceof HTMLTextAreaElement))),\n pointerEvents: getComputedStyle(node).pointerEvents.slice(0, 64),\n options: options.map(({ option }) => option.value.slice(0, 4_096)),\n ...(node instanceof HTMLSelectElement\n ? {\n optionCount: allOptions.length,\n optionDetails: options.map(({ option, index }) => ({\n index,\n value: option.value.slice(0, 4_096),\n label: option.label.slice(0, 300),\n selected: option.selected,\n disabled:\n option.disabled ||\n (option.parentElement instanceof HTMLOptGroupElement &&\n option.parentElement.disabled),\n })),\n }\n : {}),\n ...(node instanceof HTMLInputElement && [\"checkbox\", \"radio\"].includes(node.type)\n ? { checked: node.checked }\n : {}),\n attributes: Object.fromEntries(\n [\n \"id\",\n \"name\",\n \"type\",\n \"role\",\n \"tabindex\",\n \"placeholder\",\n \"aria-label\",\n \"aria-labelledby\",\n \"aria-expanded\",\n \"aria-selected\",\n \"aria-checked\",\n \"aria-readonly\",\n \"aria-disabled\",\n \"aria-controls\",\n \"href\",\n ].flatMap((key) => {\n const attribute = node.getAttribute(key);\n\n return attribute === null ? [] : [[key, attribute.slice(0, 1_024)]];\n }),\n ),\n });\n }\n\n const scopes =\n selector === undefined ? [document.body] : Array.from(document.querySelectorAll(selector));\n\n const visited = new Set<Node>();\n const words: Array<string> = [];\n const range = document.createRange();\n let length = 0;\n let scanned = 0;\n\n truncated ||= scopes.length > 256;\n for (const scope of scopes.slice(0, 256)) {\n if (scope === null) continue;\n const walker = document.createTreeWalker(scope, NodeFilter.SHOW_TEXT);\n let node = walker.nextNode();\n\n while (node !== null && length < 6_000 && scanned++ < 10_000) {\n const text = node.textContent?.trim() ?? \"\";\n const parent = node.parentElement;\n\n if (\n !visited.has(node) &&\n text &&\n parent &&\n !parent.closest(\"script,style,noscript,template\") &&\n visible(parent)\n ) {\n range.selectNodeContents(node);\n const rect = range.getBoundingClientRect();\n\n if (\n rect.width > 0 &&\n rect.height > 0 &&\n rect.bottom > 0 &&\n rect.top < innerHeight &&\n rect.right > 0 &&\n rect.left < innerWidth\n ) {\n words.push(text);\n length += text.length;\n }\n }\n visited.add(node);\n node = walker.nextNode();\n }\n }\n const text = words.join(\"\\n\");\n\n return {\n text: text.slice(0, 6_000),\n controls,\n readyState: document.readyState,\n truncated: truncated || text.length > 6_000 || scanned >= 10_000,\n page: {\n title: document.title,\n scrollY,\n viewportHeight: innerHeight,\n documentHeight: document.documentElement.scrollHeight,\n },\n };\n },\n);\n","import {\n type ActOptions,\n type ActionResult,\n type NavigateRequest,\n Action,\n BrowserActions,\n BrowserControl,\n BrowserUseError,\n InspectRequest,\n Observation,\n ScrollRequest,\n WaitRequest,\n type Control,\n DialogRequest,\n PressRequest,\n TabRequest,\n} from \"@yielded/agent/browser-use\";\nimport { InteractiveBrowserTargetUrl } from \"@yielded/agent/interactive-browser\";\nimport { Deferred, Effect, Fiber, Layer, Schema, Semaphore } from \"effect\";\nimport {\n ElementHandle,\n TimeoutError,\n type Frame,\n type Page,\n type Dialog,\n} from \"puppeteer-core/lib/esm/puppeteer/puppeteer-core-browser.js\";\n\nimport type { BrowserSession } from \"./BrowserSession.ts\";\nimport {\n checkDom,\n checkFrameDom,\n inspectDom,\n settleDom,\n settleInputDom,\n waitDom,\n} from \"./internal/browser-dom.ts\";\nimport { inspectJevDom } from \"./internal/browser-jev-dom.ts\";\n\nexport type Command =\n | { readonly kind: \"observe\" | \"screenshot\" }\n | { readonly kind: \"inspect\"; readonly request: typeof InspectRequest.Type }\n | { readonly kind: \"navigate\"; readonly request: typeof NavigateRequest.Type }\n | { readonly kind: \"scroll\"; readonly request: typeof ScrollRequest.Type }\n | { readonly kind: \"wait\"; readonly request: typeof WaitRequest.Type }\n | { readonly kind: \"select-tab\"; readonly request: typeof TabRequest.Type }\n | { readonly kind: \"respond-dialog\"; readonly request: typeof DialogRequest.Type }\n | {\n readonly kind: \"act\";\n readonly action: Action | ({ readonly kind: \"press\" } & typeof PressRequest.Type);\n };\n\nexport interface Options<R = never> {\n /** Rechecked under the native session lock. The host owns origins, identity and consent. */\n readonly authorize: (\n command: Command,\n context: AuthorizationContext,\n ) => Effect.Effect<void, BrowserUseError, R>;\n readonly maxActions: number;\n readonly maxReturnedBytes: number;\n /** Prefer viewport controls; retain off-screen popups only if none of their controls are in view. Defaults to false. */\n readonly viewportOnly?: boolean;\n /** Jev reads enabled controls centered in the viewport with accessible names and at most 6,000 visible text characters. Defaults to \"default\". */\n readonly observationMode?: \"default\" | \"jev\";\n /** True waits for 100 ms of DOM quiet (at most 1 s). \"input\" waits two frames/50 ms, or visible combobox options/200 ms. Defaults to false. */\n readonly settleAfterAction?: boolean | \"input\";\n /** Cap condition waits and return a fresh observation on a condition timeout. Omit to retain timeout errors. */\n readonly maxWaitMillis?: number;\n}\n\n/** Host-only current SDK metadata. Opaque refs never replace origin or target authority. */\nexport interface AuthorizationContext {\n /** Absent only before the initial attachment read; the host authorizes that attachment. */\n readonly pageUrl?: string;\n readonly frameUrl?: string;\n /** Destination of an observed select-tab command, checked again before selection. */\n readonly tabUrl?: string;\n readonly target?: typeof Control.Type;\n}\n\nconst Limits = Schema.Struct({\n maxActions: Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 1_000 })),\n maxReturnedBytes: Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 8 * 1024 * 1024 })),\n viewportOnly: Schema.Boolean,\n observationMode: Schema.Literals([\"default\", \"jev\"]),\n settleAfterAction: Schema.Union([Schema.Boolean, Schema.Literal(\"input\")]),\n maxWaitMillis: Schema.NullOr(Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 15_000 }))),\n});\n\nconst invalid = (message: string) =>\n new BrowserUseError({ code: \"invalid\", message, dispatch: \"not-dispatched\" });\n\n// URL evidence identifies pages; opaque document payloads are not page observations.\n// Authorization and navigation fencing always use the complete native SDK URL.\nconst observedUrl = (url: string): string => {\n const payload = url.startsWith(\"data:\") ? url.indexOf(\",\") : -1;\n\n return payload < 0\n ? url.slice(0, 8_192)\n : `${url.slice(0, Math.min(payload, 256))},[payload omitted]`;\n};\n\n// CDP can resolve closed roots without modifying the page's realm or attachShadow.\n// Keep those nodes in the same isolated realm as native refs and discard old roots per read.\n// The command deadline bounds this full-frame read; the node/root caps below only bound\n// local adoption, not the CDP response size.\nconst discoverClosedRoots = async (frame: Frame): Promise<boolean> => {\n const realm = frame.isolatedRealm();\n\n await using document = await realm.evaluateHandle(() => globalThis.document);\n\n const { node } = await frame.client.send(\"DOM.describeNode\", {\n objectId: document.remoteObject().objectId,\n depth: -1,\n pierce: true,\n });\n\n const pending = [node];\n const roots: Array<number> = [];\n let scanned = 0;\n\n while (pending.length > 0 && scanned++ < 10_000 && roots.length < 256) {\n const current = pending.pop();\n\n if (current === undefined) break;\n if (current.shadowRootType === \"closed\") roots.push(current.backendNodeId);\n pending.push(...(current.children ?? []));\n pending.push(\n ...(current.shadowRoots ?? []).filter((root) => root.shadowRootType !== \"user-agent\"),\n );\n }\n await realm.evaluate(() => {\n Reflect.set(globalThis, \"@effect-agent/native-browser-closed-roots\", new Map());\n });\n for (const id of roots) {\n await using root = await realm.adoptBackendNode(id);\n\n await realm.evaluate((node) => {\n if (!(node instanceof ShadowRoot) || node.mode !== \"closed\")\n throw new Error(\"Closed shadow root is unavailable\");\n Reflect.get(globalThis, \"@effect-agent/native-browser-closed-roots\").set(node.host, node);\n }, root);\n }\n\n return pending.length > 0;\n};\n\n/** One application-neutral controller over an existing scoped native attachment.\n * No allocation, model, provider choice, input retry, or arbitrary page JS is exposed.\n * Reads re-authorize at most five times when page/frame URLs change during authorization.\n * References expire on inspection; outstanding native work retains the session's fencing.\n */\nexport const make = Effect.fnUntraced(function* <R>(\n session: Pick<BrowserSession, \"run\">,\n options: Options<R>,\n) {\n const authorityServices = yield* Effect.context<R>();\n\n const authorize = (command: Command, context: AuthorizationContext) =>\n options.authorize(command, context).pipe(Effect.provideContext(authorityServices));\n\n const limits = yield* Schema.decodeEffect(Limits)({\n maxActions: options.maxActions,\n maxReturnedBytes: options.maxReturnedBytes,\n viewportOnly: options.viewportOnly ?? false,\n observationMode: options.observationMode ?? \"default\",\n settleAfterAction: options.settleAfterAction ?? false,\n maxWaitMillis: options.maxWaitMillis ?? null,\n }).pipe(Effect.mapError(() => invalid(\"Invalid browser controller limits.\")));\n\n const lock = yield* Semaphore.make(1);\n const ownerScope = yield* Effect.scope;\n\n type Dispatch = NonNullable<(typeof ActionResult.Type)[\"dispatch\"]>;\n let pendingInput: { ref: string; fiber: Fiber.Fiber<Dispatch, BrowserUseError> } | undefined;\n let inputPage: Page | undefined;\n let dialogSignal: Deferred.Deferred<void> | undefined;\n let nextInput = 0;\n let lastTabs: NonNullable<(typeof Observation.Type)[\"tabs\"]> = [];\n\n const clearInput = () => {\n pendingInput = undefined;\n dialogSignal = undefined;\n inputPage = undefined;\n };\n\n const targets = new Map<string, { frame: string; control: typeof Control.Type }>();\n const frames = new Set<string>();\n const frameIds = new WeakMap<Frame, string>();\n const tabIds = new WeakMap<Page, string>();\n const tabs = new Map<string, Page>();\n const pendingDialogs = new Map<Page, { ref: string; dialog: Dialog }>();\n\n const listeners = new Map<\n Page,\n { dialog: (dialog: Dialog) => void; popup: (page: Page | null) => void }\n >();\n\n let activePage: Page | undefined;\n let lastNativePage: Page | undefined;\n let nextTab = 0;\n let nextDialog = 0;\n\n const tabId = (page: Page) => {\n let id = tabIds.get(page);\n\n if (id === undefined) {\n id = `t${scopeId}-${nextTab++}`;\n tabIds.set(page, id);\n }\n\n return id;\n };\n\n const attach = (page: Page) => {\n if (listeners.has(page) || listeners.size >= 32) return;\n\n const dialog = (dialog: Dialog) => {\n pendingDialogs.set(page, { ref: `dialog-${scopeId}-${nextDialog++}`, dialog });\n if (page === inputPage && dialogSignal !== undefined)\n Deferred.doneUnsafe(dialogSignal, Effect.void);\n };\n\n const popup = (page: Page | null) => {\n if (page !== null) attach(page);\n };\n\n listeners.set(page, { dialog, popup });\n page.on(\"dialog\", dialog);\n page.on(\"popup\", popup);\n };\n\n yield* Effect.addFinalizer(() =>\n session\n .run(Effect.void, async () => {\n for (const { dialog } of pendingDialogs.values()) {\n try {\n await dialog.dismiss();\n } catch {\n /* The session owner retains cleanup authority. */\n }\n }\n })\n .pipe(\n Effect.ignore,\n Effect.andThen(\n Effect.sync(() => {\n for (const [page, listener] of listeners) {\n page.off(\"dialog\", listener.dialog);\n page.off(\"popup\", listener.popup);\n }\n listeners.clear();\n pendingDialogs.clear();\n tabs.clear();\n activePage = undefined;\n targets.clear();\n frames.clear();\n }),\n ),\n ),\n );\n const scopeId = crypto.getRandomValues(new Uint32Array(2)).join(\"-\");\n let nextFrame = 0;\n\n const frameId = (frame: Frame) => {\n let id = frameIds.get(frame);\n\n if (id === undefined) {\n id = `f${scopeId}-${nextFrame++}`;\n frameIds.set(frame, id);\n }\n\n return id;\n };\n\n const resolveFrame = (page: Page, ref: string) =>\n page.frames().find((frame) => frameIds.get(frame) === ref);\n\n let generation = 0;\n let consumed = 0;\n\n const native = <A>(\n command: Command,\n action: (page: Page, stage: (name: string) => void) => Promise<A>,\n timeoutMillis?: number,\n phase?: \"prepare\" | \"input\" | \"settle\",\n ) =>\n Effect.gen(function* () {\n if (pendingInput !== undefined && phase !== \"input\" && command.kind !== \"respond-dialog\")\n return yield* invalid(\n \"Native input is pending. Inspect and respond to its dialog before another browser operation.\",\n );\n const span = yield* Effect.currentSpan.pipe(Effect.orDie);\n let authorizedUrl: string | undefined;\n let authorizedTabUrl: string | undefined;\n let authorizedFrame: { ref: string; url: string | undefined } | undefined;\n const read = [\"observe\", \"inspect\", \"wait\", \"screenshot\"].includes(command.kind);\n\n for (let attempt = 0; ; attempt++) {\n let authorizationChanged = false;\n let lostDocument = false;\n\n const result = yield* session\n .run(\n Effect.suspend(() => {\n const page = activePage ?? lastNativePage;\n\n const target =\n command.kind === \"act\"\n ? targets.get(command.action.ref)\n : command.kind === \"scroll\" && command.request.ref !== undefined\n ? targets.get(command.request.ref)\n : undefined;\n\n authorizedUrl = page?.url();\n authorizedTabUrl =\n command.kind === \"select-tab\" ? tabs.get(command.request.ref)?.url() : undefined;\n\n const frameRef =\n target?.frame ??\n (command.kind === \"inspect\" || command.kind === \"wait\"\n ? command.request.frame\n : undefined);\n\n authorizedFrame =\n frameRef === undefined\n ? undefined\n : {\n ref: frameRef,\n url: page === undefined ? undefined : resolveFrame(page, frameRef)?.url(),\n };\n\n return authorize(command, {\n ...(authorizedUrl === undefined ? {} : { pageUrl: authorizedUrl }),\n ...(authorizedTabUrl === undefined ? {} : { tabUrl: authorizedTabUrl }),\n ...(authorizedFrame === undefined ? {} : { frameUrl: authorizedFrame.url }),\n ...(target === undefined\n ? {}\n : {\n target: target.control,\n }),\n });\n }).pipe(\n Effect.mapError(\n (error) =>\n new BrowserUseError({\n code: error.code,\n message: error.message,\n dispatch: \"not-dispatched\",\n }),\n ),\n ),\n async (page) => {\n attach(page);\n const selected = activePage ?? page;\n\n lastNativePage = page;\n\n if (selected.isClosed() || selected.browserContext() !== page.browserContext())\n throw new Error(\"Observed tab is unavailable\");\n if (authorizedUrl !== undefined && selected.url() !== authorizedUrl) {\n authorizationChanged = true;\n throw new Error(\"Page changed during authorization\");\n }\n if (\n authorizedFrame !== undefined &&\n resolveFrame(selected, authorizedFrame.ref)?.url() !== authorizedFrame.url\n ) {\n authorizationChanged = true;\n throw new Error(\"Frame changed during authorization\");\n }\n if (\n command.kind === \"select-tab\" &&\n tabs.get(command.request.ref)?.url() !== authorizedTabUrl\n )\n throw new Error(\"Tab changed during authorization\");\n attach(selected);\n\n try {\n return await action(selected, (name) =>\n span.attribute(\"browser.native.stage\", name),\n );\n } catch (error) {\n // A read that loses its document to a navigation retries with fresh authorization.\n // The context can be destroyed before the page reports its new URL.\n lostDocument =\n error instanceof Error &&\n /Execution context was destroyed|Cannot find context with specified id/.test(\n error.message,\n );\n // The first read of a fresh controller has no page URL yet; a lost document\n // still retries, and the retry authorizes the page it then finds.\n if (\n read &&\n (lostDocument ||\n (authorizedUrl !== undefined && selected.url() !== authorizedUrl))\n )\n authorizationChanged = true;\n throw error;\n }\n },\n timeoutMillis === undefined ? undefined : { timeoutMillis },\n )\n .pipe(Effect.result);\n\n if (result._tag === \"Success\") return result.success;\n if (\n !read ||\n !authorizationChanged ||\n attempt >= 4 ||\n result.failure._tag !== \"BrowserSessionError\" ||\n result.failure.reason !== \"provider\" ||\n result.failure.cleanup !== \"not-requested\"\n )\n return yield* result.failure;\n\n span.attribute(\"browser.read.authorization_retries\", attempt + 1);\n // A destroyed context means the next document has not committed yet; give it time.\n yield* Effect.sleep(lostDocument ? \"250 millis\" : \"20 millis\");\n }\n }).pipe(\n Effect.mapError((error) => {\n if (error._tag === \"BrowserUseError\") return error;\n const read = [\"observe\", \"inspect\", \"wait\", \"screenshot\"].includes(command.kind);\n\n return new BrowserUseError({\n code: \"browser\",\n message: read\n ? `Browser ${command.kind} failed (${error.reason}); cleanup ${error.cleanup}. No new input was dispatched.`\n : `Browser ${error.reason}; native outcome ${error.dispatch}; cleanup ${error.cleanup}. Input is never replayed.`,\n dispatch: read || error.dispatch === \"not-dispatched\" ? \"not-dispatched\" : \"unknown\",\n });\n }),\n Effect.withSpan(`BrowserUse.${command.kind}${phase === undefined ? \"\" : `.${phase}`}`),\n );\n\n const bounded = <A>(value: A) =>\n Effect.gen(function* () {\n const bytes = new TextEncoder().encode(JSON.stringify(value)).byteLength;\n\n if (bytes > limits.maxReturnedBytes)\n return yield* invalid(\n \"Browser result exceeds the host byte budget. Narrow inspection before acting.\",\n );\n\n return value;\n });\n\n const inspect = Effect.fnUntraced(function* (\n request: typeof InspectRequest.Type,\n command: Command = { kind: \"inspect\", request },\n ) {\n yield* Schema.decodeEffect(InspectRequest)(request).pipe(\n Effect.mapError(() => invalid(\"Invalid inspection request.\")),\n );\n const selectedFrame = request.frame;\n\n if (request.frame !== undefined && !frames.has(request.frame))\n return yield* invalid(\"Frame was not observed. Inspect the page first.\");\n targets.clear();\n generation++;\n\n if (pendingInput?.fiber.pollUnsafe()?._tag === \"Failure\") {\n const failed = pendingInput.fiber;\n\n clearInput();\n yield* Fiber.join(failed);\n }\n const blocked = inputPage === undefined ? undefined : pendingDialogs.get(inputPage);\n\n if (pendingInput !== undefined && blocked !== undefined) {\n yield* authorize(command, { pageUrl: inputPage?.url() });\n\n const observation = yield* bounded({\n text: \"Native input is awaiting this JavaScript dialog. Respond before further page operations; never replay the input.\",\n controls: [],\n tabs: lastTabs,\n dialogs: [\n {\n ref: blocked.ref,\n type: blocked.dialog.type(),\n message: blocked.dialog.message().slice(0, 4096),\n defaultValue: blocked.dialog.defaultValue().slice(0, 4096),\n },\n ],\n });\n\n return observation;\n }\n\n const value = yield* native(command, async (page) => {\n const currentTabs = await page.browserContext().pages();\n\n tabs.clear();\n currentTabs.slice(0, 32).forEach((tab) => {\n tabs.set(tabId(tab), tab);\n attach(tab);\n });\n\n const tabObservation = currentTabs\n .slice(0, 32)\n .map((tab) => ({ ref: tabId(tab), url: observedUrl(tab.url()), active: tab === page }));\n\n const pending = pendingDialogs.get(page);\n\n lastTabs = tabObservation;\n\n if (pending !== undefined)\n return {\n text: \"A native JavaScript dialog blocks page interaction. Respond to its observed reference before continuing.\",\n controls: [],\n tabs: tabObservation,\n truncated: currentTabs.length > 32,\n dialogs: [\n {\n ref: pending.ref,\n type: pending.dialog.type(),\n message: pending.dialog.message().slice(0, 4096),\n defaultValue: pending.dialog.defaultValue().slice(0, 4096),\n },\n ],\n };\n const currentFrames = page.frames();\n\n if (\n selectedFrame !== undefined &&\n command.kind !== \"observe\" &&\n !currentFrames.some((frame) => frameId(frame) === selectedFrame)\n )\n throw new Error(\"Observed frame is detached\");\n frames.clear();\n currentFrames.slice(0, 32).forEach((frame) => frames.add(frameId(frame)));\n\n const inspected =\n selectedFrame === undefined\n ? [page.mainFrame()]\n : currentFrames.filter((frame) => frameId(frame) === selectedFrame);\n\n if (inspected.length === 0) inspected.push(page.mainFrame());\n\n let text = \"\";\n let readyState: (typeof Observation.Type)[\"readyState\"];\n let truncated = currentFrames.length > 32 || currentTabs.length > 32;\n let metrics: (typeof Observation.Type)[\"page\"];\n const controls: Array<typeof Control.Type> = [];\n\n for (const frame of inspected) {\n if (controls.length >= 256) {\n truncated = true;\n break;\n }\n const ref = frameId(frame);\n\n if (ref === undefined) continue;\n\n const read = async (): Promise<unknown> => {\n const rootsTruncated = await discoverClosedRoots(frame);\n\n truncated ||= rootsTruncated;\n\n return limits.observationMode === \"jev\"\n ? frame\n .isolatedRealm()\n .evaluate(\n inspectJevDom,\n request.selector,\n `r${scopeId}-${generation}-${controls.length}`,\n 256 - controls.length,\n request.optionFilter,\n )\n : frame\n .isolatedRealm()\n .evaluate(\n inspectDom,\n request.selector,\n `r${scopeId}-${generation}-${controls.length}`,\n 256 - controls.length,\n request.optionFilter,\n limits.viewportOnly,\n );\n };\n\n let result = Schema.decodeUnknownSync(Observation)(await read());\n\n // Native click acknowledgement can precede document parsing. Settle this\n // explicit readiness condition before returning an empty loading document. A document\n // still parsing after 2 s is observed as it stands, reporting readyState \"loading\".\n if (result.readyState === \"loading\") {\n const ready = await frame\n .isolatedRealm()\n .waitForFunction(() => document.readyState !== \"loading\", {\n timeout: 2_000,\n polling: \"raf\",\n })\n .catch((error: unknown) => {\n if (error instanceof TimeoutError) return undefined;\n throw error;\n });\n\n await ready?.dispose();\n result = Schema.decodeUnknownSync(Observation)(await read());\n }\n readyState = result.readyState;\n if (frame === page.mainFrame()) metrics = result.page;\n\n text += limits.observationMode === \"jev\" ? result.text : `\\n[${ref}]${result.text}`;\n truncated ||= result.truncated ?? false;\n for (const control of result.controls) {\n const current = { ...control, frame: ref };\n\n targets.set(control.ref, { frame: ref, control: current });\n controls.push(current);\n }\n }\n\n const textLimit = limits.observationMode === \"jev\" ? 6_000 : 24_000;\n\n return {\n text: text.slice(0, textLimit),\n controls,\n ...(readyState === undefined ? {} : { readyState }),\n ...(metrics === undefined ? {} : { page: metrics }),\n truncated: truncated || text.length > textLimit,\n frames: currentFrames.slice(0, 32).map((frame) => ({\n ref: frameId(frame),\n name: frame.name().slice(0, 300),\n // Fragments are client-side state; payment frames put kilobytes of parameters there.\n url: observedUrl(\n frame.url().startsWith(\"data:\") ? frame.url() : frame.url().split(\"#\", 1)[0],\n ),\n inspected: inspected.includes(frame),\n })),\n tabs: tabObservation,\n dialogs: [],\n };\n }).pipe(Effect.tapError(() => Effect.sync(() => targets.clear())));\n\n const observation = yield* bounded(value).pipe(\n Effect.tapError(() => Effect.sync(() => targets.clear())),\n );\n\n return observation;\n });\n\n const charge = Effect.fnUntraced(function* () {\n if (consumed >= limits.maxActions) return yield* invalid(\"Browser action budget exhausted.\");\n consumed++;\n });\n\n const checkedPoint = async (\n element: ElementHandle<Element>,\n frame: Frame,\n expected: typeof Control.Type,\n scroll: boolean,\n pointer = true,\n ) => {\n let point = await element.evaluate(checkDom, expected, scroll, pointer);\n\n if (point === false) return false;\n let current = frame;\n let parent = current.parentFrame();\n\n while (parent !== null) {\n await discoverClosedRoots(parent);\n await using owner = await current.frameElement();\n\n if (owner === null) return false;\n await using isolatedOwner = await parent.isolatedRealm().adoptHandle(owner);\n\n point = await isolatedOwner.evaluate(checkFrameDom, point, scroll);\n if (point === false) return false;\n current = parent;\n parent = current.parentFrame();\n }\n\n return point;\n };\n\n // Separate settling from the following read's authorization snapshot.\n const settle = (input?: { readonly frame: string; readonly ref: string }) =>\n Effect.suspend(() =>\n limits.settleAfterAction\n ? native(\n { kind: \"observe\" },\n async (page) => {\n const frame =\n limits.settleAfterAction === \"input\" && input !== undefined\n ? resolveFrame(page, input.frame)\n : page.mainFrame();\n\n if (frame === undefined) return;\n\n if (limits.settleAfterAction === \"input\")\n await frame.isolatedRealm().evaluate(settleInputDom, input?.ref);\n else await frame.isolatedRealm().evaluate(settleDom);\n },\n undefined,\n \"settle\",\n ).pipe(Effect.asVoid)\n : Effect.void,\n );\n\n const after = Effect.fnUntraced(function* (\n completed: number,\n error: string | null,\n dispatch: NonNullable<(typeof ActionResult.Type)[\"dispatch\"]>,\n frame?: string,\n alreadySettled = false,\n observe = true,\n ) {\n if (dispatch === \"acknowledged\" && !alreadySettled)\n yield* settle().pipe(\n Effect.catch((failure) =>\n Effect.sync(() => {\n error ??= failure.message;\n }),\n ),\n );\n // Without an observation, refs from before the input can no longer be authorized.\n if (!observe) targets.clear();\n\n const observation = !observe\n ? null\n : yield* inspect(frame === undefined ? {} : { frame }, {\n kind: \"observe\",\n }).pipe(\n Effect.catch((failure) => {\n error ??= `Input receipt retained; observation failed. Inspect before continuing. ${failure.message}`;\n\n return Effect.succeed(null);\n }),\n );\n\n return {\n completed,\n error,\n observation,\n dispatch,\n ...(pendingInput === undefined\n ? {}\n : { pendingInput: { ref: pendingInput.ref, reason: \"dialog\" as const } }),\n };\n });\n\n const action = Effect.fnUntraced(function* (\n value: Action | ({ readonly kind: \"press\" } & typeof PressRequest.Type),\n ) {\n if (pendingInput !== undefined)\n return yield* invalid(\"Native input is pending; respond to its dialog without replaying it.\");\n const target = targets.get(value.ref);\n\n if (target === undefined)\n return yield* invalid(\"Target was not observed. Inspect before acting.\");\n if (value.kind === \"select\" && !target.control.options.includes(value.value))\n return yield* invalid(\"Select option was not observed. Inspect with optionFilter first.\");\n yield* charge();\n const command: Command = { kind: \"act\", action: value };\n\n // Preparation has its own budget: 2 s, or 8 s inside a frame, where each frame level adds\n // owner checks and a newly mounted frame first creates its isolated world. It never waits\n // for a missing selector; an actually pending CDP request is terminated by BrowserSession,\n // not abandoned.\n const inFrame = ![...tabs.values()].some(\n (tab) => frameIds.get(tab.mainFrame()) === target.frame,\n );\n\n let dispatch: NonNullable<(typeof ActionResult.Type)[\"dispatch\"]> = \"not-dispatched\";\n let refusal: string | undefined;\n\n const ready = yield* native(\n command,\n async (page, stage) => {\n const frame = resolveFrame(page, target.frame);\n\n if (frame === undefined) return false;\n // Main-frame refs are checked in place, without resolving and releasing a handle.\n if (frame.parentFrame() === null) {\n stage(\"validate-and-scroll\");\n\n const checked = await frame\n .isolatedRealm()\n .evaluate(checkDom, value.ref, target.control, true, value.kind !== \"press\");\n\n return checked !== false;\n }\n stage(\"resolve-reference\");\n\n const handle = await frame\n .isolatedRealm()\n .evaluateHandle(\n (ref) => Reflect.get(globalThis, \"@effect-agent/native-browser\")?.get(ref) ?? null,\n value.ref,\n );\n\n try {\n const element = handle.asElement();\n\n stage(\"validate-and-scroll\");\n\n return (\n element !== null &&\n (await checkedPoint(element, frame, target.control, true, value.kind !== \"press\")) !==\n false\n );\n } finally {\n stage(\"release-reference\");\n await handle.dispose();\n }\n },\n inFrame ? 8_000 : 2_000,\n \"prepare\",\n ).pipe(\n Effect.mapError(\n (error) =>\n new BrowserUseError({\n code: error.code,\n message: error.message,\n dispatch: \"not-dispatched\",\n }),\n ),\n );\n\n if (!ready)\n return yield* invalid(\n \"Observed target is stale, disabled or obstructed. No input dispatched. Inspect for a current target.\",\n );\n\n const input = native(\n command,\n async (page, stage) => {\n inputPage = page;\n const frame = resolveFrame(page, target.frame);\n\n if (frame === undefined) return \"not-dispatched\" as const;\n // Main-frame input works on the ref in place, without resolving and releasing a handle.\n // Focus and its check stay separate reads so focus handlers run before the check.\n if (frame.parentFrame() === null) {\n const realm = frame.isolatedRealm();\n\n const point = await realm.evaluate(\n checkDom,\n value.ref,\n target.control,\n false,\n value.kind !== \"press\",\n );\n\n if (point === false) return \"not-dispatched\" as const;\n stage(\"dispatch-input\");\n if (value.kind === \"click\") {\n dispatch = \"unknown\";\n await page.mouse.click(point.x, point.y);\n } else if (value.kind === \"select\") {\n dispatch = \"unknown\";\n\n // Puppeteer's select: an enabled matching option, then input and change events.\n const selected = await realm.evaluate(\n (ref, value) => {\n const node: unknown = Reflect.get(globalThis, \"@effect-agent/native-browser\")?.get(\n ref,\n );\n\n if (\n !(node instanceof HTMLSelectElement) ||\n !Array.from(node.options).some(\n (option) =>\n !option.disabled &&\n !(\n option.parentElement instanceof HTMLOptGroupElement &&\n option.parentElement.disabled\n ) &&\n option.value === value,\n )\n )\n return false;\n if (node.multiple)\n for (const option of Array.from(node.options))\n option.selected = option.value === value;\n else {\n for (const option of Array.from(node.options)) option.selected = false;\n const match = Array.from(node.options).find((option) => option.value === value);\n\n if (match !== undefined) match.selected = true;\n }\n node.dispatchEvent(new Event(\"input\", { bubbles: true }));\n node.dispatchEvent(new Event(\"change\", { bubbles: true }));\n\n return true;\n },\n value.ref,\n value.value,\n );\n\n if (!selected) {\n dispatch = \"not-dispatched\";\n\n return \"not-dispatched\" as const;\n }\n } else if (value.kind === \"press\") {\n const focused =\n (await realm.evaluate((ref) => {\n const node: unknown = Reflect.get(globalThis, \"@effect-agent/native-browser\")?.get(\n ref,\n );\n\n if (!(node instanceof HTMLElement)) return false;\n node.focus();\n\n return true;\n }, value.ref)) &&\n (await realm.evaluate((ref) => {\n const node: unknown = Reflect.get(globalThis, \"@effect-agent/native-browser\")?.get(\n ref,\n );\n\n return (\n node instanceof Node &&\n node.isConnected &&\n Reflect.get(node.getRootNode(), \"activeElement\") === node\n );\n }, value.ref));\n\n if (!focused) return \"not-dispatched\" as const;\n dispatch = \"unknown\";\n await page.keyboard.press(value.key);\n } else {\n const focused = await realm.evaluate((ref) => {\n const node: unknown = Reflect.get(globalThis, \"@effect-agent/native-browser\")?.get(\n ref,\n );\n\n if (\n !(\n (node instanceof HTMLInputElement &&\n ![\n \"password\",\n \"file\",\n \"checkbox\",\n \"radio\",\n \"hidden\",\n \"submit\",\n \"button\",\n ].includes(node.type) &&\n !node.readOnly) ||\n (node instanceof HTMLTextAreaElement && !node.readOnly) ||\n (node instanceof HTMLElement &&\n node.isContentEditable &&\n node.getAttribute(\"aria-readonly\") !== \"true\")\n )\n )\n return false;\n node.focus();\n\n return true;\n }, value.ref);\n\n if (!focused) return \"not-dispatched\" as const;\n\n // Focus handlers can replace a field. Never transfer input to the new focus.\n const selected = await realm.evaluate((ref) => {\n const node: unknown = Reflect.get(globalThis, \"@effect-agent/native-browser\")?.get(\n ref,\n );\n\n if (\n !(node instanceof HTMLElement) ||\n !node.isConnected ||\n !(\n node.getRootNode() instanceof Document || node.getRootNode() instanceof ShadowRoot\n ) ||\n Reflect.get(node.getRootNode(), \"activeElement\") !== node\n )\n return false;\n let selected = false;\n\n if (node instanceof HTMLInputElement || node instanceof HTMLTextAreaElement) {\n node.select();\n selected =\n node.value.length === 0 ||\n (node.selectionStart === 0 && node.selectionEnd === node.value.length) ||\n globalThis.getSelection()?.toString() === node.value;\n } else {\n const selection = globalThis.getSelection();\n\n if (selection === null) return false;\n const range = document.createRange();\n\n range.selectNodeContents(node);\n selection.removeAllRanges();\n selection.addRange(range);\n selected =\n selection.rangeCount === 1 &&\n selection.getRangeAt(0).compareBoundaryPoints(Range.START_TO_START, range) ===\n 0 &&\n selection.getRangeAt(0).compareBoundaryPoints(Range.END_TO_END, range) === 0;\n }\n\n return (\n selected &&\n node.isConnected &&\n Reflect.get(node.getRootNode(), \"activeElement\") === node\n );\n }, value.ref);\n\n if (!selected) {\n refusal =\n \"Native selection could not prepare this field for replacement. No input dispatched.\";\n\n return \"not-dispatched\" as const;\n }\n dispatch = \"unknown\";\n await page.keyboard.sendCharacter(value.value);\n }\n dispatch = \"acknowledged\";\n\n return \"acknowledged\" as const;\n }\n\n const handle = await frame\n .isolatedRealm()\n .evaluateHandle(\n (ref) => Reflect.get(globalThis, \"@effect-agent/native-browser\")?.get(ref) ?? null,\n value.ref,\n );\n\n try {\n const element = handle.asElement();\n\n if (element === null || !(element instanceof ElementHandle))\n return \"not-dispatched\" as const;\n\n const point = await checkedPoint(\n element,\n frame,\n target.control,\n false,\n value.kind !== \"press\",\n );\n\n if (point === false) return \"not-dispatched\" as const;\n stage(\"dispatch-input\");\n if (value.kind === \"click\") {\n dispatch = \"unknown\";\n await page.mouse.click(point.x, point.y);\n } else if (value.kind === \"select\") {\n const valid = await element.evaluate(\n (node, value) =>\n node instanceof HTMLSelectElement &&\n Array.from(node.options).some(\n (option) =>\n !option.disabled &&\n !(\n option.parentElement instanceof HTMLOptGroupElement &&\n option.parentElement.disabled\n ) &&\n option.value === value,\n ),\n value.value,\n );\n\n if (!valid) return \"not-dispatched\" as const;\n dispatch = \"unknown\";\n await element.select(value.value);\n } else if (value.kind === \"press\") {\n await element.focus();\n\n const focused = await element.evaluate(\n (node) =>\n node.isConnected && Reflect.get(node.getRootNode(), \"activeElement\") === node,\n );\n\n if (!focused) return \"not-dispatched\" as const;\n dispatch = \"unknown\";\n await page.keyboard.press(value.key);\n } else {\n const fillable = await element.evaluate(\n (node) =>\n (node instanceof HTMLInputElement &&\n ![\"password\", \"file\", \"checkbox\", \"radio\", \"hidden\", \"submit\", \"button\"].includes(\n node.type,\n ) &&\n !node.readOnly) ||\n (node instanceof HTMLTextAreaElement && !node.readOnly) ||\n (node instanceof HTMLElement &&\n node.isContentEditable &&\n node.getAttribute(\"aria-readonly\") !== \"true\"),\n );\n\n if (!fillable) return \"not-dispatched\" as const;\n await element.focus();\n // Focus handlers can replace a field. Never transfer input to the new focus.\n if (\n !(await element.evaluate(\n (node) =>\n node.isConnected &&\n (node.getRootNode() instanceof Document ||\n node.getRootNode() instanceof ShadowRoot) &&\n Reflect.get(node.getRootNode(), \"activeElement\") === node,\n ))\n )\n return \"not-dispatched\" as const;\n\n const selected = await element.evaluate((node) => {\n let selected = false;\n\n if (node instanceof HTMLInputElement || node instanceof HTMLTextAreaElement) {\n node.select();\n selected =\n node.value.length === 0 ||\n (node.selectionStart === 0 && node.selectionEnd === node.value.length) ||\n globalThis.getSelection()?.toString() === node.value;\n } else {\n const selection = globalThis.getSelection();\n\n if (selection === null) return false;\n const range = document.createRange();\n\n range.selectNodeContents(node);\n selection.removeAllRanges();\n selection.addRange(range);\n selected =\n selection.rangeCount === 1 &&\n selection.getRangeAt(0).compareBoundaryPoints(Range.START_TO_START, range) ===\n 0 &&\n selection.getRangeAt(0).compareBoundaryPoints(Range.END_TO_END, range) === 0;\n }\n\n return (\n selected &&\n node.isConnected &&\n Reflect.get(node.getRootNode(), \"activeElement\") === node\n );\n });\n\n if (!selected) {\n refusal =\n \"Native selection could not prepare this field for replacement. No input dispatched.\";\n\n return \"not-dispatched\" as const;\n }\n\n dispatch = \"unknown\";\n await page.keyboard.sendCharacter(value.value);\n }\n\n dispatch = \"acknowledged\";\n\n return \"acknowledged\" as const;\n } finally {\n await handle.dispose();\n }\n },\n undefined,\n \"input\",\n ).pipe(\n Effect.mapError(\n (error) => new BrowserUseError({ code: error.code, message: error.message, dispatch }),\n ),\n );\n\n // The session lock and native deadline remain owned by a controller-scoped fiber.\n // A dialog suspends input without abandoning SDK work or acknowledging it early.\n const start = yield* Deferred.make<void>();\n const dialogReady = yield* Deferred.make<void>();\n const ref = `op${scopeId}-${nextInput++}`;\n\n const fiber = yield* Deferred.await(start).pipe(\n Effect.andThen(input),\n Effect.forkIn(ownerScope),\n );\n\n pendingInput = { ref, fiber };\n dialogSignal = dialogReady;\n yield* Deferred.succeed(start, undefined);\n\n const result = yield* Effect.raceFirst(\n Fiber.join(fiber),\n Deferred.await(dialogReady).pipe(Effect.as(\"unknown\" as const)),\n ).pipe(\n Effect.onInterrupt(() => Fiber.interrupt(fiber)),\n Effect.result,\n );\n\n if (result._tag === \"Failure\") {\n clearInput();\n\n return yield* result.failure;\n }\n if (result.success !== \"unknown\") clearInput();\n if (result.success === \"not-dispatched\" && refusal !== undefined)\n return yield* invalid(refusal);\n if (result.success === \"acknowledged\")\n yield* settle(\n value.kind === \"fill\" ? { frame: target.frame, ref: value.ref } : undefined,\n ).pipe(\n Effect.mapError(\n (failure) =>\n new BrowserUseError({\n code: failure.code,\n message: failure.message,\n dispatch: \"acknowledged\",\n }),\n ),\n );\n\n return result.success;\n });\n\n const act = Effect.fnUntraced(function* (\n values: ReadonlyArray<Action>,\n options: ActOptions = {},\n ) {\n yield* Schema.decodeEffect(\n Schema.Array(Action).check(Schema.isMinLength(1), Schema.isMaxLength(8)),\n )(values).pipe(Effect.mapError(() => invalid(\"Expected 1–8 valid actions.\")));\n let completed = 0;\n let error: string | null = null;\n let dispatch: NonNullable<(typeof ActionResult.Type)[\"dispatch\"]> = \"not-dispatched\";\n let frame: string | undefined;\n\n for (const value of values) {\n frame = targets.get(value.ref)?.frame ?? frame;\n const outcome = yield* action(value).pipe(Effect.result);\n\n if (outcome._tag === \"Failure\") {\n error = outcome.failure.message;\n if (outcome.failure.dispatch === \"acknowledged\") completed++;\n if (outcome.failure.dispatch === \"unknown\") dispatch = \"unknown\";\n else if (completed > 0) dispatch = \"acknowledged\";\n break;\n }\n if (outcome.success === \"not-dispatched\") {\n error = \"Observed target changed before input. Inspect before continuing.\";\n break;\n }\n if (outcome.success === \"unknown\") {\n dispatch = \"unknown\";\n error =\n \"Native input is awaiting a JavaScript dialog. Respond to it; do not replay this input.\";\n break;\n }\n dispatch = \"acknowledged\";\n completed++;\n }\n\n yield* Effect.annotateCurrentSpan({\n \"browser.completed\": completed,\n \"browser.dispatch\": dispatch,\n });\n\n return yield* after(completed, error, dispatch, frame, true, options.observe !== false);\n });\n\n const navigate = Effect.fnUntraced(function* (request: typeof NavigateRequest.Type) {\n yield* Schema.decodeEffect(InteractiveBrowserTargetUrl)(request.url).pipe(\n Effect.mapError(() => invalid(\"Navigation requires a credential-free HTTP(S) URL.\")),\n );\n yield* charge();\n targets.clear();\n\n const outcome = yield* native({ kind: \"navigate\", request }, (page) =>\n page.goto(request.url, { waitUntil: \"domcontentloaded\" }),\n ).pipe(Effect.result);\n\n return yield* after(\n outcome._tag === \"Success\" ? 1 : 0,\n outcome._tag === \"Failure\" ? outcome.failure.message : null,\n outcome._tag === \"Success\" ? \"acknowledged\" : (outcome.failure.dispatch ?? \"unknown\"),\n );\n });\n\n const scroll = Effect.fnUntraced(function* (request: typeof ScrollRequest.Type) {\n yield* Schema.decodeEffect(ScrollRequest)(request).pipe(\n Effect.mapError(() => invalid(\"Invalid scroll request.\")),\n );\n yield* charge();\n const target = request.ref === undefined ? undefined : targets.get(request.ref);\n\n if (request.ref !== undefined && target === undefined)\n return yield* invalid(\"Scroll target was not observed.\");\n\n const outcome = yield* native(\n { kind: \"scroll\", request },\n async (page) => {\n if (target === undefined) {\n const viewport = await page.evaluate(() => ({ width: innerWidth, height: innerHeight }));\n\n await page.mouse.move(viewport.width / 2, viewport.height / 2);\n await page.mouse.wheel({ deltaX: request.deltaX, deltaY: request.deltaY });\n\n return true;\n }\n\n const frame = resolveFrame(page, target.frame);\n\n if (frame === undefined) return false;\n\n const handle = await frame\n .isolatedRealm()\n .evaluateHandle(\n (ref) => Reflect.get(globalThis, \"@effect-agent/native-browser\")?.get(ref) ?? null,\n request.ref ?? \"\",\n );\n\n try {\n return await handle.evaluate(\n (node, x, y) => {\n if (!(node instanceof HTMLElement) || !node.isConnected) return false;\n node.scrollBy({ left: x, top: y, behavior: \"instant\" });\n\n return true;\n },\n request.deltaX,\n request.deltaY,\n );\n } finally {\n await handle.dispose();\n }\n },\n 2_000,\n ).pipe(Effect.result);\n\n return yield* after(\n outcome._tag === \"Success\" && outcome.success ? 1 : 0,\n outcome._tag === \"Failure\"\n ? outcome.failure.message\n : outcome.success\n ? null\n : \"Scroll target is stale.\",\n outcome._tag === \"Failure\"\n ? (outcome.failure.dispatch ?? \"unknown\")\n : outcome.success\n ? \"acknowledged\"\n : \"not-dispatched\",\n );\n });\n\n const wait = Effect.fnUntraced(function* (request: typeof WaitRequest.Type) {\n yield* Schema.decodeEffect(WaitRequest)(request).pipe(\n Effect.mapError(() => invalid(\"Invalid condition wait.\")),\n );\n const frameRef = request.frame;\n\n if (request.state === \"text\" && request.text === undefined)\n return yield* invalid(\"A text wait requires expected text.\");\n\n if (frameRef !== undefined && !frames.has(frameRef))\n return yield* invalid(\"Frame was not observed.\");\n yield* native({ kind: \"wait\", request }, async (page) => {\n const frame = frameRef === undefined ? page.mainFrame() : resolveFrame(page, frameRef);\n\n if (frame === undefined) throw new Error(\"Frame detached\");\n await discoverClosedRoots(frame);\n\n try {\n const handle = await frame.isolatedRealm().waitForFunction(\n waitDom,\n {\n timeout: Math.min(request.timeoutMillis, limits.maxWaitMillis ?? request.timeoutMillis),\n polling: \"raf\",\n },\n request.selector,\n request.state,\n request.text,\n );\n\n await handle.dispose();\n } catch (error) {\n if (\n limits.maxWaitMillis === null ||\n !(error instanceof Error) ||\n error.name !== \"TimeoutError\"\n )\n throw error;\n }\n });\n\n return yield* inspect(frameRef === undefined ? {} : { frame: frameRef });\n });\n\n const screenshot = native({ kind: \"screenshot\" }, async (page) => {\n return {\n mediaType: \"image/png\" as const,\n base64: await page.screenshot({ type: \"png\", encoding: \"base64\" }),\n };\n }).pipe(Effect.flatMap(bounded));\n\n const press = Effect.fnUntraced(function* (request: typeof PressRequest.Type) {\n yield* Schema.decodeEffect(PressRequest)(request).pipe(\n Effect.mapError(() => invalid(\"Invalid native key request.\")),\n );\n const frame = targets.get(request.ref)?.frame;\n const result = yield* action({ kind: \"press\", ...request }).pipe(Effect.result);\n\n const dispatch =\n result._tag === \"Success\" ? result.success : (result.failure.dispatch ?? \"not-dispatched\");\n\n return yield* after(\n dispatch === \"acknowledged\" ? 1 : 0,\n result._tag === \"Failure\"\n ? result.failure.message\n : result.success === \"not-dispatched\"\n ? \"Target changed before keyboard input.\"\n : null,\n dispatch,\n frame,\n true,\n );\n });\n\n const selectTab = Effect.fnUntraced(function* (request: typeof TabRequest.Type) {\n yield* Schema.decodeEffect(TabRequest)(request).pipe(\n Effect.mapError(() => invalid(\"Invalid tab request.\")),\n );\n const tab = tabs.get(request.ref);\n\n if (tab === undefined)\n return yield* invalid(\"Tab was not observed. Inspect before selecting it.\");\n yield* native({ kind: \"select-tab\", request }, async (page) => {\n if (tab.isClosed() || tab.browserContext() !== page.browserContext())\n throw new Error(\"Observed tab is unavailable\");\n await tab.bringToFront();\n activePage = tab;\n targets.clear();\n frames.clear();\n });\n\n return yield* inspect({});\n });\n\n const respondDialog = Effect.fnUntraced(function* (request: typeof DialogRequest.Type) {\n yield* Schema.decodeEffect(DialogRequest)(request).pipe(\n Effect.mapError(() => invalid(\"Invalid dialog response.\")),\n );\n yield* charge();\n const outstanding = pendingInput;\n\n if (outstanding !== undefined && inputPage !== undefined) {\n const page = inputPage;\n const pending = pendingDialogs.get(page);\n\n if (\n pending === undefined ||\n pending.ref !== request.ref ||\n (request.text !== undefined && pending.dialog.type() !== \"prompt\")\n )\n return yield* invalid(\"Observed dialog is no longer current.\");\n if (outstanding.fiber.pollUnsafe()?._tag === \"Failure\") {\n clearInput();\n const settled = yield* Fiber.join(outstanding.fiber).pipe(Effect.result);\n\n return {\n ...(yield* after(\n 0,\n \"Pending native input failed. No dialog response dispatched.\",\n \"not-dispatched\",\n )),\n settledInput: {\n ref: outstanding.ref,\n dispatch:\n settled._tag === \"Success\"\n ? settled.success\n : (settled.failure.dispatch ?? \"unknown\"),\n },\n };\n }\n\n const dialogReady = yield* Deferred.make<void>();\n\n // Re-arm before answering: the handler may open another dialog before\n // this response settles. The original input keeps its fiber and deadline.\n dialogSignal = dialogReady;\n\n const response =\n outstanding.fiber.pollUnsafe() === undefined\n ? // Suspended input owns the session lock. This is its only allowed interleaving;\n // host authority is checked immediately before responding on that exact connection.\n authorize({ kind: \"respond-dialog\", request }, { pageUrl: page.url() }).pipe(\n Effect.andThen(\n Effect.tryPromise({\n try: () =>\n request.accept ? pending.dialog.accept(request.text) : pending.dialog.dismiss(),\n catch: () =>\n new BrowserUseError({\n code: \"browser\",\n message: \"Native dialog response failed. Do not replay it.\",\n dispatch: \"unknown\",\n }),\n }),\n ),\n )\n : native({ kind: \"respond-dialog\", request }, async () => {\n if (request.accept) await pending.dialog.accept(request.text);\n else await pending.dialog.dismiss();\n });\n\n const result = yield* response.pipe(\n Effect.withSpan(\"BrowserUse.respond-dialog.input\"),\n Effect.result,\n );\n\n if (result._tag === \"Failure\")\n return yield* after(0, result.failure.message, result.failure.dispatch ?? \"not-dispatched\");\n if (pendingDialogs.get(page) === pending) pendingDialogs.delete(page);\n\n const settled = yield* Effect.raceFirst(\n Fiber.join(outstanding.fiber),\n Deferred.await(dialogReady).pipe(Effect.as(\"unknown\" as const)),\n ).pipe(\n Effect.onInterrupt(() => Fiber.interrupt(outstanding.fiber)),\n Effect.result,\n );\n\n if (settled._tag === \"Success\" && settled.success === \"unknown\")\n return yield* after(1, null, \"acknowledged\", undefined, true);\n\n clearInput();\n\n return {\n ...(yield* after(\n 1,\n settled._tag === \"Failure\" ? settled.failure.message : null,\n \"acknowledged\",\n )),\n settledInput: {\n ref: outstanding.ref,\n dispatch:\n settled._tag === \"Success\" ? settled.success : (settled.failure.dispatch ?? \"unknown\"),\n },\n };\n }\n\n const receipt: { dispatch: NonNullable<(typeof ActionResult.Type)[\"dispatch\"]> } = {\n dispatch: \"not-dispatched\",\n };\n\n const result = yield* native({ kind: \"respond-dialog\", request }, async (page) => {\n const pending = pendingDialogs.get(page);\n\n if (\n pending === undefined ||\n pending.ref !== request.ref ||\n (request.text !== undefined && pending.dialog.type() !== \"prompt\")\n )\n return false;\n receipt.dispatch = \"unknown\";\n if (request.accept) await pending.dialog.accept(request.text);\n else await pending.dialog.dismiss();\n receipt.dispatch = \"acknowledged\";\n if (pendingDialogs.get(page) === pending) pendingDialogs.delete(page);\n\n return true;\n }).pipe(Effect.result);\n\n return yield* after(\n receipt.dispatch === \"acknowledged\" ? 1 : 0,\n result._tag === \"Failure\"\n ? result.failure.message\n : result.success\n ? null\n : \"Observed dialog is no longer current.\",\n receipt.dispatch,\n );\n });\n\n const actions = BrowserActions.of({\n observe: lock.withPermit(inspect({}, { kind: \"observe\" })),\n act: (values, options) =>\n lock.withPermit(act(values, options)).pipe(Effect.withSpan(\"BrowserUse.act\")),\n });\n\n const control = BrowserControl.of({\n inspect: (request) => lock.withPermit(inspect(request)),\n navigate: (request) => lock.withPermit(navigate(request)),\n scroll: (request) => lock.withPermit(scroll(request)),\n wait: (request) => lock.withPermit(wait(request)),\n screenshot: lock.withPermit(screenshot),\n press: (request) => lock.withPermit(press(request)),\n selectTab: (request) => lock.withPermit(selectTab(request)),\n respondDialog: (request) =>\n lock.withPermit(respondDialog(request)).pipe(Effect.withSpan(\"BrowserUse.respond-dialog\")),\n });\n\n return {\n actions,\n control,\n layer: Layer.merge(\n Layer.succeed(BrowserActions, actions),\n Layer.succeed(BrowserControl, control),\n ),\n };\n});\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"CloudflareThreadClient-DgZVrZzF.mjs","names":["LiveTextFrame","WatchTextRequest"],"sources":["../src/internal/crypto.ts","../src/internal/live-text-protocol.ts","../src/CloudflareThreadClient.ts"],"sourcesContent":["// Implement the Effect Crypto service with the Workers native hashing primitive.\n// @effect-diagnostics-next-line nodeBuiltinImport:off\nimport { createHash } from \"node:crypto\";\n\nimport { BrowserCrypto } from \"@effect/platform-browser\";\nimport { Crypto, Effect, Layer, PlatformError } from \"effect\";\n\n/** Workers use native SHA-256 while retaining BrowserCrypto's services and overrides. */\nexport const cloudflareCryptoLayer: Layer.Layer<Crypto.Crypto> = Layer.effect(\n Crypto.Crypto,\n Effect.gen(function* () {\n const base = yield* Crypto.Crypto;\n const webCrypto = yield* BrowserCrypto.WebCrypto;\n const hostGlobals: object = globalThis;\n\n return Crypto.Crypto.of({\n ...base,\n digest: (algorithm, data) => {\n if (\n algorithm !== \"SHA-256\" ||\n !(\"crypto\" in hostGlobals) ||\n webCrypto !== hostGlobals.crypto ||\n typeof webCrypto.subtle?.digest !== \"function\"\n )\n return base.digest(algorithm, data);\n\n return Effect.try({\n try: () => Uint8Array.from(createHash(\"sha256\").update(data).digest()),\n catch: (cause) =>\n PlatformError.systemError({\n module: \"Crypto\",\n method: \"digest\",\n _tag: \"Unknown\",\n description: \"Could not compute digest\",\n cause,\n }),\n });\n },\n });\n }),\n).pipe(Layer.provide(BrowserCrypto.layer));\n","import { ThreadId } from \"@yielded/agent/identifiers\";\nimport { Event } from \"@yielded/agent/provisional-text\";\nimport { Schema } from \"effect\";\n\nexport const MAX_FRAME_BYTES = 32 * 1_024;\nexport const MAX_ID_LENGTH = 256;\nexport const MAX_DELTA_LENGTH = 4_096;\nexport const BUFFER_SIZE = 32;\nexport const MAX_OBSERVERS = 8;\nexport const MAX_DRAFT_PARTS = 32;\nexport const MAX_DRAFT_LENGTH = 2 * 1_024 * 1_024;\n\nconst streamId = Schema.NonEmptyString.check(Schema.isMaxLength(MAX_ID_LENGTH));\n\nexport const Request = Schema.Struct({ schemaVersion: Schema.Literal(1) });\n\n/**\n * Reset replaces all drafts with a snapshot, streamed as native Text parts before live deltas.\n * Each snapshot starts a fresh streamId. Its sequences are unrelated to canonical sequences.\n */\nexport const Frame = Schema.Union([\n Schema.TaggedStruct(\"Reset\", {\n schemaVersion: Schema.Literal(1),\n streamId,\n threadId: ThreadId,\n sequence: Schema.Literal(0),\n }),\n Schema.TaggedStruct(\"Event\", {\n schemaVersion: Schema.Literal(1),\n streamId,\n sequence: Schema.Int.check(Schema.isGreaterThan(0)),\n event: Event,\n }),\n]);\n\nexport type Frame = typeof Frame.Type;\n\n/** Bounds are checked before queueing; provider metadata is deliberately absent. */\nexport const isBoundedEvent = (event: Event): boolean => {\n const ids: string[] = [event.threadId, event.submissionId, event.attemptId];\n\n if (event._tag !== \"AttemptEnded\") ids.push(event.runId, event.turnId);\n if (ids.some((id) => id.length > MAX_ID_LENGTH)) return false;\n\n return (\n event._tag !== \"Text\" ||\n (event.part.id.length <= MAX_ID_LENGTH &&\n Object.keys(event.part.metadata).length === 0 &&\n (event.part.type !== \"text-delta\" || event.part.delta.length <= MAX_DELTA_LENGTH))\n );\n};\n","import { AgentInputError } from \"@yielded/agent/agent-error\";\nimport { DigestError } from \"@yielded/agent/digest\";\nimport {\n Receipt,\n type DurableSubmitAgent,\n type DurableSubmitOptions,\n} from \"@yielded/agent/durable-agent-runtime\";\nimport { DurableRuntimeFailpointError } from \"@yielded/agent/durable-failpoint\";\nimport { AgentId, type ThreadId } from \"@yielded/agent/identifiers\";\nimport { InputMessage } from \"@yielded/agent/messaging\";\nimport { OperationDenied } from \"@yielded/agent/operation-authorizer\";\nimport {\n CanonicalRecordEnvelope,\n CanonicalSequence,\n DefinitionDigests,\n PersistedJson,\n SubmissionSettledRecord,\n WorkerAdmission,\n} from \"@yielded/agent/records\";\nimport {\n AdmissionFence,\n AdmissionGroup,\n AbortCommand,\n AbortIntent,\n AdmissionConflict,\n AdmissionPolicyError,\n ApprovalConflict,\n ApprovalDecisionCommand,\n ApprovalDecisionIntent,\n IdempotencyKey,\n JoinedToHost,\n LedgerError,\n OwnershipLost,\n Principal,\n Settlement,\n SettlementConflict,\n UnknownResolutionCommand,\n UnknownResolutionConflict,\n UnknownResolutionIntent,\n} from \"@yielded/agent/submission-ledger\";\nimport { SubmissionStatus } from \"@yielded/agent/submission-status\";\nimport {\n AppendConflict,\n ThreadNotMaterialized,\n ThreadStoreError,\n} from \"@yielded/agent/thread-store\";\nimport { Context, Crypto, Duration, Effect, Layer, Predicate, Schema, Stream } from \"effect\";\nimport { RpcTargets, RpcTracing } from \"effect-cf\";\n\nimport { DurableAlarmError } from \"./Alarm.ts\";\nimport {\n callThreadObject,\n ThreadObjectNamespace,\n type ThreadObjectRpc,\n} from \"./CloudflareBindings.ts\";\nimport { AdmissionLimitExceeded } from \"./CloudflareConfig.ts\";\nimport { cloudflareFailureSignals, safeCauseMessage } from \"./internal/boundary.ts\";\nimport { cloudflareCryptoLayer } from \"./internal/crypto.ts\";\nimport {\n Frame as LiveTextFrame,\n isBoundedEvent,\n MAX_DRAFT_PARTS,\n MAX_FRAME_BYTES,\n Request as WatchTextRequest,\n} from \"./internal/live-text-protocol.ts\";\n\nexport { Frame as LiveTextFrame } from \"./internal/live-text-protocol.ts\";\n\n/**\n * The Worker↔Thread-Object host protocol (plan §1.4): Schema envelopes for the host\n * entry points (`submitEncoded`, `awaitSettlementEncoded`, `observePage`, `abortEncoded`,\n * `resolveApprovalEncoded`, `resolveUnknownEncoded`) plus the Worker-side client that speaks\n * it. Mirrors the WP2 port protocol: requests and responses are closed Schema unions, typed\n * failures travel as their own tagged classes and RE-DECODE to identical tags on the caller\n * (error-tag fidelity), and protocol anomalies are answered typed instead of thrown.\n */\n\n/** Ceiling for host protocol diagnostic strings. */\nconst MAX_HOST_DIAGNOSTIC_LENGTH = 4_096;\nconst PROGRESS_CANCELLATION_TIMEOUT = \"1 second\";\n\nconst BoundedDiagnostic = Schema.String.check(Schema.isMaxLength(MAX_HOST_DIAGNOSTIC_LENGTH));\n\n/** Truncate a diagnostic string to the host protocol's bounded length. */\nexport const boundHostDiagnostic = (value: string): string =>\n value.length > MAX_HOST_DIAGNOSTIC_LENGTH\n ? `${value.slice(0, MAX_HOST_DIAGNOSTIC_LENGTH - 3)}...`\n : value;\n\n/**\n * The envelope itself could not be honored: the Object could not decode the request, or a\n * response could not be encoded/decoded. Never carries operation semantics.\n */\nexport class HostProtocolError extends Schema.TaggedError<HostProtocolError>()(\n \"HostProtocolError\",\n {\n message: BoundedDiagnostic,\n },\n) {}\n\n/** The Worker-side stub call itself failed (RPC rejection, overload, eviction mid-call). */\nexport class ThreadClientError extends Schema.TaggedError<ThreadClientError>()(\n \"ThreadClientError\",\n {\n threadId: Schema.String,\n message: Schema.String,\n cause: Schema.optionalKey(Schema.Defect()),\n /** Cloudflare's own classification for a failure safe to retry with a fresh stub. */\n retryable: Schema.optionalKey(Schema.Boolean),\n /** Cloudflare overloads are surfaced immediately instead of adding retry pressure. */\n overloaded: Schema.optionalKey(Schema.Boolean),\n },\n) {}\n\n// ---------------------------------------------------------------------------\n// Requests\n// ---------------------------------------------------------------------------\n\n/**\n * One durable submission, input ALREADY encoded by the caller through the Agent Binding's\n * input schema (the Worker bundles the same Agent definitions as the Object, so schema\n * validation happens client-side; the resolved Binding re-validates at claim time). The\n * Thread identity is deliberately absent — the addressed Object IS the lane.\n */\nexport class SubmitRequest extends Schema.Class<SubmitRequest>(\n \"@effect-agent/platform-cloudflare/SubmitRequest\",\n)({\n agentId: AgentId,\n principal: Principal,\n idempotencyKey: IdempotencyKey,\n admissionGroup: Schema.optionalKey(AdmissionGroup),\n admissionFence: Schema.optionalKey(AdmissionFence),\n workerAdmission: Schema.optionalKey(WorkerAdmission),\n messageAdmission: Schema.optionalKey(InputMessage),\n definitions: DefinitionDigests,\n inputPayload: PersistedJson,\n}) {}\n\n/** One bounded page of canonical records after an optional sequence. */\nexport class ObservePageRequest extends Schema.Class<ObservePageRequest>(\n \"@effect-agent/platform-cloudflare/ObservePageRequest\",\n)({\n afterSequence: Schema.optionalKey(CanonicalSequence),\n limit: Schema.Int.check(Schema.isGreaterThan(0), Schema.isLessThanOrEqualTo(1_024)),\n}) {}\n\n/** Receipt-shaped observation request; the optional identity owns only the remote wait. */\nexport class AwaitSettlementRequest extends Receipt.extend<AwaitSettlementRequest>(\n \"@effect-agent/platform-cloudflare/AwaitSettlementRequest\",\n)({\n waiterId: Schema.optionalKey(Schema.String.check(Schema.isMinLength(1), Schema.isMaxLength(256))),\n}) {}\n\n/** One event-driven wait for canonical progress strictly after this sequence. */\nexport class AwaitProgressRequest extends Schema.Class<AwaitProgressRequest>(\n \"@effect-agent/platform-cloudflare/AwaitProgressRequest\",\n)({\n afterSequence: CanonicalSequence,\n waiterId: Schema.String.check(Schema.isMinLength(1), Schema.isMaxLength(256)),\n}) {}\n\n/** Best-effort cancellation of one in-flight progress or settlement observation. */\nexport class CancelProgressRequest extends Schema.Class<CancelProgressRequest>(\n \"@effect-agent/platform-cloudflare/CancelProgressRequest\",\n)({\n waiterId: Schema.String.check(Schema.isMinLength(1), Schema.isMaxLength(256)),\n}) {}\n\n// ---------------------------------------------------------------------------\n// Responses\n// ---------------------------------------------------------------------------\n\n/**\n * Every typed failure a host entry point can produce, plus the protocol's own errors. Same\n * closed-union discipline as the WP2 `PortFailure`: members re-decode to the SAME tagged\n * classes on the Worker side; `cause` chains travel as Schema defects without instance\n * fidelity (plan §2.8).\n */\nexport const HostFailure = Schema.Union([\n AgentInputError,\n DigestError,\n AdmissionConflict,\n AdmissionPolicyError,\n SettlementConflict,\n ApprovalConflict,\n UnknownResolutionConflict,\n JoinedToHost,\n LedgerError,\n OwnershipLost,\n ThreadStoreError,\n ThreadNotMaterialized,\n AppendConflict,\n DurableRuntimeFailpointError,\n AdmissionLimitExceeded,\n DurableAlarmError,\n OperationDenied,\n HostProtocolError,\n]);\n\nexport type HostFailure = typeof HostFailure.Type;\n\nexport class SubmitSucceeded extends Schema.TaggedClass<SubmitSucceeded>(\n \"@effect-agent/platform-cloudflare/SubmitSucceeded\",\n)(\"SubmitSucceeded\", {\n receipt: Receipt,\n}) {}\n\nexport class SubmissionStatusResponse extends Schema.TaggedClass<SubmissionStatusResponse>(\n \"@effect-agent/platform-cloudflare/SubmissionStatusResponse\",\n)(\"SubmissionStatusResponse\", { status: SubmissionStatus }) {}\n\nexport class SettlementReached extends Schema.TaggedClass<SettlementReached>(\n \"@effect-agent/platform-cloudflare/SettlementReached\",\n)(\"SettlementReached\", {\n settlement: Settlement,\n}) {}\n\n/** The exact canonical record of an operationally finalized Submission. */\nexport class SettlementRecordReached extends Schema.TaggedClass<SettlementRecordReached>(\n \"@effect-agent/platform-cloudflare/SettlementRecordReached\",\n)(\"SettlementRecordReached\", {\n record: SubmissionSettledRecord,\n}) {}\n\nexport class ObservedPage extends Schema.TaggedClass<ObservedPage>(\n \"@effect-agent/platform-cloudflare/ObservedPage\",\n)(\"ObservedPage\", {\n records: Schema.Array(CanonicalRecordEnvelope).check(Schema.isMaxLength(1_024)),\n}) {}\n\n/** A record was already committed or an incarnation-local hint says the caller should re-read. */\nexport class ProgressObserved extends Schema.TaggedClass<ProgressObserved>(\n \"@effect-agent/platform-cloudflare/ProgressObserved\",\n)(\"ProgressObserved\", {}) {}\n\nexport class ProgressCancelled extends Schema.TaggedClass<ProgressCancelled>(\n \"@effect-agent/platform-cloudflare/ProgressCancelled\",\n)(\"ProgressCancelled\", {}) {}\n\nexport class AbortRecorded extends Schema.TaggedClass<AbortRecorded>(\n \"@effect-agent/platform-cloudflare/AbortRecorded\",\n)(\"AbortRecorded\", {\n intent: AbortIntent,\n}) {}\n\nexport class ApprovalRecorded extends Schema.TaggedClass<ApprovalRecorded>(\n \"@effect-agent/platform-cloudflare/ApprovalRecorded\",\n)(\"ApprovalRecorded\", {\n intent: ApprovalDecisionIntent,\n}) {}\n\nexport class UnknownResolutionRecorded extends Schema.TaggedClass<UnknownResolutionRecorded>(\n \"@effect-agent/platform-cloudflare/UnknownResolutionRecorded\",\n)(\"UnknownResolutionRecorded\", {\n intent: UnknownResolutionIntent,\n}) {}\n\n/** The entry point failed TYPED on the Object; the failure re-decodes verbatim. */\nexport class HostFailed extends Schema.TaggedClass<HostFailed>(\n \"@effect-agent/platform-cloudflare/HostFailed\",\n)(\"HostFailed\", {\n failure: HostFailure,\n}) {}\n\n/** The uniform answer of one host entry point. Callers narrow by the tag their call implies. */\nexport const HostResponse = Schema.Union([\n SubmitSucceeded,\n SettlementReached,\n SettlementRecordReached,\n SubmissionStatusResponse,\n ObservedPage,\n ProgressObserved,\n ProgressCancelled,\n AbortRecorded,\n ApprovalRecorded,\n UnknownResolutionRecorded,\n HostFailed,\n]);\n\nexport type HostResponse = typeof HostResponse.Type;\n\n// ---------------------------------------------------------------------------\n// Codecs (shared by the Object endpoints and the Worker client)\n// ---------------------------------------------------------------------------\n\nexport const decodeSubmitRequest = Schema.decodeUnknownEffect(SubmitRequest);\nexport const encodeSubmitRequest = Schema.encodeEffect(SubmitRequest);\nexport const decodeReceipt = Schema.decodeUnknownEffect(Receipt);\nexport const encodeReceipt = Schema.encodeEffect(Receipt);\nexport const decodeAwaitSettlementRequest = Schema.decodeUnknownEffect(AwaitSettlementRequest);\nexport const encodeAwaitSettlementRequest = Schema.encodeEffect(AwaitSettlementRequest);\nexport const decodeObservePageRequest = Schema.decodeUnknownEffect(ObservePageRequest);\nexport const encodeObservePageRequest = Schema.encodeEffect(ObservePageRequest);\nexport const decodeAwaitProgressRequest = Schema.decodeUnknownEffect(AwaitProgressRequest);\nexport const encodeAwaitProgressRequest = Schema.encodeEffect(AwaitProgressRequest);\nexport const decodeCancelProgressRequest = Schema.decodeUnknownEffect(CancelProgressRequest);\nexport const encodeCancelProgressRequest = Schema.encodeEffect(CancelProgressRequest);\nexport const decodeAbortCommand = Schema.decodeUnknownEffect(AbortCommand);\nexport const encodeAbortCommand = Schema.encodeEffect(AbortCommand);\nexport const decodeApprovalDecisionCommand = Schema.decodeUnknownEffect(ApprovalDecisionCommand);\nexport const encodeApprovalDecisionCommand = Schema.encodeEffect(ApprovalDecisionCommand);\nexport const decodeUnknownResolutionCommand = Schema.decodeUnknownEffect(UnknownResolutionCommand);\nexport const encodeUnknownResolutionCommand = Schema.encodeEffect(UnknownResolutionCommand);\nexport const encodeHostResponse = Schema.encodeEffect(HostResponse);\nexport const decodeHostResponse = Schema.decodeUnknownEffect(HostResponse);\n\n// ---------------------------------------------------------------------------\n// Worker-side client\n// ---------------------------------------------------------------------------\n\n/** Failure surface of `CloudflareThreadClient.submit`. */\nconst ClientSubmitHostFailure = Schema.Union([\n AgentInputError,\n DigestError,\n AdmissionConflict,\n AdmissionPolicyError,\n LedgerError,\n OwnershipLost,\n ThreadStoreError,\n ThreadNotMaterialized,\n AppendConflict,\n DurableRuntimeFailpointError,\n AdmissionLimitExceeded,\n DurableAlarmError,\n HostProtocolError,\n]);\n\nconst ClientAwaitHostFailure = Schema.Union([\n LedgerError,\n OwnershipLost,\n SettlementConflict,\n OperationDenied,\n HostProtocolError,\n]);\n\nconst ClientObserveHostFailure = Schema.Union([\n ThreadStoreError,\n ThreadNotMaterialized,\n OperationDenied,\n HostProtocolError,\n]);\n\nconst ClientAbortHostFailure = Schema.Union([\n OperationDenied,\n LedgerError,\n OwnershipLost,\n SettlementConflict,\n JoinedToHost,\n DurableRuntimeFailpointError,\n DurableAlarmError,\n HostProtocolError,\n]);\n\nconst ClientApprovalHostFailure = Schema.Union([\n LedgerError,\n OwnershipLost,\n SettlementConflict,\n ApprovalConflict,\n OperationDenied,\n DurableAlarmError,\n HostProtocolError,\n]);\n\nconst ClientUnknownHostFailure = Schema.Union([\n LedgerError,\n OwnershipLost,\n SettlementConflict,\n UnknownResolutionConflict,\n JoinedToHost,\n DurableRuntimeFailpointError,\n OperationDenied,\n DurableAlarmError,\n HostProtocolError,\n]);\n\nexport type ClientSubmitFailure = typeof ClientSubmitHostFailure.Type | ThreadClientError;\nexport type ClientAwaitFailure = typeof ClientAwaitHostFailure.Type | ThreadClientError;\nexport type ClientObserveFailure = typeof ClientObserveHostFailure.Type | ThreadClientError;\nexport type ClientProgressFailure = ClientObserveFailure;\nexport type ClientAbortFailure = typeof ClientAbortHostFailure.Type | ThreadClientError;\nexport type ClientApprovalFailure = typeof ClientApprovalHostFailure.Type | ThreadClientError;\nexport type ClientUnknownFailure = typeof ClientUnknownHostFailure.Type | ThreadClientError;\n\nconst liveTextProtocolFailure = () =>\n HostProtocolError.make({\n message: \"Provisional text is incomplete or invalid; discard drafts and read canonical records\",\n });\n\nconst decodeLiveText = (\n threadId: ThreadId,\n source: ReadableStream<unknown>,\n): Stream.Stream<LiveTextFrame, HostProtocolError | ThreadClientError> =>\n Stream.suspend(() => {\n const decoder = new TextDecoder(\"utf-8\", { fatal: true, ignoreBOM: false });\n const decode = Schema.decodeUnknownSync(Schema.fromJsonString(LiveTextFrame));\n let pending = \"\";\n let pendingBytes = 0;\n let expected = 0;\n let streamId: string | undefined;\n const models = new Map<string, { attemptId: string; parts: Set<string> }>();\n\n const accept = (frame: LiveTextFrame): boolean => {\n if (frame._tag === \"Reset\") {\n if (frame.streamId === streamId || frame.threadId !== threadId)\n throw liveTextProtocolFailure();\n streamId = frame.streamId;\n expected = 1;\n models.clear();\n\n return true;\n }\n if (\n streamId === undefined ||\n frame.streamId !== streamId ||\n frame.sequence !== expected++ ||\n frame.event.threadId !== threadId ||\n !isBoundedEvent(frame.event)\n )\n throw liveTextProtocolFailure();\n const event = frame.event;\n\n if (event._tag === \"AttemptEnded\") {\n for (const [key, model] of models)\n if (model.attemptId === event.attemptId) models.delete(key);\n\n return true;\n }\n const key = JSON.stringify([event.attemptId, event.runId, event.turnId, event.generation]);\n\n if (event._tag === \"Discard\") {\n models.delete(key);\n\n return true;\n }\n let model = models.get(key);\n\n if (event.part.type === \"text-start\") {\n if (model?.parts.has(event.part.id)) throw liveTextProtocolFailure();\n if (\n [...models.values()].reduce((size, value) => size + value.parts.size, 0) >=\n MAX_DRAFT_PARTS\n )\n throw liveTextProtocolFailure();\n if (model === undefined) {\n model = { attemptId: event.attemptId, parts: new Set() };\n models.set(key, model);\n }\n model.parts.add(event.part.id);\n\n return true;\n }\n if (!model?.parts.has(event.part.id)) throw liveTextProtocolFailure();\n if (event.part.type === \"text-end\") {\n model.parts.delete(event.part.id);\n if (model.parts.size === 0) models.delete(key);\n }\n\n return true;\n };\n\n return Stream.fromReadableStream({\n evaluate: () => source,\n // The subscription Scope owns the single bounded cancellation after this reader unlocks.\n releaseLockOnEnd: true,\n onError: (cause) =>\n ThreadClientError.make({\n threadId,\n message: \"Provisional text disconnected; discard drafts and read canonical records\",\n cause,\n }),\n }).pipe(\n Stream.mapEffect((chunk) =>\n Effect.try({\n try: () => {\n if (!(chunk instanceof Uint8Array)) throw liveTextProtocolFailure();\n const frames: LiveTextFrame[] = [];\n\n for (let offset = 0; offset < chunk.byteLength;) {\n const newline = chunk.indexOf(10, offset);\n const end = newline < 0 ? chunk.byteLength : newline;\n\n pendingBytes += end - offset;\n if (pendingBytes > MAX_FRAME_BYTES) throw liveTextProtocolFailure();\n pending += decoder.decode(chunk.subarray(offset, end), { stream: newline < 0 });\n offset = end + 1;\n if (newline < 0) break;\n const frame = decode(pending);\n\n pending = \"\";\n pendingBytes = 0;\n if (accept(frame)) frames.push(frame);\n }\n\n return frames;\n },\n catch: liveTextProtocolFailure,\n }),\n ),\n Stream.flatMap(Stream.fromArray),\n // This connection is open-ended. Clean EOF is also loss of provisional state.\n Stream.concat(Stream.fail(liveTextProtocolFailure())),\n );\n });\n\nconst outOfContract = (threadId: string, operation: string, observed: string): ThreadClientError =>\n ThreadClientError.make({\n threadId,\n message: boundHostDiagnostic(\n `The Thread Object answered ${operation} with the out-of-contract ${observed}.`,\n ),\n });\n\nconst hostRpcMethods = {\n submit: \"submitEncoded\",\n awaitSettlement: \"awaitSettlementEncoded\",\n awaitSettlementRecord: \"awaitSettlementRecordEncoded\",\n submissionStatus: \"submissionStatusEncoded\",\n awaitProgress: \"awaitProgressEncoded\",\n cancelProgress: \"cancelProgressEncoded\",\n observePage: \"observePage\",\n abort: \"abortEncoded\",\n resolveApproval: \"resolveApprovalEncoded\",\n resolveUnknown: \"resolveUnknownEncoded\",\n} as const satisfies Record<string, keyof ThreadObjectRpc>;\n\n/** Worker-side client over the Thread Object namespace (DEPLOY-010). */\nexport class CloudflareThreadClient extends Context.Service<\n CloudflareThreadClient,\n {\n /** Encode the input client-side, then durably submit to the owning Object. */\n readonly submit: <InputSchema extends Schema.Top>(\n agent: DurableSubmitAgent<InputSchema>,\n input: InputSchema[\"Type\"],\n options: DurableSubmitOptions,\n ) => Effect.Effect<Receipt, ClientSubmitFailure, InputSchema[\"EncodingServices\"]>;\n /** Wake-hinted, poll-guaranteed settlement wait executed inside the owning Object. */\n readonly submissionStatus: (\n receipt: Receipt,\n ) => Effect.Effect<SubmissionStatus, ClientAwaitFailure>;\n /**\n * Wait for settlement; interruption spends at most one second cancelling the remote\n * observation best effort. Cancellation never aborts the admitted Run.\n */\n readonly awaitSettlement: (receipt: Receipt) => Effect.Effect<Settlement, ClientAwaitFailure>;\n /**\n * Wait for finalization and return this Receipt's canonical terminal record in one RPC.\n * Requires both settlement and observation authority. Decode an ordinary completed\n * record's result through the Agent output Schema; joined completion may have no result.\n * Interruption uses the same bounded observation cancellation as `awaitSettlement`.\n */\n readonly awaitSettlementRecord: (\n receipt: Receipt,\n ) => Effect.Effect<SubmissionSettledRecord, ClientAwaitFailure>;\n /**\n * Wait without polling until progress after `afterSequence` is already durable or hinted.\n * The result is deliberately void: canonical records remain authoritative and must be read.\n * Interruption waits at most one second for best-effort remote cancellation.\n */\n readonly awaitProgress: (\n threadId: ThreadId,\n afterSequence: CanonicalSequence,\n ) => Effect.Effect<void, ClientProgressFailure>;\n /**\n * Current provisional text followed by native deltas. Reset starts a replacement snapshot,\n * including when a slow consumer exceeds the fixed backlog. Reconcile by\n * Run/Turn identity to canonical records; discard drafts on Discard, AttemptEnded,\n * Reset or stream failure. Snapshots exist only in the Object incarnation's memory.\n * Scope the stream: interruption cancels its remote subscription.\n */\n readonly watchText: (threadId: ThreadId) => Stream.Stream<LiveTextFrame, ClientObserveFailure>;\n /** One bounded page of canonical records. */\n readonly readPage: (\n threadId: ThreadId,\n options?: {\n readonly afterSequence?: CanonicalSequence | undefined;\n readonly limit?: number | undefined;\n },\n ) => Effect.Effect<ReadonlyArray<CanonicalRecordEnvelope>, ClientObserveFailure>;\n /**\n * Every canonical record up to the CURRENT committed tail, via repeated pages. A\n * snapshot read, not a live observation — callers wanting liveness re-read after\n * `awaitSettlement`.\n */\n readonly readAll: (\n threadId: ThreadId,\n ) => Effect.Effect<ReadonlyArray<CanonicalRecordEnvelope>, ClientObserveFailure>;\n /**\n * Submission-addressed operations take the owning Thread explicitly (from the\n * Receipt): minted Submission identities stay OPAQUE outside the storage adapter that\n * minted them (D-P6-5), so the client never parses one to find the lane.\n */\n readonly abort: (\n threadId: ThreadId,\n command: AbortCommand,\n ) => Effect.Effect<AbortIntent, ClientAbortFailure>;\n readonly resolveApproval: (\n threadId: ThreadId,\n command: ApprovalDecisionCommand,\n ) => Effect.Effect<ApprovalDecisionIntent, ClientApprovalFailure>;\n readonly resolveUnknown: (\n threadId: ThreadId,\n command: UnknownResolutionCommand,\n ) => Effect.Effect<UnknownResolutionIntent, ClientUnknownFailure>;\n }\n>()(\"@effect-agent/platform-cloudflare/CloudflareThreadClient\") {\n /**\n * Assemble the client from a resolved namespace and the platform Crypto implementation.\n * rpcTracing is the binding name and remains opt-in. Caller authentication, principals,\n * idempotency keys, and definition digests are still explicit submission inputs.\n */\n static layerFromBinding(options: {\n readonly namespace: DurableObjectNamespace<ThreadObjectRpc>;\n readonly rpcTracing?: string;\n }): Layer.Layer<CloudflareThreadClient> {\n return CloudflareThreadClient.layer.pipe(\n Layer.provide([\n ThreadObjectNamespace.layer(options.namespace, options),\n cloudflareCryptoLayer,\n ]),\n );\n }\n\n static readonly layer: Layer.Layer<\n CloudflareThreadClient,\n never,\n ThreadObjectNamespace | Crypto.Crypto\n > = Layer.effect(CloudflareThreadClient)(\n Effect.gen(function* () {\n const namespace = yield* ThreadObjectNamespace;\n const { rpcTracing } = namespace;\n const crypto = yield* Crypto.Crypto;\n\n const call = Effect.fnUntraced(\n function* (\n threadId: ThreadId,\n operation: keyof typeof hostRpcMethods,\n encoded: unknown,\n ): Effect.fn.Return<HostResponse, ThreadClientError | HostProtocolError> {\n // Empty arguments preserve native arity. Passing `undefined` still adds an argument.\n const traceArgs =\n rpcTracing === undefined ? [] : yield* RpcTracing.withRpcTraceContext([]);\n\n const raw = yield* callThreadObject(\n threadId,\n (stub) => stub[hostRpcMethods[operation]](encoded, ...traceArgs),\n (cause) =>\n ThreadClientError.make({\n threadId,\n message: boundHostDiagnostic(\n `${operation} did not reach the Thread Object: ${safeCauseMessage(\n cause,\n \"the RPC failed without a diagnostic\",\n )}`,\n ),\n cause,\n ...cloudflareFailureSignals(cause),\n }),\n ).pipe(Effect.provideService(ThreadObjectNamespace, namespace));\n\n return yield* decodeHostResponse(raw).pipe(\n Effect.mapError((error): HostProtocolError =>\n HostProtocolError.make({\n message: boundHostDiagnostic(\n `The ${operation} answer could not be decoded: ${error.message}`,\n ),\n }),\n ),\n );\n },\n (effect, threadId, operation) =>\n rpcTracing === undefined\n ? Effect.withSpan(effect, \"CloudflareThreadClient.call\", {\n attributes: { threadId, operation },\n })\n : RpcTracing.withRpcClientSpan(effect, rpcTracing, hostRpcMethods[operation]),\n );\n\n const expect = <ResultSchema extends Schema.Top, FailureSchema extends Schema.Top>(\n threadId: string,\n operation: string,\n resultSchema: ResultSchema,\n failureSchema: FailureSchema,\n ) => {\n const isExpectedResult = Schema.is(resultSchema);\n const isExpectedFailure = Schema.is(failureSchema);\n\n return (\n response: HostResponse,\n ): Effect.Effect<ResultSchema[\"Type\"], FailureSchema[\"Type\"] | ThreadClientError> => {\n if (response._tag === \"HostFailed\") {\n const failure = response.failure;\n\n return isExpectedFailure(failure)\n ? Effect.fail(failure)\n : Effect.fail(outOfContract(threadId, operation, `failure ${failure._tag}`));\n }\n if (!isExpectedResult(response)) {\n return Effect.fail(outOfContract(threadId, operation, `result ${response._tag}`));\n }\n\n return Effect.succeed(response);\n };\n };\n\n const readPage = (\n threadId: ThreadId,\n options?: {\n readonly afterSequence?: CanonicalSequence | undefined;\n readonly limit?: number | undefined;\n },\n ) =>\n Effect.gen(function* () {\n const request = ObservePageRequest.make({\n ...(options?.afterSequence === undefined\n ? {}\n : { afterSequence: options.afterSequence }),\n limit: options?.limit ?? 256,\n });\n\n const encoded = yield* encodeObservePageRequest(request).pipe(\n Effect.mapError((error) =>\n HostProtocolError.make({\n message: boundHostDiagnostic(`observePage request encode failed: ${error.message}`),\n }),\n ),\n );\n\n const response = yield* call(threadId, \"observePage\", encoded);\n\n const page = yield* expect(\n threadId,\n \"observePage\",\n ObservedPage,\n ClientObserveHostFailure,\n )(response);\n\n return page.records;\n });\n\n const cancelProgress = (threadId: ThreadId, waiterId: string): Effect.Effect<void> =>\n encodeCancelProgressRequest(CancelProgressRequest.make({ waiterId })).pipe(\n Effect.mapError(() => undefined),\n Effect.flatMap((encoded) => call(threadId, \"cancelProgress\", encoded)),\n // Finalizers are uninterruptible; only the foreign RPC branch must remain\n // interruptible so a lost cancellation reply cannot prevent local shutdown.\n Effect.interruptible,\n Effect.timeout(PROGRESS_CANCELLATION_TIMEOUT),\n Effect.asVoid,\n Effect.ignore,\n );\n\n const awaitSettlementCall = Effect.fnUntraced(function* (\n receipt: Receipt,\n operation: \"awaitSettlement\" | \"awaitSettlementRecord\",\n ): Effect.fn.Return<HostResponse, ClientAwaitFailure> {\n const waiterId = yield* crypto.randomUUIDv4().pipe(\n Effect.mapError((error) =>\n HostProtocolError.make({\n message: boundHostDiagnostic(\n `${operation} cancellation identity generation failed: ${error.message}`,\n ),\n }),\n ),\n );\n\n const encoded = yield* encodeAwaitSettlementRequest(\n AwaitSettlementRequest.make({ ...receipt, waiterId }),\n ).pipe(\n Effect.mapError((error) =>\n HostProtocolError.make({\n message: boundHostDiagnostic(`${operation} request encode failed: ${error.message}`),\n }),\n ),\n );\n\n return yield* call(receipt.threadId, operation, encoded).pipe(\n Effect.onInterrupt(() => cancelProgress(receipt.threadId, waiterId)),\n );\n });\n\n return CloudflareThreadClient.of({\n submit: <InputSchema extends Schema.Top>(\n agent: DurableSubmitAgent<InputSchema>,\n input: InputSchema[\"Type\"],\n options: DurableSubmitOptions,\n ) =>\n Effect.gen(function* () {\n // Client-side half of `DurableAgentRuntime.submit`'s input boundary: encode\n // through the Agent's input schema and prove the canonical persistence bounds.\n const encodedInput = yield* Schema.encodeEffect(agent.definition.input)(input).pipe(\n Effect.mapError((cause) =>\n AgentInputError.make({ message: `Unable to encode Agent input: ${cause.message}` }),\n ),\n );\n\n const inputPayload = yield* Schema.decodeUnknownEffect(PersistedJson)(\n encodedInput,\n ).pipe(\n Effect.mapError(() =>\n AgentInputError.make({\n message: \"Agent input does not satisfy the canonical persistence bounds\",\n }),\n ),\n );\n\n const request = SubmitRequest.make({\n agentId: agent.definition.id,\n principal: options.principal,\n idempotencyKey: options.idempotencyKey,\n ...(options.admissionGroup === undefined\n ? {}\n : { admissionGroup: options.admissionGroup }),\n ...(options.admissionFence === undefined\n ? {}\n : { admissionFence: options.admissionFence }),\n ...(options.workerAdmission === undefined\n ? {}\n : { workerAdmission: options.workerAdmission }),\n ...(options.messageAdmission === undefined\n ? {}\n : { messageAdmission: options.messageAdmission }),\n definitions: options.definitions,\n inputPayload,\n });\n\n const encoded = yield* encodeSubmitRequest(request).pipe(\n Effect.mapError((error) =>\n HostProtocolError.make({\n message: boundHostDiagnostic(`submit request encode failed: ${error.message}`),\n }),\n ),\n );\n\n const response = yield* call(options.threadId, \"submit\", encoded);\n\n const succeeded = yield* expect(\n options.threadId,\n \"submit\",\n SubmitSucceeded,\n ClientSubmitHostFailure,\n )(response);\n\n return succeeded.receipt;\n }),\n\n submissionStatus: (receipt) =>\n Effect.gen(function* () {\n const encoded = yield* encodeReceipt(receipt).pipe(\n Effect.mapError(() => HostProtocolError.make({ message: \"Invalid receipt\" })),\n );\n\n const response = yield* call(receipt.threadId, \"submissionStatus\", encoded);\n\n const result = yield* expect(\n receipt.threadId,\n \"submissionStatus\",\n SubmissionStatusResponse,\n ClientAwaitHostFailure,\n )(response);\n\n return result.status;\n }),\n awaitSettlement: (receipt) =>\n Effect.gen(function* () {\n const response = yield* awaitSettlementCall(receipt, \"awaitSettlement\");\n\n const settled = yield* expect(\n receipt.threadId,\n \"awaitSettlement\",\n SettlementReached,\n ClientAwaitHostFailure,\n )(response);\n\n return settled.settlement;\n }),\n\n awaitSettlementRecord: (receipt) =>\n Effect.gen(function* () {\n const response = yield* awaitSettlementCall(receipt, \"awaitSettlementRecord\");\n\n const settled = yield* expect(\n receipt.threadId,\n \"awaitSettlementRecord\",\n SettlementRecordReached,\n ClientAwaitHostFailure,\n )(response);\n\n return settled.record;\n }),\n\n awaitProgress: (threadId, afterSequence) =>\n Effect.gen(function* () {\n const waiterId = yield* crypto.randomUUIDv4().pipe(\n Effect.mapError((error) =>\n HostProtocolError.make({\n message: boundHostDiagnostic(\n `awaitProgress cancellation identity generation failed: ${error.message}`,\n ),\n }),\n ),\n );\n\n const request = AwaitProgressRequest.make({ afterSequence, waiterId });\n\n const encoded = yield* encodeAwaitProgressRequest(request).pipe(\n Effect.mapError((error) =>\n HostProtocolError.make({\n message: boundHostDiagnostic(\n `awaitProgress request encode failed: ${error.message}`,\n ),\n }),\n ),\n );\n\n const attempt = (retry: number): Effect.Effect<void, ClientProgressFailure> =>\n call(threadId, \"awaitProgress\", encoded).pipe(\n Effect.flatMap(\n expect(threadId, \"awaitProgress\", ProgressObserved, ClientObserveHostFailure),\n ),\n Effect.asVoid,\n Effect.catchTag(\"ThreadClientError\", (error) =>\n error.retryable === true && error.overloaded !== true && retry < 5\n ? Effect.sleep(Duration.millis(10 * 2 ** retry)).pipe(\n Effect.andThen(attempt(retry + 1)),\n )\n : Effect.fail(error),\n ),\n );\n\n yield* attempt(0).pipe(Effect.onInterrupt(() => cancelProgress(threadId, waiterId)));\n }),\n\n watchText: (threadId) =>\n Stream.unwrap(\n Effect.gen(function* () {\n const traceArgs =\n rpcTracing === undefined ? [] : yield* RpcTracing.withRpcTraceContext([]);\n\n const openingFailure = (cause: unknown) =>\n ThreadClientError.make({\n threadId,\n message: \"Provisional text observation could not reach the Thread Object\",\n cause,\n ...cloudflareFailureSignals(cause),\n });\n\n // Retain the original RPC promise: resolving through callThreadObject would\n // erase its optional native disposer before an interrupted opening can use it.\n const target = yield* RpcTargets.get(namespace, threadId, () =>\n namespace.get(threadId),\n ).pipe(Effect.mapError(openingFailure));\n\n let request: Promise<unknown> | undefined;\n let received: unknown;\n let closed = false;\n\n const cancel = () => {\n const value = received;\n\n received = undefined;\n\n return value instanceof ReadableStream && !value.locked\n ? value.cancel().catch(() => undefined)\n : Promise.resolve();\n };\n\n // Install ownership before invoking foreign code, not after its promise settles.\n yield* Effect.addFinalizer(() =>\n Effect.try({\n try: () => {\n closed = true;\n if (Predicate.hasProperty(request, Symbol.dispose)) {\n const dispose = request[Symbol.dispose];\n\n if (typeof dispose === \"function\") dispose.call(request);\n }\n },\n catch: () => undefined,\n }).pipe(\n Effect.ignore,\n Effect.andThen(\n Effect.tryPromise({ try: cancel, catch: () => undefined }).pipe(\n Effect.interruptible,\n Effect.timeout(PROGRESS_CANCELLATION_TIMEOUT),\n Effect.ignore,\n ),\n ),\n ),\n );\n\n const raw = yield* Effect.tryPromise({\n try: () => {\n request = target.watchTextEncoded(\n Schema.encodeSync(WatchTextRequest)({ schemaVersion: 1 }),\n ...traceArgs,\n );\n\n return request.then((value) => {\n received = value;\n\n // A custom endpoint may return a plain, non-cancellable promise. Keep\n // late cleanup on that native promise chain; it starts no Effect fiber.\n return closed ? cancel().then(() => value) : value;\n });\n },\n catch: openingFailure,\n }).pipe(\n Effect.interruptible,\n Effect.tapCause(() => RpcTargets.invalidate(target)),\n );\n\n if (raw instanceof ReadableStream) return decodeLiveText(threadId, raw);\n\n const response = yield* decodeHostResponse(raw).pipe(\n Effect.mapError(liveTextProtocolFailure),\n );\n\n if (\n response._tag === \"HostFailed\" &&\n Schema.is(ClientObserveHostFailure)(response.failure)\n )\n return yield* response.failure;\n\n return yield* liveTextProtocolFailure();\n }),\n ),\n\n readPage,\n\n readAll: (threadId) =>\n Effect.gen(function* () {\n const all: Array<CanonicalRecordEnvelope> = [];\n let after: CanonicalSequence | undefined;\n\n for (;;) {\n const page = yield* readPage(threadId, { afterSequence: after, limit: 1_024 });\n\n all.push(...page);\n const last = page.at(-1);\n\n if (page.length < 1_024 || last === undefined) return all;\n after = last.sequence;\n }\n }),\n\n abort: (threadId, command) =>\n Effect.gen(function* () {\n const encoded = yield* encodeAbortCommand(command).pipe(\n Effect.mapError((error) =>\n HostProtocolError.make({\n message: boundHostDiagnostic(`abort command encode failed: ${error.message}`),\n }),\n ),\n );\n\n const response = yield* call(threadId, \"abort\", encoded);\n\n const recorded = yield* expect(\n threadId,\n \"abort\",\n AbortRecorded,\n ClientAbortHostFailure,\n )(response);\n\n return recorded.intent;\n }),\n\n resolveApproval: (threadId, command) =>\n Effect.gen(function* () {\n const encoded = yield* encodeApprovalDecisionCommand(command).pipe(\n Effect.mapError((error) =>\n HostProtocolError.make({\n message: boundHostDiagnostic(`approval command encode failed: ${error.message}`),\n }),\n ),\n );\n\n const response = yield* call(threadId, \"resolveApproval\", encoded);\n\n const recorded = yield* expect(\n threadId,\n \"resolveApproval\",\n ApprovalRecorded,\n ClientApprovalHostFailure,\n )(response);\n\n return recorded.intent;\n }),\n\n resolveUnknown: (threadId, command) =>\n Effect.gen(function* () {\n const encoded = yield* encodeUnknownResolutionCommand(command).pipe(\n Effect.mapError((error) =>\n HostProtocolError.make({\n message: boundHostDiagnostic(\n `resolution command encode failed: ${error.message}`,\n ),\n }),\n ),\n );\n\n const response = yield* call(threadId, \"resolveUnknown\", encoded);\n\n const recorded = yield* expect(\n threadId,\n \"resolveUnknown\",\n UnknownResolutionRecorded,\n ClientUnknownHostFailure,\n )(response);\n\n return recorded.intent;\n }),\n });\n }),\n );\n}\n"],"mappings":"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"}