@elizaos/plugin-browser 2.0.0-beta.1 → 2.0.3-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +106 -64
- package/dist/actions/browser-autofill-login.d.ts.map +1 -1
- package/dist/actions/browser-autofill-login.js.map +1 -1
- package/dist/actions/browser.d.ts +5 -6
- package/dist/actions/browser.d.ts.map +1 -1
- package/dist/actions/browser.js +312 -60
- package/dist/actions/browser.js.map +1 -1
- package/dist/actions/manage-browser-bridge.d.ts.map +1 -1
- package/dist/actions/manage-browser-bridge.js +10 -14
- package/dist/actions/manage-browser-bridge.js.map +1 -1
- package/dist/actions/wait-for-url-predicate.d.ts +34 -0
- package/dist/actions/wait-for-url-predicate.d.ts.map +1 -0
- package/dist/actions/wait-for-url-predicate.js +33 -0
- package/dist/actions/wait-for-url-predicate.js.map +1 -0
- package/dist/actions/wait-for-url.d.ts +64 -0
- package/dist/actions/wait-for-url.d.ts.map +1 -0
- package/dist/actions/wait-for-url.js +89 -0
- package/dist/actions/wait-for-url.js.map +1 -0
- package/dist/bridge-policy.d.ts +10 -0
- package/dist/bridge-policy.d.ts.map +1 -0
- package/dist/bridge-policy.js +37 -0
- package/dist/bridge-policy.js.map +1 -0
- package/dist/bridge-readiness.d.ts +16 -0
- package/dist/bridge-readiness.d.ts.map +1 -0
- package/dist/bridge-readiness.js +82 -0
- package/dist/bridge-readiness.js.map +1 -0
- package/dist/bridge-records.d.ts +9 -0
- package/dist/bridge-records.d.ts.map +1 -0
- package/dist/bridge-records.js +37 -0
- package/dist/bridge-records.js.map +1 -0
- package/dist/browser-capture-hooks.d.ts +9 -0
- package/dist/browser-capture-hooks.d.ts.map +1 -0
- package/dist/browser-capture-hooks.js +15 -0
- package/dist/browser-capture-hooks.js.map +1 -0
- package/dist/browser-service.d.ts +22 -4
- package/dist/browser-service.d.ts.map +1 -1
- package/dist/browser-service.js +63 -15
- package/dist/browser-service.js.map +1 -1
- package/dist/browser-workspace-hooks.d.ts +14 -0
- package/dist/browser-workspace-hooks.d.ts.map +1 -0
- package/dist/browser-workspace-hooks.js +15 -0
- package/dist/browser-workspace-hooks.js.map +1 -0
- package/dist/companion-auth.d.ts +34 -0
- package/dist/companion-auth.d.ts.map +1 -0
- package/dist/companion-auth.js +98 -0
- package/dist/companion-auth.js.map +1 -0
- package/dist/index.d.ts +12 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +66 -12
- package/dist/index.js.map +1 -1
- package/dist/message-adapter.d.ts +9 -0
- package/dist/message-adapter.d.ts.map +1 -0
- package/dist/message-adapter.js +104 -0
- package/dist/message-adapter.js.map +1 -0
- package/dist/packaging.d.ts.map +1 -1
- package/dist/packaging.js +2 -0
- package/dist/packaging.js.map +1 -1
- package/dist/parity/browser-matrix.d.ts +45 -0
- package/dist/parity/browser-matrix.d.ts.map +1 -0
- package/dist/parity/browser-matrix.js +361 -0
- package/dist/parity/browser-matrix.js.map +1 -0
- package/dist/parity/index.d.ts +5 -0
- package/dist/parity/index.d.ts.map +1 -0
- package/dist/parity/index.js +13 -0
- package/dist/parity/index.js.map +1 -0
- package/dist/password-manager-bridge.d.ts +50 -0
- package/dist/password-manager-bridge.d.ts.map +1 -0
- package/dist/password-manager-bridge.js +437 -0
- package/dist/password-manager-bridge.js.map +1 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +8 -4
- package/dist/plugin.js.map +1 -1
- package/dist/providers/workspace.d.ts +1 -1
- package/dist/providers/workspace.js.map +1 -1
- package/dist/routes/bridge.d.ts.map +1 -1
- package/dist/routes/bridge.js +63 -14
- package/dist/routes/bridge.js.map +1 -1
- package/dist/routes/workspace-setup.d.ts.map +1 -1
- package/dist/routes/workspace-setup.js +1 -1
- package/dist/routes/workspace-setup.js.map +1 -1
- package/dist/routes/workspace.d.ts +1 -2
- package/dist/routes/workspace.d.ts.map +1 -1
- package/dist/routes/workspace.js +104 -4
- package/dist/routes/workspace.js.map +1 -1
- package/dist/schema.d.ts +2 -2
- package/dist/schema.js.map +1 -1
- package/dist/service.d.ts +1 -1
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js.map +1 -1
- package/dist/targets/bridge-target.d.ts +1 -1
- package/dist/targets/bridge-target.d.ts.map +1 -1
- package/dist/targets/bridge-target.js.map +1 -1
- package/dist/targets/stagehand-target.d.ts +3 -0
- package/dist/targets/stagehand-target.d.ts.map +1 -0
- package/dist/targets/stagehand-target.js +187 -0
- package/dist/targets/stagehand-target.js.map +1 -0
- package/dist/workspace/browser-capture.d.ts +1 -1
- package/dist/workspace/browser-capture.d.ts.map +1 -1
- package/dist/workspace/browser-capture.js +33 -1
- package/dist/workspace/browser-capture.js.map +1 -1
- package/dist/workspace/browser-workspace-desktop.d.ts +1 -1
- package/dist/workspace/browser-workspace-desktop.d.ts.map +1 -1
- package/dist/workspace/browser-workspace-desktop.js +66 -30
- package/dist/workspace/browser-workspace-desktop.js.map +1 -1
- package/dist/workspace/browser-workspace-errors.d.ts +62 -0
- package/dist/workspace/browser-workspace-errors.d.ts.map +1 -0
- package/dist/workspace/browser-workspace-errors.js +69 -0
- package/dist/workspace/browser-workspace-errors.js.map +1 -0
- package/dist/workspace/browser-workspace-forms.d.ts.map +1 -1
- package/dist/workspace/browser-workspace-forms.js +1 -1
- package/dist/workspace/browser-workspace-forms.js.map +1 -1
- package/dist/workspace/browser-workspace-helpers.d.ts +7 -0
- package/dist/workspace/browser-workspace-helpers.d.ts.map +1 -1
- package/dist/workspace/browser-workspace-helpers.js +64 -6
- package/dist/workspace/browser-workspace-helpers.js.map +1 -1
- package/dist/workspace/browser-workspace-network.d.ts +1 -1
- package/dist/workspace/browser-workspace-network.d.ts.map +1 -1
- package/dist/workspace/browser-workspace-types.d.ts +15 -0
- package/dist/workspace/browser-workspace-types.d.ts.map +1 -1
- package/dist/workspace/browser-workspace-types.js.map +1 -1
- package/dist/workspace/browser-workspace-web.d.ts.map +1 -1
- package/dist/workspace/browser-workspace-web.js +34 -93
- package/dist/workspace/browser-workspace-web.js.map +1 -1
- package/dist/workspace/browser-workspace.d.ts +1 -1
- package/dist/workspace/browser-workspace.d.ts.map +1 -1
- package/dist/workspace/browser-workspace.js +9 -4
- package/dist/workspace/browser-workspace.js.map +1 -1
- package/dist/workspace/index.d.ts +1 -0
- package/dist/workspace/index.d.ts.map +1 -1
- package/dist/workspace/index.js +1 -0
- package/dist/workspace/index.js.map +1 -1
- package/package.json +29 -7
- package/registry-entry.json +75 -0
- package/dist/actions/browser-autofill-login.d.js +0 -1
- package/dist/actions/browser-autofill-login.d.js.map +0 -1
- package/dist/actions/browser.d.js +0 -1
- package/dist/actions/browser.d.js.map +0 -1
- package/dist/actions/manage-browser-bridge.d.js +0 -1
- package/dist/actions/manage-browser-bridge.d.js.map +0 -1
- package/dist/ambient-jsdom.d.js +0 -1
- package/dist/ambient-jsdom.d.js.map +0 -1
- package/dist/browser-service.d.js +0 -1
- package/dist/browser-service.d.js.map +0 -1
- package/dist/contracts.d.js +0 -1
- package/dist/contracts.d.js.map +0 -1
- package/dist/index.d.js +0 -21
- package/dist/index.d.js.map +0 -1
- package/dist/lifeops-session-contracts.d.js +0 -1
- package/dist/lifeops-session-contracts.d.js.map +0 -1
- package/dist/packaging.d.js +0 -1
- package/dist/packaging.d.js.map +0 -1
- package/dist/plugin.d.js +0 -1
- package/dist/plugin.d.js.map +0 -1
- package/dist/providers/workspace.d.js +0 -1
- package/dist/providers/workspace.d.js.map +0 -1
- package/dist/routes/bridge.d.js +0 -1
- package/dist/routes/bridge.d.js.map +0 -1
- package/dist/routes/workspace-account-gate.d.js +0 -1
- package/dist/routes/workspace-account-gate.d.js.map +0 -1
- package/dist/routes/workspace-setup.d.js +0 -1
- package/dist/routes/workspace-setup.d.js.map +0 -1
- package/dist/routes/workspace.d.js +0 -1
- package/dist/routes/workspace.d.js.map +0 -1
- package/dist/schema.d.js +0 -1
- package/dist/schema.d.js.map +0 -1
- package/dist/service.d.js +0 -1
- package/dist/service.d.js.map +0 -1
- package/dist/targets/bridge-target.d.js +0 -1
- package/dist/targets/bridge-target.d.js.map +0 -1
- package/dist/workspace/browser-capture.d.js +0 -1
- package/dist/workspace/browser-capture.d.js.map +0 -1
- package/dist/workspace/browser-workspace-desktop.d.js +0 -1
- package/dist/workspace/browser-workspace-desktop.d.js.map +0 -1
- package/dist/workspace/browser-workspace-elements.d.js +0 -1
- package/dist/workspace/browser-workspace-elements.d.js.map +0 -1
- package/dist/workspace/browser-workspace-forms.d.js +0 -1
- package/dist/workspace/browser-workspace-forms.d.js.map +0 -1
- package/dist/workspace/browser-workspace-helpers.d.js +0 -1
- package/dist/workspace/browser-workspace-helpers.d.js.map +0 -1
- package/dist/workspace/browser-workspace-jsdom.d.js +0 -1
- package/dist/workspace/browser-workspace-jsdom.d.js.map +0 -1
- package/dist/workspace/browser-workspace-network.d.js +0 -1
- package/dist/workspace/browser-workspace-network.d.js.map +0 -1
- package/dist/workspace/browser-workspace-snapshots.d.js +0 -1
- package/dist/workspace/browser-workspace-snapshots.d.js.map +0 -1
- package/dist/workspace/browser-workspace-state.d.js +0 -1
- package/dist/workspace/browser-workspace-state.d.js.map +0 -1
- package/dist/workspace/browser-workspace-types.d.js +0 -1
- package/dist/workspace/browser-workspace-types.d.js.map +0 -1
- package/dist/workspace/browser-workspace-web.d.js +0 -1
- package/dist/workspace/browser-workspace-web.d.js.map +0 -1
- package/dist/workspace/browser-workspace.d.js +0 -11
- package/dist/workspace/browser-workspace.d.js.map +0 -1
- package/dist/workspace/index.d.js +0 -3
- package/dist/workspace/index.d.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/workspace/browser-workspace-forms.ts"],"sourcesContent":["import type { JSDOM } from \"jsdom\";\nimport {\n buildBrowserWorkspaceElementSelector,\n findClosestBrowserWorkspaceForm,\n} from \"./browser-workspace-elements.js\";\nimport {\n assertBrowserWorkspaceUrl,\n inferBrowserWorkspaceTitle,\n normalizeBrowserWorkspaceText,\n} from \"./browser-workspace-helpers.js\";\nimport {\n ensureBrowserWorkspaceDom,\n getJSDOMClass,\n installBrowserWorkspaceWebRuntime,\n} from \"./browser-workspace-jsdom.js\";\nimport { fetchBrowserWorkspaceTrackedResponse } from \"./browser-workspace-network.js\";\nimport {\n getBrowserWorkspaceRuntimeState,\n getBrowserWorkspaceTimestamp,\n resetBrowserWorkspaceRuntimeNavigationState,\n} from \"./browser-workspace-state.js\";\nimport type {\n BrowserWorkspaceCommandResult,\n BrowserWorkspaceScrollDirection,\n WebBrowserWorkspaceTabState,\n} from \"./browser-workspace-types.js\";\n\nexport function ensureBrowserWorkspaceFormControlElement(\n element: Element,\n subaction:\n | \"clipboard\"\n | \"fill\"\n | \"keyboardinserttext\"\n | \"keyboardtype\"\n | \"select\"\n | \"type\",\n): HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement {\n if (\n element.tagName === \"INPUT\" ||\n element.tagName === \"TEXTAREA\" ||\n element.tagName === \"SELECT\"\n ) {\n return element as\n | HTMLInputElement\n | HTMLTextAreaElement\n | HTMLSelectElement;\n }\n\n throw new Error(\n `Eliza browser workspace ${subaction} requires an input, textarea, or select target.`,\n );\n}\n\nexport function ensureBrowserWorkspaceCheckboxElement(\n element: Element,\n subaction: \"check\" | \"uncheck\",\n): HTMLInputElement {\n if (element.tagName === \"INPUT\") {\n const input = element as HTMLInputElement;\n const type = input.type.trim().toLowerCase();\n if (type === \"checkbox\" || type === \"radio\") {\n return input;\n }\n }\n\n throw new Error(\n `Eliza browser workspace ${subaction} requires a checkbox or radio input target.`,\n );\n}\n\nexport function setBrowserWorkspaceControlValue(\n control: HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement,\n nextValue: string,\n): void {\n control.value = nextValue;\n if (control.tagName === \"TEXTAREA\") {\n control.textContent = nextValue;\n }\n control.setAttribute(\"value\", nextValue);\n}\n\nexport async function activateWebBrowserWorkspaceElement(\n tab: WebBrowserWorkspaceTabState,\n element: Element,\n subaction: \"click\" | \"dblclick\",\n): Promise<BrowserWorkspaceCommandResult> {\n const tag = element.tagName.toLowerCase();\n if (tag === \"a\") {\n const href = element.getAttribute(\"href\")?.trim();\n if (!href) {\n throw new Error(\"Target link does not have an href.\");\n }\n const nextUrl = new URL(href, tab.url).toString();\n clearWebBrowserWorkspaceTabElementRefs(tab.id);\n tab.url = assertBrowserWorkspaceUrl(nextUrl);\n tab.title = inferBrowserWorkspaceTitle(tab.url);\n tab.dom = null;\n tab.loadedUrl = null;\n pushWebBrowserWorkspaceHistory(tab, tab.url);\n await loadWebBrowserWorkspaceTabDocument(tab);\n return {\n mode: \"web\",\n subaction,\n tab: cloneWebBrowserWorkspaceTabState(tab),\n value: {\n clickCount: subaction === \"dblclick\" ? 2 : 1,\n selector: buildBrowserWorkspaceElementSelector(element),\n url: tab.url,\n },\n };\n }\n\n const inputElement = tag === \"input\" ? (element as HTMLInputElement) : null;\n const inputType = inputElement?.type?.toLowerCase() ?? \"\";\n if (inputElement && (inputType === \"checkbox\" || inputType === \"radio\")) {\n inputElement.checked = inputType === \"radio\" ? true : !inputElement.checked;\n return {\n mode: \"web\",\n subaction,\n value: {\n checked: inputElement.checked,\n clickCount: subaction === \"dblclick\" ? 2 : 1,\n selector: buildBrowserWorkspaceElementSelector(element),\n },\n };\n }\n\n const submitForm = findClosestBrowserWorkspaceForm(element);\n if (\n submitForm &&\n (tag === \"form\" ||\n tag === \"button\" ||\n (tag === \"input\" &&\n [\"button\", \"image\", \"submit\"].includes(inputType || \"submit\")))\n ) {\n await submitWebBrowserWorkspaceForm(tab, submitForm);\n return {\n mode: \"web\",\n subaction,\n tab: cloneWebBrowserWorkspaceTabState(tab),\n value: {\n clickCount: subaction === \"dblclick\" ? 2 : 1,\n selector: buildBrowserWorkspaceElementSelector(element),\n url: tab.url,\n },\n };\n }\n\n return {\n mode: \"web\",\n subaction,\n value: {\n clickCount: subaction === \"dblclick\" ? 2 : 1,\n selector: buildBrowserWorkspaceElementSelector(element),\n text: normalizeBrowserWorkspaceText(element.textContent),\n },\n };\n}\n\nexport function scrollWebBrowserWorkspaceTarget(\n dom: JSDOM,\n element: Element | null,\n direction: BrowserWorkspaceScrollDirection,\n pixels: number,\n): {\n axis: \"x\" | \"y\";\n selector: string | null;\n value: number;\n} {\n const resolvedPixels = Number.isFinite(pixels)\n ? Math.max(1, Math.abs(pixels))\n : 240;\n const axis = direction === \"left\" || direction === \"right\" ? \"x\" : \"y\";\n const delta =\n direction === \"up\" || direction === \"left\"\n ? -resolvedPixels\n : resolvedPixels;\n\n if (element && element instanceof dom.window.HTMLElement) {\n if (axis === \"y\") {\n element.scrollTop = (element.scrollTop || 0) + delta;\n return {\n axis,\n selector: buildBrowserWorkspaceElementSelector(element),\n value: element.scrollTop,\n };\n }\n element.scrollLeft = (element.scrollLeft || 0) + delta;\n return {\n axis,\n selector: buildBrowserWorkspaceElementSelector(element),\n value: element.scrollLeft,\n };\n }\n\n const key = axis === \"y\" ? \"__elizaScrollY\" : \"__elizaScrollX\";\n const current = Number(Reflect.get(dom.window, key) ?? 0);\n const next = current + delta;\n Reflect.set(dom.window, key, next);\n return {\n axis,\n selector: null,\n value: next,\n };\n}\n\nexport async function submitWebBrowserWorkspaceForm(\n tab: WebBrowserWorkspaceTabState,\n form: HTMLFormElement,\n): Promise<void> {\n const state = getBrowserWorkspaceRuntimeState(\"web\", tab.id);\n const dom = ensureBrowserWorkspaceDom(tab);\n const action = form.getAttribute(\"action\")?.trim() || tab.url;\n const method = (form.getAttribute(\"method\")?.trim() || \"get\").toLowerCase();\n const submitUrl = new URL(action, tab.url).toString();\n const formData = new dom.window.FormData(form);\n const searchParams = new URLSearchParams();\n\n for (const [key, value] of formData.entries()) {\n searchParams.append(key, String(value));\n }\n\n if (method === \"get\") {\n const nextUrl = new URL(submitUrl);\n nextUrl.search = searchParams.toString();\n clearWebBrowserWorkspaceTabElementRefs(tab.id);\n tab.url = nextUrl.toString();\n tab.title = inferBrowserWorkspaceTitle(tab.url);\n tab.dom = null;\n tab.loadedUrl = null;\n pushWebBrowserWorkspaceHistory(tab, tab.url);\n await loadWebBrowserWorkspaceTabDocument(tab);\n return;\n }\n\n const response = await fetchBrowserWorkspaceTrackedResponse(\n state,\n submitUrl,\n {\n body: searchParams.toString(),\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded; charset=utf-8\",\n },\n method: method.toUpperCase(),\n },\n \"document\",\n );\n\n if (!response.ok) {\n throw new Error(\n `Browser workspace form submit failed (${response.status}): ${submitUrl}`,\n );\n }\n\n const html = await response.text();\n const finalUrl = assertBrowserWorkspaceUrl(response.url?.trim() || submitUrl);\n const nextDom = new (getJSDOMClass())(html, {\n pretendToBeVisual: true,\n url: finalUrl,\n });\n installBrowserWorkspaceWebRuntime(tab, nextDom);\n resetBrowserWorkspaceRuntimeNavigationState(state);\n clearWebBrowserWorkspaceTabElementRefs(tab.id);\n tab.url = finalUrl;\n tab.dom = nextDom;\n tab.loadedUrl = finalUrl;\n tab.title =\n normalizeBrowserWorkspaceText(nextDom.window.document.title) ||\n inferBrowserWorkspaceTitle(finalUrl);\n tab.updatedAt = getBrowserWorkspaceTimestamp();\n pushWebBrowserWorkspaceHistory(tab, finalUrl);\n}\n\n// --- Web tab helpers that forms/activation need ---\n\nimport { clearBrowserWorkspaceElementRefs } from \"./browser-workspace-state.js\";\nimport type { BrowserWorkspaceTab } from \"./browser-workspace-types.js\";\n\nexport function clearWebBrowserWorkspaceTabElementRefs(tabId: string): void {\n clearBrowserWorkspaceElementRefs(\"web\", tabId);\n}\n\nexport function cloneWebBrowserWorkspaceTabState(\n tab: WebBrowserWorkspaceTabState,\n): BrowserWorkspaceTab {\n return {\n id: tab.id,\n title: tab.title,\n url: tab.url,\n partition: tab.partition,\n kind: tab.kind,\n visible: tab.visible,\n createdAt: tab.createdAt,\n updatedAt: tab.updatedAt,\n lastFocusedAt: tab.lastFocusedAt,\n };\n}\n\nexport function pushWebBrowserWorkspaceHistory(\n tab: WebBrowserWorkspaceTabState,\n nextUrl: string,\n): void {\n const nextHistory = tab.history.slice(0, tab.historyIndex + 1);\n nextHistory.push(nextUrl);\n tab.history = nextHistory;\n tab.historyIndex = nextHistory.length - 1;\n}\n\nexport async function loadWebBrowserWorkspaceTabDocument(\n tab: WebBrowserWorkspaceTabState,\n): Promise<void> {\n const state = getBrowserWorkspaceRuntimeState(\"web\", tab.id);\n const { createEmptyWebBrowserWorkspaceDom } = await import(\n \"./browser-workspace-jsdom.js\"\n );\n if (tab.url === \"about:blank\") {\n tab.dom = createEmptyWebBrowserWorkspaceDom(tab.url);\n installBrowserWorkspaceWebRuntime(tab, tab.dom);\n tab.loadedUrl = tab.url;\n tab.title = \"New Tab\";\n tab.updatedAt = getBrowserWorkspaceTimestamp();\n return;\n }\n\n const response = await fetchBrowserWorkspaceTrackedResponse(\n state,\n tab.url,\n {},\n \"document\",\n );\n if (!response.ok) {\n throw new Error(\n `Browser workspace web load failed (${response.status}): ${tab.url}`,\n );\n }\n\n const html = await response.text();\n const finalUrl = assertBrowserWorkspaceUrl(response.url?.trim() || tab.url);\n const dom = new (getJSDOMClass())(html, {\n pretendToBeVisual: true,\n url: finalUrl,\n });\n installBrowserWorkspaceWebRuntime(tab, dom);\n resetBrowserWorkspaceRuntimeNavigationState(state);\n\n tab.dom = dom;\n tab.loadedUrl = finalUrl;\n tab.url = finalUrl;\n tab.title =\n normalizeBrowserWorkspaceText(dom.window.document.title) ||\n inferBrowserWorkspaceTitle(finalUrl);\n tab.updatedAt = getBrowserWorkspaceTimestamp();\n tab.history[tab.historyIndex] = finalUrl;\n}\n\nexport async function ensureLoadedWebBrowserWorkspaceTabDocument(\n tab: WebBrowserWorkspaceTabState,\n): Promise<JSDOM> {\n if (!tab.dom || tab.loadedUrl !== tab.url) {\n await loadWebBrowserWorkspaceTabDocument(tab);\n }\n return ensureBrowserWorkspaceDom(tab);\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/workspace/browser-workspace-forms.ts"],"sourcesContent":["import type { JSDOM } from \"jsdom\";\nimport {\n buildBrowserWorkspaceElementSelector,\n findClosestBrowserWorkspaceForm,\n} from \"./browser-workspace-elements.js\";\nimport {\n assertBrowserWorkspaceUrl,\n inferBrowserWorkspaceTitle,\n normalizeBrowserWorkspaceText,\n} from \"./browser-workspace-helpers.js\";\nimport {\n createEmptyWebBrowserWorkspaceDom,\n ensureBrowserWorkspaceDom,\n getJSDOMClass,\n installBrowserWorkspaceWebRuntime,\n} from \"./browser-workspace-jsdom.js\";\nimport { fetchBrowserWorkspaceTrackedResponse } from \"./browser-workspace-network.js\";\nimport {\n getBrowserWorkspaceRuntimeState,\n getBrowserWorkspaceTimestamp,\n resetBrowserWorkspaceRuntimeNavigationState,\n} from \"./browser-workspace-state.js\";\nimport type {\n BrowserWorkspaceCommandResult,\n BrowserWorkspaceScrollDirection,\n WebBrowserWorkspaceTabState,\n} from \"./browser-workspace-types.js\";\n\nexport function ensureBrowserWorkspaceFormControlElement(\n element: Element,\n subaction:\n | \"clipboard\"\n | \"fill\"\n | \"keyboardinserttext\"\n | \"keyboardtype\"\n | \"select\"\n | \"type\",\n): HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement {\n if (\n element.tagName === \"INPUT\" ||\n element.tagName === \"TEXTAREA\" ||\n element.tagName === \"SELECT\"\n ) {\n return element as\n | HTMLInputElement\n | HTMLTextAreaElement\n | HTMLSelectElement;\n }\n\n throw new Error(\n `Eliza browser workspace ${subaction} requires an input, textarea, or select target.`,\n );\n}\n\nexport function ensureBrowserWorkspaceCheckboxElement(\n element: Element,\n subaction: \"check\" | \"uncheck\",\n): HTMLInputElement {\n if (element.tagName === \"INPUT\") {\n const input = element as HTMLInputElement;\n const type = input.type.trim().toLowerCase();\n if (type === \"checkbox\" || type === \"radio\") {\n return input;\n }\n }\n\n throw new Error(\n `Eliza browser workspace ${subaction} requires a checkbox or radio input target.`,\n );\n}\n\nexport function setBrowserWorkspaceControlValue(\n control: HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement,\n nextValue: string,\n): void {\n control.value = nextValue;\n if (control.tagName === \"TEXTAREA\") {\n control.textContent = nextValue;\n }\n control.setAttribute(\"value\", nextValue);\n}\n\nexport async function activateWebBrowserWorkspaceElement(\n tab: WebBrowserWorkspaceTabState,\n element: Element,\n subaction: \"click\" | \"dblclick\",\n): Promise<BrowserWorkspaceCommandResult> {\n const tag = element.tagName.toLowerCase();\n if (tag === \"a\") {\n const href = element.getAttribute(\"href\")?.trim();\n if (!href) {\n throw new Error(\"Target link does not have an href.\");\n }\n const nextUrl = new URL(href, tab.url).toString();\n clearWebBrowserWorkspaceTabElementRefs(tab.id);\n tab.url = assertBrowserWorkspaceUrl(nextUrl);\n tab.title = inferBrowserWorkspaceTitle(tab.url);\n tab.dom = null;\n tab.loadedUrl = null;\n pushWebBrowserWorkspaceHistory(tab, tab.url);\n await loadWebBrowserWorkspaceTabDocument(tab);\n return {\n mode: \"web\",\n subaction,\n tab: cloneWebBrowserWorkspaceTabState(tab),\n value: {\n clickCount: subaction === \"dblclick\" ? 2 : 1,\n selector: buildBrowserWorkspaceElementSelector(element),\n url: tab.url,\n },\n };\n }\n\n const inputElement = tag === \"input\" ? (element as HTMLInputElement) : null;\n const inputType = inputElement?.type?.toLowerCase() ?? \"\";\n if (inputElement && (inputType === \"checkbox\" || inputType === \"radio\")) {\n inputElement.checked = inputType === \"radio\" ? true : !inputElement.checked;\n return {\n mode: \"web\",\n subaction,\n value: {\n checked: inputElement.checked,\n clickCount: subaction === \"dblclick\" ? 2 : 1,\n selector: buildBrowserWorkspaceElementSelector(element),\n },\n };\n }\n\n const submitForm = findClosestBrowserWorkspaceForm(element);\n if (\n submitForm &&\n (tag === \"form\" ||\n tag === \"button\" ||\n (tag === \"input\" &&\n [\"button\", \"image\", \"submit\"].includes(inputType || \"submit\")))\n ) {\n await submitWebBrowserWorkspaceForm(tab, submitForm);\n return {\n mode: \"web\",\n subaction,\n tab: cloneWebBrowserWorkspaceTabState(tab),\n value: {\n clickCount: subaction === \"dblclick\" ? 2 : 1,\n selector: buildBrowserWorkspaceElementSelector(element),\n url: tab.url,\n },\n };\n }\n\n return {\n mode: \"web\",\n subaction,\n value: {\n clickCount: subaction === \"dblclick\" ? 2 : 1,\n selector: buildBrowserWorkspaceElementSelector(element),\n text: normalizeBrowserWorkspaceText(element.textContent),\n },\n };\n}\n\nexport function scrollWebBrowserWorkspaceTarget(\n dom: JSDOM,\n element: Element | null,\n direction: BrowserWorkspaceScrollDirection,\n pixels: number,\n): {\n axis: \"x\" | \"y\";\n selector: string | null;\n value: number;\n} {\n const resolvedPixels = Number.isFinite(pixels)\n ? Math.max(1, Math.abs(pixels))\n : 240;\n const axis = direction === \"left\" || direction === \"right\" ? \"x\" : \"y\";\n const delta =\n direction === \"up\" || direction === \"left\"\n ? -resolvedPixels\n : resolvedPixels;\n\n if (element && element instanceof dom.window.HTMLElement) {\n if (axis === \"y\") {\n element.scrollTop = (element.scrollTop || 0) + delta;\n return {\n axis,\n selector: buildBrowserWorkspaceElementSelector(element),\n value: element.scrollTop,\n };\n }\n element.scrollLeft = (element.scrollLeft || 0) + delta;\n return {\n axis,\n selector: buildBrowserWorkspaceElementSelector(element),\n value: element.scrollLeft,\n };\n }\n\n const key = axis === \"y\" ? \"__elizaScrollY\" : \"__elizaScrollX\";\n const current = Number(Reflect.get(dom.window, key) ?? 0);\n const next = current + delta;\n Reflect.set(dom.window, key, next);\n return {\n axis,\n selector: null,\n value: next,\n };\n}\n\nexport async function submitWebBrowserWorkspaceForm(\n tab: WebBrowserWorkspaceTabState,\n form: HTMLFormElement,\n): Promise<void> {\n const state = getBrowserWorkspaceRuntimeState(\"web\", tab.id);\n const dom = ensureBrowserWorkspaceDom(tab);\n const action = form.getAttribute(\"action\")?.trim() || tab.url;\n const method = (form.getAttribute(\"method\")?.trim() || \"get\").toLowerCase();\n const submitUrl = new URL(action, tab.url).toString();\n const formData = new dom.window.FormData(form);\n const searchParams = new URLSearchParams();\n\n for (const [key, value] of formData.entries()) {\n searchParams.append(key, String(value));\n }\n\n if (method === \"get\") {\n const nextUrl = new URL(submitUrl);\n nextUrl.search = searchParams.toString();\n clearWebBrowserWorkspaceTabElementRefs(tab.id);\n tab.url = nextUrl.toString();\n tab.title = inferBrowserWorkspaceTitle(tab.url);\n tab.dom = null;\n tab.loadedUrl = null;\n pushWebBrowserWorkspaceHistory(tab, tab.url);\n await loadWebBrowserWorkspaceTabDocument(tab);\n return;\n }\n\n const response = await fetchBrowserWorkspaceTrackedResponse(\n state,\n submitUrl,\n {\n body: searchParams.toString(),\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded; charset=utf-8\",\n },\n method: method.toUpperCase(),\n },\n \"document\",\n );\n\n if (!response.ok) {\n throw new Error(\n `Browser workspace form submit failed (${response.status}): ${submitUrl}`,\n );\n }\n\n const html = await response.text();\n const finalUrl = assertBrowserWorkspaceUrl(response.url?.trim() || submitUrl);\n const nextDom = new (getJSDOMClass())(html, {\n pretendToBeVisual: true,\n url: finalUrl,\n });\n installBrowserWorkspaceWebRuntime(tab, nextDom);\n resetBrowserWorkspaceRuntimeNavigationState(state);\n clearWebBrowserWorkspaceTabElementRefs(tab.id);\n tab.url = finalUrl;\n tab.dom = nextDom;\n tab.loadedUrl = finalUrl;\n tab.title =\n normalizeBrowserWorkspaceText(nextDom.window.document.title) ||\n inferBrowserWorkspaceTitle(finalUrl);\n tab.updatedAt = getBrowserWorkspaceTimestamp();\n pushWebBrowserWorkspaceHistory(tab, finalUrl);\n}\n\n// --- Web tab helpers that forms/activation need ---\n\nimport { clearBrowserWorkspaceElementRefs } from \"./browser-workspace-state.js\";\nimport type { BrowserWorkspaceTab } from \"./browser-workspace-types.js\";\n\nexport function clearWebBrowserWorkspaceTabElementRefs(tabId: string): void {\n clearBrowserWorkspaceElementRefs(\"web\", tabId);\n}\n\nexport function cloneWebBrowserWorkspaceTabState(\n tab: WebBrowserWorkspaceTabState,\n): BrowserWorkspaceTab {\n return {\n id: tab.id,\n title: tab.title,\n url: tab.url,\n partition: tab.partition,\n kind: tab.kind,\n visible: tab.visible,\n createdAt: tab.createdAt,\n updatedAt: tab.updatedAt,\n lastFocusedAt: tab.lastFocusedAt,\n };\n}\n\nexport function pushWebBrowserWorkspaceHistory(\n tab: WebBrowserWorkspaceTabState,\n nextUrl: string,\n): void {\n const nextHistory = tab.history.slice(0, tab.historyIndex + 1);\n nextHistory.push(nextUrl);\n tab.history = nextHistory;\n tab.historyIndex = nextHistory.length - 1;\n}\n\nexport async function loadWebBrowserWorkspaceTabDocument(\n tab: WebBrowserWorkspaceTabState,\n): Promise<void> {\n const state = getBrowserWorkspaceRuntimeState(\"web\", tab.id);\n if (tab.url === \"about:blank\") {\n tab.dom = createEmptyWebBrowserWorkspaceDom(tab.url);\n installBrowserWorkspaceWebRuntime(tab, tab.dom);\n tab.loadedUrl = tab.url;\n tab.title = \"New Tab\";\n tab.updatedAt = getBrowserWorkspaceTimestamp();\n return;\n }\n\n const response = await fetchBrowserWorkspaceTrackedResponse(\n state,\n tab.url,\n {},\n \"document\",\n );\n if (!response.ok) {\n throw new Error(\n `Browser workspace web load failed (${response.status}): ${tab.url}`,\n );\n }\n\n const html = await response.text();\n const finalUrl = assertBrowserWorkspaceUrl(response.url?.trim() || tab.url);\n const dom = new (getJSDOMClass())(html, {\n pretendToBeVisual: true,\n url: finalUrl,\n });\n installBrowserWorkspaceWebRuntime(tab, dom);\n resetBrowserWorkspaceRuntimeNavigationState(state);\n\n tab.dom = dom;\n tab.loadedUrl = finalUrl;\n tab.url = finalUrl;\n tab.title =\n normalizeBrowserWorkspaceText(dom.window.document.title) ||\n inferBrowserWorkspaceTitle(finalUrl);\n tab.updatedAt = getBrowserWorkspaceTimestamp();\n tab.history[tab.historyIndex] = finalUrl;\n}\n\nexport async function ensureLoadedWebBrowserWorkspaceTabDocument(\n tab: WebBrowserWorkspaceTabState,\n): Promise<JSDOM> {\n if (!tab.dom || tab.loadedUrl !== tab.url) {\n await loadWebBrowserWorkspaceTabDocument(tab);\n }\n return ensureBrowserWorkspaceDom(tab);\n}\n"],"mappings":"AACA;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,4CAA4C;AACrD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAOA,SAAS,yCACd,SACA,WAO4D;AAC5D,MACE,QAAQ,YAAY,WACpB,QAAQ,YAAY,cACpB,QAAQ,YAAY,UACpB;AACA,WAAO;AAAA,EAIT;AAEA,QAAM,IAAI;AAAA,IACR,2BAA2B,SAAS;AAAA,EACtC;AACF;AAEO,SAAS,sCACd,SACA,WACkB;AAClB,MAAI,QAAQ,YAAY,SAAS;AAC/B,UAAM,QAAQ;AACd,UAAM,OAAO,MAAM,KAAK,KAAK,EAAE,YAAY;AAC3C,QAAI,SAAS,cAAc,SAAS,SAAS;AAC3C,aAAO;AAAA,IACT;AAAA,EACF;AAEA,QAAM,IAAI;AAAA,IACR,2BAA2B,SAAS;AAAA,EACtC;AACF;AAEO,SAAS,gCACd,SACA,WACM;AACN,UAAQ,QAAQ;AAChB,MAAI,QAAQ,YAAY,YAAY;AAClC,YAAQ,cAAc;AAAA,EACxB;AACA,UAAQ,aAAa,SAAS,SAAS;AACzC;AAEA,eAAsB,mCACpB,KACA,SACA,WACwC;AACxC,QAAM,MAAM,QAAQ,QAAQ,YAAY;AACxC,MAAI,QAAQ,KAAK;AACf,UAAM,OAAO,QAAQ,aAAa,MAAM,GAAG,KAAK;AAChD,QAAI,CAAC,MAAM;AACT,YAAM,IAAI,MAAM,oCAAoC;AAAA,IACtD;AACA,UAAM,UAAU,IAAI,IAAI,MAAM,IAAI,GAAG,EAAE,SAAS;AAChD,2CAAuC,IAAI,EAAE;AAC7C,QAAI,MAAM,0BAA0B,OAAO;AAC3C,QAAI,QAAQ,2BAA2B,IAAI,GAAG;AAC9C,QAAI,MAAM;AACV,QAAI,YAAY;AAChB,mCAA+B,KAAK,IAAI,GAAG;AAC3C,UAAM,mCAAmC,GAAG;AAC5C,WAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA,KAAK,iCAAiC,GAAG;AAAA,MACzC,OAAO;AAAA,QACL,YAAY,cAAc,aAAa,IAAI;AAAA,QAC3C,UAAU,qCAAqC,OAAO;AAAA,QACtD,KAAK,IAAI;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAEA,QAAM,eAAe,QAAQ,UAAW,UAA+B;AACvE,QAAM,YAAY,cAAc,MAAM,YAAY,KAAK;AACvD,MAAI,iBAAiB,cAAc,cAAc,cAAc,UAAU;AACvE,iBAAa,UAAU,cAAc,UAAU,OAAO,CAAC,aAAa;AACpE,WAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA,OAAO;AAAA,QACL,SAAS,aAAa;AAAA,QACtB,YAAY,cAAc,aAAa,IAAI;AAAA,QAC3C,UAAU,qCAAqC,OAAO;AAAA,MACxD;AAAA,IACF;AAAA,EACF;AAEA,QAAM,aAAa,gCAAgC,OAAO;AAC1D,MACE,eACC,QAAQ,UACP,QAAQ,YACP,QAAQ,WACP,CAAC,UAAU,SAAS,QAAQ,EAAE,SAAS,aAAa,QAAQ,IAChE;AACA,UAAM,8BAA8B,KAAK,UAAU;AACnD,WAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA,KAAK,iCAAiC,GAAG;AAAA,MACzC,OAAO;AAAA,QACL,YAAY,cAAc,aAAa,IAAI;AAAA,QAC3C,UAAU,qCAAqC,OAAO;AAAA,QACtD,KAAK,IAAI;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA,OAAO;AAAA,MACL,YAAY,cAAc,aAAa,IAAI;AAAA,MAC3C,UAAU,qCAAqC,OAAO;AAAA,MACtD,MAAM,8BAA8B,QAAQ,WAAW;AAAA,IACzD;AAAA,EACF;AACF;AAEO,SAAS,gCACd,KACA,SACA,WACA,QAKA;AACA,QAAM,iBAAiB,OAAO,SAAS,MAAM,IACzC,KAAK,IAAI,GAAG,KAAK,IAAI,MAAM,CAAC,IAC5B;AACJ,QAAM,OAAO,cAAc,UAAU,cAAc,UAAU,MAAM;AACnE,QAAM,QACJ,cAAc,QAAQ,cAAc,SAChC,CAAC,iBACD;AAEN,MAAI,WAAW,mBAAmB,IAAI,OAAO,aAAa;AACxD,QAAI,SAAS,KAAK;AAChB,cAAQ,aAAa,QAAQ,aAAa,KAAK;AAC/C,aAAO;AAAA,QACL;AAAA,QACA,UAAU,qCAAqC,OAAO;AAAA,QACtD,OAAO,QAAQ;AAAA,MACjB;AAAA,IACF;AACA,YAAQ,cAAc,QAAQ,cAAc,KAAK;AACjD,WAAO;AAAA,MACL;AAAA,MACA,UAAU,qCAAqC,OAAO;AAAA,MACtD,OAAO,QAAQ;AAAA,IACjB;AAAA,EACF;AAEA,QAAM,MAAM,SAAS,MAAM,mBAAmB;AAC9C,QAAM,UAAU,OAAO,QAAQ,IAAI,IAAI,QAAQ,GAAG,KAAK,CAAC;AACxD,QAAM,OAAO,UAAU;AACvB,UAAQ,IAAI,IAAI,QAAQ,KAAK,IAAI;AACjC,SAAO;AAAA,IACL;AAAA,IACA,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AACF;AAEA,eAAsB,8BACpB,KACA,MACe;AACf,QAAM,QAAQ,gCAAgC,OAAO,IAAI,EAAE;AAC3D,QAAM,MAAM,0BAA0B,GAAG;AACzC,QAAM,SAAS,KAAK,aAAa,QAAQ,GAAG,KAAK,KAAK,IAAI;AAC1D,QAAM,UAAU,KAAK,aAAa,QAAQ,GAAG,KAAK,KAAK,OAAO,YAAY;AAC1E,QAAM,YAAY,IAAI,IAAI,QAAQ,IAAI,GAAG,EAAE,SAAS;AACpD,QAAM,WAAW,IAAI,IAAI,OAAO,SAAS,IAAI;AAC7C,QAAM,eAAe,IAAI,gBAAgB;AAEzC,aAAW,CAAC,KAAK,KAAK,KAAK,SAAS,QAAQ,GAAG;AAC7C,iBAAa,OAAO,KAAK,OAAO,KAAK,CAAC;AAAA,EACxC;AAEA,MAAI,WAAW,OAAO;AACpB,UAAM,UAAU,IAAI,IAAI,SAAS;AACjC,YAAQ,SAAS,aAAa,SAAS;AACvC,2CAAuC,IAAI,EAAE;AAC7C,QAAI,MAAM,QAAQ,SAAS;AAC3B,QAAI,QAAQ,2BAA2B,IAAI,GAAG;AAC9C,QAAI,MAAM;AACV,QAAI,YAAY;AAChB,mCAA+B,KAAK,IAAI,GAAG;AAC3C,UAAM,mCAAmC,GAAG;AAC5C;AAAA,EACF;AAEA,QAAM,WAAW,MAAM;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,MACE,MAAM,aAAa,SAAS;AAAA,MAC5B,SAAS;AAAA,QACP,gBAAgB;AAAA,MAClB;AAAA,MACA,QAAQ,OAAO,YAAY;AAAA,IAC7B;AAAA,IACA;AAAA,EACF;AAEA,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI;AAAA,MACR,yCAAyC,SAAS,MAAM,MAAM,SAAS;AAAA,IACzE;AAAA,EACF;AAEA,QAAM,OAAO,MAAM,SAAS,KAAK;AACjC,QAAM,WAAW,0BAA0B,SAAS,KAAK,KAAK,KAAK,SAAS;AAC5E,QAAM,UAAU,KAAK,cAAc,GAAG,MAAM;AAAA,IAC1C,mBAAmB;AAAA,IACnB,KAAK;AAAA,EACP,CAAC;AACD,oCAAkC,KAAK,OAAO;AAC9C,8CAA4C,KAAK;AACjD,yCAAuC,IAAI,EAAE;AAC7C,MAAI,MAAM;AACV,MAAI,MAAM;AACV,MAAI,YAAY;AAChB,MAAI,QACF,8BAA8B,QAAQ,OAAO,SAAS,KAAK,KAC3D,2BAA2B,QAAQ;AACrC,MAAI,YAAY,6BAA6B;AAC7C,iCAA+B,KAAK,QAAQ;AAC9C;AAIA,SAAS,wCAAwC;AAG1C,SAAS,uCAAuC,OAAqB;AAC1E,mCAAiC,OAAO,KAAK;AAC/C;AAEO,SAAS,iCACd,KACqB;AACrB,SAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,OAAO,IAAI;AAAA,IACX,KAAK,IAAI;AAAA,IACT,WAAW,IAAI;AAAA,IACf,MAAM,IAAI;AAAA,IACV,SAAS,IAAI;AAAA,IACb,WAAW,IAAI;AAAA,IACf,WAAW,IAAI;AAAA,IACf,eAAe,IAAI;AAAA,EACrB;AACF;AAEO,SAAS,+BACd,KACA,SACM;AACN,QAAM,cAAc,IAAI,QAAQ,MAAM,GAAG,IAAI,eAAe,CAAC;AAC7D,cAAY,KAAK,OAAO;AACxB,MAAI,UAAU;AACd,MAAI,eAAe,YAAY,SAAS;AAC1C;AAEA,eAAsB,mCACpB,KACe;AACf,QAAM,QAAQ,gCAAgC,OAAO,IAAI,EAAE;AAC3D,MAAI,IAAI,QAAQ,eAAe;AAC7B,QAAI,MAAM,kCAAkC,IAAI,GAAG;AACnD,sCAAkC,KAAK,IAAI,GAAG;AAC9C,QAAI,YAAY,IAAI;AACpB,QAAI,QAAQ;AACZ,QAAI,YAAY,6BAA6B;AAC7C;AAAA,EACF;AAEA,QAAM,WAAW,MAAM;AAAA,IACrB;AAAA,IACA,IAAI;AAAA,IACJ,CAAC;AAAA,IACD;AAAA,EACF;AACA,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI;AAAA,MACR,sCAAsC,SAAS,MAAM,MAAM,IAAI,GAAG;AAAA,IACpE;AAAA,EACF;AAEA,QAAM,OAAO,MAAM,SAAS,KAAK;AACjC,QAAM,WAAW,0BAA0B,SAAS,KAAK,KAAK,KAAK,IAAI,GAAG;AAC1E,QAAM,MAAM,KAAK,cAAc,GAAG,MAAM;AAAA,IACtC,mBAAmB;AAAA,IACnB,KAAK;AAAA,EACP,CAAC;AACD,oCAAkC,KAAK,GAAG;AAC1C,8CAA4C,KAAK;AAEjD,MAAI,MAAM;AACV,MAAI,YAAY;AAChB,MAAI,MAAM;AACV,MAAI,QACF,8BAA8B,IAAI,OAAO,SAAS,KAAK,KACvD,2BAA2B,QAAQ;AACrC,MAAI,YAAY,6BAA6B;AAC7C,MAAI,QAAQ,IAAI,YAAY,IAAI;AAClC;AAEA,eAAsB,2CACpB,KACgB;AAChB,MAAI,CAAC,IAAI,OAAO,IAAI,cAAc,IAAI,KAAK;AACzC,UAAM,mCAAmC,GAAG;AAAA,EAC9C;AACA,SAAO,0BAA0B,GAAG;AACtC;","names":[]}
|
|
@@ -22,4 +22,11 @@ export declare function writeBrowserWorkspaceFile(filePath: string, contents: st
|
|
|
22
22
|
export declare function normalizeBrowserWorkspaceCommand(command: BrowserWorkspaceCommand): BrowserWorkspaceCommand;
|
|
23
23
|
export declare function resolveBrowserWorkspaceCommandElementRefs(command: BrowserWorkspaceCommand, mode: BrowserWorkspaceMode, tabId: string): BrowserWorkspaceCommand;
|
|
24
24
|
export declare function buildBrowserWorkspaceCssStringLiteral(value: string): string;
|
|
25
|
+
/** GHSA-mhhr-9ph9-64j7 / elizaOS/eliza#6767 — arbitrary script must not run in Node (JSDOM). */
|
|
26
|
+
export declare const BROWSER_WORKSPACE_JSDOM_SCRIPT_FORBIDDEN = "Browser workspace arbitrary script execution is disabled in the JSDOM (web) backend because it runs in the Node.js agent process via unsafe eval patterns (GHSA-mhhr-9ph9-64j7). Use structured subactions (click, fill, get, wait on selector/url/text) or desktop browser workspace mode instead.";
|
|
27
|
+
export declare const BROWSER_WORKSPACE_USER_SCRIPT_FORBIDDEN = "Browser workspace arbitrary user script is disabled (GHSA-mhhr-9ph9-64j7). Use structured browser workspace subactions instead.";
|
|
28
|
+
export declare function isBrowserWorkspaceUserScriptAllowed(env?: NodeJS.ProcessEnv): boolean;
|
|
29
|
+
export declare function assertBrowserWorkspaceUserScriptAllowed(script: string | undefined, context: "eval" | "wait", mode: BrowserWorkspaceMode, env?: NodeJS.ProcessEnv): void;
|
|
30
|
+
export declare function createBrowserWorkspaceJsdomScriptExecutionError(context: "eval" | "wait"): Error;
|
|
31
|
+
export declare function assertBrowserWorkspaceJsdomScriptNotRequested(script: string | undefined, context: "eval" | "wait"): void;
|
|
25
32
|
//# sourceMappingURL=browser-workspace-helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-workspace-helpers.d.ts","sourceRoot":"","sources":["../../src/workspace/browser-workspace-helpers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"browser-workspace-helpers.d.ts","sourceRoot":"","sources":["../../src/workspace/browser-workspace-helpers.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,uBAAuB,EACvB,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,8BAA8B,CAAC;AAEtC,eAAO,MAAM,kBAAkB,QAAS,CAAC;AACzC,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAC5C,eAAO,MAAM,qBAAqB,0BAA0B,CAAC;AAC7D,eAAO,MAAM,4CAA4C,uBACnC,CAAC;AACvB,eAAO,MAAM,kCAAkC,2DACW,CAAC;AAC3D,eAAO,MAAM,yBAAyB,KAAoC,CAAC;AAE3E,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAM1E;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAIpE;AAED,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,OAAO,GACb,MAAM,GAAG,SAAS,CASpB;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CA0BhE;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAU9D;AAgCD,wBAAgB,yCAAyC,CACvD,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,MAAM,CAWR;AAED,wBAAgB,oCAAoC,CAClD,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACnC,OAAO,CAKT;AAED,wBAAgB,uCAAuC,CACrD,OAAO,EAAE,IAAI,CACX,uBAAuB,EACvB,oBAAoB,GAAG,mBAAmB,GAAG,WAAW,CACzD,EACD,iBAAiB,EAAE,MAAM,GACxB,MAAM,CAWR;AAED,wBAAgB,iDAAiD,CAC/D,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACpC,SAAS,EAAE,MAAM,GAChB,IAAI,CASN;AAED,wBAAgB,wCAAwC,CACtD,SAAS,EAAE,yBAAyB,GACnC,MAAM,CAER;AAED,wBAAgB,mCAAmC,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAMxE;AAED,wBAAgB,wCAAwC,CACtD,SAAS,EAAE,yBAAyB,GACnC,KAAK,CAMP;AAED,wBAAsB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAErD;AAED,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GAAG,UAAU,GAC5B,OAAO,CAAC,MAAM,CAAC,CAKjB;AAED,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,uBAAuB,GAC/B,uBAAuB,CA2BzB;AAED,wBAAgB,yCAAyC,CACvD,OAAO,EAAE,uBAAuB,EAChC,IAAI,EAAE,oBAAoB,EAC1B,KAAK,EAAE,MAAM,GACZ,uBAAuB,CA4BzB;AAED,wBAAgB,qCAAqC,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3E;AAED,gGAAgG;AAChG,eAAO,MAAM,wCAAwC,wSACkP,CAAC;AAExS,eAAO,MAAM,uCAAuC,oIAC+E,CAAC;AAEpI,wBAAgB,mCAAmC,CACjD,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAKT;AAED,wBAAgB,uCAAuC,CACrD,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,IAAI,EAAE,oBAAoB,EAC1B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,IAAI,CAkBN;AAED,wBAAgB,+CAA+C,CAC7D,OAAO,EAAE,MAAM,GAAG,MAAM,GACvB,KAAK,CAUP;AAED,wBAAgB,6CAA6C,CAC3D,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,OAAO,EAAE,MAAM,GAAG,MAAM,GACvB,IAAI,CAIN"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as fsp from "node:fs/promises";
|
|
2
2
|
import * as path from "node:path";
|
|
3
|
+
import { createBrowserWorkspaceError } from "./browser-workspace-errors.js";
|
|
3
4
|
import { resolveBrowserWorkspaceElementRef } from "./browser-workspace-state.js";
|
|
4
5
|
const DEFAULT_TIMEOUT_MS = 12e3;
|
|
5
6
|
const DEFAULT_WAIT_INTERVAL_MS = 120;
|
|
@@ -36,10 +37,16 @@ function assertBrowserWorkspaceUrl(rawUrl) {
|
|
|
36
37
|
try {
|
|
37
38
|
parsed = new URL(trimmed);
|
|
38
39
|
} catch {
|
|
39
|
-
throw
|
|
40
|
+
throw createBrowserWorkspaceError(
|
|
41
|
+
"invalid_url",
|
|
42
|
+
"url_validation",
|
|
43
|
+
`browser workspace rejected invalid URL: ${rawUrl}`
|
|
44
|
+
);
|
|
40
45
|
}
|
|
41
46
|
if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
|
|
42
|
-
throw
|
|
47
|
+
throw createBrowserWorkspaceError(
|
|
48
|
+
"invalid_url",
|
|
49
|
+
"url_validation",
|
|
43
50
|
`browser workspace only supports http/https URLs, got ${parsed.protocol}`
|
|
44
51
|
);
|
|
45
52
|
}
|
|
@@ -102,7 +109,9 @@ function assertBrowserWorkspaceConnectorSecretsNotExported(partition, operation)
|
|
|
102
109
|
if (!isConnectorBrowserWorkspacePartition(partition)) {
|
|
103
110
|
return;
|
|
104
111
|
}
|
|
105
|
-
throw
|
|
112
|
+
throw createBrowserWorkspaceError(
|
|
113
|
+
"connector_secret_export_forbidden",
|
|
114
|
+
operation,
|
|
106
115
|
`Connector browser sessions do not allow raw cookie, token, storage, or state export (${operation}). Use the returned partition/profile/session handle instead.`
|
|
107
116
|
);
|
|
108
117
|
}
|
|
@@ -110,12 +119,16 @@ function createBrowserWorkspaceDesktopOnlyMessage(subaction) {
|
|
|
110
119
|
return `Eliza browser workspace ${subaction} is only available in the desktop app.`;
|
|
111
120
|
}
|
|
112
121
|
function createBrowserWorkspaceNotFoundError(tabId) {
|
|
113
|
-
return
|
|
122
|
+
return createBrowserWorkspaceError(
|
|
123
|
+
"tab_not_found",
|
|
124
|
+
"tab_lookup",
|
|
114
125
|
`Browser workspace request failed (404): Tab ${tabId} was not found.`
|
|
115
126
|
);
|
|
116
127
|
}
|
|
117
128
|
function createBrowserWorkspaceCommandTargetError(subaction) {
|
|
118
|
-
return
|
|
129
|
+
return createBrowserWorkspaceError(
|
|
130
|
+
"target_missing",
|
|
131
|
+
subaction,
|
|
119
132
|
`Eliza browser workspace ${subaction} requires a current tab. Open or show a tab first, or pass an explicit id.`
|
|
120
133
|
);
|
|
121
134
|
}
|
|
@@ -155,7 +168,9 @@ function resolveBrowserWorkspaceCommandElementRefs(command, mode, tabId) {
|
|
|
155
168
|
match[1]
|
|
156
169
|
);
|
|
157
170
|
if (!resolvedSelector) {
|
|
158
|
-
throw
|
|
171
|
+
throw createBrowserWorkspaceError(
|
|
172
|
+
"unknown_element_ref",
|
|
173
|
+
"element_ref",
|
|
159
174
|
`Unknown browser snapshot element ref ${match[1]}. Run snapshot or inspect again before reusing element refs.`
|
|
160
175
|
);
|
|
161
176
|
}
|
|
@@ -167,20 +182,63 @@ function resolveBrowserWorkspaceCommandElementRefs(command, mode, tabId) {
|
|
|
167
182
|
function buildBrowserWorkspaceCssStringLiteral(value) {
|
|
168
183
|
return JSON.stringify(value);
|
|
169
184
|
}
|
|
185
|
+
const BROWSER_WORKSPACE_JSDOM_SCRIPT_FORBIDDEN = "Browser workspace arbitrary script execution is disabled in the JSDOM (web) backend because it runs in the Node.js agent process via unsafe eval patterns (GHSA-mhhr-9ph9-64j7). Use structured subactions (click, fill, get, wait on selector/url/text) or desktop browser workspace mode instead.";
|
|
186
|
+
const BROWSER_WORKSPACE_USER_SCRIPT_FORBIDDEN = "Browser workspace arbitrary user script is disabled (GHSA-mhhr-9ph9-64j7). Use structured browser workspace subactions instead.";
|
|
187
|
+
function isBrowserWorkspaceUserScriptAllowed(env = process.env) {
|
|
188
|
+
const flag = normalizeEnvValue(
|
|
189
|
+
env.ELIZA_BROWSER_WORKSPACE_ALLOW_USER_SCRIPT
|
|
190
|
+
)?.toLowerCase();
|
|
191
|
+
return flag === "1" || flag === "true" || flag === "yes";
|
|
192
|
+
}
|
|
193
|
+
function assertBrowserWorkspaceUserScriptAllowed(script, context, mode, env = process.env) {
|
|
194
|
+
if (!script?.trim()) {
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
if (mode === "web") {
|
|
198
|
+
throw createBrowserWorkspaceJsdomScriptExecutionError(context);
|
|
199
|
+
}
|
|
200
|
+
if (!isBrowserWorkspaceUserScriptAllowed(env)) {
|
|
201
|
+
const suffix = context === "eval" ? "Eval subactions with a user `script` are disabled by default." : "Wait conditions with a user `script` are disabled by default.";
|
|
202
|
+
throw createBrowserWorkspaceError(
|
|
203
|
+
"script_forbidden",
|
|
204
|
+
context,
|
|
205
|
+
`${BROWSER_WORKSPACE_USER_SCRIPT_FORBIDDEN} ${suffix} Set ELIZA_BROWSER_WORKSPACE_ALLOW_USER_SCRIPT=1 only on trusted single-user hosts.`
|
|
206
|
+
);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
function createBrowserWorkspaceJsdomScriptExecutionError(context) {
|
|
210
|
+
const suffix = context === "eval" ? "Eval subactions are not supported on the web backend." : "Wait conditions with `script` are not supported on the web backend.";
|
|
211
|
+
return createBrowserWorkspaceError(
|
|
212
|
+
"script_forbidden",
|
|
213
|
+
context,
|
|
214
|
+
`${BROWSER_WORKSPACE_JSDOM_SCRIPT_FORBIDDEN} ${suffix}`
|
|
215
|
+
);
|
|
216
|
+
}
|
|
217
|
+
function assertBrowserWorkspaceJsdomScriptNotRequested(script, context) {
|
|
218
|
+
if (script?.trim()) {
|
|
219
|
+
throw createBrowserWorkspaceJsdomScriptExecutionError(context);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
170
222
|
export {
|
|
223
|
+
BROWSER_WORKSPACE_JSDOM_SCRIPT_FORBIDDEN,
|
|
224
|
+
BROWSER_WORKSPACE_USER_SCRIPT_FORBIDDEN,
|
|
171
225
|
CONNECTOR_BROWSER_WORKSPACE_PARTITION_PREFIX,
|
|
172
226
|
DEFAULT_TIMEOUT_MS,
|
|
173
227
|
DEFAULT_WAIT_INTERVAL_MS,
|
|
174
228
|
DEFAULT_WEB_PARTITION,
|
|
175
229
|
DESKTOP_BRIDGE_UNAVAILABLE_MESSAGE,
|
|
176
230
|
assertBrowserWorkspaceConnectorSecretsNotExported,
|
|
231
|
+
assertBrowserWorkspaceJsdomScriptNotRequested,
|
|
177
232
|
assertBrowserWorkspaceUrl,
|
|
233
|
+
assertBrowserWorkspaceUserScriptAllowed,
|
|
178
234
|
browserWorkspacePageFetch,
|
|
179
235
|
buildBrowserWorkspaceCssStringLiteral,
|
|
180
236
|
createBrowserWorkspaceCommandTargetError,
|
|
181
237
|
createBrowserWorkspaceDesktopOnlyMessage,
|
|
238
|
+
createBrowserWorkspaceJsdomScriptExecutionError,
|
|
182
239
|
createBrowserWorkspaceNotFoundError,
|
|
183
240
|
inferBrowserWorkspaceTitle,
|
|
241
|
+
isBrowserWorkspaceUserScriptAllowed,
|
|
184
242
|
isConnectorBrowserWorkspacePartition,
|
|
185
243
|
normalizeBrowserWorkspaceCommand,
|
|
186
244
|
normalizeBrowserWorkspaceText,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/workspace/browser-workspace-helpers.ts"],"sourcesContent":["import * as fsp from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport { resolveBrowserWorkspaceElementRef } from \"./browser-workspace-state.js\";\nimport type {\n BrowserWorkspaceCommand,\n BrowserWorkspaceMode,\n BrowserWorkspaceSubaction,\n} from \"./browser-workspace-types.js\";\n\nexport const DEFAULT_TIMEOUT_MS = 12_000;\nexport const DEFAULT_WAIT_INTERVAL_MS = 120;\nexport const DEFAULT_WEB_PARTITION = \"persist:eliza-browser\";\nexport const CONNECTOR_BROWSER_WORKSPACE_PARTITION_PREFIX =\n \"persist:connector-\";\nexport const DESKTOP_BRIDGE_UNAVAILABLE_MESSAGE =\n \"Eliza browser workspace desktop bridge is unavailable.\";\nexport const browserWorkspacePageFetch = globalThis.fetch.bind(globalThis);\n\nexport function normalizeEnvValue(value: string | undefined): string | null {\n if (typeof value !== \"string\") {\n return null;\n }\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : null;\n}\n\nexport function normalizeBrowserWorkspaceText(value: unknown): string {\n return String(value ?? \"\")\n .replace(/\\s+/g, \" \")\n .trim();\n}\n\nexport function parseBrowserWorkspaceNumberLike(\n value: unknown,\n): number | undefined {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return value;\n }\n if (typeof value !== \"string\") {\n return undefined;\n }\n const parsed = Number.parseFloat(value.trim());\n return Number.isFinite(parsed) ? parsed : undefined;\n}\n\nexport function assertBrowserWorkspaceUrl(rawUrl: string): string {\n const trimmed = rawUrl.trim();\n if (trimmed === \"about:blank\") {\n return trimmed;\n }\n\n let parsed: URL;\n try {\n parsed = new URL(trimmed);\n } catch {\n throw new Error(`browser workspace rejected invalid URL: ${rawUrl}`);\n }\n\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n throw new Error(\n `browser workspace only supports http/https URLs, got ${parsed.protocol}`,\n );\n }\n\n return parsed.toString();\n}\n\nexport function inferBrowserWorkspaceTitle(url: string): string {\n if (url === \"about:blank\") {\n return \"New Tab\";\n }\n\n try {\n return new URL(url).hostname.replace(/^www\\./, \"\") || \"Eliza Browser\";\n } catch {\n return \"Eliza Browser\";\n }\n}\n\nfunction normalizeConnectorBrowserWorkspaceSegment(\n value: string,\n fieldName: string,\n): string {\n const normalized = value\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\")\n .replace(/-{2,}/g, \"-\")\n .slice(0, 64);\n if (!normalized) {\n throw new Error(`Eliza browser connector session requires ${fieldName}.`);\n }\n return normalized;\n}\n\nfunction hashConnectorBrowserWorkspacePartitionKey(\n provider: string,\n accountId: string,\n): string {\n const input = `${provider.trim().toLowerCase()}\\0${accountId.trim().toLowerCase()}`;\n let hash = 0x811c9dc5;\n for (let i = 0; i < input.length; i++) {\n hash ^= input.charCodeAt(i);\n hash = Math.imul(hash, 0x01000193) >>> 0;\n }\n return hash.toString(36).padStart(7, \"0\");\n}\n\nexport function resolveConnectorBrowserWorkspacePartition(\n provider: string,\n accountId: string,\n): string {\n const providerSegment = normalizeConnectorBrowserWorkspaceSegment(\n provider,\n \"provider\",\n );\n const accountSegment = normalizeConnectorBrowserWorkspaceSegment(\n accountId,\n \"accountId\",\n );\n const suffix = hashConnectorBrowserWorkspacePartitionKey(provider, accountId);\n return `${CONNECTOR_BROWSER_WORKSPACE_PARTITION_PREFIX}${providerSegment}-${accountSegment}-${suffix}`;\n}\n\nexport function isConnectorBrowserWorkspacePartition(\n partition: string | null | undefined,\n): boolean {\n return (partition ?? \"\")\n .trim()\n .toLowerCase()\n .startsWith(CONNECTOR_BROWSER_WORKSPACE_PARTITION_PREFIX);\n}\n\nexport function resolveBrowserWorkspaceCommandPartition(\n command: Pick<\n BrowserWorkspaceCommand,\n \"connectorAccountId\" | \"connectorProvider\" | \"partition\"\n >,\n fallbackPartition: string,\n): string {\n const explicitPartition = command.partition?.trim();\n if (explicitPartition) {\n return explicitPartition;\n }\n const provider = command.connectorProvider?.trim();\n const accountId = command.connectorAccountId?.trim();\n if (provider && accountId) {\n return resolveConnectorBrowserWorkspacePartition(provider, accountId);\n }\n return fallbackPartition;\n}\n\nexport function assertBrowserWorkspaceConnectorSecretsNotExported(\n partition: string | null | undefined,\n operation: string,\n): void {\n if (!isConnectorBrowserWorkspacePartition(partition)) {\n return;\n }\n throw new Error(\n `Connector browser sessions do not allow raw cookie, token, storage, or state export (${operation}). Use the returned partition/profile/session handle instead.`,\n );\n}\n\nexport function createBrowserWorkspaceDesktopOnlyMessage(\n subaction: BrowserWorkspaceSubaction,\n): string {\n return `Eliza browser workspace ${subaction} is only available in the desktop app.`;\n}\n\nexport function createBrowserWorkspaceNotFoundError(tabId: string): Error {\n return new Error(\n `Browser workspace request failed (404): Tab ${tabId} was not found.`,\n );\n}\n\nexport function createBrowserWorkspaceCommandTargetError(\n subaction: BrowserWorkspaceSubaction,\n): Error {\n return new Error(\n `Eliza browser workspace ${subaction} requires a current tab. Open or show a tab first, or pass an explicit id.`,\n );\n}\n\nexport async function sleep(ms: number): Promise<void> {\n await new Promise<void>((resolve) => setTimeout(resolve, ms));\n}\n\nexport async function writeBrowserWorkspaceFile(\n filePath: string,\n contents: string | Uint8Array,\n): Promise<string> {\n const resolved = path.resolve(filePath);\n await fsp.mkdir(path.dirname(resolved), { recursive: true });\n await fsp.writeFile(resolved, contents);\n return resolved;\n}\n\nexport function normalizeBrowserWorkspaceCommand(\n command: BrowserWorkspaceCommand,\n): BrowserWorkspaceCommand {\n const raw = command as BrowserWorkspaceCommand & Record<string, unknown>;\n const normalizedSubaction =\n typeof raw.subaction === \"string\"\n ? raw.subaction.trim().toLowerCase()\n : typeof raw.operation === \"string\"\n ? raw.operation.trim().toLowerCase()\n : \"\";\n const subaction =\n normalizedSubaction === \"goto\"\n ? \"navigate\"\n : normalizedSubaction === \"read\"\n ? \"get\"\n : command.subaction;\n const timeoutMs =\n parseBrowserWorkspaceNumberLike(command.timeoutMs) ??\n parseBrowserWorkspaceNumberLike(raw.ms) ??\n parseBrowserWorkspaceNumberLike(raw.milliseconds);\n\n return {\n ...command,\n subaction,\n timeoutMs,\n steps: Array.isArray(command.steps)\n ? command.steps.map((step) => normalizeBrowserWorkspaceCommand(step))\n : command.steps,\n };\n}\n\nexport function resolveBrowserWorkspaceCommandElementRefs(\n command: BrowserWorkspaceCommand,\n mode: BrowserWorkspaceMode,\n tabId: string,\n): BrowserWorkspaceCommand {\n const selector = command.selector?.trim();\n if (!selector) {\n return command;\n }\n\n const match = selector.match(/^(@e\\d+)([\\s\\S]*)$/i);\n if (!match?.[1]) {\n return command;\n }\n\n const resolvedSelector = resolveBrowserWorkspaceElementRef(\n mode,\n tabId,\n match[1],\n );\n if (!resolvedSelector) {\n throw new Error(\n `Unknown browser snapshot element ref ${match[1]}. Run snapshot or inspect again before reusing element refs.`,\n );\n }\n\n return {\n ...command,\n selector: `${resolvedSelector}${match[2] ?? \"\"}`,\n };\n}\n\nexport function buildBrowserWorkspaceCssStringLiteral(value: string): string {\n return JSON.stringify(value);\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/workspace/browser-workspace-helpers.ts"],"sourcesContent":["import * as fsp from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport { createBrowserWorkspaceError } from \"./browser-workspace-errors.js\";\nimport { resolveBrowserWorkspaceElementRef } from \"./browser-workspace-state.js\";\nimport type {\n BrowserWorkspaceCommand,\n BrowserWorkspaceMode,\n BrowserWorkspaceSubaction,\n} from \"./browser-workspace-types.js\";\n\nexport const DEFAULT_TIMEOUT_MS = 12_000;\nexport const DEFAULT_WAIT_INTERVAL_MS = 120;\nexport const DEFAULT_WEB_PARTITION = \"persist:eliza-browser\";\nexport const CONNECTOR_BROWSER_WORKSPACE_PARTITION_PREFIX =\n \"persist:connector-\";\nexport const DESKTOP_BRIDGE_UNAVAILABLE_MESSAGE =\n \"Eliza browser workspace desktop bridge is unavailable.\";\nexport const browserWorkspacePageFetch = globalThis.fetch.bind(globalThis);\n\nexport function normalizeEnvValue(value: string | undefined): string | null {\n if (typeof value !== \"string\") {\n return null;\n }\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : null;\n}\n\nexport function normalizeBrowserWorkspaceText(value: unknown): string {\n return String(value ?? \"\")\n .replace(/\\s+/g, \" \")\n .trim();\n}\n\nexport function parseBrowserWorkspaceNumberLike(\n value: unknown,\n): number | undefined {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return value;\n }\n if (typeof value !== \"string\") {\n return undefined;\n }\n const parsed = Number.parseFloat(value.trim());\n return Number.isFinite(parsed) ? parsed : undefined;\n}\n\nexport function assertBrowserWorkspaceUrl(rawUrl: string): string {\n const trimmed = rawUrl.trim();\n if (trimmed === \"about:blank\") {\n return trimmed;\n }\n\n let parsed: URL;\n try {\n parsed = new URL(trimmed);\n } catch {\n throw createBrowserWorkspaceError(\n \"invalid_url\",\n \"url_validation\",\n `browser workspace rejected invalid URL: ${rawUrl}`,\n );\n }\n\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n throw createBrowserWorkspaceError(\n \"invalid_url\",\n \"url_validation\",\n `browser workspace only supports http/https URLs, got ${parsed.protocol}`,\n );\n }\n\n return parsed.toString();\n}\n\nexport function inferBrowserWorkspaceTitle(url: string): string {\n if (url === \"about:blank\") {\n return \"New Tab\";\n }\n\n try {\n return new URL(url).hostname.replace(/^www\\./, \"\") || \"Eliza Browser\";\n } catch {\n return \"Eliza Browser\";\n }\n}\n\nfunction normalizeConnectorBrowserWorkspaceSegment(\n value: string,\n fieldName: string,\n): string {\n const normalized = value\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\")\n .replace(/-{2,}/g, \"-\")\n .slice(0, 64);\n if (!normalized) {\n throw new Error(`Eliza browser connector session requires ${fieldName}.`);\n }\n return normalized;\n}\n\nfunction hashConnectorBrowserWorkspacePartitionKey(\n provider: string,\n accountId: string,\n): string {\n const input = `${provider.trim().toLowerCase()}\\0${accountId.trim().toLowerCase()}`;\n let hash = 0x811c9dc5;\n for (let i = 0; i < input.length; i++) {\n hash ^= input.charCodeAt(i);\n hash = Math.imul(hash, 0x01000193) >>> 0;\n }\n return hash.toString(36).padStart(7, \"0\");\n}\n\nexport function resolveConnectorBrowserWorkspacePartition(\n provider: string,\n accountId: string,\n): string {\n const providerSegment = normalizeConnectorBrowserWorkspaceSegment(\n provider,\n \"provider\",\n );\n const accountSegment = normalizeConnectorBrowserWorkspaceSegment(\n accountId,\n \"accountId\",\n );\n const suffix = hashConnectorBrowserWorkspacePartitionKey(provider, accountId);\n return `${CONNECTOR_BROWSER_WORKSPACE_PARTITION_PREFIX}${providerSegment}-${accountSegment}-${suffix}`;\n}\n\nexport function isConnectorBrowserWorkspacePartition(\n partition: string | null | undefined,\n): boolean {\n return (partition ?? \"\")\n .trim()\n .toLowerCase()\n .startsWith(CONNECTOR_BROWSER_WORKSPACE_PARTITION_PREFIX);\n}\n\nexport function resolveBrowserWorkspaceCommandPartition(\n command: Pick<\n BrowserWorkspaceCommand,\n \"connectorAccountId\" | \"connectorProvider\" | \"partition\"\n >,\n fallbackPartition: string,\n): string {\n const explicitPartition = command.partition?.trim();\n if (explicitPartition) {\n return explicitPartition;\n }\n const provider = command.connectorProvider?.trim();\n const accountId = command.connectorAccountId?.trim();\n if (provider && accountId) {\n return resolveConnectorBrowserWorkspacePartition(provider, accountId);\n }\n return fallbackPartition;\n}\n\nexport function assertBrowserWorkspaceConnectorSecretsNotExported(\n partition: string | null | undefined,\n operation: string,\n): void {\n if (!isConnectorBrowserWorkspacePartition(partition)) {\n return;\n }\n throw createBrowserWorkspaceError(\n \"connector_secret_export_forbidden\",\n operation,\n `Connector browser sessions do not allow raw cookie, token, storage, or state export (${operation}). Use the returned partition/profile/session handle instead.`,\n );\n}\n\nexport function createBrowserWorkspaceDesktopOnlyMessage(\n subaction: BrowserWorkspaceSubaction,\n): string {\n return `Eliza browser workspace ${subaction} is only available in the desktop app.`;\n}\n\nexport function createBrowserWorkspaceNotFoundError(tabId: string): Error {\n return createBrowserWorkspaceError(\n \"tab_not_found\",\n \"tab_lookup\",\n `Browser workspace request failed (404): Tab ${tabId} was not found.`,\n );\n}\n\nexport function createBrowserWorkspaceCommandTargetError(\n subaction: BrowserWorkspaceSubaction,\n): Error {\n return createBrowserWorkspaceError(\n \"target_missing\",\n subaction,\n `Eliza browser workspace ${subaction} requires a current tab. Open or show a tab first, or pass an explicit id.`,\n );\n}\n\nexport async function sleep(ms: number): Promise<void> {\n await new Promise<void>((resolve) => setTimeout(resolve, ms));\n}\n\nexport async function writeBrowserWorkspaceFile(\n filePath: string,\n contents: string | Uint8Array,\n): Promise<string> {\n const resolved = path.resolve(filePath);\n await fsp.mkdir(path.dirname(resolved), { recursive: true });\n await fsp.writeFile(resolved, contents);\n return resolved;\n}\n\nexport function normalizeBrowserWorkspaceCommand(\n command: BrowserWorkspaceCommand,\n): BrowserWorkspaceCommand {\n const raw = command as BrowserWorkspaceCommand & Record<string, unknown>;\n const normalizedSubaction =\n typeof raw.subaction === \"string\"\n ? raw.subaction.trim().toLowerCase()\n : typeof raw.operation === \"string\"\n ? raw.operation.trim().toLowerCase()\n : \"\";\n const subaction =\n normalizedSubaction === \"goto\"\n ? \"navigate\"\n : normalizedSubaction === \"read\"\n ? \"get\"\n : command.subaction;\n const timeoutMs =\n parseBrowserWorkspaceNumberLike(command.timeoutMs) ??\n parseBrowserWorkspaceNumberLike(raw.ms) ??\n parseBrowserWorkspaceNumberLike(raw.milliseconds);\n\n return {\n ...command,\n subaction,\n timeoutMs,\n steps: Array.isArray(command.steps)\n ? command.steps.map((step) => normalizeBrowserWorkspaceCommand(step))\n : command.steps,\n };\n}\n\nexport function resolveBrowserWorkspaceCommandElementRefs(\n command: BrowserWorkspaceCommand,\n mode: BrowserWorkspaceMode,\n tabId: string,\n): BrowserWorkspaceCommand {\n const selector = command.selector?.trim();\n if (!selector) {\n return command;\n }\n\n const match = selector.match(/^(@e\\d+)([\\s\\S]*)$/i);\n if (!match?.[1]) {\n return command;\n }\n\n const resolvedSelector = resolveBrowserWorkspaceElementRef(\n mode,\n tabId,\n match[1],\n );\n if (!resolvedSelector) {\n throw createBrowserWorkspaceError(\n \"unknown_element_ref\",\n \"element_ref\",\n `Unknown browser snapshot element ref ${match[1]}. Run snapshot or inspect again before reusing element refs.`,\n );\n }\n\n return {\n ...command,\n selector: `${resolvedSelector}${match[2] ?? \"\"}`,\n };\n}\n\nexport function buildBrowserWorkspaceCssStringLiteral(value: string): string {\n return JSON.stringify(value);\n}\n\n/** GHSA-mhhr-9ph9-64j7 / elizaOS/eliza#6767 — arbitrary script must not run in Node (JSDOM). */\nexport const BROWSER_WORKSPACE_JSDOM_SCRIPT_FORBIDDEN =\n \"Browser workspace arbitrary script execution is disabled in the JSDOM (web) backend because it runs in the Node.js agent process via unsafe eval patterns (GHSA-mhhr-9ph9-64j7). Use structured subactions (click, fill, get, wait on selector/url/text) or desktop browser workspace mode instead.\";\n\nexport const BROWSER_WORKSPACE_USER_SCRIPT_FORBIDDEN =\n \"Browser workspace arbitrary user script is disabled (GHSA-mhhr-9ph9-64j7). Use structured browser workspace subactions instead.\";\n\nexport function isBrowserWorkspaceUserScriptAllowed(\n env: NodeJS.ProcessEnv = process.env,\n): boolean {\n const flag = normalizeEnvValue(\n env.ELIZA_BROWSER_WORKSPACE_ALLOW_USER_SCRIPT,\n )?.toLowerCase();\n return flag === \"1\" || flag === \"true\" || flag === \"yes\";\n}\n\nexport function assertBrowserWorkspaceUserScriptAllowed(\n script: string | undefined,\n context: \"eval\" | \"wait\",\n mode: BrowserWorkspaceMode,\n env: NodeJS.ProcessEnv = process.env,\n): void {\n if (!script?.trim()) {\n return;\n }\n if (mode === \"web\") {\n throw createBrowserWorkspaceJsdomScriptExecutionError(context);\n }\n if (!isBrowserWorkspaceUserScriptAllowed(env)) {\n const suffix =\n context === \"eval\"\n ? \"Eval subactions with a user `script` are disabled by default.\"\n : \"Wait conditions with a user `script` are disabled by default.\";\n throw createBrowserWorkspaceError(\n \"script_forbidden\",\n context,\n `${BROWSER_WORKSPACE_USER_SCRIPT_FORBIDDEN} ${suffix} Set ELIZA_BROWSER_WORKSPACE_ALLOW_USER_SCRIPT=1 only on trusted single-user hosts.`,\n );\n }\n}\n\nexport function createBrowserWorkspaceJsdomScriptExecutionError(\n context: \"eval\" | \"wait\",\n): Error {\n const suffix =\n context === \"eval\"\n ? \"Eval subactions are not supported on the web backend.\"\n : \"Wait conditions with `script` are not supported on the web backend.\";\n return createBrowserWorkspaceError(\n \"script_forbidden\",\n context,\n `${BROWSER_WORKSPACE_JSDOM_SCRIPT_FORBIDDEN} ${suffix}`,\n );\n}\n\nexport function assertBrowserWorkspaceJsdomScriptNotRequested(\n script: string | undefined,\n context: \"eval\" | \"wait\",\n): void {\n if (script?.trim()) {\n throw createBrowserWorkspaceJsdomScriptExecutionError(context);\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -3,5 +3,5 @@ export declare function browserWorkspacePatternMatches(pattern: string, value: s
|
|
|
3
3
|
export declare function normalizeBrowserWorkspaceHeaders(headers: Record<string, string> | undefined): Record<string, string>;
|
|
4
4
|
export declare function findBrowserWorkspaceNetworkRoute(state: BrowserWorkspaceRuntimeState, url: string): BrowserWorkspaceNetworkRoute | null;
|
|
5
5
|
export declare function recordBrowserWorkspaceNetworkRequest(state: BrowserWorkspaceRuntimeState, request: Omit<BrowserWorkspaceNetworkRequestRecord, "id" | "timestamp">): BrowserWorkspaceNetworkRequestRecord;
|
|
6
|
-
export declare function fetchBrowserWorkspaceTrackedResponse(state: BrowserWorkspaceRuntimeState, url: string, init: RequestInit, resourceType: string): Promise<Response>;
|
|
6
|
+
export declare function fetchBrowserWorkspaceTrackedResponse(state: BrowserWorkspaceRuntimeState, url: string, init: RequestInit | undefined, resourceType: string): Promise<Response>;
|
|
7
7
|
//# sourceMappingURL=browser-workspace-network.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-workspace-network.d.ts","sourceRoot":"","sources":["../../src/workspace/browser-workspace-network.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,oCAAoC,EACpC,4BAA4B,EAC5B,4BAA4B,EAC7B,MAAM,8BAA8B,CAAC;AAEtC,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,OAAO,CAwBT;AAED,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GAC1C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAYxB;AAED,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,4BAA4B,EACnC,GAAG,EAAE,MAAM,GACV,4BAA4B,GAAG,IAAI,CAOrC;AAED,wBAAgB,oCAAoC,CAClD,KAAK,EAAE,4BAA4B,EACnC,OAAO,EAAE,IAAI,CAAC,oCAAoC,EAAE,IAAI,GAAG,WAAW,CAAC,GACtE,oCAAoC,CAWtC;AAED,wBAAsB,oCAAoC,CACxD,KAAK,EAAE,4BAA4B,EACnC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"browser-workspace-network.d.ts","sourceRoot":"","sources":["../../src/workspace/browser-workspace-network.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,oCAAoC,EACpC,4BAA4B,EAC5B,4BAA4B,EAC7B,MAAM,8BAA8B,CAAC;AAEtC,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,OAAO,CAwBT;AAED,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GAC1C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAYxB;AAED,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,4BAA4B,EACnC,GAAG,EAAE,MAAM,GACV,4BAA4B,GAAG,IAAI,CAOrC;AAED,wBAAgB,oCAAoC,CAClD,KAAK,EAAE,4BAA4B,EACnC,OAAO,EAAE,IAAI,CAAC,oCAAoC,EAAE,IAAI,GAAG,WAAW,CAAC,GACtE,oCAAoC,CAWtC;AAED,wBAAsB,oCAAoC,CACxD,KAAK,EAAE,4BAA4B,EACnC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,WAAW,YAAK,EACtB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,QAAQ,CAAC,CA8FnB"}
|
|
@@ -51,6 +51,21 @@ export interface BrowserWorkspaceSnapshot {
|
|
|
51
51
|
mode: BrowserWorkspaceMode;
|
|
52
52
|
tabs: BrowserWorkspaceTab[];
|
|
53
53
|
}
|
|
54
|
+
export type BrowserWorkspaceEventType = "open" | "navigate" | "show" | "hide" | "close" | "eval.start" | "eval.end" | "eval.error" | "snapshot.success" | "snapshot.miss";
|
|
55
|
+
export interface BrowserWorkspaceEvent {
|
|
56
|
+
seq: number;
|
|
57
|
+
timestamp: string;
|
|
58
|
+
type: BrowserWorkspaceEventType;
|
|
59
|
+
tabId: string | null;
|
|
60
|
+
url?: string;
|
|
61
|
+
title?: string;
|
|
62
|
+
payload?: Record<string, unknown>;
|
|
63
|
+
}
|
|
64
|
+
export interface BrowserWorkspaceEventLogSnapshot {
|
|
65
|
+
events: BrowserWorkspaceEvent[];
|
|
66
|
+
latestSequence: number;
|
|
67
|
+
limit: number;
|
|
68
|
+
}
|
|
54
69
|
export interface BrowserWorkspaceBridgeConfig {
|
|
55
70
|
baseUrl: string;
|
|
56
71
|
token: string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-workspace-types.d.ts","sourceRoot":"","sources":["../../src/workspace/browser-workspace-types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"browser-workspace-types.d.ts","sourceRoot":"","sources":["../../src/workspace/browser-workspace-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/workspace/browser-workspace-types.ts"],"sourcesContent":["/// <reference path=\"../ambient-jsdom.d.ts\" />\nimport type { JSDOM } from \"jsdom\";\n\nexport type BrowserWorkspaceMode = \"cloud\" | \"desktop\" | \"web\";\n\nexport type BrowserWorkspaceTabKind = \"internal\" | \"standard\";\n\nexport const BROWSER_WORKSPACE_CONNECTOR_AUTH_STATES = [\n \"unknown\",\n \"ready\",\n \"auth_pending\",\n \"needs_reauth\",\n \"manual_handoff\",\n] as const;\nexport type BrowserWorkspaceConnectorAuthState =\n (typeof BROWSER_WORKSPACE_CONNECTOR_AUTH_STATES)[number];\n\nexport type BrowserWorkspaceConnectorSessionKind =\n | \"internal-browser\"\n | \"browser-bridge-companion\";\n\nexport type BrowserWorkspaceOperation =\n | \"list\"\n | \"open\"\n | \"navigate\"\n | \"show\"\n | \"hide\"\n | \"close\"\n | \"eval\"\n | \"screenshot\";\n\nexport type BrowserWorkspaceSubaction =\n | BrowserWorkspaceOperation\n | \"back\"\n | \"batch\"\n | \"check\"\n | \"clipboard\"\n | \"click\"\n | \"fill\"\n | \"find\"\n | \"focus\"\n | \"forward\"\n | \"frame\"\n | \"get\"\n | \"hover\"\n | \"inspect\"\n | \"keydown\"\n | \"keyup\"\n | \"keyboardinserttext\"\n | \"keyboardtype\"\n | \"console\"\n | \"cookies\"\n | \"diff\"\n | \"dialog\"\n | \"press\"\n | \"drag\"\n | \"errors\"\n | \"highlight\"\n | \"mouse\"\n | \"network\"\n | \"pdf\"\n | \"profiler\"\n | \"reload\"\n | \"scroll\"\n | \"scrollinto\"\n | \"select\"\n | \"set\"\n | \"snapshot\"\n | \"state\"\n | \"storage\"\n | \"tab\"\n | \"trace\"\n | \"type\"\n | \"dblclick\"\n | \"upload\"\n | \"uncheck\"\n | \"wait\"\n | \"window\"\n // Watch-mode subactions: visible cursor + faithful pointer/keyboard events.\n // Implemented in createDesktopBrowserWorkspaceCommandScript via the in-tab\n // window.__elizaTabKit installed by BROWSER_TAB_PRELOAD_SCRIPT.\n | \"realistic-click\"\n | \"realistic-fill\"\n | \"realistic-type\"\n | \"realistic-press\"\n | \"realistic-upload\"\n | \"cursor-move\"\n | \"cursor-hide\";\n\nexport type BrowserWorkspaceGetMode =\n | \"attr\"\n | \"box\"\n | \"checked\"\n | \"count\"\n | \"enabled\"\n | \"html\"\n | \"styles\"\n | \"text\"\n | \"title\"\n | \"url\"\n | \"value\"\n | \"visible\";\n\nexport type BrowserWorkspaceFindBy =\n | \"alt\"\n | \"first\"\n | \"label\"\n | \"last\"\n | \"nth\"\n | \"placeholder\"\n | \"role\"\n | \"testid\"\n | \"text\"\n | \"title\";\n\nexport type BrowserWorkspaceFindAction =\n | \"check\"\n | \"click\"\n | \"fill\"\n | \"focus\"\n | \"hover\"\n | \"text\"\n | \"type\"\n | \"uncheck\";\n\nexport type BrowserWorkspaceWaitState = \"hidden\" | \"visible\";\n\nexport type BrowserWorkspaceScrollDirection = \"down\" | \"left\" | \"right\" | \"up\";\n\nexport type BrowserWorkspaceClipboardAction =\n | \"copy\"\n | \"paste\"\n | \"read\"\n | \"write\";\n\nexport type BrowserWorkspaceMouseAction = \"down\" | \"move\" | \"up\" | \"wheel\";\n\nexport type BrowserWorkspaceMouseButton = \"left\" | \"middle\" | \"right\";\n\nexport type BrowserWorkspaceSetAction =\n | \"credentials\"\n | \"device\"\n | \"geo\"\n | \"headers\"\n | \"media\"\n | \"offline\"\n | \"viewport\";\n\nexport type BrowserWorkspaceCookieAction = \"clear\" | \"get\" | \"set\";\n\nexport type BrowserWorkspaceStorageArea = \"local\" | \"session\";\n\nexport type BrowserWorkspaceStorageAction = \"clear\" | \"get\" | \"set\";\n\nexport type BrowserWorkspaceNetworkAction =\n | \"harstart\"\n | \"harstop\"\n | \"request\"\n | \"requests\"\n | \"route\"\n | \"unroute\";\n\nexport type BrowserWorkspaceDialogAction = \"accept\" | \"dismiss\" | \"status\";\n\nexport type BrowserWorkspaceDiffAction = \"screenshot\" | \"snapshot\" | \"url\";\n\nexport type BrowserWorkspaceTraceAction = \"start\" | \"stop\";\n\nexport type BrowserWorkspaceProfilerAction = \"start\" | \"stop\";\n\nexport type BrowserWorkspaceStateAction = \"load\" | \"save\";\n\nexport type BrowserWorkspaceFrameAction = \"main\" | \"select\";\n\nexport type BrowserWorkspaceTabAction = \"close\" | \"list\" | \"new\" | \"switch\";\n\nexport type BrowserWorkspaceWindowAction = \"new\";\n\nexport type BrowserWorkspaceConsoleAction = \"clear\" | \"list\";\n\nexport interface BrowserWorkspaceTab {\n id: string;\n title: string;\n url: string;\n partition: string;\n kind?: BrowserWorkspaceTabKind;\n visible: boolean;\n createdAt: string;\n updatedAt: string;\n lastFocusedAt: string | null;\n /** Remote/cloud-managed providers expose a cached live-view image URL. */\n liveViewUrl?: string | null;\n /** Interactive live view (rfb/WebSocket stream) when the provider supports it. */\n interactiveLiveViewUrl?: string | null;\n /** Provider identifier when the tab is backed by a remote browser (e.g. \"browserbase\"). */\n provider?: string | null;\n /** Provider-specific status string for remote tabs (\"starting\", \"ready\", \"ended\"). */\n status?: string | null;\n}\n\nexport interface BrowserWorkspaceSnapshot {\n mode: BrowserWorkspaceMode;\n tabs: BrowserWorkspaceTab[];\n}\n\nexport interface BrowserWorkspaceBridgeConfig {\n baseUrl: string;\n token: string | null;\n}\n\nexport interface BrowserWorkspaceConnectorCompanionRef {\n browser?: string | null;\n companionId?: string | null;\n profileId?: string | null;\n profileLabel?: string | null;\n}\n\nexport interface AcquireBrowserWorkspaceConnectorSessionRequest {\n provider: string;\n accountId: string;\n url?: string;\n title?: string;\n show?: boolean;\n reuse?: boolean;\n authState?: BrowserWorkspaceConnectorAuthState;\n manualHandoffReason?: string | null;\n companion?: BrowserWorkspaceConnectorCompanionRef | null;\n}\n\nexport interface BrowserWorkspaceConnectorSessionRef {\n kind: BrowserWorkspaceConnectorSessionKind;\n handleId: string;\n partition: string | null;\n tabId: string | null;\n browser: string | null;\n companionId: string | null;\n profileId: string | null;\n profileLabel: string | null;\n}\n\nexport interface BrowserWorkspaceConnectorSessionHandle {\n provider: string;\n accountId: string;\n authState: BrowserWorkspaceConnectorAuthState;\n requiresManualHandoff: boolean;\n sessionRef: BrowserWorkspaceConnectorSessionRef;\n partition: string | null;\n tabId: string | null;\n companionId: string | null;\n browser: string | null;\n profileId: string | null;\n profileLabel: string | null;\n created: boolean;\n message: string | null;\n}\n\nexport interface OpenBrowserWorkspaceTabRequest {\n url?: string;\n title?: string;\n show?: boolean;\n partition?: string;\n connectorProvider?: string;\n connectorAccountId?: string;\n kind?: BrowserWorkspaceTabKind;\n width?: number;\n height?: number;\n}\n\nexport interface NavigateBrowserWorkspaceTabRequest {\n id: string;\n url: string;\n partition?: string;\n}\n\nexport interface EvaluateBrowserWorkspaceTabRequest {\n id: string;\n script: string;\n partition?: string;\n}\n\nexport interface BrowserWorkspaceDomElementSummary {\n ref?: string;\n selector: string;\n tag: string;\n text: string;\n type: string | null;\n name: string | null;\n href: string | null;\n value: string | null;\n}\n\nexport interface BrowserWorkspaceCommand {\n subaction: BrowserWorkspaceSubaction;\n operation?: BrowserWorkspaceSubaction | \"goto\" | \"read\";\n action?: BrowserWorkspaceFindAction;\n baselinePath?: string;\n button?: BrowserWorkspaceMouseButton;\n clipboardAction?: BrowserWorkspaceClipboardAction;\n compact?: boolean;\n consoleAction?: BrowserWorkspaceConsoleAction;\n cookieAction?: BrowserWorkspaceCookieAction;\n deltaX?: number;\n deltaY?: number;\n device?: string;\n dialogAction?: BrowserWorkspaceDialogAction;\n diffAction?: BrowserWorkspaceDiffAction;\n domain?: string;\n id?: string;\n entryKey?: string;\n filePath?: string;\n filter?: string;\n files?: string[];\n frameAction?: BrowserWorkspaceFrameAction;\n fullPage?: boolean;\n headers?: Record<string, string>;\n height?: number;\n url?: string;\n secondaryUrl?: string;\n title?: string;\n script?: string;\n show?: boolean;\n partition?: string;\n connectorProvider?: string;\n connectorAccountId?: string;\n selector?: string;\n text?: string;\n value?: string;\n attribute?: string;\n direction?: BrowserWorkspaceScrollDirection;\n exact?: boolean;\n findBy?: BrowserWorkspaceFindBy;\n index?: number;\n key?: string;\n latitude?: number;\n longitude?: number;\n media?: \"dark\" | \"light\";\n method?: string;\n mouseAction?: BrowserWorkspaceMouseAction;\n networkAction?: BrowserWorkspaceNetworkAction;\n offline?: boolean;\n outputPath?: string;\n getMode?: BrowserWorkspaceGetMode;\n name?: string;\n pixels?: number;\n profilerAction?: BrowserWorkspaceProfilerAction;\n promptText?: string;\n requestId?: string;\n responseBody?: string;\n responseHeaders?: Record<string, string>;\n responseStatus?: number;\n role?: string;\n scale?: number;\n setAction?: BrowserWorkspaceSetAction;\n state?: BrowserWorkspaceWaitState;\n stateAction?: BrowserWorkspaceStateAction;\n status?: string;\n storageAction?: BrowserWorkspaceStorageAction;\n storageArea?: BrowserWorkspaceStorageArea;\n tabAction?: BrowserWorkspaceTabAction;\n timeoutMs?: number;\n traceAction?: BrowserWorkspaceTraceAction;\n windowAction?: BrowserWorkspaceWindowAction;\n width?: number;\n x?: number;\n y?: number;\n username?: string;\n password?: string;\n ms?: number;\n milliseconds?: number;\n steps?: BrowserWorkspaceCommand[];\n /** Cursor animation duration (ms) for realistic-* and cursor-* subactions. */\n cursorDurationMs?: number;\n /** Per-character delay for realistic-type / realistic-fill (ms). */\n perCharDelayMs?: number;\n /** Replace existing input value when filling (vs append). */\n replace?: boolean;\n}\n\nexport interface BrowserWorkspaceCommandResult {\n mode: BrowserWorkspaceMode;\n subaction: BrowserWorkspaceSubaction;\n tab?: BrowserWorkspaceTab;\n tabs?: BrowserWorkspaceTab[];\n closed?: boolean;\n value?: unknown;\n elements?: BrowserWorkspaceDomElementSummary[];\n snapshot?: { data: string };\n steps?: BrowserWorkspaceCommandResult[];\n}\n\nexport interface BrowserWorkspaceConsoleEntry {\n level: \"error\" | \"info\" | \"log\" | \"warn\";\n message: string;\n timestamp: string;\n}\n\nexport interface BrowserWorkspaceErrorEntry {\n message: string;\n stack: string | null;\n timestamp: string;\n}\n\nexport interface BrowserWorkspaceDialogState {\n defaultValue: string | null;\n message: string;\n open: boolean;\n type: \"alert\" | \"beforeunload\" | \"confirm\" | \"prompt\";\n}\n\nexport interface BrowserWorkspaceMouseState {\n buttons: BrowserWorkspaceMouseButton[];\n x: number;\n y: number;\n}\n\nexport interface BrowserWorkspaceSettingsState {\n credentials: { password: string; username: string } | null;\n device: string | null;\n geo: { latitude: number; longitude: number } | null;\n headers: Record<string, string>;\n media: \"dark\" | \"light\" | null;\n offline: boolean;\n viewport: { height: number; scale: number; width: number } | null;\n}\n\nexport interface BrowserWorkspaceNetworkRoute {\n abort: boolean;\n body: string | null;\n headers: Record<string, string>;\n pattern: string;\n status: number | null;\n}\n\nexport interface BrowserWorkspaceNetworkRequestRecord {\n id: string;\n matchedRoute: string | null;\n method: string;\n resourceType: string;\n responseBody: string | null;\n responseHeaders: Record<string, string>;\n status: number | null;\n timestamp: string;\n url: string;\n}\n\nexport interface BrowserWorkspaceTraceRecord {\n active: boolean;\n entries: Array<Record<string, unknown>>;\n}\n\nexport interface BrowserWorkspaceProfilerRecord {\n active: boolean;\n entries: Array<Record<string, unknown>>;\n}\n\nexport interface BrowserWorkspaceHarRecord {\n active: boolean;\n entries: BrowserWorkspaceNetworkRequestRecord[];\n startedAt: string | null;\n}\n\nexport interface BrowserWorkspaceSnapshotRecord {\n bodyText: string;\n title: string;\n url: string;\n}\n\nexport interface BrowserWorkspaceRuntimeState {\n consoleEntries: BrowserWorkspaceConsoleEntry[];\n currentFrame: string | null;\n dialog: BrowserWorkspaceDialogState | null;\n errors: BrowserWorkspaceErrorEntry[];\n frameDoms: Map<string, JSDOM>;\n highlightedSelector: string | null;\n lastScreenshotData: string | null;\n lastSnapshot: BrowserWorkspaceSnapshotRecord | null;\n mouse: BrowserWorkspaceMouseState;\n networkHar: BrowserWorkspaceHarRecord;\n networkNextRequestId: number;\n networkRequests: BrowserWorkspaceNetworkRequestRecord[];\n networkRoutes: BrowserWorkspaceNetworkRoute[];\n settings: BrowserWorkspaceSettingsState;\n trace: BrowserWorkspaceTraceRecord;\n profiler: BrowserWorkspaceProfilerRecord;\n}\n\nexport interface WebBrowserWorkspaceTabState extends BrowserWorkspaceTab {\n dom: JSDOM | null;\n history: string[];\n historyIndex: number;\n loadedUrl: string | null;\n}\n"],"mappings":"AAOO,MAAM,0CAA0C;AAAA,EACrD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/workspace/browser-workspace-types.ts"],"sourcesContent":["import type { JSDOM } from \"jsdom\";\n\nexport type BrowserWorkspaceMode = \"cloud\" | \"desktop\" | \"web\";\n\nexport type BrowserWorkspaceTabKind = \"internal\" | \"standard\";\n\nexport const BROWSER_WORKSPACE_CONNECTOR_AUTH_STATES = [\n \"unknown\",\n \"ready\",\n \"auth_pending\",\n \"needs_reauth\",\n \"manual_handoff\",\n] as const;\nexport type BrowserWorkspaceConnectorAuthState =\n (typeof BROWSER_WORKSPACE_CONNECTOR_AUTH_STATES)[number];\n\nexport type BrowserWorkspaceConnectorSessionKind =\n | \"internal-browser\"\n | \"browser-bridge-companion\";\n\nexport type BrowserWorkspaceOperation =\n | \"list\"\n | \"open\"\n | \"navigate\"\n | \"show\"\n | \"hide\"\n | \"close\"\n | \"eval\"\n | \"screenshot\";\n\nexport type BrowserWorkspaceSubaction =\n | BrowserWorkspaceOperation\n | \"back\"\n | \"batch\"\n | \"check\"\n | \"clipboard\"\n | \"click\"\n | \"fill\"\n | \"find\"\n | \"focus\"\n | \"forward\"\n | \"frame\"\n | \"get\"\n | \"hover\"\n | \"inspect\"\n | \"keydown\"\n | \"keyup\"\n | \"keyboardinserttext\"\n | \"keyboardtype\"\n | \"console\"\n | \"cookies\"\n | \"diff\"\n | \"dialog\"\n | \"press\"\n | \"drag\"\n | \"errors\"\n | \"highlight\"\n | \"mouse\"\n | \"network\"\n | \"pdf\"\n | \"profiler\"\n | \"reload\"\n | \"scroll\"\n | \"scrollinto\"\n | \"select\"\n | \"set\"\n | \"snapshot\"\n | \"state\"\n | \"storage\"\n | \"tab\"\n | \"trace\"\n | \"type\"\n | \"dblclick\"\n | \"upload\"\n | \"uncheck\"\n | \"wait\"\n | \"window\"\n // Watch-mode subactions: visible cursor + faithful pointer/keyboard events.\n // Implemented in createDesktopBrowserWorkspaceCommandScript via the in-tab\n // window.__elizaTabKit installed by BROWSER_TAB_PRELOAD_SCRIPT.\n | \"realistic-click\"\n | \"realistic-fill\"\n | \"realistic-type\"\n | \"realistic-press\"\n | \"realistic-upload\"\n | \"cursor-move\"\n | \"cursor-hide\";\n\nexport type BrowserWorkspaceGetMode =\n | \"attr\"\n | \"box\"\n | \"checked\"\n | \"count\"\n | \"enabled\"\n | \"html\"\n | \"styles\"\n | \"text\"\n | \"title\"\n | \"url\"\n | \"value\"\n | \"visible\";\n\nexport type BrowserWorkspaceFindBy =\n | \"alt\"\n | \"first\"\n | \"label\"\n | \"last\"\n | \"nth\"\n | \"placeholder\"\n | \"role\"\n | \"testid\"\n | \"text\"\n | \"title\";\n\nexport type BrowserWorkspaceFindAction =\n | \"check\"\n | \"click\"\n | \"fill\"\n | \"focus\"\n | \"hover\"\n | \"text\"\n | \"type\"\n | \"uncheck\";\n\nexport type BrowserWorkspaceWaitState = \"hidden\" | \"visible\";\n\nexport type BrowserWorkspaceScrollDirection = \"down\" | \"left\" | \"right\" | \"up\";\n\nexport type BrowserWorkspaceClipboardAction =\n | \"copy\"\n | \"paste\"\n | \"read\"\n | \"write\";\n\nexport type BrowserWorkspaceMouseAction = \"down\" | \"move\" | \"up\" | \"wheel\";\n\nexport type BrowserWorkspaceMouseButton = \"left\" | \"middle\" | \"right\";\n\nexport type BrowserWorkspaceSetAction =\n | \"credentials\"\n | \"device\"\n | \"geo\"\n | \"headers\"\n | \"media\"\n | \"offline\"\n | \"viewport\";\n\nexport type BrowserWorkspaceCookieAction = \"clear\" | \"get\" | \"set\";\n\nexport type BrowserWorkspaceStorageArea = \"local\" | \"session\";\n\nexport type BrowserWorkspaceStorageAction = \"clear\" | \"get\" | \"set\";\n\nexport type BrowserWorkspaceNetworkAction =\n | \"harstart\"\n | \"harstop\"\n | \"request\"\n | \"requests\"\n | \"route\"\n | \"unroute\";\n\nexport type BrowserWorkspaceDialogAction = \"accept\" | \"dismiss\" | \"status\";\n\nexport type BrowserWorkspaceDiffAction = \"screenshot\" | \"snapshot\" | \"url\";\n\nexport type BrowserWorkspaceTraceAction = \"start\" | \"stop\";\n\nexport type BrowserWorkspaceProfilerAction = \"start\" | \"stop\";\n\nexport type BrowserWorkspaceStateAction = \"load\" | \"save\";\n\nexport type BrowserWorkspaceFrameAction = \"main\" | \"select\";\n\nexport type BrowserWorkspaceTabAction = \"close\" | \"list\" | \"new\" | \"switch\";\n\nexport type BrowserWorkspaceWindowAction = \"new\";\n\nexport type BrowserWorkspaceConsoleAction = \"clear\" | \"list\";\n\nexport interface BrowserWorkspaceTab {\n id: string;\n title: string;\n url: string;\n partition: string;\n kind?: BrowserWorkspaceTabKind;\n visible: boolean;\n createdAt: string;\n updatedAt: string;\n lastFocusedAt: string | null;\n /** Remote/cloud-managed providers expose a cached live-view image URL. */\n liveViewUrl?: string | null;\n /** Interactive live view (rfb/WebSocket stream) when the provider supports it. */\n interactiveLiveViewUrl?: string | null;\n /** Provider identifier when the tab is backed by a remote browser (e.g. \"browserbase\"). */\n provider?: string | null;\n /** Provider-specific status string for remote tabs (\"starting\", \"ready\", \"ended\"). */\n status?: string | null;\n}\n\nexport interface BrowserWorkspaceSnapshot {\n mode: BrowserWorkspaceMode;\n tabs: BrowserWorkspaceTab[];\n}\n\nexport type BrowserWorkspaceEventType =\n | \"open\"\n | \"navigate\"\n | \"show\"\n | \"hide\"\n | \"close\"\n | \"eval.start\"\n | \"eval.end\"\n | \"eval.error\"\n | \"snapshot.success\"\n | \"snapshot.miss\";\n\nexport interface BrowserWorkspaceEvent {\n seq: number;\n timestamp: string;\n type: BrowserWorkspaceEventType;\n tabId: string | null;\n url?: string;\n title?: string;\n payload?: Record<string, unknown>;\n}\n\nexport interface BrowserWorkspaceEventLogSnapshot {\n events: BrowserWorkspaceEvent[];\n latestSequence: number;\n limit: number;\n}\n\nexport interface BrowserWorkspaceBridgeConfig {\n baseUrl: string;\n token: string | null;\n}\n\nexport interface BrowserWorkspaceConnectorCompanionRef {\n browser?: string | null;\n companionId?: string | null;\n profileId?: string | null;\n profileLabel?: string | null;\n}\n\nexport interface AcquireBrowserWorkspaceConnectorSessionRequest {\n provider: string;\n accountId: string;\n url?: string;\n title?: string;\n show?: boolean;\n reuse?: boolean;\n authState?: BrowserWorkspaceConnectorAuthState;\n manualHandoffReason?: string | null;\n companion?: BrowserWorkspaceConnectorCompanionRef | null;\n}\n\nexport interface BrowserWorkspaceConnectorSessionRef {\n kind: BrowserWorkspaceConnectorSessionKind;\n handleId: string;\n partition: string | null;\n tabId: string | null;\n browser: string | null;\n companionId: string | null;\n profileId: string | null;\n profileLabel: string | null;\n}\n\nexport interface BrowserWorkspaceConnectorSessionHandle {\n provider: string;\n accountId: string;\n authState: BrowserWorkspaceConnectorAuthState;\n requiresManualHandoff: boolean;\n sessionRef: BrowserWorkspaceConnectorSessionRef;\n partition: string | null;\n tabId: string | null;\n companionId: string | null;\n browser: string | null;\n profileId: string | null;\n profileLabel: string | null;\n created: boolean;\n message: string | null;\n}\n\nexport interface OpenBrowserWorkspaceTabRequest {\n url?: string;\n title?: string;\n show?: boolean;\n partition?: string;\n connectorProvider?: string;\n connectorAccountId?: string;\n kind?: BrowserWorkspaceTabKind;\n width?: number;\n height?: number;\n}\n\nexport interface NavigateBrowserWorkspaceTabRequest {\n id: string;\n url: string;\n partition?: string;\n}\n\nexport interface EvaluateBrowserWorkspaceTabRequest {\n id: string;\n script: string;\n partition?: string;\n}\n\nexport interface BrowserWorkspaceDomElementSummary {\n ref?: string;\n selector: string;\n tag: string;\n text: string;\n type: string | null;\n name: string | null;\n href: string | null;\n value: string | null;\n}\n\nexport interface BrowserWorkspaceCommand {\n subaction: BrowserWorkspaceSubaction;\n operation?: BrowserWorkspaceSubaction | \"goto\" | \"read\";\n action?: BrowserWorkspaceFindAction;\n baselinePath?: string;\n button?: BrowserWorkspaceMouseButton;\n clipboardAction?: BrowserWorkspaceClipboardAction;\n compact?: boolean;\n consoleAction?: BrowserWorkspaceConsoleAction;\n cookieAction?: BrowserWorkspaceCookieAction;\n deltaX?: number;\n deltaY?: number;\n device?: string;\n dialogAction?: BrowserWorkspaceDialogAction;\n diffAction?: BrowserWorkspaceDiffAction;\n domain?: string;\n id?: string;\n entryKey?: string;\n filePath?: string;\n filter?: string;\n files?: string[];\n frameAction?: BrowserWorkspaceFrameAction;\n fullPage?: boolean;\n headers?: Record<string, string>;\n height?: number;\n url?: string;\n secondaryUrl?: string;\n title?: string;\n script?: string;\n show?: boolean;\n partition?: string;\n connectorProvider?: string;\n connectorAccountId?: string;\n selector?: string;\n text?: string;\n value?: string;\n attribute?: string;\n direction?: BrowserWorkspaceScrollDirection;\n exact?: boolean;\n findBy?: BrowserWorkspaceFindBy;\n index?: number;\n key?: string;\n latitude?: number;\n longitude?: number;\n media?: \"dark\" | \"light\";\n method?: string;\n mouseAction?: BrowserWorkspaceMouseAction;\n networkAction?: BrowserWorkspaceNetworkAction;\n offline?: boolean;\n outputPath?: string;\n getMode?: BrowserWorkspaceGetMode;\n name?: string;\n pixels?: number;\n profilerAction?: BrowserWorkspaceProfilerAction;\n promptText?: string;\n requestId?: string;\n responseBody?: string;\n responseHeaders?: Record<string, string>;\n responseStatus?: number;\n role?: string;\n scale?: number;\n setAction?: BrowserWorkspaceSetAction;\n state?: BrowserWorkspaceWaitState;\n stateAction?: BrowserWorkspaceStateAction;\n status?: string;\n storageAction?: BrowserWorkspaceStorageAction;\n storageArea?: BrowserWorkspaceStorageArea;\n tabAction?: BrowserWorkspaceTabAction;\n timeoutMs?: number;\n traceAction?: BrowserWorkspaceTraceAction;\n windowAction?: BrowserWorkspaceWindowAction;\n width?: number;\n x?: number;\n y?: number;\n username?: string;\n password?: string;\n ms?: number;\n milliseconds?: number;\n steps?: BrowserWorkspaceCommand[];\n /** Cursor animation duration (ms) for realistic-* and cursor-* subactions. */\n cursorDurationMs?: number;\n /** Per-character delay for realistic-type / realistic-fill (ms). */\n perCharDelayMs?: number;\n /** Replace existing input value when filling (vs append). */\n replace?: boolean;\n}\n\nexport interface BrowserWorkspaceCommandResult {\n mode: BrowserWorkspaceMode;\n subaction: BrowserWorkspaceSubaction;\n tab?: BrowserWorkspaceTab;\n tabs?: BrowserWorkspaceTab[];\n closed?: boolean;\n value?: unknown;\n elements?: BrowserWorkspaceDomElementSummary[];\n snapshot?: { data: string };\n steps?: BrowserWorkspaceCommandResult[];\n}\n\nexport interface BrowserWorkspaceConsoleEntry {\n level: \"error\" | \"info\" | \"log\" | \"warn\";\n message: string;\n timestamp: string;\n}\n\nexport interface BrowserWorkspaceErrorEntry {\n message: string;\n stack: string | null;\n timestamp: string;\n}\n\nexport interface BrowserWorkspaceDialogState {\n defaultValue: string | null;\n message: string;\n open: boolean;\n type: \"alert\" | \"beforeunload\" | \"confirm\" | \"prompt\";\n}\n\nexport interface BrowserWorkspaceMouseState {\n buttons: BrowserWorkspaceMouseButton[];\n x: number;\n y: number;\n}\n\nexport interface BrowserWorkspaceSettingsState {\n credentials: { password: string; username: string } | null;\n device: string | null;\n geo: { latitude: number; longitude: number } | null;\n headers: Record<string, string>;\n media: \"dark\" | \"light\" | null;\n offline: boolean;\n viewport: { height: number; scale: number; width: number } | null;\n}\n\nexport interface BrowserWorkspaceNetworkRoute {\n abort: boolean;\n body: string | null;\n headers: Record<string, string>;\n pattern: string;\n status: number | null;\n}\n\nexport interface BrowserWorkspaceNetworkRequestRecord {\n id: string;\n matchedRoute: string | null;\n method: string;\n resourceType: string;\n responseBody: string | null;\n responseHeaders: Record<string, string>;\n status: number | null;\n timestamp: string;\n url: string;\n}\n\nexport interface BrowserWorkspaceTraceRecord {\n active: boolean;\n entries: Array<Record<string, unknown>>;\n}\n\nexport interface BrowserWorkspaceProfilerRecord {\n active: boolean;\n entries: Array<Record<string, unknown>>;\n}\n\nexport interface BrowserWorkspaceHarRecord {\n active: boolean;\n entries: BrowserWorkspaceNetworkRequestRecord[];\n startedAt: string | null;\n}\n\nexport interface BrowserWorkspaceSnapshotRecord {\n bodyText: string;\n title: string;\n url: string;\n}\n\nexport interface BrowserWorkspaceRuntimeState {\n consoleEntries: BrowserWorkspaceConsoleEntry[];\n currentFrame: string | null;\n dialog: BrowserWorkspaceDialogState | null;\n errors: BrowserWorkspaceErrorEntry[];\n frameDoms: Map<string, JSDOM>;\n highlightedSelector: string | null;\n lastScreenshotData: string | null;\n lastSnapshot: BrowserWorkspaceSnapshotRecord | null;\n mouse: BrowserWorkspaceMouseState;\n networkHar: BrowserWorkspaceHarRecord;\n networkNextRequestId: number;\n networkRequests: BrowserWorkspaceNetworkRequestRecord[];\n networkRoutes: BrowserWorkspaceNetworkRoute[];\n settings: BrowserWorkspaceSettingsState;\n trace: BrowserWorkspaceTraceRecord;\n profiler: BrowserWorkspaceProfilerRecord;\n}\n\nexport interface WebBrowserWorkspaceTabState extends BrowserWorkspaceTab {\n dom: JSDOM | null;\n history: string[];\n historyIndex: number;\n loadedUrl: string | null;\n}\n"],"mappings":"AAMO,MAAM,0CAA0C;AAAA,EACrD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-workspace-web.d.ts","sourceRoot":"","sources":["../../src/workspace/browser-workspace-web.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"browser-workspace-web.d.ts","sourceRoot":"","sources":["../../src/workspace/browser-workspace-web.ts"],"names":[],"mappings":"AAqEA,OAAO,KAAK,EACV,uBAAuB,EACvB,6BAA6B,EAE7B,2BAA2B,EAC5B,MAAM,8BAA8B,CAAC;AAiBtC,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,MAAM,GACZ,2BAA2B,CAM7B;AAED,wBAAgB,qCAAqC,IAAI,2BAA2B,GAAG,IAAI,CAgB1F;AAED,wBAAgB,kCAAkC,CAChD,OAAO,EAAE,uBAAuB,GAC/B,MAAM,CASR;AAED,wBAAsB,wCAAwC,CAC5D,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,6BAA6B,GAAG,IAAI,CAAC,CAqwB/C;AAED,wBAAsB,oCAAoC,CACxD,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,6BAA6B,CAAC,CAqlBxC"}
|