@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
|
@@ -19,13 +19,15 @@ import {
|
|
|
19
19
|
import {
|
|
20
20
|
assertBrowserWorkspaceConnectorSecretsNotExported,
|
|
21
21
|
assertBrowserWorkspaceUrl,
|
|
22
|
+
assertBrowserWorkspaceUserScriptAllowed,
|
|
22
23
|
createBrowserWorkspaceNotFoundError,
|
|
23
24
|
DEFAULT_WEB_PARTITION,
|
|
24
25
|
inferBrowserWorkspaceTitle,
|
|
25
26
|
normalizeBrowserWorkspaceCommand,
|
|
26
27
|
resolveBrowserWorkspaceCommandPartition,
|
|
27
28
|
resolveConnectorBrowserWorkspacePartition,
|
|
28
|
-
sleep
|
|
29
|
+
sleep,
|
|
30
|
+
writeBrowserWorkspaceFile
|
|
29
31
|
} from "./browser-workspace-helpers.js";
|
|
30
32
|
import {
|
|
31
33
|
clearWebBrowserWorkspaceTabElementRefs,
|
|
@@ -526,6 +528,12 @@ async function executeBrowserWorkspaceCommand(command, env = process.env) {
|
|
|
526
528
|
command
|
|
527
529
|
);
|
|
528
530
|
}
|
|
531
|
+
assertBrowserWorkspaceUserScriptAllowed(
|
|
532
|
+
command.script,
|
|
533
|
+
"eval",
|
|
534
|
+
"desktop",
|
|
535
|
+
env
|
|
536
|
+
);
|
|
529
537
|
const id = await resolveDesktopBrowserWorkspaceTargetTabId(command, env);
|
|
530
538
|
return {
|
|
531
539
|
mode: "desktop",
|
|
@@ -655,7 +663,6 @@ async function executeBrowserWorkspaceCommand(command, env = process.env) {
|
|
|
655
663
|
const payload = { entries: target.entries };
|
|
656
664
|
const filePath = command.filePath?.trim() || command.outputPath?.trim();
|
|
657
665
|
if (filePath) {
|
|
658
|
-
const { writeBrowserWorkspaceFile } = await import("./browser-workspace-helpers.js");
|
|
659
666
|
await writeBrowserWorkspaceFile(
|
|
660
667
|
filePath,
|
|
661
668
|
JSON.stringify(payload, null, 2)
|
|
@@ -719,7 +726,6 @@ async function executeBrowserWorkspaceCommand(command, env = process.env) {
|
|
|
719
726
|
);
|
|
720
727
|
const filePath = command.filePath?.trim() || command.outputPath?.trim();
|
|
721
728
|
if (filePath) {
|
|
722
|
-
const { writeBrowserWorkspaceFile } = await import("./browser-workspace-helpers.js");
|
|
723
729
|
await writeBrowserWorkspaceFile(
|
|
724
730
|
filePath,
|
|
725
731
|
JSON.stringify(payload, null, 2)
|
|
@@ -750,7 +756,6 @@ async function executeBrowserWorkspaceCommand(command, env = process.env) {
|
|
|
750
756
|
snapshot.title,
|
|
751
757
|
snapshot.bodyText
|
|
752
758
|
);
|
|
753
|
-
const { writeBrowserWorkspaceFile } = await import("./browser-workspace-helpers.js");
|
|
754
759
|
const resolved = await writeBrowserWorkspaceFile(filePath, pdf);
|
|
755
760
|
return {
|
|
756
761
|
mode: "desktop",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/workspace/browser-workspace.ts"],"sourcesContent":["/**\n * Browser workspace — public API surface.\n *\n * Implementation is split across sibling modules:\n * browser-workspace-types.ts — all exported types and interfaces\n * browser-workspace-state.ts — global mutable state and CRUD helpers\n * browser-workspace-helpers.ts — small utilities, error factories, command normalization\n * browser-workspace-jsdom.ts — JSDOM loading, DOM creation, runtime setup\n * browser-workspace-elements.ts — element finding, selector parsing, inspection\n * browser-workspace-network.ts — network interception, HAR, tracked fetch\n * browser-workspace-forms.ts — form control interaction, activation, scrolling\n * browser-workspace-snapshots.ts — document snapshots, diff, PDF/screenshot\n * browser-workspace-desktop.ts — desktop bridge HTTP client and script generators\n * browser-workspace-web.ts — web-mode command execution\n *\n * This file re-exports every public symbol so external consumers are unaffected.\n */\n\nimport * as fsp from \"node:fs/promises\";\nimport * as path from \"node:path\";\n\n// ── Re-export types ──────────────────────────────────────────────────\nexport { BROWSER_WORKSPACE_CONNECTOR_AUTH_STATES } from \"./browser-workspace-types.js\";\nexport type {\n AcquireBrowserWorkspaceConnectorSessionRequest,\n BrowserWorkspaceBridgeConfig,\n BrowserWorkspaceClipboardAction,\n BrowserWorkspaceCommand,\n BrowserWorkspaceCommandResult,\n BrowserWorkspaceConnectorAuthState,\n BrowserWorkspaceConnectorCompanionRef,\n BrowserWorkspaceConnectorSessionHandle,\n BrowserWorkspaceConnectorSessionKind,\n BrowserWorkspaceConnectorSessionRef,\n BrowserWorkspaceConsoleAction,\n BrowserWorkspaceCookieAction,\n BrowserWorkspaceDialogAction,\n BrowserWorkspaceDiffAction,\n BrowserWorkspaceDomElementSummary,\n BrowserWorkspaceFindAction,\n BrowserWorkspaceFindBy,\n BrowserWorkspaceFrameAction,\n BrowserWorkspaceGetMode,\n BrowserWorkspaceMode,\n BrowserWorkspaceMouseAction,\n BrowserWorkspaceMouseButton,\n BrowserWorkspaceNetworkAction,\n BrowserWorkspaceOperation,\n BrowserWorkspaceProfilerAction,\n BrowserWorkspaceScrollDirection,\n BrowserWorkspaceSetAction,\n BrowserWorkspaceSnapshot,\n BrowserWorkspaceStateAction,\n BrowserWorkspaceStorageAction,\n BrowserWorkspaceStorageArea,\n BrowserWorkspaceSubaction,\n BrowserWorkspaceTab,\n BrowserWorkspaceTabAction,\n BrowserWorkspaceTabKind,\n BrowserWorkspaceTraceAction,\n BrowserWorkspaceWaitState,\n BrowserWorkspaceWindowAction,\n EvaluateBrowserWorkspaceTabRequest,\n NavigateBrowserWorkspaceTabRequest,\n OpenBrowserWorkspaceTabRequest,\n} from \"./browser-workspace-types.js\";\n\nimport type {\n AcquireBrowserWorkspaceConnectorSessionRequest,\n BrowserWorkspaceCommand,\n BrowserWorkspaceCommandResult,\n BrowserWorkspaceConnectorAuthState,\n BrowserWorkspaceConnectorCompanionRef,\n BrowserWorkspaceConnectorSessionHandle,\n BrowserWorkspaceConnectorSessionRef,\n BrowserWorkspaceMode,\n BrowserWorkspaceSnapshot,\n BrowserWorkspaceTab,\n BrowserWorkspaceTabKind,\n EvaluateBrowserWorkspaceTabRequest,\n NavigateBrowserWorkspaceTabRequest,\n OpenBrowserWorkspaceTabRequest,\n} from \"./browser-workspace-types.js\";\n\n// ── Re-export state ──────────────────────────────────────────────────\nexport { __resetBrowserWorkspaceStateForTests } from \"./browser-workspace-state.js\";\n\n// ── Re-export desktop bridge ─────────────────────────────────────────\nimport {\n evaluateBrowserWorkspaceTab as evaluateBrowserWorkspaceTabDesktop,\n executeDesktopBrowserWorkspaceDomCommand,\n executeDesktopBrowserWorkspaceUtilityCommand,\n getBrowserWorkspaceUnavailableMessage,\n getDesktopBrowserWorkspaceSessionState,\n getDesktopBrowserWorkspaceSnapshotRecord,\n isBrowserWorkspaceBridgeConfigured,\n loadDesktopBrowserWorkspaceSessionState,\n requestBrowserWorkspace,\n resolveBrowserWorkspaceBridgeConfig,\n resolveDesktopBrowserWorkspaceTargetTabId,\n snapshotBrowserWorkspaceTab as snapshotBrowserWorkspaceTabDesktop,\n} from \"./browser-workspace-desktop.js\";\n// ── Re-export helpers ────────────────────────────────────────────────\nimport {\n assertBrowserWorkspaceConnectorSecretsNotExported,\n assertBrowserWorkspaceUrl,\n createBrowserWorkspaceNotFoundError,\n DEFAULT_WEB_PARTITION,\n inferBrowserWorkspaceTitle,\n normalizeBrowserWorkspaceCommand,\n resolveBrowserWorkspaceCommandPartition,\n resolveConnectorBrowserWorkspacePartition,\n sleep,\n} from \"./browser-workspace-helpers.js\";\n\nexport {\n getBrowserWorkspaceUnavailableMessage,\n isBrowserWorkspaceBridgeConfigured,\n resolveBrowserWorkspaceBridgeConfig,\n};\n\n// ── Re-export forms ─────────────────────────────────────────────────\nimport {\n clearWebBrowserWorkspaceTabElementRefs,\n cloneWebBrowserWorkspaceTabState,\n loadWebBrowserWorkspaceTabDocument,\n pushWebBrowserWorkspaceHistory,\n} from \"./browser-workspace-forms.js\";\n// ── Re-export network ────────────────────────────────────────────────\nimport { browserWorkspacePageFetch } from \"./browser-workspace-helpers.js\";\n// ── Re-export jsdom ──────────────────────────────────────────────────\nimport {\n createEmptyWebBrowserWorkspaceDom,\n installBrowserWorkspaceWebRuntime,\n} from \"./browser-workspace-jsdom.js\";\n// ── Re-export snapshots ──────────────────────────────────────────────\nimport {\n createBrowserWorkspacePdfBuffer,\n createBrowserWorkspaceSnapshotRecord,\n diffBrowserWorkspaceSnapshots,\n} from \"./browser-workspace-snapshots.js\";\n// ── Imports for state ────────────────────────────────────────────────\nimport {\n clearBrowserWorkspaceElementRefs,\n clearBrowserWorkspaceRuntimeState,\n getBrowserWorkspaceRuntimeState,\n getBrowserWorkspaceTimestamp,\n resetBrowserWorkspaceRuntimeNavigationState,\n webWorkspaceState,\n withWebStateLock,\n} from \"./browser-workspace-state.js\";\n// ── Re-export web ────────────────────────────────────────────────────\nimport {\n executeWebBrowserWorkspaceDomCommand,\n executeWebBrowserWorkspaceUtilityCommand,\n findWebBrowserWorkspaceTargetTabId,\n getWebBrowserWorkspaceTabIndex,\n getWebBrowserWorkspaceTabState,\n} from \"./browser-workspace-web.js\";\n\nconst AGENT_BROWSER_WORKSPACE_PARTITION = \"persist:eliza-browser-agent\";\nconst CONNECTOR_MANUAL_STATES = new Set<BrowserWorkspaceConnectorAuthState>([\n \"auth_pending\",\n \"needs_reauth\",\n \"manual_handoff\",\n]);\n\n// ────────────────────────────────────────────────────────────────────\n// Public API functions\n// ────────────────────────────────────────────────────────────────────\n\nexport function getBrowserWorkspaceMode(\n env: NodeJS.ProcessEnv = process.env,\n): BrowserWorkspaceMode {\n return isBrowserWorkspaceBridgeConfigured(env) ? \"desktop\" : \"web\";\n}\n\nexport function resolveBrowserWorkspaceConnectorPartition(\n provider: string,\n accountId: string,\n): string {\n return resolveConnectorBrowserWorkspacePartition(provider, accountId);\n}\n\nfunction normalizeConnectorAuthState(\n value: BrowserWorkspaceConnectorAuthState | undefined,\n fallback: BrowserWorkspaceConnectorAuthState,\n): BrowserWorkspaceConnectorAuthState {\n switch (value) {\n case \"unknown\":\n case \"ready\":\n case \"auth_pending\":\n case \"needs_reauth\":\n case \"manual_handoff\":\n return value;\n default:\n return fallback;\n }\n}\n\nfunction connectorSessionRequiresManualHandoff(\n state: BrowserWorkspaceConnectorAuthState,\n): boolean {\n return CONNECTOR_MANUAL_STATES.has(state);\n}\n\nfunction createConnectorSessionRef(\n ref: BrowserWorkspaceConnectorSessionRef,\n): BrowserWorkspaceConnectorSessionRef {\n return {\n kind: ref.kind,\n handleId: ref.handleId,\n partition: ref.partition,\n tabId: ref.tabId,\n browser: ref.browser,\n companionId: ref.companionId,\n profileId: ref.profileId,\n profileLabel: ref.profileLabel,\n };\n}\n\nfunction createConnectorSessionHandle(args: {\n provider: string;\n accountId: string;\n authState: BrowserWorkspaceConnectorAuthState;\n ref: BrowserWorkspaceConnectorSessionRef;\n created: boolean;\n message?: string | null;\n}): BrowserWorkspaceConnectorSessionHandle {\n const sessionRef = createConnectorSessionRef(args.ref);\n return {\n provider: args.provider,\n accountId: args.accountId,\n authState: args.authState,\n requiresManualHandoff: connectorSessionRequiresManualHandoff(\n args.authState,\n ),\n sessionRef,\n partition: sessionRef.partition,\n tabId: sessionRef.tabId,\n companionId: sessionRef.companionId,\n browser: sessionRef.browser,\n profileId: sessionRef.profileId,\n profileLabel: sessionRef.profileLabel,\n created: args.created,\n message: args.message ?? null,\n };\n}\n\nfunction createBrowserBridgeConnectorSessionHandle(args: {\n provider: string;\n accountId: string;\n companion: BrowserWorkspaceConnectorCompanionRef;\n authState: BrowserWorkspaceConnectorAuthState;\n message?: string | null;\n}): BrowserWorkspaceConnectorSessionHandle {\n const browser = args.companion.browser?.trim() || null;\n const companionId = args.companion.companionId?.trim() || null;\n const profileId = args.companion.profileId?.trim() || null;\n const profileLabel = args.companion.profileLabel?.trim() || null;\n return createConnectorSessionHandle({\n provider: args.provider,\n accountId: args.accountId,\n authState: args.authState,\n created: false,\n message: args.message,\n ref: {\n kind: \"browser-bridge-companion\",\n handleId: [\n \"browser-bridge\",\n browser ?? \"browser\",\n companionId ?? profileId ?? \"profile\",\n args.provider,\n args.accountId,\n ].join(\":\"),\n partition: null,\n tabId: null,\n browser,\n companionId,\n profileId,\n profileLabel,\n },\n });\n}\n\nasync function assertDesktopBrowserWorkspaceCanAccessProfileSecrets(\n command: BrowserWorkspaceCommand,\n env: NodeJS.ProcessEnv,\n operation: string,\n): Promise<void> {\n const id = await resolveDesktopBrowserWorkspaceTargetTabId(command, env);\n const tabs = await listBrowserWorkspaceTabs(env);\n const tab = tabs.find((entry) => entry.id === id) ?? null;\n assertBrowserWorkspaceConnectorSecretsNotExported(tab?.partition, operation);\n}\n\nexport async function acquireBrowserWorkspaceConnectorSession(\n request: AcquireBrowserWorkspaceConnectorSessionRequest,\n env: NodeJS.ProcessEnv = process.env,\n): Promise<BrowserWorkspaceConnectorSessionHandle> {\n const provider = request.provider.trim();\n const accountId = request.accountId.trim();\n if (!provider) {\n throw new Error(\"Eliza browser connector session requires provider.\");\n }\n if (!accountId) {\n throw new Error(\"Eliza browser connector session requires accountId.\");\n }\n\n const companion = request.companion ?? null;\n if (companion?.profileId || companion?.companionId) {\n const authState = normalizeConnectorAuthState(\n request.authState,\n \"manual_handoff\",\n );\n return createBrowserBridgeConnectorSessionHandle({\n provider,\n accountId,\n companion,\n authState,\n message:\n request.manualHandoffReason ??\n \"Use the paired browser companion profile to finish login, MFA, or CAPTCHA if required.\",\n });\n }\n\n if (isBrowserWorkspaceBridgeConfigured(env)) {\n const payload = await requestBrowserWorkspace<{\n session: BrowserWorkspaceConnectorSessionHandle;\n }>(\n \"/sessions/acquire\",\n {\n method: \"POST\",\n body: JSON.stringify({\n accountId,\n authState: request.authState,\n manualHandoffReason: request.manualHandoffReason,\n provider,\n reuse: request.reuse,\n show: request.show,\n title: request.title,\n url: request.url,\n }),\n },\n env,\n );\n return payload.session;\n }\n\n const partition = resolveBrowserWorkspaceConnectorPartition(\n provider,\n accountId,\n );\n const reuse = request.reuse !== false;\n const tabs = reuse ? await listBrowserWorkspaceTabs(env) : [];\n const existing = tabs.find((tab) => tab.partition === partition) ?? null;\n let tab = existing;\n let created = false;\n\n if (!tab) {\n tab = await openBrowserWorkspaceTab(\n {\n kind: \"internal\",\n partition,\n show: request.show ?? true,\n title: request.title,\n url: request.url,\n },\n env,\n );\n created = true;\n } else if (request.show === true) {\n tab = await showBrowserWorkspaceTab(tab.id, env);\n }\n\n const authState = normalizeConnectorAuthState(\n request.authState,\n created ? \"auth_pending\" : \"ready\",\n );\n return createConnectorSessionHandle({\n provider,\n accountId,\n authState,\n created,\n message:\n request.manualHandoffReason ??\n (connectorSessionRequiresManualHandoff(authState)\n ? \"Manual login, MFA, or CAPTCHA may be required in this isolated connector browser session.\"\n : null),\n ref: {\n kind: \"internal-browser\",\n handleId: `internal-browser:${partition}`,\n partition,\n tabId: tab.id,\n browser: null,\n companionId: null,\n profileId: null,\n profileLabel: null,\n },\n });\n}\n\nexport async function getBrowserWorkspaceSnapshot(\n env: NodeJS.ProcessEnv = process.env,\n): Promise<BrowserWorkspaceSnapshot> {\n return {\n mode: getBrowserWorkspaceMode(env),\n tabs: await listBrowserWorkspaceTabs(env),\n };\n}\n\nexport async function listBrowserWorkspaceTabs(\n env: NodeJS.ProcessEnv = process.env,\n): Promise<BrowserWorkspaceTab[]> {\n if (!isBrowserWorkspaceBridgeConfigured(env)) {\n return webWorkspaceState.tabs.map((tab) => ({\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\n const payload = await requestBrowserWorkspace<{\n tabs?: BrowserWorkspaceTab[];\n }>(\"/tabs\", undefined, env);\n return Array.isArray(payload.tabs) ? payload.tabs : [];\n}\n\nexport async function openBrowserWorkspaceTab(\n request: OpenBrowserWorkspaceTabRequest,\n env: NodeJS.ProcessEnv = process.env,\n): Promise<BrowserWorkspaceTab> {\n if (!isBrowserWorkspaceBridgeConfigured(env)) {\n return withWebStateLock(() => {\n const kind: BrowserWorkspaceTabKind =\n request.kind === \"internal\" ? \"internal\" : \"standard\";\n const now = getBrowserWorkspaceTimestamp();\n const url = assertBrowserWorkspaceUrl(\n request.url?.trim() || \"about:blank\",\n );\n const visible = request.show === true;\n const id = `btab_${webWorkspaceState.nextId++}`;\n const dom =\n url === \"about:blank\" ? createEmptyWebBrowserWorkspaceDom(url) : null;\n const tab = {\n id,\n title: request.title?.trim() || inferBrowserWorkspaceTitle(url),\n url,\n partition: request.partition?.trim() || DEFAULT_WEB_PARTITION,\n kind,\n visible,\n createdAt: now,\n updatedAt: now,\n lastFocusedAt: visible ? now : null,\n dom,\n history: [url],\n historyIndex: 0,\n loadedUrl: url === \"about:blank\" ? url : null,\n };\n if (dom) {\n installBrowserWorkspaceWebRuntime(tab, dom);\n }\n getBrowserWorkspaceRuntimeState(\"web\", tab.id);\n clearWebBrowserWorkspaceTabElementRefs(tab.id);\n if (tab.visible) {\n webWorkspaceState.tabs = webWorkspaceState.tabs.map((entry) => ({\n ...entry,\n visible: false,\n }));\n }\n webWorkspaceState.tabs = [...webWorkspaceState.tabs, tab];\n return cloneWebBrowserWorkspaceTabState(tab);\n });\n }\n\n const payload = await requestBrowserWorkspace<{ tab: BrowserWorkspaceTab }>(\n \"/tabs\",\n {\n method: \"POST\",\n body: JSON.stringify(request),\n },\n env,\n );\n return payload.tab;\n}\n\nexport async function navigateBrowserWorkspaceTab(\n request: NavigateBrowserWorkspaceTabRequest,\n env: NodeJS.ProcessEnv = process.env,\n): Promise<BrowserWorkspaceTab> {\n const nextUrl = assertBrowserWorkspaceUrl(request.url);\n\n if (!isBrowserWorkspaceBridgeConfigured(env)) {\n return withWebStateLock(() => {\n const index = getWebBrowserWorkspaceTabIndex(request.id);\n if (index < 0) {\n throw createBrowserWorkspaceNotFoundError(request.id);\n }\n\n const existing = webWorkspaceState.tabs[index];\n const updatedAt = getBrowserWorkspaceTimestamp();\n const state = getBrowserWorkspaceRuntimeState(\"web\", existing.id);\n clearWebBrowserWorkspaceTabElementRefs(existing.id);\n pushWebBrowserWorkspaceHistory(existing, nextUrl);\n const nextDom =\n nextUrl === \"about:blank\"\n ? createEmptyWebBrowserWorkspaceDom(nextUrl)\n : null;\n const nextTab = {\n ...existing,\n title: inferBrowserWorkspaceTitle(nextUrl),\n url: nextUrl,\n updatedAt,\n dom: nextDom,\n loadedUrl: nextUrl === \"about:blank\" ? nextUrl : null,\n };\n if (nextDom) {\n installBrowserWorkspaceWebRuntime(nextTab, nextDom);\n }\n resetBrowserWorkspaceRuntimeNavigationState(state);\n webWorkspaceState.tabs[index] = nextTab;\n return cloneWebBrowserWorkspaceTabState(nextTab);\n });\n }\n\n const navigateBody: { url: string; partition?: string } = { url: nextUrl };\n if (request.partition !== undefined) {\n navigateBody.partition = request.partition;\n }\n\n const payload = await requestBrowserWorkspace<{ tab: BrowserWorkspaceTab }>(\n `/tabs/${encodeURIComponent(request.id)}/navigate`,\n {\n method: \"POST\",\n body: JSON.stringify(navigateBody),\n },\n env,\n );\n return payload.tab;\n}\n\nexport async function showBrowserWorkspaceTab(\n id: string,\n env: NodeJS.ProcessEnv = process.env,\n): Promise<BrowserWorkspaceTab> {\n if (!isBrowserWorkspaceBridgeConfigured(env)) {\n return withWebStateLock(() => {\n getWebBrowserWorkspaceTabState(id);\n const lastFocusedAt = getBrowserWorkspaceTimestamp();\n webWorkspaceState.tabs = webWorkspaceState.tabs.map((tab) => ({\n ...tab,\n visible: tab.id === id,\n lastFocusedAt: tab.id === id ? lastFocusedAt : tab.lastFocusedAt,\n updatedAt: tab.id === id ? lastFocusedAt : tab.updatedAt,\n }));\n return cloneWebBrowserWorkspaceTabState(\n getWebBrowserWorkspaceTabState(id),\n );\n });\n }\n\n const payload = await requestBrowserWorkspace<{ tab: BrowserWorkspaceTab }>(\n `/tabs/${encodeURIComponent(id)}/show`,\n { method: \"POST\" },\n env,\n );\n return payload.tab;\n}\n\nexport async function hideBrowserWorkspaceTab(\n id: string,\n env: NodeJS.ProcessEnv = process.env,\n): Promise<BrowserWorkspaceTab> {\n if (!isBrowserWorkspaceBridgeConfigured(env)) {\n return withWebStateLock(() => {\n const index = getWebBrowserWorkspaceTabIndex(id);\n if (index < 0) {\n throw createBrowserWorkspaceNotFoundError(id);\n }\n\n const updatedAt = getBrowserWorkspaceTimestamp();\n const nextTab = {\n ...webWorkspaceState.tabs[index],\n visible: false,\n updatedAt,\n };\n webWorkspaceState.tabs[index] = nextTab;\n return cloneWebBrowserWorkspaceTabState(nextTab);\n });\n }\n\n const payload = await requestBrowserWorkspace<{ tab: BrowserWorkspaceTab }>(\n `/tabs/${encodeURIComponent(id)}/hide`,\n { method: \"POST\" },\n env,\n );\n return payload.tab;\n}\n\nexport async function closeBrowserWorkspaceTab(\n id: string,\n env: NodeJS.ProcessEnv = process.env,\n): Promise<boolean> {\n if (!isBrowserWorkspaceBridgeConfigured(env)) {\n return withWebStateLock(() => {\n const initialLength = webWorkspaceState.tabs.length;\n clearWebBrowserWorkspaceTabElementRefs(id);\n clearBrowserWorkspaceRuntimeState(\"web\", id);\n webWorkspaceState.tabs = webWorkspaceState.tabs.filter(\n (tab) => tab.id !== id,\n );\n return webWorkspaceState.tabs.length !== initialLength;\n });\n }\n\n const payload = await requestBrowserWorkspace<{ closed?: boolean }>(\n `/tabs/${encodeURIComponent(id)}`,\n { method: \"DELETE\" },\n env,\n );\n return payload.closed === true;\n}\n\nexport async function evaluateBrowserWorkspaceTab(\n request: EvaluateBrowserWorkspaceTabRequest,\n env: NodeJS.ProcessEnv = process.env,\n): Promise<unknown> {\n return evaluateBrowserWorkspaceTabDesktop(request, env);\n}\n\nexport async function snapshotBrowserWorkspaceTab(\n id: string,\n env: NodeJS.ProcessEnv = process.env,\n): Promise<{ data: string }> {\n return snapshotBrowserWorkspaceTabDesktop(id, env);\n}\n\n// ────────────────────────────────────────────────────────────────────\n// Main command router\n// ────────────────────────────────────────────────────────────────────\n\nexport async function executeBrowserWorkspaceCommand(\n command: BrowserWorkspaceCommand,\n env: NodeJS.ProcessEnv = process.env,\n): Promise<BrowserWorkspaceCommandResult> {\n command = normalizeBrowserWorkspaceCommand(command);\n switch (command.subaction) {\n case \"batch\": {\n const steps = Array.isArray(command.steps) ? command.steps : [];\n if (steps.length === 0) {\n throw new Error(\n \"Eliza browser workspace batch requires at least one step.\",\n );\n }\n const results: BrowserWorkspaceCommandResult[] = [];\n for (const step of steps) {\n results.push(await executeBrowserWorkspaceCommand(step, env));\n }\n return {\n mode: getBrowserWorkspaceMode(env),\n subaction: command.subaction,\n steps: results,\n value: results.at(-1)?.value,\n };\n }\n case \"list\":\n return {\n mode: getBrowserWorkspaceMode(env),\n subaction: command.subaction,\n tabs: await listBrowserWorkspaceTabs(env),\n };\n case \"open\": {\n const tab = await openBrowserWorkspaceTab(\n {\n partition: resolveBrowserWorkspaceCommandPartition(\n command,\n AGENT_BROWSER_WORKSPACE_PARTITION,\n ),\n show: command.show,\n title: command.title,\n url: command.url,\n },\n env,\n );\n clearBrowserWorkspaceElementRefs(getBrowserWorkspaceMode(env), tab.id);\n return {\n mode: getBrowserWorkspaceMode(env),\n subaction: command.subaction,\n tab,\n };\n }\n case \"navigate\": {\n const id = isBrowserWorkspaceBridgeConfigured(env)\n ? await resolveDesktopBrowserWorkspaceTargetTabId(command, env)\n : findWebBrowserWorkspaceTargetTabId(command);\n clearBrowserWorkspaceElementRefs(getBrowserWorkspaceMode(env), id);\n return {\n mode: getBrowserWorkspaceMode(env),\n subaction: command.subaction,\n tab: await navigateBrowserWorkspaceTab(\n {\n id,\n url: command.url ?? \"\",\n },\n env,\n ),\n };\n }\n case \"show\": {\n const id = isBrowserWorkspaceBridgeConfigured(env)\n ? await resolveDesktopBrowserWorkspaceTargetTabId(command, env)\n : findWebBrowserWorkspaceTargetTabId(command);\n return {\n mode: getBrowserWorkspaceMode(env),\n subaction: command.subaction,\n tab: await showBrowserWorkspaceTab(id, env),\n };\n }\n case \"hide\": {\n const id = isBrowserWorkspaceBridgeConfigured(env)\n ? await resolveDesktopBrowserWorkspaceTargetTabId(command, env)\n : findWebBrowserWorkspaceTargetTabId(command);\n return {\n mode: getBrowserWorkspaceMode(env),\n subaction: command.subaction,\n tab: await hideBrowserWorkspaceTab(id, env),\n };\n }\n case \"close\": {\n const id = isBrowserWorkspaceBridgeConfigured(env)\n ? await resolveDesktopBrowserWorkspaceTargetTabId(command, env)\n : findWebBrowserWorkspaceTargetTabId(command);\n clearBrowserWorkspaceElementRefs(getBrowserWorkspaceMode(env), id);\n clearBrowserWorkspaceRuntimeState(getBrowserWorkspaceMode(env), id);\n return {\n mode: getBrowserWorkspaceMode(env),\n subaction: command.subaction,\n closed: await closeBrowserWorkspaceTab(id, env),\n };\n }\n case \"eval\": {\n if (!isBrowserWorkspaceBridgeConfigured(env)) {\n return (await executeWebBrowserWorkspaceUtilityCommand(\n command,\n )) as BrowserWorkspaceCommandResult;\n }\n const id = await resolveDesktopBrowserWorkspaceTargetTabId(command, env);\n return {\n mode: \"desktop\",\n subaction: command.subaction,\n value: await evaluateBrowserWorkspaceTab(\n {\n id,\n script: command.script ?? \"\",\n },\n env,\n ),\n };\n }\n case \"screenshot\": {\n if (!isBrowserWorkspaceBridgeConfigured(env)) {\n return (await executeWebBrowserWorkspaceUtilityCommand(\n command,\n )) as BrowserWorkspaceCommandResult;\n }\n const id = await resolveDesktopBrowserWorkspaceTargetTabId(command, env);\n return {\n mode: \"desktop\",\n subaction: command.subaction,\n snapshot: await snapshotBrowserWorkspaceTab(id, env),\n };\n }\n case \"clipboard\":\n case \"console\":\n case \"cookies\":\n case \"dialog\":\n case \"drag\":\n case \"errors\":\n case \"frame\":\n case \"highlight\":\n case \"mouse\":\n case \"network\":\n case \"set\":\n case \"storage\":\n case \"upload\": {\n if (!isBrowserWorkspaceBridgeConfigured(env)) {\n return (await executeWebBrowserWorkspaceUtilityCommand(\n command,\n )) as BrowserWorkspaceCommandResult;\n }\n return executeDesktopBrowserWorkspaceUtilityCommand(command, env);\n }\n case \"diff\": {\n if (!isBrowserWorkspaceBridgeConfigured(env)) {\n return (await executeWebBrowserWorkspaceUtilityCommand(\n command,\n )) as BrowserWorkspaceCommandResult;\n }\n const id = await resolveDesktopBrowserWorkspaceTargetTabId(command, env);\n const runtime = getBrowserWorkspaceRuntimeState(\"desktop\", id);\n const snapshot = await getDesktopBrowserWorkspaceSnapshotRecord(\n command,\n env,\n );\n if (command.diffAction === \"screenshot\") {\n const screenshot = await snapshotBrowserWorkspaceTab(id, env);\n const currentData = screenshot.data;\n const baseline = command.baselinePath?.trim()\n ? await fsp.readFile(\n path.resolve(command.baselinePath.trim()),\n \"base64\",\n )\n : runtime.lastScreenshotData;\n runtime.lastScreenshotData = currentData;\n return {\n mode: \"desktop\",\n subaction: command.subaction,\n value: {\n baselineLength: baseline?.length ?? 0,\n changed: baseline !== currentData,\n currentLength: currentData.length,\n },\n };\n }\n if (command.diffAction === \"url\") {\n const leftUrl = command.url?.trim() || snapshot.url;\n const rightUrl = command.secondaryUrl?.trim();\n if (!rightUrl) {\n throw new Error(\n \"Eliza browser workspace diff url requires secondaryUrl.\",\n );\n }\n const left = await browserWorkspacePageFetch(leftUrl);\n const right = await browserWorkspacePageFetch(rightUrl);\n return {\n mode: \"desktop\",\n subaction: command.subaction,\n value: diffBrowserWorkspaceSnapshots(\n createBrowserWorkspaceSnapshotRecord(\n leftUrl,\n left.url || leftUrl,\n await left.text(),\n ),\n createBrowserWorkspaceSnapshotRecord(\n rightUrl,\n right.url || rightUrl,\n await right.text(),\n ),\n ),\n };\n }\n const baseline = command.baselinePath?.trim()\n ? (JSON.parse(\n await fsp.readFile(\n path.resolve(command.baselinePath.trim()),\n \"utf8\",\n ),\n ) as import(\"./browser-workspace-types.js\").BrowserWorkspaceSnapshotRecord)\n : runtime.lastSnapshot;\n const diff = diffBrowserWorkspaceSnapshots(baseline, snapshot);\n runtime.lastSnapshot = snapshot;\n return { mode: \"desktop\", subaction: command.subaction, value: diff };\n }\n case \"trace\":\n case \"profiler\": {\n if (!isBrowserWorkspaceBridgeConfigured(env)) {\n return (await executeWebBrowserWorkspaceUtilityCommand(\n command,\n )) as BrowserWorkspaceCommandResult;\n }\n const id = await resolveDesktopBrowserWorkspaceTargetTabId(command, env);\n const runtime = getBrowserWorkspaceRuntimeState(\"desktop\", id);\n const target =\n command.subaction === \"trace\" ? runtime.trace : runtime.profiler;\n const stop =\n command.subaction === \"trace\"\n ? command.traceAction === \"stop\"\n : command.profilerAction === \"stop\";\n if (stop) {\n target.active = false;\n const payload = { entries: target.entries };\n const filePath = command.filePath?.trim() || command.outputPath?.trim();\n if (filePath) {\n const { writeBrowserWorkspaceFile } = await import(\n \"./browser-workspace-helpers.js\"\n );\n await writeBrowserWorkspaceFile(\n filePath,\n JSON.stringify(payload, null, 2),\n );\n return {\n mode: \"desktop\",\n subaction: command.subaction,\n value: { path: path.resolve(filePath), ...payload },\n };\n }\n return {\n mode: \"desktop\",\n subaction: command.subaction,\n value: payload,\n };\n }\n target.active = true;\n target.entries = [\n {\n command: `${command.subaction}:start`,\n timestamp: getBrowserWorkspaceTimestamp(),\n },\n ];\n return {\n mode: \"desktop\",\n subaction: command.subaction,\n value: { active: true },\n };\n }\n case \"state\": {\n if (!isBrowserWorkspaceBridgeConfigured(env)) {\n return (await executeWebBrowserWorkspaceUtilityCommand(\n command,\n )) as BrowserWorkspaceCommandResult;\n }\n await assertDesktopBrowserWorkspaceCanAccessProfileSecrets(\n command,\n env,\n \"state\",\n );\n if (command.stateAction === \"load\") {\n const filePath = command.filePath?.trim() || command.outputPath?.trim();\n if (!filePath) {\n throw new Error(\n \"Eliza browser workspace state load requires filePath.\",\n );\n }\n const payload = JSON.parse(\n await fsp.readFile(path.resolve(filePath), \"utf8\"),\n ) as Record<string, unknown>;\n await loadDesktopBrowserWorkspaceSessionState(command, payload, env);\n return {\n mode: \"desktop\",\n subaction: command.subaction,\n value: { loaded: true },\n };\n }\n const payload = await getDesktopBrowserWorkspaceSessionState(\n command,\n env,\n );\n const filePath = command.filePath?.trim() || command.outputPath?.trim();\n if (filePath) {\n const { writeBrowserWorkspaceFile } = await import(\n \"./browser-workspace-helpers.js\"\n );\n await writeBrowserWorkspaceFile(\n filePath,\n JSON.stringify(payload, null, 2),\n );\n return {\n mode: \"desktop\",\n subaction: command.subaction,\n value: { path: path.resolve(filePath), ...payload },\n };\n }\n return { mode: \"desktop\", subaction: command.subaction, value: payload };\n }\n case \"pdf\": {\n if (!isBrowserWorkspaceBridgeConfigured(env)) {\n return (await executeWebBrowserWorkspaceUtilityCommand(\n command,\n )) as BrowserWorkspaceCommandResult;\n }\n const filePath = command.filePath?.trim() || command.outputPath?.trim();\n if (!filePath) {\n throw new Error(\"Eliza browser workspace pdf requires filePath.\");\n }\n const snapshot = await getDesktopBrowserWorkspaceSnapshotRecord(\n command,\n env,\n );\n const pdf = createBrowserWorkspacePdfBuffer(\n snapshot.title,\n snapshot.bodyText,\n );\n const { writeBrowserWorkspaceFile } = await import(\n \"./browser-workspace-helpers.js\"\n );\n const resolved = await writeBrowserWorkspaceFile(filePath, pdf);\n return {\n mode: \"desktop\",\n subaction: command.subaction,\n value: { path: resolved, size: pdf.byteLength },\n };\n }\n case \"tab\": {\n const action = command.tabAction ?? \"list\";\n if (action === \"list\") {\n return {\n mode: getBrowserWorkspaceMode(env),\n subaction: command.subaction,\n tabs: await listBrowserWorkspaceTabs(env),\n };\n }\n if (action === \"new\") {\n return {\n mode: getBrowserWorkspaceMode(env),\n subaction: command.subaction,\n tab: await openBrowserWorkspaceTab(\n {\n partition: resolveBrowserWorkspaceCommandPartition(\n command,\n AGENT_BROWSER_WORKSPACE_PARTITION,\n ),\n show: command.show ?? true,\n title: command.title,\n url: command.url,\n width: command.width,\n height: command.height,\n },\n env,\n ),\n };\n }\n if (action === \"switch\") {\n const tabs = await listBrowserWorkspaceTabs(env);\n const target = command.id?.trim()\n ? tabs.find((tab) => tab.id === command.id?.trim())\n : typeof command.index === \"number\"\n ? (tabs[command.index] ?? null)\n : null;\n if (!target) {\n throw new Error(\n \"Eliza browser workspace tab switch requires a valid id or index.\",\n );\n }\n return {\n mode: getBrowserWorkspaceMode(env),\n subaction: command.subaction,\n tab: await showBrowserWorkspaceTab(target.id, env),\n };\n }\n const targetId =\n command.id?.trim() ||\n (await listBrowserWorkspaceTabs(env))[command.index ?? -1]?.id;\n if (!targetId) {\n throw new Error(\n \"Eliza browser workspace tab close requires a valid id or index.\",\n );\n }\n return {\n mode: getBrowserWorkspaceMode(env),\n subaction: command.subaction,\n closed: await closeBrowserWorkspaceTab(targetId, env),\n };\n }\n case \"window\":\n return {\n mode: getBrowserWorkspaceMode(env),\n subaction: command.subaction,\n tab: await openBrowserWorkspaceTab(\n {\n partition: resolveBrowserWorkspaceCommandPartition(\n command,\n AGENT_BROWSER_WORKSPACE_PARTITION,\n ),\n show: true,\n title: command.title,\n url: command.url,\n width: command.width,\n height: command.height,\n },\n env,\n ),\n };\n case \"back\":\n case \"forward\":\n case \"reload\": {\n if (isBrowserWorkspaceBridgeConfigured(env)) {\n const id = await resolveDesktopBrowserWorkspaceTargetTabId(\n command,\n env,\n );\n clearBrowserWorkspaceElementRefs(\"desktop\", id);\n return executeDesktopBrowserWorkspaceDomCommand(command, env);\n }\n\n return withWebStateLock(async () => {\n const id = findWebBrowserWorkspaceTargetTabId(command);\n const tab = getWebBrowserWorkspaceTabState(id);\n\n if (command.subaction === \"reload\") {\n clearWebBrowserWorkspaceTabElementRefs(tab.id);\n tab.dom = null;\n tab.loadedUrl = null;\n await loadWebBrowserWorkspaceTabDocument(tab);\n return {\n mode: \"web\",\n subaction: command.subaction,\n tab: cloneWebBrowserWorkspaceTabState(tab),\n value: { url: tab.url, title: tab.title },\n };\n }\n\n const delta = command.subaction === \"back\" ? -1 : 1;\n const nextIndex = tab.historyIndex + delta;\n if (nextIndex < 0 || nextIndex >= tab.history.length) {\n return {\n mode: \"web\",\n subaction: command.subaction,\n tab: cloneWebBrowserWorkspaceTabState(tab),\n value: { url: tab.url, title: tab.title, changed: false },\n };\n }\n\n tab.historyIndex = nextIndex;\n tab.url = tab.history[nextIndex] ?? tab.url;\n tab.title = inferBrowserWorkspaceTitle(tab.url);\n clearWebBrowserWorkspaceTabElementRefs(tab.id);\n tab.dom = null;\n tab.loadedUrl = null;\n await loadWebBrowserWorkspaceTabDocument(tab);\n return {\n mode: \"web\",\n subaction: command.subaction,\n tab: cloneWebBrowserWorkspaceTabState(tab),\n value: { url: tab.url, title: tab.title, changed: true },\n };\n });\n }\n case \"inspect\":\n case \"snapshot\":\n case \"check\":\n case \"click\":\n case \"dblclick\":\n case \"find\":\n case \"fill\":\n case \"focus\":\n case \"get\":\n case \"hover\":\n case \"keydown\":\n case \"keyup\":\n case \"keyboardinserttext\":\n case \"keyboardtype\":\n case \"press\":\n case \"scroll\":\n case \"scrollinto\":\n case \"select\":\n case \"type\":\n case \"uncheck\":\n case \"wait\":\n case \"realistic-click\":\n case \"realistic-fill\":\n case \"realistic-type\":\n case \"realistic-press\":\n case \"realistic-upload\":\n case \"cursor-move\":\n case \"cursor-hide\":\n if (\n command.subaction === \"wait\" &&\n !command.selector &&\n !command.findBy &&\n !command.text &&\n !command.url &&\n !command.script &&\n typeof command.timeoutMs === \"number\" &&\n Number.isFinite(command.timeoutMs)\n ) {\n const waitedMs = Math.max(0, command.timeoutMs);\n await sleep(waitedMs);\n return {\n mode: getBrowserWorkspaceMode(env),\n subaction: command.subaction,\n value: { waitedMs },\n };\n }\n if (isBrowserWorkspaceBridgeConfigured(env)) {\n return executeDesktopBrowserWorkspaceDomCommand(command, env);\n }\n return executeWebBrowserWorkspaceDomCommand(command);\n default: {\n const exhaustive: never = command.subaction;\n throw new Error(`Unsupported browser workspace subaction: ${exhaustive}`);\n }\n }\n}\n"],"mappings":"AAkBA,YAAY,SAAS;AACrB,YAAY,UAAU;AAGtB,SAAS,+CAA+C;AA+DxD,SAAS,4CAA4C;AAGrD;AAAA,EACE,+BAA+B;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,+BAA+B;AAAA,OAC1B;AAEP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AASP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,iCAAiC;AAE1C;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,MAAM,oCAAoC;AAC1C,MAAM,0BAA0B,oBAAI,IAAwC;AAAA,EAC1E;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAMM,SAAS,wBACd,MAAyB,QAAQ,KACX;AACtB,SAAO,mCAAmC,GAAG,IAAI,YAAY;AAC/D;AAEO,SAAS,0CACd,UACA,WACQ;AACR,SAAO,0CAA0C,UAAU,SAAS;AACtE;AAEA,SAAS,4BACP,OACA,UACoC;AACpC,UAAQ,OAAO;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAEA,SAAS,sCACP,OACS;AACT,SAAO,wBAAwB,IAAI,KAAK;AAC1C;AAEA,SAAS,0BACP,KACqC;AACrC,SAAO;AAAA,IACL,MAAM,IAAI;AAAA,IACV,UAAU,IAAI;AAAA,IACd,WAAW,IAAI;AAAA,IACf,OAAO,IAAI;AAAA,IACX,SAAS,IAAI;AAAA,IACb,aAAa,IAAI;AAAA,IACjB,WAAW,IAAI;AAAA,IACf,cAAc,IAAI;AAAA,EACpB;AACF;AAEA,SAAS,6BAA6B,MAOK;AACzC,QAAM,aAAa,0BAA0B,KAAK,GAAG;AACrD,SAAO;AAAA,IACL,UAAU,KAAK;AAAA,IACf,WAAW,KAAK;AAAA,IAChB,WAAW,KAAK;AAAA,IAChB,uBAAuB;AAAA,MACrB,KAAK;AAAA,IACP;AAAA,IACA;AAAA,IACA,WAAW,WAAW;AAAA,IACtB,OAAO,WAAW;AAAA,IAClB,aAAa,WAAW;AAAA,IACxB,SAAS,WAAW;AAAA,IACpB,WAAW,WAAW;AAAA,IACtB,cAAc,WAAW;AAAA,IACzB,SAAS,KAAK;AAAA,IACd,SAAS,KAAK,WAAW;AAAA,EAC3B;AACF;AAEA,SAAS,0CAA0C,MAMR;AACzC,QAAM,UAAU,KAAK,UAAU,SAAS,KAAK,KAAK;AAClD,QAAM,cAAc,KAAK,UAAU,aAAa,KAAK,KAAK;AAC1D,QAAM,YAAY,KAAK,UAAU,WAAW,KAAK,KAAK;AACtD,QAAM,eAAe,KAAK,UAAU,cAAc,KAAK,KAAK;AAC5D,SAAO,6BAA6B;AAAA,IAClC,UAAU,KAAK;AAAA,IACf,WAAW,KAAK;AAAA,IAChB,WAAW,KAAK;AAAA,IAChB,SAAS;AAAA,IACT,SAAS,KAAK;AAAA,IACd,KAAK;AAAA,MACH,MAAM;AAAA,MACN,UAAU;AAAA,QACR;AAAA,QACA,WAAW;AAAA,QACX,eAAe,aAAa;AAAA,QAC5B,KAAK;AAAA,QACL,KAAK;AAAA,MACP,EAAE,KAAK,GAAG;AAAA,MACV,WAAW;AAAA,MACX,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEA,eAAe,qDACb,SACA,KACA,WACe;AACf,QAAM,KAAK,MAAM,0CAA0C,SAAS,GAAG;AACvE,QAAM,OAAO,MAAM,yBAAyB,GAAG;AAC/C,QAAM,MAAM,KAAK,KAAK,CAAC,UAAU,MAAM,OAAO,EAAE,KAAK;AACrD,oDAAkD,KAAK,WAAW,SAAS;AAC7E;AAEA,eAAsB,wCACpB,SACA,MAAyB,QAAQ,KACgB;AACjD,QAAM,WAAW,QAAQ,SAAS,KAAK;AACvC,QAAM,YAAY,QAAQ,UAAU,KAAK;AACzC,MAAI,CAAC,UAAU;AACb,UAAM,IAAI,MAAM,oDAAoD;AAAA,EACtE;AACA,MAAI,CAAC,WAAW;AACd,UAAM,IAAI,MAAM,qDAAqD;AAAA,EACvE;AAEA,QAAM,YAAY,QAAQ,aAAa;AACvC,MAAI,WAAW,aAAa,WAAW,aAAa;AAClD,UAAMA,aAAY;AAAA,MAChB,QAAQ;AAAA,MACR;AAAA,IACF;AACA,WAAO,0CAA0C;AAAA,MAC/C;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAAA;AAAA,MACA,SACE,QAAQ,uBACR;AAAA,IACJ,CAAC;AAAA,EACH;AAEA,MAAI,mCAAmC,GAAG,GAAG;AAC3C,UAAM,UAAU,MAAM;AAAA,MAGpB;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU;AAAA,UACnB;AAAA,UACA,WAAW,QAAQ;AAAA,UACnB,qBAAqB,QAAQ;AAAA,UAC7B;AAAA,UACA,OAAO,QAAQ;AAAA,UACf,MAAM,QAAQ;AAAA,UACd,OAAO,QAAQ;AAAA,UACf,KAAK,QAAQ;AAAA,QACf,CAAC;AAAA,MACH;AAAA,MACA;AAAA,IACF;AACA,WAAO,QAAQ;AAAA,EACjB;AAEA,QAAM,YAAY;AAAA,IAChB;AAAA,IACA;AAAA,EACF;AACA,QAAM,QAAQ,QAAQ,UAAU;AAChC,QAAM,OAAO,QAAQ,MAAM,yBAAyB,GAAG,IAAI,CAAC;AAC5D,QAAM,WAAW,KAAK,KAAK,CAACC,SAAQA,KAAI,cAAc,SAAS,KAAK;AACpE,MAAI,MAAM;AACV,MAAI,UAAU;AAEd,MAAI,CAAC,KAAK;AACR,UAAM,MAAM;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN;AAAA,QACA,MAAM,QAAQ,QAAQ;AAAA,QACtB,OAAO,QAAQ;AAAA,QACf,KAAK,QAAQ;AAAA,MACf;AAAA,MACA;AAAA,IACF;AACA,cAAU;AAAA,EACZ,WAAW,QAAQ,SAAS,MAAM;AAChC,UAAM,MAAM,wBAAwB,IAAI,IAAI,GAAG;AAAA,EACjD;AAEA,QAAM,YAAY;AAAA,IAChB,QAAQ;AAAA,IACR,UAAU,iBAAiB;AAAA,EAC7B;AACA,SAAO,6BAA6B;AAAA,IAClC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SACE,QAAQ,wBACP,sCAAsC,SAAS,IAC5C,8FACA;AAAA,IACN,KAAK;AAAA,MACH,MAAM;AAAA,MACN,UAAU,oBAAoB,SAAS;AAAA,MACvC;AAAA,MACA,OAAO,IAAI;AAAA,MACX,SAAS;AAAA,MACT,aAAa;AAAA,MACb,WAAW;AAAA,MACX,cAAc;AAAA,IAChB;AAAA,EACF,CAAC;AACH;AAEA,eAAsB,4BACpB,MAAyB,QAAQ,KACE;AACnC,SAAO;AAAA,IACL,MAAM,wBAAwB,GAAG;AAAA,IACjC,MAAM,MAAM,yBAAyB,GAAG;AAAA,EAC1C;AACF;AAEA,eAAsB,yBACpB,MAAyB,QAAQ,KACD;AAChC,MAAI,CAAC,mCAAmC,GAAG,GAAG;AAC5C,WAAO,kBAAkB,KAAK,IAAI,CAAC,SAAS;AAAA,MAC1C,IAAI,IAAI;AAAA,MACR,OAAO,IAAI;AAAA,MACX,KAAK,IAAI;AAAA,MACT,WAAW,IAAI;AAAA,MACf,MAAM,IAAI;AAAA,MACV,SAAS,IAAI;AAAA,MACb,WAAW,IAAI;AAAA,MACf,WAAW,IAAI;AAAA,MACf,eAAe,IAAI;AAAA,IACrB,EAAE;AAAA,EACJ;AAEA,QAAM,UAAU,MAAM,wBAEnB,SAAS,QAAW,GAAG;AAC1B,SAAO,MAAM,QAAQ,QAAQ,IAAI,IAAI,QAAQ,OAAO,CAAC;AACvD;AAEA,eAAsB,wBACpB,SACA,MAAyB,QAAQ,KACH;AAC9B,MAAI,CAAC,mCAAmC,GAAG,GAAG;AAC5C,WAAO,iBAAiB,MAAM;AAC5B,YAAM,OACJ,QAAQ,SAAS,aAAa,aAAa;AAC7C,YAAM,MAAM,6BAA6B;AACzC,YAAM,MAAM;AAAA,QACV,QAAQ,KAAK,KAAK,KAAK;AAAA,MACzB;AACA,YAAM,UAAU,QAAQ,SAAS;AACjC,YAAM,KAAK,QAAQ,kBAAkB,QAAQ;AAC7C,YAAM,MACJ,QAAQ,gBAAgB,kCAAkC,GAAG,IAAI;AACnE,YAAM,MAAM;AAAA,QACV;AAAA,QACA,OAAO,QAAQ,OAAO,KAAK,KAAK,2BAA2B,GAAG;AAAA,QAC9D;AAAA,QACA,WAAW,QAAQ,WAAW,KAAK,KAAK;AAAA,QACxC;AAAA,QACA;AAAA,QACA,WAAW;AAAA,QACX,WAAW;AAAA,QACX,eAAe,UAAU,MAAM;AAAA,QAC/B;AAAA,QACA,SAAS,CAAC,GAAG;AAAA,QACb,cAAc;AAAA,QACd,WAAW,QAAQ,gBAAgB,MAAM;AAAA,MAC3C;AACA,UAAI,KAAK;AACP,0CAAkC,KAAK,GAAG;AAAA,MAC5C;AACA,sCAAgC,OAAO,IAAI,EAAE;AAC7C,6CAAuC,IAAI,EAAE;AAC7C,UAAI,IAAI,SAAS;AACf,0BAAkB,OAAO,kBAAkB,KAAK,IAAI,CAAC,WAAW;AAAA,UAC9D,GAAG;AAAA,UACH,SAAS;AAAA,QACX,EAAE;AAAA,MACJ;AACA,wBAAkB,OAAO,CAAC,GAAG,kBAAkB,MAAM,GAAG;AACxD,aAAO,iCAAiC,GAAG;AAAA,IAC7C,CAAC;AAAA,EACH;AAEA,QAAM,UAAU,MAAM;AAAA,IACpB;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,MAAM,KAAK,UAAU,OAAO;AAAA,IAC9B;AAAA,IACA;AAAA,EACF;AACA,SAAO,QAAQ;AACjB;AAEA,eAAsB,4BACpB,SACA,MAAyB,QAAQ,KACH;AAC9B,QAAM,UAAU,0BAA0B,QAAQ,GAAG;AAErD,MAAI,CAAC,mCAAmC,GAAG,GAAG;AAC5C,WAAO,iBAAiB,MAAM;AAC5B,YAAM,QAAQ,+BAA+B,QAAQ,EAAE;AACvD,UAAI,QAAQ,GAAG;AACb,cAAM,oCAAoC,QAAQ,EAAE;AAAA,MACtD;AAEA,YAAM,WAAW,kBAAkB,KAAK,KAAK;AAC7C,YAAM,YAAY,6BAA6B;AAC/C,YAAM,QAAQ,gCAAgC,OAAO,SAAS,EAAE;AAChE,6CAAuC,SAAS,EAAE;AAClD,qCAA+B,UAAU,OAAO;AAChD,YAAM,UACJ,YAAY,gBACR,kCAAkC,OAAO,IACzC;AACN,YAAM,UAAU;AAAA,QACd,GAAG;AAAA,QACH,OAAO,2BAA2B,OAAO;AAAA,QACzC,KAAK;AAAA,QACL;AAAA,QACA,KAAK;AAAA,QACL,WAAW,YAAY,gBAAgB,UAAU;AAAA,MACnD;AACA,UAAI,SAAS;AACX,0CAAkC,SAAS,OAAO;AAAA,MACpD;AACA,kDAA4C,KAAK;AACjD,wBAAkB,KAAK,KAAK,IAAI;AAChC,aAAO,iCAAiC,OAAO;AAAA,IACjD,CAAC;AAAA,EACH;AAEA,QAAM,eAAoD,EAAE,KAAK,QAAQ;AACzE,MAAI,QAAQ,cAAc,QAAW;AACnC,iBAAa,YAAY,QAAQ;AAAA,EACnC;AAEA,QAAM,UAAU,MAAM;AAAA,IACpB,SAAS,mBAAmB,QAAQ,EAAE,CAAC;AAAA,IACvC;AAAA,MACE,QAAQ;AAAA,MACR,MAAM,KAAK,UAAU,YAAY;AAAA,IACnC;AAAA,IACA;AAAA,EACF;AACA,SAAO,QAAQ;AACjB;AAEA,eAAsB,wBACpB,IACA,MAAyB,QAAQ,KACH;AAC9B,MAAI,CAAC,mCAAmC,GAAG,GAAG;AAC5C,WAAO,iBAAiB,MAAM;AAC5B,qCAA+B,EAAE;AACjC,YAAM,gBAAgB,6BAA6B;AACnD,wBAAkB,OAAO,kBAAkB,KAAK,IAAI,CAAC,SAAS;AAAA,QAC5D,GAAG;AAAA,QACH,SAAS,IAAI,OAAO;AAAA,QACpB,eAAe,IAAI,OAAO,KAAK,gBAAgB,IAAI;AAAA,QACnD,WAAW,IAAI,OAAO,KAAK,gBAAgB,IAAI;AAAA,MACjD,EAAE;AACF,aAAO;AAAA,QACL,+BAA+B,EAAE;AAAA,MACnC;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,UAAU,MAAM;AAAA,IACpB,SAAS,mBAAmB,EAAE,CAAC;AAAA,IAC/B,EAAE,QAAQ,OAAO;AAAA,IACjB;AAAA,EACF;AACA,SAAO,QAAQ;AACjB;AAEA,eAAsB,wBACpB,IACA,MAAyB,QAAQ,KACH;AAC9B,MAAI,CAAC,mCAAmC,GAAG,GAAG;AAC5C,WAAO,iBAAiB,MAAM;AAC5B,YAAM,QAAQ,+BAA+B,EAAE;AAC/C,UAAI,QAAQ,GAAG;AACb,cAAM,oCAAoC,EAAE;AAAA,MAC9C;AAEA,YAAM,YAAY,6BAA6B;AAC/C,YAAM,UAAU;AAAA,QACd,GAAG,kBAAkB,KAAK,KAAK;AAAA,QAC/B,SAAS;AAAA,QACT;AAAA,MACF;AACA,wBAAkB,KAAK,KAAK,IAAI;AAChC,aAAO,iCAAiC,OAAO;AAAA,IACjD,CAAC;AAAA,EACH;AAEA,QAAM,UAAU,MAAM;AAAA,IACpB,SAAS,mBAAmB,EAAE,CAAC;AAAA,IAC/B,EAAE,QAAQ,OAAO;AAAA,IACjB;AAAA,EACF;AACA,SAAO,QAAQ;AACjB;AAEA,eAAsB,yBACpB,IACA,MAAyB,QAAQ,KACf;AAClB,MAAI,CAAC,mCAAmC,GAAG,GAAG;AAC5C,WAAO,iBAAiB,MAAM;AAC5B,YAAM,gBAAgB,kBAAkB,KAAK;AAC7C,6CAAuC,EAAE;AACzC,wCAAkC,OAAO,EAAE;AAC3C,wBAAkB,OAAO,kBAAkB,KAAK;AAAA,QAC9C,CAAC,QAAQ,IAAI,OAAO;AAAA,MACtB;AACA,aAAO,kBAAkB,KAAK,WAAW;AAAA,IAC3C,CAAC;AAAA,EACH;AAEA,QAAM,UAAU,MAAM;AAAA,IACpB,SAAS,mBAAmB,EAAE,CAAC;AAAA,IAC/B,EAAE,QAAQ,SAAS;AAAA,IACnB;AAAA,EACF;AACA,SAAO,QAAQ,WAAW;AAC5B;AAEA,eAAsB,4BACpB,SACA,MAAyB,QAAQ,KACf;AAClB,SAAO,mCAAmC,SAAS,GAAG;AACxD;AAEA,eAAsB,4BACpB,IACA,MAAyB,QAAQ,KACN;AAC3B,SAAO,mCAAmC,IAAI,GAAG;AACnD;AAMA,eAAsB,+BACpB,SACA,MAAyB,QAAQ,KACO;AACxC,YAAU,iCAAiC,OAAO;AAClD,UAAQ,QAAQ,WAAW;AAAA,IACzB,KAAK,SAAS;AACZ,YAAM,QAAQ,MAAM,QAAQ,QAAQ,KAAK,IAAI,QAAQ,QAAQ,CAAC;AAC9D,UAAI,MAAM,WAAW,GAAG;AACtB,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AACA,YAAM,UAA2C,CAAC;AAClD,iBAAW,QAAQ,OAAO;AACxB,gBAAQ,KAAK,MAAM,+BAA+B,MAAM,GAAG,CAAC;AAAA,MAC9D;AACA,aAAO;AAAA,QACL,MAAM,wBAAwB,GAAG;AAAA,QACjC,WAAW,QAAQ;AAAA,QACnB,OAAO;AAAA,QACP,OAAO,QAAQ,GAAG,EAAE,GAAG;AAAA,MACzB;AAAA,IACF;AAAA,IACA,KAAK;AACH,aAAO;AAAA,QACL,MAAM,wBAAwB,GAAG;AAAA,QACjC,WAAW,QAAQ;AAAA,QACnB,MAAM,MAAM,yBAAyB,GAAG;AAAA,MAC1C;AAAA,IACF,KAAK,QAAQ;AACX,YAAM,MAAM,MAAM;AAAA,QAChB;AAAA,UACE,WAAW;AAAA,YACT;AAAA,YACA;AAAA,UACF;AAAA,UACA,MAAM,QAAQ;AAAA,UACd,OAAO,QAAQ;AAAA,UACf,KAAK,QAAQ;AAAA,QACf;AAAA,QACA;AAAA,MACF;AACA,uCAAiC,wBAAwB,GAAG,GAAG,IAAI,EAAE;AACrE,aAAO;AAAA,QACL,MAAM,wBAAwB,GAAG;AAAA,QACjC,WAAW,QAAQ;AAAA,QACnB;AAAA,MACF;AAAA,IACF;AAAA,IACA,KAAK,YAAY;AACf,YAAM,KAAK,mCAAmC,GAAG,IAC7C,MAAM,0CAA0C,SAAS,GAAG,IAC5D,mCAAmC,OAAO;AAC9C,uCAAiC,wBAAwB,GAAG,GAAG,EAAE;AACjE,aAAO;AAAA,QACL,MAAM,wBAAwB,GAAG;AAAA,QACjC,WAAW,QAAQ;AAAA,QACnB,KAAK,MAAM;AAAA,UACT;AAAA,YACE;AAAA,YACA,KAAK,QAAQ,OAAO;AAAA,UACtB;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,KAAK,QAAQ;AACX,YAAM,KAAK,mCAAmC,GAAG,IAC7C,MAAM,0CAA0C,SAAS,GAAG,IAC5D,mCAAmC,OAAO;AAC9C,aAAO;AAAA,QACL,MAAM,wBAAwB,GAAG;AAAA,QACjC,WAAW,QAAQ;AAAA,QACnB,KAAK,MAAM,wBAAwB,IAAI,GAAG;AAAA,MAC5C;AAAA,IACF;AAAA,IACA,KAAK,QAAQ;AACX,YAAM,KAAK,mCAAmC,GAAG,IAC7C,MAAM,0CAA0C,SAAS,GAAG,IAC5D,mCAAmC,OAAO;AAC9C,aAAO;AAAA,QACL,MAAM,wBAAwB,GAAG;AAAA,QACjC,WAAW,QAAQ;AAAA,QACnB,KAAK,MAAM,wBAAwB,IAAI,GAAG;AAAA,MAC5C;AAAA,IACF;AAAA,IACA,KAAK,SAAS;AACZ,YAAM,KAAK,mCAAmC,GAAG,IAC7C,MAAM,0CAA0C,SAAS,GAAG,IAC5D,mCAAmC,OAAO;AAC9C,uCAAiC,wBAAwB,GAAG,GAAG,EAAE;AACjE,wCAAkC,wBAAwB,GAAG,GAAG,EAAE;AAClE,aAAO;AAAA,QACL,MAAM,wBAAwB,GAAG;AAAA,QACjC,WAAW,QAAQ;AAAA,QACnB,QAAQ,MAAM,yBAAyB,IAAI,GAAG;AAAA,MAChD;AAAA,IACF;AAAA,IACA,KAAK,QAAQ;AACX,UAAI,CAAC,mCAAmC,GAAG,GAAG;AAC5C,eAAQ,MAAM;AAAA,UACZ;AAAA,QACF;AAAA,MACF;AACA,YAAM,KAAK,MAAM,0CAA0C,SAAS,GAAG;AACvE,aAAO;AAAA,QACL,MAAM;AAAA,QACN,WAAW,QAAQ;AAAA,QACnB,OAAO,MAAM;AAAA,UACX;AAAA,YACE;AAAA,YACA,QAAQ,QAAQ,UAAU;AAAA,UAC5B;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,KAAK,cAAc;AACjB,UAAI,CAAC,mCAAmC,GAAG,GAAG;AAC5C,eAAQ,MAAM;AAAA,UACZ;AAAA,QACF;AAAA,MACF;AACA,YAAM,KAAK,MAAM,0CAA0C,SAAS,GAAG;AACvE,aAAO;AAAA,QACL,MAAM;AAAA,QACN,WAAW,QAAQ;AAAA,QACnB,UAAU,MAAM,4BAA4B,IAAI,GAAG;AAAA,MACrD;AAAA,IACF;AAAA,IACA,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK,UAAU;AACb,UAAI,CAAC,mCAAmC,GAAG,GAAG;AAC5C,eAAQ,MAAM;AAAA,UACZ;AAAA,QACF;AAAA,MACF;AACA,aAAO,6CAA6C,SAAS,GAAG;AAAA,IAClE;AAAA,IACA,KAAK,QAAQ;AACX,UAAI,CAAC,mCAAmC,GAAG,GAAG;AAC5C,eAAQ,MAAM;AAAA,UACZ;AAAA,QACF;AAAA,MACF;AACA,YAAM,KAAK,MAAM,0CAA0C,SAAS,GAAG;AACvE,YAAM,UAAU,gCAAgC,WAAW,EAAE;AAC7D,YAAM,WAAW,MAAM;AAAA,QACrB;AAAA,QACA;AAAA,MACF;AACA,UAAI,QAAQ,eAAe,cAAc;AACvC,cAAM,aAAa,MAAM,4BAA4B,IAAI,GAAG;AAC5D,cAAM,cAAc,WAAW;AAC/B,cAAMC,YAAW,QAAQ,cAAc,KAAK,IACxC,MAAM,IAAI;AAAA,UACR,KAAK,QAAQ,QAAQ,aAAa,KAAK,CAAC;AAAA,UACxC;AAAA,QACF,IACA,QAAQ;AACZ,gBAAQ,qBAAqB;AAC7B,eAAO;AAAA,UACL,MAAM;AAAA,UACN,WAAW,QAAQ;AAAA,UACnB,OAAO;AAAA,YACL,gBAAgBA,WAAU,UAAU;AAAA,YACpC,SAASA,cAAa;AAAA,YACtB,eAAe,YAAY;AAAA,UAC7B;AAAA,QACF;AAAA,MACF;AACA,UAAI,QAAQ,eAAe,OAAO;AAChC,cAAM,UAAU,QAAQ,KAAK,KAAK,KAAK,SAAS;AAChD,cAAM,WAAW,QAAQ,cAAc,KAAK;AAC5C,YAAI,CAAC,UAAU;AACb,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AACA,cAAM,OAAO,MAAM,0BAA0B,OAAO;AACpD,cAAM,QAAQ,MAAM,0BAA0B,QAAQ;AACtD,eAAO;AAAA,UACL,MAAM;AAAA,UACN,WAAW,QAAQ;AAAA,UACnB,OAAO;AAAA,YACL;AAAA,cACE;AAAA,cACA,KAAK,OAAO;AAAA,cACZ,MAAM,KAAK,KAAK;AAAA,YAClB;AAAA,YACA;AAAA,cACE;AAAA,cACA,MAAM,OAAO;AAAA,cACb,MAAM,MAAM,KAAK;AAAA,YACnB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACA,YAAM,WAAW,QAAQ,cAAc,KAAK,IACvC,KAAK;AAAA,QACJ,MAAM,IAAI;AAAA,UACR,KAAK,QAAQ,QAAQ,aAAa,KAAK,CAAC;AAAA,UACxC;AAAA,QACF;AAAA,MACF,IACA,QAAQ;AACZ,YAAM,OAAO,8BAA8B,UAAU,QAAQ;AAC7D,cAAQ,eAAe;AACvB,aAAO,EAAE,MAAM,WAAW,WAAW,QAAQ,WAAW,OAAO,KAAK;AAAA,IACtE;AAAA,IACA,KAAK;AAAA,IACL,KAAK,YAAY;AACf,UAAI,CAAC,mCAAmC,GAAG,GAAG;AAC5C,eAAQ,MAAM;AAAA,UACZ;AAAA,QACF;AAAA,MACF;AACA,YAAM,KAAK,MAAM,0CAA0C,SAAS,GAAG;AACvE,YAAM,UAAU,gCAAgC,WAAW,EAAE;AAC7D,YAAM,SACJ,QAAQ,cAAc,UAAU,QAAQ,QAAQ,QAAQ;AAC1D,YAAM,OACJ,QAAQ,cAAc,UAClB,QAAQ,gBAAgB,SACxB,QAAQ,mBAAmB;AACjC,UAAI,MAAM;AACR,eAAO,SAAS;AAChB,cAAM,UAAU,EAAE,SAAS,OAAO,QAAQ;AAC1C,cAAM,WAAW,QAAQ,UAAU,KAAK,KAAK,QAAQ,YAAY,KAAK;AACtE,YAAI,UAAU;AACZ,gBAAM,EAAE,0BAA0B,IAAI,MAAM,OAC1C,gCACF;AACA,gBAAM;AAAA,YACJ;AAAA,YACA,KAAK,UAAU,SAAS,MAAM,CAAC;AAAA,UACjC;AACA,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,WAAW,QAAQ;AAAA,YACnB,OAAO,EAAE,MAAM,KAAK,QAAQ,QAAQ,GAAG,GAAG,QAAQ;AAAA,UACpD;AAAA,QACF;AACA,eAAO;AAAA,UACL,MAAM;AAAA,UACN,WAAW,QAAQ;AAAA,UACnB,OAAO;AAAA,QACT;AAAA,MACF;AACA,aAAO,SAAS;AAChB,aAAO,UAAU;AAAA,QACf;AAAA,UACE,SAAS,GAAG,QAAQ,SAAS;AAAA,UAC7B,WAAW,6BAA6B;AAAA,QAC1C;AAAA,MACF;AACA,aAAO;AAAA,QACL,MAAM;AAAA,QACN,WAAW,QAAQ;AAAA,QACnB,OAAO,EAAE,QAAQ,KAAK;AAAA,MACxB;AAAA,IACF;AAAA,IACA,KAAK,SAAS;AACZ,UAAI,CAAC,mCAAmC,GAAG,GAAG;AAC5C,eAAQ,MAAM;AAAA,UACZ;AAAA,QACF;AAAA,MACF;AACA,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,UAAI,QAAQ,gBAAgB,QAAQ;AAClC,cAAMC,YAAW,QAAQ,UAAU,KAAK,KAAK,QAAQ,YAAY,KAAK;AACtE,YAAI,CAACA,WAAU;AACb,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AACA,cAAMC,WAAU,KAAK;AAAA,UACnB,MAAM,IAAI,SAAS,KAAK,QAAQD,SAAQ,GAAG,MAAM;AAAA,QACnD;AACA,cAAM,wCAAwC,SAASC,UAAS,GAAG;AACnE,eAAO;AAAA,UACL,MAAM;AAAA,UACN,WAAW,QAAQ;AAAA,UACnB,OAAO,EAAE,QAAQ,KAAK;AAAA,QACxB;AAAA,MACF;AACA,YAAM,UAAU,MAAM;AAAA,QACpB;AAAA,QACA;AAAA,MACF;AACA,YAAM,WAAW,QAAQ,UAAU,KAAK,KAAK,QAAQ,YAAY,KAAK;AACtE,UAAI,UAAU;AACZ,cAAM,EAAE,0BAA0B,IAAI,MAAM,OAC1C,gCACF;AACA,cAAM;AAAA,UACJ;AAAA,UACA,KAAK,UAAU,SAAS,MAAM,CAAC;AAAA,QACjC;AACA,eAAO;AAAA,UACL,MAAM;AAAA,UACN,WAAW,QAAQ;AAAA,UACnB,OAAO,EAAE,MAAM,KAAK,QAAQ,QAAQ,GAAG,GAAG,QAAQ;AAAA,QACpD;AAAA,MACF;AACA,aAAO,EAAE,MAAM,WAAW,WAAW,QAAQ,WAAW,OAAO,QAAQ;AAAA,IACzE;AAAA,IACA,KAAK,OAAO;AACV,UAAI,CAAC,mCAAmC,GAAG,GAAG;AAC5C,eAAQ,MAAM;AAAA,UACZ;AAAA,QACF;AAAA,MACF;AACA,YAAM,WAAW,QAAQ,UAAU,KAAK,KAAK,QAAQ,YAAY,KAAK;AACtE,UAAI,CAAC,UAAU;AACb,cAAM,IAAI,MAAM,gDAAgD;AAAA,MAClE;AACA,YAAM,WAAW,MAAM;AAAA,QACrB;AAAA,QACA;AAAA,MACF;AACA,YAAM,MAAM;AAAA,QACV,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AACA,YAAM,EAAE,0BAA0B,IAAI,MAAM,OAC1C,gCACF;AACA,YAAM,WAAW,MAAM,0BAA0B,UAAU,GAAG;AAC9D,aAAO;AAAA,QACL,MAAM;AAAA,QACN,WAAW,QAAQ;AAAA,QACnB,OAAO,EAAE,MAAM,UAAU,MAAM,IAAI,WAAW;AAAA,MAChD;AAAA,IACF;AAAA,IACA,KAAK,OAAO;AACV,YAAM,SAAS,QAAQ,aAAa;AACpC,UAAI,WAAW,QAAQ;AACrB,eAAO;AAAA,UACL,MAAM,wBAAwB,GAAG;AAAA,UACjC,WAAW,QAAQ;AAAA,UACnB,MAAM,MAAM,yBAAyB,GAAG;AAAA,QAC1C;AAAA,MACF;AACA,UAAI,WAAW,OAAO;AACpB,eAAO;AAAA,UACL,MAAM,wBAAwB,GAAG;AAAA,UACjC,WAAW,QAAQ;AAAA,UACnB,KAAK,MAAM;AAAA,YACT;AAAA,cACE,WAAW;AAAA,gBACT;AAAA,gBACA;AAAA,cACF;AAAA,cACA,MAAM,QAAQ,QAAQ;AAAA,cACtB,OAAO,QAAQ;AAAA,cACf,KAAK,QAAQ;AAAA,cACb,OAAO,QAAQ;AAAA,cACf,QAAQ,QAAQ;AAAA,YAClB;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACA,UAAI,WAAW,UAAU;AACvB,cAAM,OAAO,MAAM,yBAAyB,GAAG;AAC/C,cAAM,SAAS,QAAQ,IAAI,KAAK,IAC5B,KAAK,KAAK,CAAC,QAAQ,IAAI,OAAO,QAAQ,IAAI,KAAK,CAAC,IAChD,OAAO,QAAQ,UAAU,WACtB,KAAK,QAAQ,KAAK,KAAK,OACxB;AACN,YAAI,CAAC,QAAQ;AACX,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AACA,eAAO;AAAA,UACL,MAAM,wBAAwB,GAAG;AAAA,UACjC,WAAW,QAAQ;AAAA,UACnB,KAAK,MAAM,wBAAwB,OAAO,IAAI,GAAG;AAAA,QACnD;AAAA,MACF;AACA,YAAM,WACJ,QAAQ,IAAI,KAAK,MAChB,MAAM,yBAAyB,GAAG,GAAG,QAAQ,SAAS,EAAE,GAAG;AAC9D,UAAI,CAAC,UAAU;AACb,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,QACL,MAAM,wBAAwB,GAAG;AAAA,QACjC,WAAW,QAAQ;AAAA,QACnB,QAAQ,MAAM,yBAAyB,UAAU,GAAG;AAAA,MACtD;AAAA,IACF;AAAA,IACA,KAAK;AACH,aAAO;AAAA,QACL,MAAM,wBAAwB,GAAG;AAAA,QACjC,WAAW,QAAQ;AAAA,QACnB,KAAK,MAAM;AAAA,UACT;AAAA,YACE,WAAW;AAAA,cACT;AAAA,cACA;AAAA,YACF;AAAA,YACA,MAAM;AAAA,YACN,OAAO,QAAQ;AAAA,YACf,KAAK,QAAQ;AAAA,YACb,OAAO,QAAQ;AAAA,YACf,QAAQ,QAAQ;AAAA,UAClB;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK,UAAU;AACb,UAAI,mCAAmC,GAAG,GAAG;AAC3C,cAAM,KAAK,MAAM;AAAA,UACf;AAAA,UACA;AAAA,QACF;AACA,yCAAiC,WAAW,EAAE;AAC9C,eAAO,yCAAyC,SAAS,GAAG;AAAA,MAC9D;AAEA,aAAO,iBAAiB,YAAY;AAClC,cAAM,KAAK,mCAAmC,OAAO;AACrD,cAAM,MAAM,+BAA+B,EAAE;AAE7C,YAAI,QAAQ,cAAc,UAAU;AAClC,iDAAuC,IAAI,EAAE;AAC7C,cAAI,MAAM;AACV,cAAI,YAAY;AAChB,gBAAM,mCAAmC,GAAG;AAC5C,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,WAAW,QAAQ;AAAA,YACnB,KAAK,iCAAiC,GAAG;AAAA,YACzC,OAAO,EAAE,KAAK,IAAI,KAAK,OAAO,IAAI,MAAM;AAAA,UAC1C;AAAA,QACF;AAEA,cAAM,QAAQ,QAAQ,cAAc,SAAS,KAAK;AAClD,cAAM,YAAY,IAAI,eAAe;AACrC,YAAI,YAAY,KAAK,aAAa,IAAI,QAAQ,QAAQ;AACpD,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,WAAW,QAAQ;AAAA,YACnB,KAAK,iCAAiC,GAAG;AAAA,YACzC,OAAO,EAAE,KAAK,IAAI,KAAK,OAAO,IAAI,OAAO,SAAS,MAAM;AAAA,UAC1D;AAAA,QACF;AAEA,YAAI,eAAe;AACnB,YAAI,MAAM,IAAI,QAAQ,SAAS,KAAK,IAAI;AACxC,YAAI,QAAQ,2BAA2B,IAAI,GAAG;AAC9C,+CAAuC,IAAI,EAAE;AAC7C,YAAI,MAAM;AACV,YAAI,YAAY;AAChB,cAAM,mCAAmC,GAAG;AAC5C,eAAO;AAAA,UACL,MAAM;AAAA,UACN,WAAW,QAAQ;AAAA,UACnB,KAAK,iCAAiC,GAAG;AAAA,UACzC,OAAO,EAAE,KAAK,IAAI,KAAK,OAAO,IAAI,OAAO,SAAS,KAAK;AAAA,QACzD;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IACA,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,UACE,QAAQ,cAAc,UACtB,CAAC,QAAQ,YACT,CAAC,QAAQ,UACT,CAAC,QAAQ,QACT,CAAC,QAAQ,OACT,CAAC,QAAQ,UACT,OAAO,QAAQ,cAAc,YAC7B,OAAO,SAAS,QAAQ,SAAS,GACjC;AACA,cAAM,WAAW,KAAK,IAAI,GAAG,QAAQ,SAAS;AAC9C,cAAM,MAAM,QAAQ;AACpB,eAAO;AAAA,UACL,MAAM,wBAAwB,GAAG;AAAA,UACjC,WAAW,QAAQ;AAAA,UACnB,OAAO,EAAE,SAAS;AAAA,QACpB;AAAA,MACF;AACA,UAAI,mCAAmC,GAAG,GAAG;AAC3C,eAAO,yCAAyC,SAAS,GAAG;AAAA,MAC9D;AACA,aAAO,qCAAqC,OAAO;AAAA,IACrD,SAAS;AACP,YAAM,aAAoB,QAAQ;AAClC,YAAM,IAAI,MAAM,4CAA4C,UAAU,EAAE;AAAA,IAC1E;AAAA,EACF;AACF;","names":["authState","tab","baseline","filePath","payload"]}
|
|
1
|
+
{"version":3,"sources":["../../src/workspace/browser-workspace.ts"],"sourcesContent":["/**\n * Browser workspace — public API surface.\n *\n * Implementation is split across sibling modules:\n * browser-workspace-types.ts — all exported types and interfaces\n * browser-workspace-state.ts — global mutable state and CRUD helpers\n * browser-workspace-helpers.ts — small utilities, error factories, command normalization\n * browser-workspace-jsdom.ts — JSDOM loading, DOM creation, runtime setup\n * browser-workspace-elements.ts — element finding, selector parsing, inspection\n * browser-workspace-network.ts — network interception, HAR, tracked fetch\n * browser-workspace-forms.ts — form control interaction, activation, scrolling\n * browser-workspace-snapshots.ts — document snapshots, diff, PDF/screenshot\n * browser-workspace-desktop.ts — desktop bridge HTTP client and script generators\n * browser-workspace-web.ts — web-mode command execution\n *\n * This file re-exports every public symbol so external consumers are unaffected.\n */\n\nimport * as fsp from \"node:fs/promises\";\nimport * as path from \"node:path\";\n\nexport type {\n AcquireBrowserWorkspaceConnectorSessionRequest,\n BrowserWorkspaceBridgeConfig,\n BrowserWorkspaceClipboardAction,\n BrowserWorkspaceCommand,\n BrowserWorkspaceCommandResult,\n BrowserWorkspaceConnectorAuthState,\n BrowserWorkspaceConnectorCompanionRef,\n BrowserWorkspaceConnectorSessionHandle,\n BrowserWorkspaceConnectorSessionKind,\n BrowserWorkspaceConnectorSessionRef,\n BrowserWorkspaceConsoleAction,\n BrowserWorkspaceCookieAction,\n BrowserWorkspaceDialogAction,\n BrowserWorkspaceDiffAction,\n BrowserWorkspaceDomElementSummary,\n BrowserWorkspaceFindAction,\n BrowserWorkspaceFindBy,\n BrowserWorkspaceFrameAction,\n BrowserWorkspaceGetMode,\n BrowserWorkspaceMode,\n BrowserWorkspaceMouseAction,\n BrowserWorkspaceMouseButton,\n BrowserWorkspaceNetworkAction,\n BrowserWorkspaceOperation,\n BrowserWorkspaceProfilerAction,\n BrowserWorkspaceScrollDirection,\n BrowserWorkspaceSetAction,\n BrowserWorkspaceSnapshot,\n BrowserWorkspaceStateAction,\n BrowserWorkspaceStorageAction,\n BrowserWorkspaceStorageArea,\n BrowserWorkspaceSubaction,\n BrowserWorkspaceTab,\n BrowserWorkspaceTabAction,\n BrowserWorkspaceTabKind,\n BrowserWorkspaceTraceAction,\n BrowserWorkspaceWaitState,\n BrowserWorkspaceWindowAction,\n EvaluateBrowserWorkspaceTabRequest,\n NavigateBrowserWorkspaceTabRequest,\n OpenBrowserWorkspaceTabRequest,\n} from \"./browser-workspace-types.js\";\n// ── Re-export types ──────────────────────────────────────────────────\nexport { BROWSER_WORKSPACE_CONNECTOR_AUTH_STATES } from \"./browser-workspace-types.js\";\n\nimport type {\n AcquireBrowserWorkspaceConnectorSessionRequest,\n BrowserWorkspaceCommand,\n BrowserWorkspaceCommandResult,\n BrowserWorkspaceConnectorAuthState,\n BrowserWorkspaceConnectorCompanionRef,\n BrowserWorkspaceConnectorSessionHandle,\n BrowserWorkspaceConnectorSessionRef,\n BrowserWorkspaceMode,\n BrowserWorkspaceSnapshot,\n BrowserWorkspaceTab,\n BrowserWorkspaceTabKind,\n EvaluateBrowserWorkspaceTabRequest,\n NavigateBrowserWorkspaceTabRequest,\n OpenBrowserWorkspaceTabRequest,\n} from \"./browser-workspace-types.js\";\n\n// ── Re-export state ──────────────────────────────────────────────────\nexport { __resetBrowserWorkspaceStateForTests } from \"./browser-workspace-state.js\";\n\n// ── Re-export desktop bridge ─────────────────────────────────────────\nimport {\n evaluateBrowserWorkspaceTab as evaluateBrowserWorkspaceTabDesktop,\n executeDesktopBrowserWorkspaceDomCommand,\n executeDesktopBrowserWorkspaceUtilityCommand,\n getBrowserWorkspaceUnavailableMessage,\n getDesktopBrowserWorkspaceSessionState,\n getDesktopBrowserWorkspaceSnapshotRecord,\n isBrowserWorkspaceBridgeConfigured,\n loadDesktopBrowserWorkspaceSessionState,\n requestBrowserWorkspace,\n resolveBrowserWorkspaceBridgeConfig,\n resolveDesktopBrowserWorkspaceTargetTabId,\n snapshotBrowserWorkspaceTab as snapshotBrowserWorkspaceTabDesktop,\n} from \"./browser-workspace-desktop.js\";\n// ── Re-export helpers ────────────────────────────────────────────────\nimport {\n assertBrowserWorkspaceConnectorSecretsNotExported,\n assertBrowserWorkspaceUrl,\n assertBrowserWorkspaceUserScriptAllowed,\n createBrowserWorkspaceNotFoundError,\n DEFAULT_WEB_PARTITION,\n inferBrowserWorkspaceTitle,\n normalizeBrowserWorkspaceCommand,\n resolveBrowserWorkspaceCommandPartition,\n resolveConnectorBrowserWorkspacePartition,\n sleep,\n writeBrowserWorkspaceFile,\n} from \"./browser-workspace-helpers.js\";\n\nexport {\n getBrowserWorkspaceUnavailableMessage,\n isBrowserWorkspaceBridgeConfigured,\n resolveBrowserWorkspaceBridgeConfig,\n};\n\n// ── Re-export forms ─────────────────────────────────────────────────\nimport {\n clearWebBrowserWorkspaceTabElementRefs,\n cloneWebBrowserWorkspaceTabState,\n loadWebBrowserWorkspaceTabDocument,\n pushWebBrowserWorkspaceHistory,\n} from \"./browser-workspace-forms.js\";\n// ── Re-export network ────────────────────────────────────────────────\nimport { browserWorkspacePageFetch } from \"./browser-workspace-helpers.js\";\n// ── Re-export jsdom ──────────────────────────────────────────────────\nimport {\n createEmptyWebBrowserWorkspaceDom,\n installBrowserWorkspaceWebRuntime,\n} from \"./browser-workspace-jsdom.js\";\n// ── Re-export snapshots ──────────────────────────────────────────────\nimport {\n createBrowserWorkspacePdfBuffer,\n createBrowserWorkspaceSnapshotRecord,\n diffBrowserWorkspaceSnapshots,\n} from \"./browser-workspace-snapshots.js\";\n// ── Imports for state ────────────────────────────────────────────────\nimport {\n clearBrowserWorkspaceElementRefs,\n clearBrowserWorkspaceRuntimeState,\n getBrowserWorkspaceRuntimeState,\n getBrowserWorkspaceTimestamp,\n resetBrowserWorkspaceRuntimeNavigationState,\n webWorkspaceState,\n withWebStateLock,\n} from \"./browser-workspace-state.js\";\n// ── Re-export web ────────────────────────────────────────────────────\nimport {\n executeWebBrowserWorkspaceDomCommand,\n executeWebBrowserWorkspaceUtilityCommand,\n findWebBrowserWorkspaceTargetTabId,\n getWebBrowserWorkspaceTabIndex,\n getWebBrowserWorkspaceTabState,\n} from \"./browser-workspace-web.js\";\n\nconst AGENT_BROWSER_WORKSPACE_PARTITION = \"persist:eliza-browser-agent\";\nconst CONNECTOR_MANUAL_STATES = new Set<BrowserWorkspaceConnectorAuthState>([\n \"auth_pending\",\n \"needs_reauth\",\n \"manual_handoff\",\n]);\n\n// ────────────────────────────────────────────────────────────────────\n// Public API functions\n// ────────────────────────────────────────────────────────────────────\n\nexport function getBrowserWorkspaceMode(\n env: NodeJS.ProcessEnv = process.env,\n): BrowserWorkspaceMode {\n return isBrowserWorkspaceBridgeConfigured(env) ? \"desktop\" : \"web\";\n}\n\nexport function resolveBrowserWorkspaceConnectorPartition(\n provider: string,\n accountId: string,\n): string {\n return resolveConnectorBrowserWorkspacePartition(provider, accountId);\n}\n\nfunction normalizeConnectorAuthState(\n value: BrowserWorkspaceConnectorAuthState | undefined,\n fallback: BrowserWorkspaceConnectorAuthState,\n): BrowserWorkspaceConnectorAuthState {\n switch (value) {\n case \"unknown\":\n case \"ready\":\n case \"auth_pending\":\n case \"needs_reauth\":\n case \"manual_handoff\":\n return value;\n default:\n return fallback;\n }\n}\n\nfunction connectorSessionRequiresManualHandoff(\n state: BrowserWorkspaceConnectorAuthState,\n): boolean {\n return CONNECTOR_MANUAL_STATES.has(state);\n}\n\nfunction createConnectorSessionRef(\n ref: BrowserWorkspaceConnectorSessionRef,\n): BrowserWorkspaceConnectorSessionRef {\n return {\n kind: ref.kind,\n handleId: ref.handleId,\n partition: ref.partition,\n tabId: ref.tabId,\n browser: ref.browser,\n companionId: ref.companionId,\n profileId: ref.profileId,\n profileLabel: ref.profileLabel,\n };\n}\n\nfunction createConnectorSessionHandle(args: {\n provider: string;\n accountId: string;\n authState: BrowserWorkspaceConnectorAuthState;\n ref: BrowserWorkspaceConnectorSessionRef;\n created: boolean;\n message?: string | null;\n}): BrowserWorkspaceConnectorSessionHandle {\n const sessionRef = createConnectorSessionRef(args.ref);\n return {\n provider: args.provider,\n accountId: args.accountId,\n authState: args.authState,\n requiresManualHandoff: connectorSessionRequiresManualHandoff(\n args.authState,\n ),\n sessionRef,\n partition: sessionRef.partition,\n tabId: sessionRef.tabId,\n companionId: sessionRef.companionId,\n browser: sessionRef.browser,\n profileId: sessionRef.profileId,\n profileLabel: sessionRef.profileLabel,\n created: args.created,\n message: args.message ?? null,\n };\n}\n\nfunction createBrowserBridgeConnectorSessionHandle(args: {\n provider: string;\n accountId: string;\n companion: BrowserWorkspaceConnectorCompanionRef;\n authState: BrowserWorkspaceConnectorAuthState;\n message?: string | null;\n}): BrowserWorkspaceConnectorSessionHandle {\n const browser = args.companion.browser?.trim() || null;\n const companionId = args.companion.companionId?.trim() || null;\n const profileId = args.companion.profileId?.trim() || null;\n const profileLabel = args.companion.profileLabel?.trim() || null;\n return createConnectorSessionHandle({\n provider: args.provider,\n accountId: args.accountId,\n authState: args.authState,\n created: false,\n message: args.message,\n ref: {\n kind: \"browser-bridge-companion\",\n handleId: [\n \"browser-bridge\",\n browser ?? \"browser\",\n companionId ?? profileId ?? \"profile\",\n args.provider,\n args.accountId,\n ].join(\":\"),\n partition: null,\n tabId: null,\n browser,\n companionId,\n profileId,\n profileLabel,\n },\n });\n}\n\nasync function assertDesktopBrowserWorkspaceCanAccessProfileSecrets(\n command: BrowserWorkspaceCommand,\n env: NodeJS.ProcessEnv,\n operation: string,\n): Promise<void> {\n const id = await resolveDesktopBrowserWorkspaceTargetTabId(command, env);\n const tabs = await listBrowserWorkspaceTabs(env);\n const tab = tabs.find((entry) => entry.id === id) ?? null;\n assertBrowserWorkspaceConnectorSecretsNotExported(tab?.partition, operation);\n}\n\nexport async function acquireBrowserWorkspaceConnectorSession(\n request: AcquireBrowserWorkspaceConnectorSessionRequest,\n env: NodeJS.ProcessEnv = process.env,\n): Promise<BrowserWorkspaceConnectorSessionHandle> {\n const provider = request.provider.trim();\n const accountId = request.accountId.trim();\n if (!provider) {\n throw new Error(\"Eliza browser connector session requires provider.\");\n }\n if (!accountId) {\n throw new Error(\"Eliza browser connector session requires accountId.\");\n }\n\n const companion = request.companion ?? null;\n if (companion?.profileId || companion?.companionId) {\n const authState = normalizeConnectorAuthState(\n request.authState,\n \"manual_handoff\",\n );\n return createBrowserBridgeConnectorSessionHandle({\n provider,\n accountId,\n companion,\n authState,\n message:\n request.manualHandoffReason ??\n \"Use the paired browser companion profile to finish login, MFA, or CAPTCHA if required.\",\n });\n }\n\n if (isBrowserWorkspaceBridgeConfigured(env)) {\n const payload = await requestBrowserWorkspace<{\n session: BrowserWorkspaceConnectorSessionHandle;\n }>(\n \"/sessions/acquire\",\n {\n method: \"POST\",\n body: JSON.stringify({\n accountId,\n authState: request.authState,\n manualHandoffReason: request.manualHandoffReason,\n provider,\n reuse: request.reuse,\n show: request.show,\n title: request.title,\n url: request.url,\n }),\n },\n env,\n );\n return payload.session;\n }\n\n const partition = resolveBrowserWorkspaceConnectorPartition(\n provider,\n accountId,\n );\n const reuse = request.reuse !== false;\n const tabs = reuse ? await listBrowserWorkspaceTabs(env) : [];\n const existing = tabs.find((tab) => tab.partition === partition) ?? null;\n let tab = existing;\n let created = false;\n\n if (!tab) {\n tab = await openBrowserWorkspaceTab(\n {\n kind: \"internal\",\n partition,\n show: request.show ?? true,\n title: request.title,\n url: request.url,\n },\n env,\n );\n created = true;\n } else if (request.show === true) {\n tab = await showBrowserWorkspaceTab(tab.id, env);\n }\n\n const authState = normalizeConnectorAuthState(\n request.authState,\n created ? \"auth_pending\" : \"ready\",\n );\n return createConnectorSessionHandle({\n provider,\n accountId,\n authState,\n created,\n message:\n request.manualHandoffReason ??\n (connectorSessionRequiresManualHandoff(authState)\n ? \"Manual login, MFA, or CAPTCHA may be required in this isolated connector browser session.\"\n : null),\n ref: {\n kind: \"internal-browser\",\n handleId: `internal-browser:${partition}`,\n partition,\n tabId: tab.id,\n browser: null,\n companionId: null,\n profileId: null,\n profileLabel: null,\n },\n });\n}\n\nexport async function getBrowserWorkspaceSnapshot(\n env: NodeJS.ProcessEnv = process.env,\n): Promise<BrowserWorkspaceSnapshot> {\n return {\n mode: getBrowserWorkspaceMode(env),\n tabs: await listBrowserWorkspaceTabs(env),\n };\n}\n\nexport async function listBrowserWorkspaceTabs(\n env: NodeJS.ProcessEnv = process.env,\n): Promise<BrowserWorkspaceTab[]> {\n if (!isBrowserWorkspaceBridgeConfigured(env)) {\n return webWorkspaceState.tabs.map((tab) => ({\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\n const payload = await requestBrowserWorkspace<{\n tabs?: BrowserWorkspaceTab[];\n }>(\"/tabs\", undefined, env);\n return Array.isArray(payload.tabs) ? payload.tabs : [];\n}\n\nexport async function openBrowserWorkspaceTab(\n request: OpenBrowserWorkspaceTabRequest,\n env: NodeJS.ProcessEnv = process.env,\n): Promise<BrowserWorkspaceTab> {\n if (!isBrowserWorkspaceBridgeConfigured(env)) {\n return withWebStateLock(() => {\n const kind: BrowserWorkspaceTabKind =\n request.kind === \"internal\" ? \"internal\" : \"standard\";\n const now = getBrowserWorkspaceTimestamp();\n const url = assertBrowserWorkspaceUrl(\n request.url?.trim() || \"about:blank\",\n );\n const visible = request.show === true;\n const id = `btab_${webWorkspaceState.nextId++}`;\n const dom =\n url === \"about:blank\" ? createEmptyWebBrowserWorkspaceDom(url) : null;\n const tab = {\n id,\n title: request.title?.trim() || inferBrowserWorkspaceTitle(url),\n url,\n partition: request.partition?.trim() || DEFAULT_WEB_PARTITION,\n kind,\n visible,\n createdAt: now,\n updatedAt: now,\n lastFocusedAt: visible ? now : null,\n dom,\n history: [url],\n historyIndex: 0,\n loadedUrl: url === \"about:blank\" ? url : null,\n };\n if (dom) {\n installBrowserWorkspaceWebRuntime(tab, dom);\n }\n getBrowserWorkspaceRuntimeState(\"web\", tab.id);\n clearWebBrowserWorkspaceTabElementRefs(tab.id);\n if (tab.visible) {\n webWorkspaceState.tabs = webWorkspaceState.tabs.map((entry) => ({\n ...entry,\n visible: false,\n }));\n }\n webWorkspaceState.tabs = [...webWorkspaceState.tabs, tab];\n return cloneWebBrowserWorkspaceTabState(tab);\n });\n }\n\n const payload = await requestBrowserWorkspace<{ tab: BrowserWorkspaceTab }>(\n \"/tabs\",\n {\n method: \"POST\",\n body: JSON.stringify(request),\n },\n env,\n );\n return payload.tab;\n}\n\nexport async function navigateBrowserWorkspaceTab(\n request: NavigateBrowserWorkspaceTabRequest,\n env: NodeJS.ProcessEnv = process.env,\n): Promise<BrowserWorkspaceTab> {\n const nextUrl = assertBrowserWorkspaceUrl(request.url);\n\n if (!isBrowserWorkspaceBridgeConfigured(env)) {\n return withWebStateLock(() => {\n const index = getWebBrowserWorkspaceTabIndex(request.id);\n if (index < 0) {\n throw createBrowserWorkspaceNotFoundError(request.id);\n }\n\n const existing = webWorkspaceState.tabs[index];\n const updatedAt = getBrowserWorkspaceTimestamp();\n const state = getBrowserWorkspaceRuntimeState(\"web\", existing.id);\n clearWebBrowserWorkspaceTabElementRefs(existing.id);\n pushWebBrowserWorkspaceHistory(existing, nextUrl);\n const nextDom =\n nextUrl === \"about:blank\"\n ? createEmptyWebBrowserWorkspaceDom(nextUrl)\n : null;\n const nextTab = {\n ...existing,\n title: inferBrowserWorkspaceTitle(nextUrl),\n url: nextUrl,\n updatedAt,\n dom: nextDom,\n loadedUrl: nextUrl === \"about:blank\" ? nextUrl : null,\n };\n if (nextDom) {\n installBrowserWorkspaceWebRuntime(nextTab, nextDom);\n }\n resetBrowserWorkspaceRuntimeNavigationState(state);\n webWorkspaceState.tabs[index] = nextTab;\n return cloneWebBrowserWorkspaceTabState(nextTab);\n });\n }\n\n const navigateBody: { url: string; partition?: string } = { url: nextUrl };\n if (request.partition !== undefined) {\n navigateBody.partition = request.partition;\n }\n\n const payload = await requestBrowserWorkspace<{ tab: BrowserWorkspaceTab }>(\n `/tabs/${encodeURIComponent(request.id)}/navigate`,\n {\n method: \"POST\",\n body: JSON.stringify(navigateBody),\n },\n env,\n );\n return payload.tab;\n}\n\nexport async function showBrowserWorkspaceTab(\n id: string,\n env: NodeJS.ProcessEnv = process.env,\n): Promise<BrowserWorkspaceTab> {\n if (!isBrowserWorkspaceBridgeConfigured(env)) {\n return withWebStateLock(() => {\n getWebBrowserWorkspaceTabState(id);\n const lastFocusedAt = getBrowserWorkspaceTimestamp();\n webWorkspaceState.tabs = webWorkspaceState.tabs.map((tab) => ({\n ...tab,\n visible: tab.id === id,\n lastFocusedAt: tab.id === id ? lastFocusedAt : tab.lastFocusedAt,\n updatedAt: tab.id === id ? lastFocusedAt : tab.updatedAt,\n }));\n return cloneWebBrowserWorkspaceTabState(\n getWebBrowserWorkspaceTabState(id),\n );\n });\n }\n\n const payload = await requestBrowserWorkspace<{ tab: BrowserWorkspaceTab }>(\n `/tabs/${encodeURIComponent(id)}/show`,\n { method: \"POST\" },\n env,\n );\n return payload.tab;\n}\n\nexport async function hideBrowserWorkspaceTab(\n id: string,\n env: NodeJS.ProcessEnv = process.env,\n): Promise<BrowserWorkspaceTab> {\n if (!isBrowserWorkspaceBridgeConfigured(env)) {\n return withWebStateLock(() => {\n const index = getWebBrowserWorkspaceTabIndex(id);\n if (index < 0) {\n throw createBrowserWorkspaceNotFoundError(id);\n }\n\n const updatedAt = getBrowserWorkspaceTimestamp();\n const nextTab = {\n ...webWorkspaceState.tabs[index],\n visible: false,\n updatedAt,\n };\n webWorkspaceState.tabs[index] = nextTab;\n return cloneWebBrowserWorkspaceTabState(nextTab);\n });\n }\n\n const payload = await requestBrowserWorkspace<{ tab: BrowserWorkspaceTab }>(\n `/tabs/${encodeURIComponent(id)}/hide`,\n { method: \"POST\" },\n env,\n );\n return payload.tab;\n}\n\nexport async function closeBrowserWorkspaceTab(\n id: string,\n env: NodeJS.ProcessEnv = process.env,\n): Promise<boolean> {\n if (!isBrowserWorkspaceBridgeConfigured(env)) {\n return withWebStateLock(() => {\n const initialLength = webWorkspaceState.tabs.length;\n clearWebBrowserWorkspaceTabElementRefs(id);\n clearBrowserWorkspaceRuntimeState(\"web\", id);\n webWorkspaceState.tabs = webWorkspaceState.tabs.filter(\n (tab) => tab.id !== id,\n );\n return webWorkspaceState.tabs.length !== initialLength;\n });\n }\n\n const payload = await requestBrowserWorkspace<{ closed?: boolean }>(\n `/tabs/${encodeURIComponent(id)}`,\n { method: \"DELETE\" },\n env,\n );\n return payload.closed === true;\n}\n\nexport async function evaluateBrowserWorkspaceTab(\n request: EvaluateBrowserWorkspaceTabRequest,\n env: NodeJS.ProcessEnv = process.env,\n): Promise<unknown> {\n return evaluateBrowserWorkspaceTabDesktop(request, env);\n}\n\nexport async function snapshotBrowserWorkspaceTab(\n id: string,\n env: NodeJS.ProcessEnv = process.env,\n): Promise<{ data: string }> {\n return snapshotBrowserWorkspaceTabDesktop(id, env);\n}\n\n// ────────────────────────────────────────────────────────────────────\n// Main command router\n// ────────────────────────────────────────────────────────────────────\n\nexport async function executeBrowserWorkspaceCommand(\n command: BrowserWorkspaceCommand,\n env: NodeJS.ProcessEnv = process.env,\n): Promise<BrowserWorkspaceCommandResult> {\n command = normalizeBrowserWorkspaceCommand(command);\n switch (command.subaction) {\n case \"batch\": {\n const steps = Array.isArray(command.steps) ? command.steps : [];\n if (steps.length === 0) {\n throw new Error(\n \"Eliza browser workspace batch requires at least one step.\",\n );\n }\n const results: BrowserWorkspaceCommandResult[] = [];\n for (const step of steps) {\n results.push(await executeBrowserWorkspaceCommand(step, env));\n }\n return {\n mode: getBrowserWorkspaceMode(env),\n subaction: command.subaction,\n steps: results,\n value: results.at(-1)?.value,\n };\n }\n case \"list\":\n return {\n mode: getBrowserWorkspaceMode(env),\n subaction: command.subaction,\n tabs: await listBrowserWorkspaceTabs(env),\n };\n case \"open\": {\n const tab = await openBrowserWorkspaceTab(\n {\n partition: resolveBrowserWorkspaceCommandPartition(\n command,\n AGENT_BROWSER_WORKSPACE_PARTITION,\n ),\n show: command.show,\n title: command.title,\n url: command.url,\n },\n env,\n );\n clearBrowserWorkspaceElementRefs(getBrowserWorkspaceMode(env), tab.id);\n return {\n mode: getBrowserWorkspaceMode(env),\n subaction: command.subaction,\n tab,\n };\n }\n case \"navigate\": {\n const id = isBrowserWorkspaceBridgeConfigured(env)\n ? await resolveDesktopBrowserWorkspaceTargetTabId(command, env)\n : findWebBrowserWorkspaceTargetTabId(command);\n clearBrowserWorkspaceElementRefs(getBrowserWorkspaceMode(env), id);\n return {\n mode: getBrowserWorkspaceMode(env),\n subaction: command.subaction,\n tab: await navigateBrowserWorkspaceTab(\n {\n id,\n url: command.url ?? \"\",\n },\n env,\n ),\n };\n }\n case \"show\": {\n const id = isBrowserWorkspaceBridgeConfigured(env)\n ? await resolveDesktopBrowserWorkspaceTargetTabId(command, env)\n : findWebBrowserWorkspaceTargetTabId(command);\n return {\n mode: getBrowserWorkspaceMode(env),\n subaction: command.subaction,\n tab: await showBrowserWorkspaceTab(id, env),\n };\n }\n case \"hide\": {\n const id = isBrowserWorkspaceBridgeConfigured(env)\n ? await resolveDesktopBrowserWorkspaceTargetTabId(command, env)\n : findWebBrowserWorkspaceTargetTabId(command);\n return {\n mode: getBrowserWorkspaceMode(env),\n subaction: command.subaction,\n tab: await hideBrowserWorkspaceTab(id, env),\n };\n }\n case \"close\": {\n const id = isBrowserWorkspaceBridgeConfigured(env)\n ? await resolveDesktopBrowserWorkspaceTargetTabId(command, env)\n : findWebBrowserWorkspaceTargetTabId(command);\n clearBrowserWorkspaceElementRefs(getBrowserWorkspaceMode(env), id);\n clearBrowserWorkspaceRuntimeState(getBrowserWorkspaceMode(env), id);\n return {\n mode: getBrowserWorkspaceMode(env),\n subaction: command.subaction,\n closed: await closeBrowserWorkspaceTab(id, env),\n };\n }\n case \"eval\": {\n if (!isBrowserWorkspaceBridgeConfigured(env)) {\n return (await executeWebBrowserWorkspaceUtilityCommand(\n command,\n )) as BrowserWorkspaceCommandResult;\n }\n assertBrowserWorkspaceUserScriptAllowed(\n command.script,\n \"eval\",\n \"desktop\",\n env,\n );\n const id = await resolveDesktopBrowserWorkspaceTargetTabId(command, env);\n return {\n mode: \"desktop\",\n subaction: command.subaction,\n value: await evaluateBrowserWorkspaceTab(\n {\n id,\n script: command.script ?? \"\",\n },\n env,\n ),\n };\n }\n case \"screenshot\": {\n if (!isBrowserWorkspaceBridgeConfigured(env)) {\n return (await executeWebBrowserWorkspaceUtilityCommand(\n command,\n )) as BrowserWorkspaceCommandResult;\n }\n const id = await resolveDesktopBrowserWorkspaceTargetTabId(command, env);\n return {\n mode: \"desktop\",\n subaction: command.subaction,\n snapshot: await snapshotBrowserWorkspaceTab(id, env),\n };\n }\n case \"clipboard\":\n case \"console\":\n case \"cookies\":\n case \"dialog\":\n case \"drag\":\n case \"errors\":\n case \"frame\":\n case \"highlight\":\n case \"mouse\":\n case \"network\":\n case \"set\":\n case \"storage\":\n case \"upload\": {\n if (!isBrowserWorkspaceBridgeConfigured(env)) {\n return (await executeWebBrowserWorkspaceUtilityCommand(\n command,\n )) as BrowserWorkspaceCommandResult;\n }\n return executeDesktopBrowserWorkspaceUtilityCommand(command, env);\n }\n case \"diff\": {\n if (!isBrowserWorkspaceBridgeConfigured(env)) {\n return (await executeWebBrowserWorkspaceUtilityCommand(\n command,\n )) as BrowserWorkspaceCommandResult;\n }\n const id = await resolveDesktopBrowserWorkspaceTargetTabId(command, env);\n const runtime = getBrowserWorkspaceRuntimeState(\"desktop\", id);\n const snapshot = await getDesktopBrowserWorkspaceSnapshotRecord(\n command,\n env,\n );\n if (command.diffAction === \"screenshot\") {\n const screenshot = await snapshotBrowserWorkspaceTab(id, env);\n const currentData = screenshot.data;\n const baseline = command.baselinePath?.trim()\n ? await fsp.readFile(\n path.resolve(command.baselinePath.trim()),\n \"base64\",\n )\n : runtime.lastScreenshotData;\n runtime.lastScreenshotData = currentData;\n return {\n mode: \"desktop\",\n subaction: command.subaction,\n value: {\n baselineLength: baseline?.length ?? 0,\n changed: baseline !== currentData,\n currentLength: currentData.length,\n },\n };\n }\n if (command.diffAction === \"url\") {\n const leftUrl = command.url?.trim() || snapshot.url;\n const rightUrl = command.secondaryUrl?.trim();\n if (!rightUrl) {\n throw new Error(\n \"Eliza browser workspace diff url requires secondaryUrl.\",\n );\n }\n const left = await browserWorkspacePageFetch(leftUrl);\n const right = await browserWorkspacePageFetch(rightUrl);\n return {\n mode: \"desktop\",\n subaction: command.subaction,\n value: diffBrowserWorkspaceSnapshots(\n createBrowserWorkspaceSnapshotRecord(\n leftUrl,\n left.url || leftUrl,\n await left.text(),\n ),\n createBrowserWorkspaceSnapshotRecord(\n rightUrl,\n right.url || rightUrl,\n await right.text(),\n ),\n ),\n };\n }\n const baseline = command.baselinePath?.trim()\n ? (JSON.parse(\n await fsp.readFile(\n path.resolve(command.baselinePath.trim()),\n \"utf8\",\n ),\n ) as import(\"./browser-workspace-types.js\").BrowserWorkspaceSnapshotRecord)\n : runtime.lastSnapshot;\n const diff = diffBrowserWorkspaceSnapshots(baseline, snapshot);\n runtime.lastSnapshot = snapshot;\n return { mode: \"desktop\", subaction: command.subaction, value: diff };\n }\n case \"trace\":\n case \"profiler\": {\n if (!isBrowserWorkspaceBridgeConfigured(env)) {\n return (await executeWebBrowserWorkspaceUtilityCommand(\n command,\n )) as BrowserWorkspaceCommandResult;\n }\n const id = await resolveDesktopBrowserWorkspaceTargetTabId(command, env);\n const runtime = getBrowserWorkspaceRuntimeState(\"desktop\", id);\n const target =\n command.subaction === \"trace\" ? runtime.trace : runtime.profiler;\n const stop =\n command.subaction === \"trace\"\n ? command.traceAction === \"stop\"\n : command.profilerAction === \"stop\";\n if (stop) {\n target.active = false;\n const payload = { entries: target.entries };\n const filePath = command.filePath?.trim() || command.outputPath?.trim();\n if (filePath) {\n await writeBrowserWorkspaceFile(\n filePath,\n JSON.stringify(payload, null, 2),\n );\n return {\n mode: \"desktop\",\n subaction: command.subaction,\n value: { path: path.resolve(filePath), ...payload },\n };\n }\n return {\n mode: \"desktop\",\n subaction: command.subaction,\n value: payload,\n };\n }\n target.active = true;\n target.entries = [\n {\n command: `${command.subaction}:start`,\n timestamp: getBrowserWorkspaceTimestamp(),\n },\n ];\n return {\n mode: \"desktop\",\n subaction: command.subaction,\n value: { active: true },\n };\n }\n case \"state\": {\n if (!isBrowserWorkspaceBridgeConfigured(env)) {\n return (await executeWebBrowserWorkspaceUtilityCommand(\n command,\n )) as BrowserWorkspaceCommandResult;\n }\n await assertDesktopBrowserWorkspaceCanAccessProfileSecrets(\n command,\n env,\n \"state\",\n );\n if (command.stateAction === \"load\") {\n const filePath = command.filePath?.trim() || command.outputPath?.trim();\n if (!filePath) {\n throw new Error(\n \"Eliza browser workspace state load requires filePath.\",\n );\n }\n const payload = JSON.parse(\n await fsp.readFile(path.resolve(filePath), \"utf8\"),\n ) as Record<string, unknown>;\n await loadDesktopBrowserWorkspaceSessionState(command, payload, env);\n return {\n mode: \"desktop\",\n subaction: command.subaction,\n value: { loaded: true },\n };\n }\n const payload = await getDesktopBrowserWorkspaceSessionState(\n command,\n env,\n );\n const filePath = command.filePath?.trim() || command.outputPath?.trim();\n if (filePath) {\n await writeBrowserWorkspaceFile(\n filePath,\n JSON.stringify(payload, null, 2),\n );\n return {\n mode: \"desktop\",\n subaction: command.subaction,\n value: { path: path.resolve(filePath), ...payload },\n };\n }\n return { mode: \"desktop\", subaction: command.subaction, value: payload };\n }\n case \"pdf\": {\n if (!isBrowserWorkspaceBridgeConfigured(env)) {\n return (await executeWebBrowserWorkspaceUtilityCommand(\n command,\n )) as BrowserWorkspaceCommandResult;\n }\n const filePath = command.filePath?.trim() || command.outputPath?.trim();\n if (!filePath) {\n throw new Error(\"Eliza browser workspace pdf requires filePath.\");\n }\n const snapshot = await getDesktopBrowserWorkspaceSnapshotRecord(\n command,\n env,\n );\n const pdf = createBrowserWorkspacePdfBuffer(\n snapshot.title,\n snapshot.bodyText,\n );\n const resolved = await writeBrowserWorkspaceFile(filePath, pdf);\n return {\n mode: \"desktop\",\n subaction: command.subaction,\n value: { path: resolved, size: pdf.byteLength },\n };\n }\n case \"tab\": {\n const action = command.tabAction ?? \"list\";\n if (action === \"list\") {\n return {\n mode: getBrowserWorkspaceMode(env),\n subaction: command.subaction,\n tabs: await listBrowserWorkspaceTabs(env),\n };\n }\n if (action === \"new\") {\n return {\n mode: getBrowserWorkspaceMode(env),\n subaction: command.subaction,\n tab: await openBrowserWorkspaceTab(\n {\n partition: resolveBrowserWorkspaceCommandPartition(\n command,\n AGENT_BROWSER_WORKSPACE_PARTITION,\n ),\n show: command.show ?? true,\n title: command.title,\n url: command.url,\n width: command.width,\n height: command.height,\n },\n env,\n ),\n };\n }\n if (action === \"switch\") {\n const tabs = await listBrowserWorkspaceTabs(env);\n const target = command.id?.trim()\n ? tabs.find((tab) => tab.id === command.id?.trim())\n : typeof command.index === \"number\"\n ? (tabs[command.index] ?? null)\n : null;\n if (!target) {\n throw new Error(\n \"Eliza browser workspace tab switch requires a valid id or index.\",\n );\n }\n return {\n mode: getBrowserWorkspaceMode(env),\n subaction: command.subaction,\n tab: await showBrowserWorkspaceTab(target.id, env),\n };\n }\n const targetId =\n command.id?.trim() ||\n (await listBrowserWorkspaceTabs(env))[command.index ?? -1]?.id;\n if (!targetId) {\n throw new Error(\n \"Eliza browser workspace tab close requires a valid id or index.\",\n );\n }\n return {\n mode: getBrowserWorkspaceMode(env),\n subaction: command.subaction,\n closed: await closeBrowserWorkspaceTab(targetId, env),\n };\n }\n case \"window\":\n return {\n mode: getBrowserWorkspaceMode(env),\n subaction: command.subaction,\n tab: await openBrowserWorkspaceTab(\n {\n partition: resolveBrowserWorkspaceCommandPartition(\n command,\n AGENT_BROWSER_WORKSPACE_PARTITION,\n ),\n show: true,\n title: command.title,\n url: command.url,\n width: command.width,\n height: command.height,\n },\n env,\n ),\n };\n case \"back\":\n case \"forward\":\n case \"reload\": {\n if (isBrowserWorkspaceBridgeConfigured(env)) {\n const id = await resolveDesktopBrowserWorkspaceTargetTabId(\n command,\n env,\n );\n clearBrowserWorkspaceElementRefs(\"desktop\", id);\n return executeDesktopBrowserWorkspaceDomCommand(command, env);\n }\n\n return withWebStateLock(async () => {\n const id = findWebBrowserWorkspaceTargetTabId(command);\n const tab = getWebBrowserWorkspaceTabState(id);\n\n if (command.subaction === \"reload\") {\n clearWebBrowserWorkspaceTabElementRefs(tab.id);\n tab.dom = null;\n tab.loadedUrl = null;\n await loadWebBrowserWorkspaceTabDocument(tab);\n return {\n mode: \"web\",\n subaction: command.subaction,\n tab: cloneWebBrowserWorkspaceTabState(tab),\n value: { url: tab.url, title: tab.title },\n };\n }\n\n const delta = command.subaction === \"back\" ? -1 : 1;\n const nextIndex = tab.historyIndex + delta;\n if (nextIndex < 0 || nextIndex >= tab.history.length) {\n return {\n mode: \"web\",\n subaction: command.subaction,\n tab: cloneWebBrowserWorkspaceTabState(tab),\n value: { url: tab.url, title: tab.title, changed: false },\n };\n }\n\n tab.historyIndex = nextIndex;\n tab.url = tab.history[nextIndex] ?? tab.url;\n tab.title = inferBrowserWorkspaceTitle(tab.url);\n clearWebBrowserWorkspaceTabElementRefs(tab.id);\n tab.dom = null;\n tab.loadedUrl = null;\n await loadWebBrowserWorkspaceTabDocument(tab);\n return {\n mode: \"web\",\n subaction: command.subaction,\n tab: cloneWebBrowserWorkspaceTabState(tab),\n value: { url: tab.url, title: tab.title, changed: true },\n };\n });\n }\n case \"inspect\":\n case \"snapshot\":\n case \"check\":\n case \"click\":\n case \"dblclick\":\n case \"find\":\n case \"fill\":\n case \"focus\":\n case \"get\":\n case \"hover\":\n case \"keydown\":\n case \"keyup\":\n case \"keyboardinserttext\":\n case \"keyboardtype\":\n case \"press\":\n case \"scroll\":\n case \"scrollinto\":\n case \"select\":\n case \"type\":\n case \"uncheck\":\n case \"wait\":\n case \"realistic-click\":\n case \"realistic-fill\":\n case \"realistic-type\":\n case \"realistic-press\":\n case \"realistic-upload\":\n case \"cursor-move\":\n case \"cursor-hide\":\n if (\n command.subaction === \"wait\" &&\n !command.selector &&\n !command.findBy &&\n !command.text &&\n !command.url &&\n !command.script &&\n typeof command.timeoutMs === \"number\" &&\n Number.isFinite(command.timeoutMs)\n ) {\n const waitedMs = Math.max(0, command.timeoutMs);\n await sleep(waitedMs);\n return {\n mode: getBrowserWorkspaceMode(env),\n subaction: command.subaction,\n value: { waitedMs },\n };\n }\n if (isBrowserWorkspaceBridgeConfigured(env)) {\n return executeDesktopBrowserWorkspaceDomCommand(command, env);\n }\n return executeWebBrowserWorkspaceDomCommand(command);\n default: {\n const exhaustive: never = command.subaction;\n throw new Error(`Unsupported browser workspace subaction: ${exhaustive}`);\n }\n }\n}\n"],"mappings":"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","names":["authState","tab","baseline","filePath","payload"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/workspace/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/workspace/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,wBAAwB,CAAC"}
|
package/dist/workspace/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/workspace/index.ts"],"sourcesContent":["/**\n * Workspace browser command router — public barrel.\n *\n * This is the multi-backend workspace browser surface (formerly\n * `packages/agent/src/services/browser-workspace.ts` and friends). It owns:\n *\n * - `browser-workspace.ts` — public functions and the main command\n * router `executeBrowserWorkspaceCommand`\n * - `browser-workspace-types.ts` — exported types and interfaces\n * - `browser-workspace-state.ts` — global mutable state\n * - `browser-workspace-helpers.ts` — small utilities and command normalization\n * - `browser-workspace-jsdom.ts` — JSDOM loading and runtime install\n * - `browser-workspace-elements.ts` — element finding, selector parsing\n * - `browser-workspace-network.ts` — HAR, network interception\n * - `browser-workspace-forms.ts` — form control interaction\n * - `browser-workspace-snapshots.ts` — document snapshots, diff, PDF\n * - `browser-workspace-desktop.ts` — desktop bridge HTTP client\n * - `browser-workspace-web.ts` — web-mode (JSDOM-backed) command exec\n * - `browser-capture.ts` — frame-capture helpers for streaming\n *\n * Importers should prefer `@elizaos/plugin-browser/workspace` over the\n * specific `browser-workspace*` subpaths.\n */\n\nexport * from \"./browser-capture.js\";\nexport * from \"./browser-workspace.js\";\n"],"mappings":"AAwBA,cAAc;AACd,cAAc;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/workspace/index.ts"],"sourcesContent":["/**\n * Workspace browser command router — public barrel.\n *\n * This is the multi-backend workspace browser surface (formerly\n * `packages/agent/src/services/browser-workspace.ts` and friends). It owns:\n *\n * - `browser-workspace.ts` — public functions and the main command\n * router `executeBrowserWorkspaceCommand`\n * - `browser-workspace-types.ts` — exported types and interfaces\n * - `browser-workspace-state.ts` — global mutable state\n * - `browser-workspace-helpers.ts` — small utilities and command normalization\n * - `browser-workspace-jsdom.ts` — JSDOM loading and runtime install\n * - `browser-workspace-elements.ts` — element finding, selector parsing\n * - `browser-workspace-network.ts` — HAR, network interception\n * - `browser-workspace-forms.ts` — form control interaction\n * - `browser-workspace-snapshots.ts` — document snapshots, diff, PDF\n * - `browser-workspace-desktop.ts` — desktop bridge HTTP client\n * - `browser-workspace-web.ts` — web-mode (JSDOM-backed) command exec\n * - `browser-capture.ts` — frame-capture helpers for streaming\n *\n * Importers should prefer `@elizaos/plugin-browser/workspace` over the\n * specific `browser-workspace*` subpaths.\n */\n\nexport * from \"./browser-capture.js\";\nexport * from \"./browser-workspace-errors.js\";\nexport * from \"./browser-workspace.js\";\n"],"mappings":"AAwBA,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,33 +1,53 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elizaos/plugin-browser",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.3-beta.3",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"description": "Browser plugin:
|
|
5
|
+
"description": "Browser plugin: BROWSER action and MANAGE_BROWSER_BRIDGE management action. Owns the workspace browser (electrobun-embedded + jsdom fallback) and the Chrome/Safari companion bridge. Targets are registered with the BrowserService; the agent uses what is available.",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"exports": {
|
|
8
8
|
"./package.json": "./package.json",
|
|
9
9
|
".": {
|
|
10
10
|
"types": "./dist/index.d.ts",
|
|
11
|
+
"eliza-source": {
|
|
12
|
+
"types": "./src/index.ts",
|
|
13
|
+
"import": "./src/index.ts",
|
|
14
|
+
"default": "./src/index.ts"
|
|
15
|
+
},
|
|
11
16
|
"import": "./dist/index.js",
|
|
12
17
|
"default": "./dist/index.js"
|
|
18
|
+
},
|
|
19
|
+
"./*.css": "./dist/*.css",
|
|
20
|
+
"./*": {
|
|
21
|
+
"types": "./dist/*.d.ts",
|
|
22
|
+
"eliza-source": {
|
|
23
|
+
"types": "./src/*.ts",
|
|
24
|
+
"import": "./src/*.ts",
|
|
25
|
+
"default": "./src/*.ts"
|
|
26
|
+
},
|
|
27
|
+
"import": "./dist/*.js",
|
|
28
|
+
"default": "./dist/*.js"
|
|
13
29
|
}
|
|
14
30
|
},
|
|
15
31
|
"scripts": {
|
|
16
|
-
"typecheck": "
|
|
32
|
+
"typecheck": "tsgo --noEmit -p tsconfig.json",
|
|
33
|
+
"test": "vitest run",
|
|
17
34
|
"build": "bun run build:js && bun run build:types",
|
|
18
35
|
"clean": "rm -rf dist",
|
|
19
36
|
"build:js": "tsup --config ../tsup.plugin-packages.shared.ts",
|
|
20
37
|
"build:types": "tsc --noCheck -p tsconfig.build.json"
|
|
21
38
|
},
|
|
22
39
|
"dependencies": {
|
|
23
|
-
"@elizaos/core": "2.0.
|
|
24
|
-
"@elizaos/vault": "2.0.
|
|
40
|
+
"@elizaos/core": "2.0.3-beta.3",
|
|
41
|
+
"@elizaos/vault": "2.0.3-beta.3",
|
|
25
42
|
"drizzle-orm": "0.45.2"
|
|
26
43
|
},
|
|
27
44
|
"devDependencies": {
|
|
28
45
|
"bun-types": "^1.3.12",
|
|
46
|
+
"jsdom": "^29.0.0",
|
|
47
|
+
"puppeteer-core": "^24.37.5",
|
|
29
48
|
"tsup": "^8.5.1",
|
|
30
|
-
"typescript": "^6.0.3"
|
|
49
|
+
"typescript": "^6.0.3",
|
|
50
|
+
"vitest": "^4.0.17"
|
|
31
51
|
},
|
|
32
52
|
"agentConfig": {
|
|
33
53
|
"pluginType": "elizaos:plugin:1.0.0",
|
|
@@ -46,7 +66,9 @@
|
|
|
46
66
|
},
|
|
47
67
|
"types": "./dist/index.d.ts",
|
|
48
68
|
"files": [
|
|
69
|
+
"registry-entry.json",
|
|
49
70
|
"dist",
|
|
50
71
|
"auto-enable.ts"
|
|
51
|
-
]
|
|
72
|
+
],
|
|
73
|
+
"gitHead": "f54b0f4eaed317d59fa7dbcdce20f4cdb0734420"
|
|
52
74
|
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "browser",
|
|
3
|
+
"name": "Browser",
|
|
4
|
+
"description": "Web scraping and content extraction with Playwright",
|
|
5
|
+
"npmName": "@elizaos/plugin-browser",
|
|
6
|
+
"version": "2.0.0-beta.0",
|
|
7
|
+
"source": "bundled",
|
|
8
|
+
"tags": ["browser", "automation", "stagehand", "playwright", "web-scraping"],
|
|
9
|
+
"config": {
|
|
10
|
+
"OPENAI_API_KEY": {
|
|
11
|
+
"type": "secret",
|
|
12
|
+
"required": false,
|
|
13
|
+
"sensitive": true,
|
|
14
|
+
"label": "Api Key",
|
|
15
|
+
"help": "OpenAI API key for AI-powered browser interactions",
|
|
16
|
+
"advanced": false
|
|
17
|
+
},
|
|
18
|
+
"BROWSER_HEADLESS": {
|
|
19
|
+
"type": "boolean",
|
|
20
|
+
"required": false,
|
|
21
|
+
"sensitive": false,
|
|
22
|
+
"label": "Headless",
|
|
23
|
+
"help": "Run browser in headless mode (default: true)",
|
|
24
|
+
"advanced": false
|
|
25
|
+
},
|
|
26
|
+
"ANTHROPIC_API_KEY": {
|
|
27
|
+
"type": "secret",
|
|
28
|
+
"required": false,
|
|
29
|
+
"sensitive": true,
|
|
30
|
+
"label": "Api Key",
|
|
31
|
+
"help": "Anthropic API key for Claude-powered interactions",
|
|
32
|
+
"advanced": false
|
|
33
|
+
},
|
|
34
|
+
"CAPSOLVER_API_KEY": {
|
|
35
|
+
"type": "secret",
|
|
36
|
+
"required": false,
|
|
37
|
+
"sensitive": true,
|
|
38
|
+
"label": "Api Key",
|
|
39
|
+
"help": "CapSolver API key for automated CAPTCHA solving",
|
|
40
|
+
"advanced": false
|
|
41
|
+
},
|
|
42
|
+
"BROWSERBASE_API_KEY": {
|
|
43
|
+
"type": "secret",
|
|
44
|
+
"required": false,
|
|
45
|
+
"sensitive": true,
|
|
46
|
+
"label": "Api Key",
|
|
47
|
+
"help": "API key for Browserbase cloud browser service",
|
|
48
|
+
"advanced": false
|
|
49
|
+
},
|
|
50
|
+
"BROWSERBASE_PROJECT_ID": {
|
|
51
|
+
"type": "string",
|
|
52
|
+
"required": false,
|
|
53
|
+
"sensitive": false,
|
|
54
|
+
"label": "Project Id",
|
|
55
|
+
"help": "Project ID for Browserbase",
|
|
56
|
+
"advanced": false
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
"render": {
|
|
60
|
+
"visible": true,
|
|
61
|
+
"pinTo": [],
|
|
62
|
+
"style": "card",
|
|
63
|
+
"icon": "Globe",
|
|
64
|
+
"group": "devtools",
|
|
65
|
+
"groupOrder": 5,
|
|
66
|
+
"actions": ["enable", "configure"]
|
|
67
|
+
},
|
|
68
|
+
"resources": {
|
|
69
|
+
"homepage": "https://elizaos.ai",
|
|
70
|
+
"repository": "https://github.com/elizaos/eliza"
|
|
71
|
+
},
|
|
72
|
+
"dependsOn": [],
|
|
73
|
+
"kind": "plugin",
|
|
74
|
+
"subtype": "devtools"
|
|
75
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=browser-autofill-login.d.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=browser.d.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=manage-browser-bridge.d.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/ambient-jsdom.d.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=ambient-jsdom.d.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=browser-service.d.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/contracts.d.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=contracts.d.js.map
|
package/dist/contracts.d.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/index.d.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { BROWSER_SERVICE_TYPE, BrowserService } from "./browser-service.js";
|
|
2
|
-
import { executeBrowserAutofillLogin } from "./actions/browser-autofill-login.js";
|
|
3
|
-
import { browserAction } from "./actions/browser.js";
|
|
4
|
-
import { BROWSER_BRIDGE_SUBACTIONS, manageBrowserBridgeAction } from "./actions/manage-browser-bridge.js";
|
|
5
|
-
export * from "./contracts.js";
|
|
6
|
-
export * from "./packaging.js";
|
|
7
|
-
import { browserPlugin } from "./plugin.js";
|
|
8
|
-
export * from "./routes/bridge.js";
|
|
9
|
-
export * from "./schema.js";
|
|
10
|
-
export * from "./service.js";
|
|
11
|
-
export * from "./workspace/index.js";
|
|
12
|
-
export {
|
|
13
|
-
BROWSER_BRIDGE_SUBACTIONS,
|
|
14
|
-
BROWSER_SERVICE_TYPE,
|
|
15
|
-
BrowserService,
|
|
16
|
-
browserAction,
|
|
17
|
-
browserPlugin,
|
|
18
|
-
executeBrowserAutofillLogin,
|
|
19
|
-
manageBrowserBridgeAction
|
|
20
|
-
};
|
|
21
|
-
//# sourceMappingURL=index.d.js.map
|
package/dist/index.d.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * @elizaos/plugin-browser — public barrel.\n *\n * Import specific surfaces through the subpath exports defined in\n * `package.json`:\n * - `@elizaos/plugin-browser/contracts`\n * - `@elizaos/plugin-browser/schema`\n * - `@elizaos/plugin-browser/packaging`\n * - `@elizaos/plugin-browser/routes`\n * - `@elizaos/plugin-browser/plugin`\n * - `@elizaos/plugin-browser/workspace` (browser-workspace command router)\n */\n\nexport {\n BROWSER_SERVICE_TYPE,\n type BrowserTarget,\n BrowserService,\n} from \"./browser-service.js\";\nexport { executeBrowserAutofillLogin } from \"./actions/browser-autofill-login.js\";\nexport { browserAction } from \"./actions/browser.js\";\nexport {\n BROWSER_BRIDGE_SUBACTIONS,\n type BrowserBridgeSubaction,\n manageBrowserBridgeAction,\n} from \"./actions/manage-browser-bridge.js\";\nexport * from \"./contracts.js\";\nexport * from \"./packaging.js\";\nexport { browserPlugin } from \"./plugin.js\";\nexport * from \"./routes/bridge.js\";\nexport * from \"./schema.js\";\nexport * from \"./service.js\";\nexport {\n FRAME_FILE,\n startBrowserCapture,\n stopBrowserCapture,\n type BrowserCaptureConfig,\n} from \"./workspace/browser-capture.js\";\nexport * from \"./workspace/index.js\";\n\n// Bundle-safety: force binding identities into the module's init\n// function so Bun.build's tree-shake doesn't collapse this barrel\n// into an empty `init_X = () => {}`. Without this the on-device\n// mobile agent explodes with `ReferenceError: <name> is not defined`\n// when a consumer dereferences a re-exported binding at runtime.\nimport { BROWSER_SERVICE_TYPE as _bs_1_BROWSER_SERVICE_TYPE, BrowserService as _bs_2_BrowserService } from \"./browser-service.js\";\nimport { executeBrowserAutofillLogin as _bs_3_executeBrowserAutofillLogin } from \"./actions/browser-autofill-login.js\";\nimport { browserAction as _bs_4_browserAction } from \"./actions/browser.js\";\nimport { BROWSER_BRIDGE_SUBACTIONS as _bs_5_BROWSER_BRIDGE_SUBACTIONS, manageBrowserBridgeAction as _bs_6_manageBrowserBridgeAction } from \"./actions/manage-browser-bridge.js\";\nimport { browserPlugin as _bs_7_browserPlugin } from \"./plugin.js\";\nimport { FRAME_FILE as _bs_8_FRAME_FILE, startBrowserCapture as _bs_9_startBrowserCapture, stopBrowserCapture as _bs_10_stopBrowserCapture } from \"./workspace/browser-capture.js\";\n// Path-derived symbol so parents that `export *` two of these don't\n// collide on a shared `__BUNDLE_SAFETY__` name.\n// biome-ignore lint/correctness/noUnusedVariables: bundle-safety sink.\nconst __bundle_safety_PLUGINS_PLUGIN_BROWSER_SRC_INDEX__ = [_bs_1_BROWSER_SERVICE_TYPE, _bs_2_BrowserService, _bs_3_executeBrowserAutofillLogin, _bs_4_browserAction, _bs_5_BROWSER_BRIDGE_SUBACTIONS, _bs_6_manageBrowserBridgeAction, _bs_7_browserPlugin, _bs_8_FRAME_FILE, _bs_9_startBrowserCapture, _bs_10_stopBrowserCapture];\n// biome-ignore lint/suspicious/noExplicitAny: bundle-safety sink.\n(globalThis as any).__bundle_safety_PLUGINS_PLUGIN_BROWSER_SRC_INDEX__ = __bundle_safety_PLUGINS_PLUGIN_BROWSER_SRC_INDEX__;\n"],"mappings":"AAaA,SACE,sBAEA,sBACK;AACP,SAAS,mCAAmC;AAC5C,SAAS,qBAAqB;AAC9B,SACE,2BAEA,iCACK;AACP,cAAc;AACd,cAAc;AACd,SAAS,qBAAqB;AAC9B,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=lifeops-session-contracts.d.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/packaging.d.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=packaging.d.js.map
|
package/dist/packaging.d.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/plugin.d.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=plugin.d.js.map
|
package/dist/plugin.d.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=workspace.d.js.map
|