browserclaw 0.1.0

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.

Potentially problematic release.


This version of browserclaw might be problematic. Click here for more details.

@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/chrome-launcher.ts","../src/connection.ts","../src/snapshot/ref-map.ts","../src/snapshot/ai-snapshot.ts","../src/snapshot/aria-snapshot.ts","../src/actions/interaction.ts","../src/actions/keyboard.ts","../src/actions/navigation.ts","../src/actions/wait.ts","../src/actions/evaluate.ts","../src/capture/screenshot.ts","../src/capture/pdf.ts","../src/capture/activity.ts","../src/storage/index.ts","../src/browser.ts"],"names":["fs","execFileSync","path","os","net","spawn","cached","chromium","result","out"],"mappings":"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","file":"index.cjs","sourcesContent":["import os from 'node:os';\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport net from 'node:net';\nimport { execFileSync, spawn } from 'node:child_process';\nimport type { ChromeExecutable, ChromeKind, LaunchOptions, RunningChrome } from './types.js';\n\n// ── Executable Detection ──\n\nconst CHROMIUM_BUNDLE_IDS = new Set([\n 'com.google.Chrome',\n 'com.google.Chrome.beta',\n 'com.google.Chrome.canary',\n 'com.google.Chrome.dev',\n 'com.brave.Browser',\n 'com.brave.Browser.beta',\n 'com.brave.Browser.nightly',\n 'com.microsoft.Edge',\n 'com.microsoft.EdgeBeta',\n 'com.microsoft.EdgeDev',\n 'com.microsoft.EdgeCanary',\n 'org.chromium.Chromium',\n 'com.vivaldi.Vivaldi',\n 'com.operasoftware.Opera',\n 'com.operasoftware.OperaGX',\n 'com.yandex.desktop.yandex-browser',\n 'company.thebrowser.Browser',\n]);\n\nconst CHROMIUM_DESKTOP_IDS = new Set([\n 'google-chrome.desktop',\n 'google-chrome-beta.desktop',\n 'google-chrome-unstable.desktop',\n 'brave-browser.desktop',\n 'microsoft-edge.desktop',\n 'microsoft-edge-beta.desktop',\n 'microsoft-edge-dev.desktop',\n 'microsoft-edge-canary.desktop',\n 'chromium.desktop',\n 'chromium-browser.desktop',\n 'vivaldi.desktop',\n 'vivaldi-stable.desktop',\n 'opera.desktop',\n 'opera-gx.desktop',\n 'yandex-browser.desktop',\n 'org.chromium.Chromium.desktop',\n]);\n\nconst CHROMIUM_EXE_NAMES = new Set([\n 'chrome.exe', 'msedge.exe', 'brave.exe', 'brave-browser.exe', 'chromium.exe',\n 'vivaldi.exe', 'opera.exe', 'launcher.exe', 'yandex.exe', 'yandexbrowser.exe',\n 'google chrome', 'google chrome canary', 'brave browser', 'microsoft edge',\n 'chromium', 'chrome', 'brave', 'msedge', 'brave-browser',\n 'google-chrome', 'google-chrome-stable', 'google-chrome-beta', 'google-chrome-unstable',\n 'microsoft-edge', 'microsoft-edge-beta', 'microsoft-edge-dev', 'microsoft-edge-canary',\n 'chromium-browser', 'vivaldi', 'vivaldi-stable', 'opera', 'opera-stable', 'opera-gx',\n 'yandex-browser',\n]);\n\nfunction fileExists(filePath: string): boolean {\n try { return fs.existsSync(filePath); } catch { return false; }\n}\n\nfunction execText(command: string, args: string[], timeoutMs = 1200): string | null {\n try {\n const output = execFileSync(command, args, {\n timeout: timeoutMs,\n encoding: 'utf8',\n maxBuffer: 1024 * 1024,\n });\n return String(output ?? '').trim() || null;\n } catch { return null; }\n}\n\nfunction inferKindFromIdentifier(identifier: string): ChromeKind {\n const id = identifier.toLowerCase();\n if (id.includes('brave')) return 'brave';\n if (id.includes('edge')) return 'edge';\n if (id.includes('chromium')) return 'chromium';\n if (id.includes('canary')) return 'canary';\n if (id.includes('opera') || id.includes('vivaldi') || id.includes('yandex') || id.includes('thebrowser')) return 'chromium';\n return 'chrome';\n}\n\nfunction inferKindFromExeName(name: string): ChromeKind {\n const lower = name.toLowerCase();\n if (lower.includes('brave')) return 'brave';\n if (lower.includes('edge') || lower.includes('msedge')) return 'edge';\n if (lower.includes('chromium')) return 'chromium';\n if (lower.includes('canary') || lower.includes('sxs')) return 'canary';\n if (lower.includes('opera') || lower.includes('vivaldi') || lower.includes('yandex')) return 'chromium';\n return 'chrome';\n}\n\nfunction findFirstExe(candidates: ChromeExecutable[]): ChromeExecutable | null {\n for (const c of candidates) if (fileExists(c.path)) return c;\n return null;\n}\n\n// ── Mac Detection ──\n\nfunction detectDefaultBrowserBundleIdMac(): string | null {\n const plistPath = path.join(os.homedir(), 'Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist');\n if (!fileExists(plistPath)) return null;\n const handlersRaw = execText('/usr/bin/plutil', ['-extract', 'LSHandlers', 'json', '-o', '-', '--', plistPath], 2000);\n if (!handlersRaw) return null;\n let handlers: any[];\n try { handlers = JSON.parse(handlersRaw); } catch { return null; }\n if (!Array.isArray(handlers)) return null;\n\n const resolveScheme = (scheme: string): string | null => {\n let candidate: string | null = null;\n for (const entry of handlers) {\n if (!entry || typeof entry !== 'object') continue;\n if (entry.LSHandlerURLScheme !== scheme) continue;\n const role = (typeof entry.LSHandlerRoleAll === 'string' && entry.LSHandlerRoleAll) ||\n (typeof entry.LSHandlerRoleViewer === 'string' && entry.LSHandlerRoleViewer) || null;\n if (role) candidate = role;\n }\n return candidate;\n };\n return resolveScheme('http') ?? resolveScheme('https');\n}\n\nfunction detectDefaultChromiumMac(): ChromeExecutable | null {\n const bundleId = detectDefaultBrowserBundleIdMac();\n if (!bundleId || !CHROMIUM_BUNDLE_IDS.has(bundleId)) return null;\n const appPathRaw = execText('/usr/bin/osascript', ['-e', `POSIX path of (path to application id \"${bundleId}\")`]);\n if (!appPathRaw) return null;\n const appPath = appPathRaw.trim().replace(/\\/$/, '');\n const exeName = execText('/usr/bin/defaults', ['read', path.join(appPath, 'Contents', 'Info'), 'CFBundleExecutable']);\n if (!exeName) return null;\n const exePath = path.join(appPath, 'Contents', 'MacOS', exeName.trim());\n if (!fileExists(exePath)) return null;\n return { kind: inferKindFromIdentifier(bundleId), path: exePath };\n}\n\nfunction findChromeMac(): ChromeExecutable | null {\n return findFirstExe([\n { kind: 'chrome', path: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome' },\n { kind: 'chrome', path: path.join(os.homedir(), 'Applications/Google Chrome.app/Contents/MacOS/Google Chrome') },\n { kind: 'brave', path: '/Applications/Brave Browser.app/Contents/MacOS/Brave Browser' },\n { kind: 'brave', path: path.join(os.homedir(), 'Applications/Brave Browser.app/Contents/MacOS/Brave Browser') },\n { kind: 'edge', path: '/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge' },\n { kind: 'edge', path: path.join(os.homedir(), 'Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge') },\n { kind: 'chromium', path: '/Applications/Chromium.app/Contents/MacOS/Chromium' },\n { kind: 'chromium', path: path.join(os.homedir(), 'Applications/Chromium.app/Contents/MacOS/Chromium') },\n { kind: 'canary', path: '/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary' },\n { kind: 'canary', path: path.join(os.homedir(), 'Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary') },\n ]);\n}\n\n// ── Linux Detection ──\n\nfunction detectDefaultChromiumLinux(): ChromeExecutable | null {\n const desktopId = execText('xdg-settings', ['get', 'default-web-browser']) ||\n execText('xdg-mime', ['query', 'default', 'x-scheme-handler/http']);\n if (!desktopId) return null;\n const trimmed = desktopId.trim();\n if (!CHROMIUM_DESKTOP_IDS.has(trimmed)) return null;\n\n const searchDirs = [\n path.join(os.homedir(), '.local', 'share', 'applications'),\n '/usr/local/share/applications',\n '/usr/share/applications',\n '/var/lib/snapd/desktop/applications',\n ];\n let desktopPath: string | null = null;\n for (const dir of searchDirs) {\n const candidate = path.join(dir, trimmed);\n if (fileExists(candidate)) { desktopPath = candidate; break; }\n }\n if (!desktopPath) return null;\n\n let execLine: string | null = null;\n try {\n const lines = fs.readFileSync(desktopPath, 'utf8').split(/\\r?\\n/);\n for (const line of lines) if (line.startsWith('Exec=')) { execLine = line.slice(5).trim(); break; }\n } catch {}\n if (!execLine) return null;\n\n const tokens = execLine.split(/\\s+/);\n let command: string | null = null;\n for (const token of tokens) {\n if (!token || token === 'env' || (token.includes('=') && !token.startsWith('/'))) continue;\n command = token.replace(/^[\"']|[\"']$/g, '');\n break;\n }\n if (!command) return null;\n\n const resolved = command.startsWith('/') ? command : (execText('which', [command], 800)?.trim() ?? null);\n if (!resolved) return null;\n const exeName = path.posix.basename(resolved).toLowerCase();\n if (!CHROMIUM_EXE_NAMES.has(exeName)) return null;\n return { kind: inferKindFromExeName(exeName), path: resolved };\n}\n\nfunction findChromeLinux(): ChromeExecutable | null {\n return findFirstExe([\n { kind: 'chrome', path: '/usr/bin/google-chrome' },\n { kind: 'chrome', path: '/usr/bin/google-chrome-stable' },\n { kind: 'chrome', path: '/usr/bin/chrome' },\n { kind: 'brave', path: '/usr/bin/brave-browser' },\n { kind: 'brave', path: '/usr/bin/brave-browser-stable' },\n { kind: 'brave', path: '/usr/bin/brave' },\n { kind: 'brave', path: '/snap/bin/brave' },\n { kind: 'edge', path: '/usr/bin/microsoft-edge' },\n { kind: 'edge', path: '/usr/bin/microsoft-edge-stable' },\n { kind: 'chromium', path: '/usr/bin/chromium' },\n { kind: 'chromium', path: '/usr/bin/chromium-browser' },\n { kind: 'chromium', path: '/snap/bin/chromium' },\n ]);\n}\n\n// ── Windows Detection ──\n\nfunction findChromeWindows(): ChromeExecutable | null {\n const localAppData = process.env.LOCALAPPDATA ?? '';\n const programFiles = process.env.ProgramFiles ?? 'C:\\\\Program Files';\n const programFilesX86 = process.env['ProgramFiles(x86)'] ?? 'C:\\\\Program Files (x86)';\n const j = path.win32.join;\n const candidates: ChromeExecutable[] = [];\n if (localAppData) {\n candidates.push({ kind: 'chrome', path: j(localAppData, 'Google', 'Chrome', 'Application', 'chrome.exe') });\n candidates.push({ kind: 'brave', path: j(localAppData, 'BraveSoftware', 'Brave-Browser', 'Application', 'brave.exe') });\n candidates.push({ kind: 'edge', path: j(localAppData, 'Microsoft', 'Edge', 'Application', 'msedge.exe') });\n candidates.push({ kind: 'chromium', path: j(localAppData, 'Chromium', 'Application', 'chrome.exe') });\n candidates.push({ kind: 'canary', path: j(localAppData, 'Google', 'Chrome SxS', 'Application', 'chrome.exe') });\n }\n candidates.push({ kind: 'chrome', path: j(programFiles, 'Google', 'Chrome', 'Application', 'chrome.exe') });\n candidates.push({ kind: 'chrome', path: j(programFilesX86, 'Google', 'Chrome', 'Application', 'chrome.exe') });\n candidates.push({ kind: 'brave', path: j(programFiles, 'BraveSoftware', 'Brave-Browser', 'Application', 'brave.exe') });\n candidates.push({ kind: 'brave', path: j(programFilesX86, 'BraveSoftware', 'Brave-Browser', 'Application', 'brave.exe') });\n candidates.push({ kind: 'edge', path: j(programFiles, 'Microsoft', 'Edge', 'Application', 'msedge.exe') });\n candidates.push({ kind: 'edge', path: j(programFilesX86, 'Microsoft', 'Edge', 'Application', 'msedge.exe') });\n return findFirstExe(candidates);\n}\n\n// ── Resolve Executable ──\n\nexport function resolveBrowserExecutable(opts?: { executablePath?: string }): ChromeExecutable | null {\n if (opts?.executablePath) {\n if (!fileExists(opts.executablePath)) throw new Error(`executablePath not found: ${opts.executablePath}`);\n return { kind: 'custom', path: opts.executablePath };\n }\n const platform = process.platform;\n // Try default browser first\n if (platform === 'darwin') return detectDefaultChromiumMac() ?? findChromeMac();\n if (platform === 'linux') return detectDefaultChromiumLinux() ?? findChromeLinux();\n if (platform === 'win32') return findChromeWindows();\n return null;\n}\n\n// ── Port Check ──\n\nasync function ensurePortAvailable(port: number): Promise<void> {\n await new Promise<void>((resolve, reject) => {\n const tester = net.createServer()\n .once('error', (err: NodeJS.ErrnoException) => {\n if (err.code === 'EADDRINUSE') reject(new Error(`Port ${port} is already in use`));\n else reject(err);\n })\n .once('listening', () => { tester.close(() => resolve()); })\n .listen(port);\n });\n}\n\n// ── Profile Decoration ──\n\nfunction safeReadJson(filePath: string): Record<string, any> | null {\n try {\n if (!fs.existsSync(filePath)) return null;\n const parsed = JSON.parse(fs.readFileSync(filePath, 'utf-8'));\n if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) return null;\n return parsed;\n } catch { return null; }\n}\n\nfunction safeWriteJson(filePath: string, data: Record<string, any>): void {\n fs.mkdirSync(path.dirname(filePath), { recursive: true });\n fs.writeFileSync(filePath, JSON.stringify(data, null, 2));\n}\n\nfunction setDeep(obj: Record<string, any>, keys: string[], value: any): void {\n let node = obj;\n for (const key of keys.slice(0, -1)) {\n const next = node[key];\n if (typeof next !== 'object' || next === null || Array.isArray(next)) node[key] = {};\n node = node[key];\n }\n node[keys[keys.length - 1]!] = value;\n}\n\nfunction parseHexRgbToSignedArgbInt(hex: string): number | null {\n const cleaned = hex.trim().replace(/^#/, '');\n if (!/^[0-9a-fA-F]{6}$/.test(cleaned)) return null;\n const argbUnsigned = (255 << 24) | Number.parseInt(cleaned, 16);\n return argbUnsigned > 2147483647 ? argbUnsigned - 4294967296 : argbUnsigned;\n}\n\nfunction decorateProfile(userDataDir: string, name: string, color: string): void {\n const colorInt = parseHexRgbToSignedArgbInt(color);\n const localStatePath = path.join(userDataDir, 'Local State');\n const preferencesPath = path.join(userDataDir, 'Default', 'Preferences');\n\n const localState = safeReadJson(localStatePath) ?? {};\n setDeep(localState, ['profile', 'info_cache', 'Default', 'name'], name);\n setDeep(localState, ['profile', 'info_cache', 'Default', 'shortcut_name'], name);\n setDeep(localState, ['profile', 'info_cache', 'Default', 'user_name'], name);\n setDeep(localState, ['profile', 'info_cache', 'Default', 'profile_color'], color);\n if (colorInt != null) {\n setDeep(localState, ['profile', 'info_cache', 'Default', 'profile_color_seed'], colorInt);\n setDeep(localState, ['profile', 'info_cache', 'Default', 'profile_highlight_color'], colorInt);\n }\n safeWriteJson(localStatePath, localState);\n\n const prefs = safeReadJson(preferencesPath) ?? {};\n setDeep(prefs, ['profile', 'name'], name);\n setDeep(prefs, ['profile', 'profile_color'], color);\n if (colorInt != null) {\n setDeep(prefs, ['autogenerated', 'theme', 'color'], colorInt);\n setDeep(prefs, ['browser', 'theme', 'user_color2'], colorInt);\n }\n safeWriteJson(preferencesPath, prefs);\n}\n\nfunction ensureCleanExit(userDataDir: string): void {\n const preferencesPath = path.join(userDataDir, 'Default', 'Preferences');\n const prefs = safeReadJson(preferencesPath) ?? {};\n setDeep(prefs, ['exit_type'], 'Normal');\n setDeep(prefs, ['exited_cleanly'], true);\n safeWriteJson(preferencesPath, prefs);\n}\n\n// ── Launch Chrome ──\n\nconst DEFAULT_CDP_PORT = 9222;\nconst DEFAULT_PROFILE_NAME = 'browserclaw';\nconst DEFAULT_PROFILE_COLOR = '#FF4500';\n\nfunction resolveUserDataDir(profileName: string): string {\n const configDir = process.env.XDG_CONFIG_HOME ?? path.join(os.homedir(), '.config');\n return path.join(configDir, 'browserclaw', 'profiles', profileName, 'user-data');\n}\n\nexport async function isChromeReachable(cdpUrl: string, timeoutMs = 500): Promise<boolean> {\n const ctrl = new AbortController();\n const t = setTimeout(() => ctrl.abort(), timeoutMs);\n try {\n const res = await fetch(`${cdpUrl.replace(/\\/+$/, '')}/json/version`, { signal: ctrl.signal });\n return res.ok;\n } catch { return false; }\n finally { clearTimeout(t); }\n}\n\nexport async function getChromeWebSocketUrl(cdpUrl: string, timeoutMs = 500): Promise<string | null> {\n const ctrl = new AbortController();\n const t = setTimeout(() => ctrl.abort(), timeoutMs);\n try {\n const res = await fetch(`${cdpUrl.replace(/\\/+$/, '')}/json/version`, { signal: ctrl.signal });\n if (!res.ok) return null;\n const data = await res.json() as { webSocketDebuggerUrl?: string };\n return String(data?.webSocketDebuggerUrl ?? '').trim() || null;\n } catch { return null; }\n finally { clearTimeout(t); }\n}\n\nexport async function launchChrome(opts: LaunchOptions = {}): Promise<RunningChrome> {\n const cdpPort = opts.cdpPort ?? DEFAULT_CDP_PORT;\n await ensurePortAvailable(cdpPort);\n\n const exe = resolveBrowserExecutable({ executablePath: opts.executablePath });\n if (!exe) throw new Error('No supported browser found (Chrome/Brave/Edge/Chromium). Install one or provide executablePath.');\n\n const profileName = opts.profileName ?? DEFAULT_PROFILE_NAME;\n const userDataDir = opts.userDataDir ?? resolveUserDataDir(profileName);\n fs.mkdirSync(userDataDir, { recursive: true });\n\n const spawnChrome = () => {\n const args = [\n `--remote-debugging-port=${cdpPort}`,\n `--user-data-dir=${userDataDir}`,\n '--no-first-run',\n '--no-default-browser-check',\n '--disable-sync',\n '--disable-background-networking',\n '--disable-component-update',\n '--disable-features=Translate,MediaRouter',\n '--disable-session-crashed-bubble',\n '--hide-crash-restore-bubble',\n '--password-store=basic',\n ];\n if (opts.headless) {\n args.push('--headless=new', '--disable-gpu');\n }\n if (opts.noSandbox) {\n args.push('--no-sandbox', '--disable-setuid-sandbox');\n }\n if (process.platform === 'linux') args.push('--disable-dev-shm-usage');\n if (opts.chromeArgs?.length) args.push(...opts.chromeArgs);\n args.push('about:blank');\n return spawn(exe.path, args, {\n stdio: 'pipe',\n env: { ...process.env, HOME: os.homedir() },\n });\n };\n\n const startedAt = Date.now();\n const localStatePath = path.join(userDataDir, 'Local State');\n const preferencesPath = path.join(userDataDir, 'Default', 'Preferences');\n\n // Bootstrap run if profile doesn't exist yet\n if (!fileExists(localStatePath) || !fileExists(preferencesPath)) {\n const bootstrap = spawnChrome();\n const deadline = Date.now() + 10000;\n while (Date.now() < deadline) {\n if (fileExists(localStatePath) && fileExists(preferencesPath)) break;\n await new Promise(r => setTimeout(r, 100));\n }\n try { bootstrap.kill('SIGTERM'); } catch {}\n const exitDeadline = Date.now() + 5000;\n while (Date.now() < exitDeadline) {\n if (bootstrap.exitCode != null) break;\n await new Promise(r => setTimeout(r, 50));\n }\n }\n\n // Decorate profile\n try {\n decorateProfile(userDataDir, profileName, opts.profileColor ?? DEFAULT_PROFILE_COLOR);\n } catch {}\n\n // Ensure clean exit state\n try { ensureCleanExit(userDataDir); } catch {}\n\n // Launch for real\n const proc = spawnChrome();\n const cdpUrl = `http://127.0.0.1:${cdpPort}`;\n\n // Wait for Chrome to be ready\n const readyDeadline = Date.now() + 15000;\n while (Date.now() < readyDeadline) {\n if (await isChromeReachable(cdpUrl, 500)) break;\n await new Promise(r => setTimeout(r, 200));\n }\n\n if (!await isChromeReachable(cdpUrl, 500)) {\n try { proc.kill('SIGKILL'); } catch {}\n throw new Error(`Failed to start Chrome CDP on port ${cdpPort}. Chrome may not have started correctly.`);\n }\n\n return {\n pid: proc.pid ?? -1,\n exe,\n userDataDir,\n cdpPort,\n startedAt,\n proc,\n };\n}\n\nexport async function stopChrome(running: RunningChrome, timeoutMs = 2500): Promise<void> {\n const proc = running.proc;\n if (proc.killed) return;\n try { proc.kill('SIGTERM'); } catch {}\n const start = Date.now();\n while (Date.now() - start < timeoutMs) {\n if (proc.exitCode != null || proc.killed) return;\n if (!await isChromeReachable(`http://127.0.0.1:${running.cdpPort}`, 200)) return;\n await new Promise(r => setTimeout(r, 100));\n }\n try { proc.kill('SIGKILL'); } catch {}\n}\n","import { chromium } from 'playwright-core';\nimport type { Browser } from 'playwright-core';\nimport { getChromeWebSocketUrl } from './chrome-launcher.js';\nimport type { PageState, ContextState, RoleRefs } from './types.js';\n\n// ── Persistent Connection Cache ──\n\nlet cached: { browser: Browser; cdpUrl: string } | null = null;\nlet connecting: Promise<{ browser: Browser; cdpUrl: string }> | null = null;\n\nconst pageStates = new WeakMap<any, PageState>();\nconst contextStates = new WeakMap<any, ContextState>();\nconst observedContexts = new WeakSet();\nconst observedPages = new WeakSet();\n\n// Ref cache: keyed by \"cdpUrl::targetId\"\nconst roleRefsByTarget = new Map<string, {\n refs: RoleRefs;\n frameSelector?: string;\n mode?: 'role' | 'aria';\n}>();\nconst MAX_ROLE_REFS_CACHE = 50;\n\nconst MAX_CONSOLE_MESSAGES = 500;\nconst MAX_PAGE_ERRORS = 200;\nconst MAX_NETWORK_REQUESTS = 500;\n\nfunction normalizeCdpUrl(raw: string): string {\n return raw.replace(/\\/$/, '');\n}\n\nfunction roleRefsKey(cdpUrl: string, targetId: string): string {\n return `${normalizeCdpUrl(cdpUrl)}::${targetId}`;\n}\n\n// ── Page State Management ──\n\nexport function ensurePageState(page: any): PageState {\n const existing = pageStates.get(page);\n if (existing) return existing;\n\n const state: PageState = {\n console: [],\n errors: [],\n requests: [],\n requestIds: new WeakMap(),\n nextRequestId: 0,\n armIdUpload: 0,\n armIdDialog: 0,\n armIdDownload: 0,\n };\n pageStates.set(page, state);\n\n if (!observedPages.has(page)) {\n observedPages.add(page);\n\n page.on('console', (msg: any) => {\n state.console.push({\n type: msg.type(),\n text: msg.text(),\n timestamp: new Date().toISOString(),\n location: msg.location(),\n });\n if (state.console.length > MAX_CONSOLE_MESSAGES) state.console.shift();\n });\n\n page.on('pageerror', (err: any) => {\n state.errors.push({\n message: err?.message ? String(err.message) : String(err),\n name: err?.name ? String(err.name) : undefined,\n stack: err?.stack ? String(err.stack) : undefined,\n timestamp: new Date().toISOString(),\n });\n if (state.errors.length > MAX_PAGE_ERRORS) state.errors.shift();\n });\n\n page.on('request', (req: any) => {\n state.nextRequestId += 1;\n const id = `r${state.nextRequestId}`;\n state.requestIds.set(req, id);\n state.requests.push({\n id,\n timestamp: new Date().toISOString(),\n method: req.method(),\n url: req.url(),\n resourceType: req.resourceType(),\n });\n if (state.requests.length > MAX_NETWORK_REQUESTS) state.requests.shift();\n });\n\n page.on('response', (resp: any) => {\n const req = resp.request();\n const id = state.requestIds.get(req);\n if (!id) return;\n for (let i = state.requests.length - 1; i >= 0; i--) {\n const rec = state.requests[i];\n if (rec && rec.id === id) {\n rec.status = resp.status();\n rec.ok = resp.ok();\n break;\n }\n }\n });\n\n page.on('requestfailed', (req: any) => {\n const id = state.requestIds.get(req);\n if (!id) return;\n for (let i = state.requests.length - 1; i >= 0; i--) {\n const rec = state.requests[i];\n if (rec && rec.id === id) {\n rec.failureText = req.failure()?.errorText;\n rec.ok = false;\n break;\n }\n }\n });\n\n page.on('close', () => {\n pageStates.delete(page);\n observedPages.delete(page);\n });\n }\n\n return state;\n}\n\nexport function ensureContextState(context: any): ContextState {\n const existing = contextStates.get(context);\n if (existing) return existing;\n const state: ContextState = { traceActive: false };\n contextStates.set(context, state);\n return state;\n}\n\nfunction observeContext(context: any): void {\n if (observedContexts.has(context)) return;\n observedContexts.add(context);\n ensureContextState(context);\n for (const page of context.pages()) ensurePageState(page);\n context.on('page', (page: any) => ensurePageState(page));\n}\n\nfunction observeBrowser(browser: Browser): void {\n for (const context of browser.contexts()) observeContext(context);\n}\n\n// ── Role Refs Storage ──\n\nexport function storeRoleRefsForTarget(opts: {\n page: any;\n cdpUrl: string;\n targetId?: string;\n refs: RoleRefs;\n frameSelector?: string;\n mode?: 'role' | 'aria';\n}): void {\n const state = ensurePageState(opts.page);\n state.roleRefs = opts.refs;\n state.roleRefsFrameSelector = opts.frameSelector;\n state.roleRefsMode = opts.mode;\n\n const targetId = opts.targetId?.trim();\n if (!targetId) return;\n roleRefsByTarget.set(roleRefsKey(opts.cdpUrl, targetId), {\n refs: opts.refs,\n ...(opts.frameSelector ? { frameSelector: opts.frameSelector } : {}),\n ...(opts.mode ? { mode: opts.mode } : {}),\n });\n while (roleRefsByTarget.size > MAX_ROLE_REFS_CACHE) {\n const first = roleRefsByTarget.keys().next();\n if (first.done) break;\n roleRefsByTarget.delete(first.value);\n }\n}\n\nexport function restoreRoleRefsForTarget(opts: {\n cdpUrl: string;\n targetId?: string;\n page: any;\n}): void {\n const targetId = opts.targetId?.trim() || '';\n if (!targetId) return;\n const cached = roleRefsByTarget.get(roleRefsKey(opts.cdpUrl, targetId));\n if (!cached) return;\n const state = ensurePageState(opts.page);\n if (state.roleRefs) return;\n state.roleRefs = cached.refs;\n state.roleRefsFrameSelector = cached.frameSelector;\n state.roleRefsMode = cached.mode;\n}\n\n// ── Connect to Browser ──\n\nexport async function connectBrowser(cdpUrl: string): Promise<{ browser: Browser; cdpUrl: string }> {\n const normalized = normalizeCdpUrl(cdpUrl);\n if (cached?.cdpUrl === normalized) return cached;\n if (connecting) return await connecting;\n\n const connectWithRetry = async () => {\n let lastErr: unknown;\n for (let attempt = 0; attempt < 3; attempt++) {\n try {\n const timeout = 5000 + attempt * 2000;\n const endpoint = await getChromeWebSocketUrl(normalized, timeout).catch(() => null) ?? normalized;\n const browser = await chromium.connectOverCDP(endpoint, { timeout });\n const connected = { browser, cdpUrl: normalized };\n cached = connected;\n observeBrowser(browser);\n browser.on('disconnected', () => {\n if (cached?.browser === browser) cached = null;\n });\n return connected;\n } catch (err) {\n lastErr = err;\n await new Promise(r => setTimeout(r, 250 + attempt * 250));\n }\n }\n throw lastErr instanceof Error ? lastErr : new Error('CDP connect failed');\n };\n\n connecting = connectWithRetry().finally(() => { connecting = null; });\n return await connecting;\n}\n\nexport async function disconnectBrowser(): Promise<void> {\n const cur = cached;\n cached = null;\n if (cur) await cur.browser.close().catch(() => {});\n}\n\n// ── Page Lookup ──\n\nexport async function getAllPages(browser: Browser) {\n return browser.contexts().flatMap(c => c.pages());\n}\n\nexport async function pageTargetId(page: any): Promise<string | null> {\n const session = await page.context().newCDPSession(page);\n try {\n const info = await session.send('Target.getTargetInfo');\n return String((info as any)?.targetInfo?.targetId ?? '').trim() || null;\n } finally {\n await session.detach().catch(() => {});\n }\n}\n\nexport async function findPageByTargetId(browser: Browser, targetId: string, cdpUrl?: string) {\n const pages = await getAllPages(browser);\n for (const page of pages) {\n const tid = await pageTargetId(page).catch(() => null);\n if (tid && tid === targetId) return page;\n }\n\n // Fallback: match by URL from /json/list\n if (cdpUrl) {\n try {\n const listUrl = `${cdpUrl.replace(/\\/+$/, '').replace(/^ws:/, 'http:').replace(/\\/cdp$/, '')}/json/list`;\n const response = await fetch(listUrl);\n if (response.ok) {\n const targets = await response.json() as any[];\n const target = targets.find(t => t.id === targetId);\n if (target) {\n const urlMatch = pages.filter(p => p.url() === target.url);\n if (urlMatch.length === 1) return urlMatch[0];\n }\n }\n } catch {}\n }\n return null;\n}\n\nexport async function getPageForTargetId(opts: { cdpUrl: string; targetId?: string }) {\n const { browser } = await connectBrowser(opts.cdpUrl);\n const pages = await getAllPages(browser);\n if (!pages.length) throw new Error('No pages available in the connected browser.');\n const first = pages[0]!;\n if (!opts.targetId) return first;\n const found = await findPageByTargetId(browser, opts.targetId, opts.cdpUrl);\n if (!found) {\n if (pages.length === 1) return first;\n throw new Error(`Tab not found (targetId: ${opts.targetId}). Use browser.tabs() to list open tabs.`);\n }\n return found;\n}\n\n// ── Ref Locator ──\n\nexport function refLocator(page: any, ref: string) {\n const normalized = ref.startsWith('@') ? ref.slice(1) : ref.startsWith('ref=') ? ref.slice(4) : ref;\n\n if (/^e\\d+$/.test(normalized)) {\n const state = pageStates.get(page);\n\n // Aria mode: use aria-ref locator\n if (state?.roleRefsMode === 'aria') {\n return (state.roleRefsFrameSelector ? page.frameLocator(state.roleRefsFrameSelector) : page)\n .locator(`aria-ref=${normalized}`);\n }\n\n // Role mode: use getByRole\n const info = state?.roleRefs?.[normalized];\n if (!info) throw new Error(`Unknown ref \"${normalized}\". Run a new snapshot and use a ref from that snapshot.`);\n\n const locAny = state?.roleRefsFrameSelector\n ? page.frameLocator(state.roleRefsFrameSelector)\n : page;\n const locator = info.name\n ? locAny.getByRole(info.role, { name: info.name, exact: true })\n : locAny.getByRole(info.role);\n return info.nth !== undefined ? locator.nth(info.nth) : locator;\n }\n\n return page.locator(`aria-ref=${normalized}`);\n}\n\n// ── Error Helpers ──\n\nexport function toAIFriendlyError(error: unknown, selector: string): Error {\n const message = error instanceof Error ? error.message : String(error);\n if (message.includes('strict mode violation')) {\n const countMatch = message.match(/resolved to (\\d+) elements/);\n const count = countMatch ? countMatch[1] : 'multiple';\n return new Error(`Selector \"${selector}\" matched ${count} elements. Run a new snapshot to get updated refs, or use a different ref.`);\n }\n if ((message.includes('Timeout') || message.includes('waiting for')) &&\n (message.includes('to be visible') || message.includes('not visible'))) {\n return new Error(`Element \"${selector}\" not found or not visible. Run a new snapshot to see current page elements.`);\n }\n if (message.includes('intercepts pointer events') || message.includes('not visible') || message.includes('not receive pointer events')) {\n return new Error(`Element \"${selector}\" is not interactable (hidden or covered). Try scrolling it into view, closing overlays, or re-snapshotting.`);\n }\n return error instanceof Error ? error : new Error(message);\n}\n\nfunction normalizeTimeoutMs(timeoutMs: number | undefined, fallback: number): number {\n return Math.max(500, Math.min(120000, timeoutMs ?? fallback));\n}\n\nexport { normalizeTimeoutMs };\n","import type { RoleRefs, RoleRefInfo } from '../types.js';\n\nexport const INTERACTIVE_ROLES = new Set([\n 'button', 'link', 'textbox', 'checkbox', 'radio', 'combobox', 'listbox',\n 'menuitem', 'menuitemcheckbox', 'menuitemradio', 'option', 'searchbox',\n 'slider', 'spinbutton', 'switch', 'tab', 'treeitem',\n]);\n\nexport const CONTENT_ROLES = new Set([\n 'heading', 'cell', 'gridcell', 'columnheader', 'rowheader',\n 'listitem', 'article', 'region', 'main', 'navigation',\n]);\n\nexport const STRUCTURAL_ROLES = new Set([\n 'generic', 'group', 'list', 'table', 'row', 'rowgroup', 'grid', 'treegrid',\n 'menu', 'menubar', 'toolbar', 'tablist', 'tree', 'directory', 'document',\n 'application', 'presentation', 'none',\n]);\n\nfunction getIndentLevel(line: string): number {\n const match = line.match(/^(\\s*)/);\n return match ? Math.floor(match[1]!.length / 2) : 0;\n}\n\nfunction createRoleNameTracker() {\n const counts = new Map<string, number>();\n const refsByKey = new Map<string, string[]>();\n\n return {\n counts,\n refsByKey,\n getKey(role: string, name?: string): string {\n return `${role}:${name ?? ''}`;\n },\n getNextIndex(role: string, name?: string): number {\n const key = this.getKey(role, name);\n const current = counts.get(key) ?? 0;\n counts.set(key, current + 1);\n return current;\n },\n trackRef(role: string, name: string | undefined, ref: string): void {\n const key = this.getKey(role, name);\n const list = refsByKey.get(key) ?? [];\n list.push(ref);\n refsByKey.set(key, list);\n },\n getDuplicateKeys(): Set<string> {\n const out = new Set<string>();\n for (const [key, refs] of refsByKey) if (refs.length > 1) out.add(key);\n return out;\n },\n };\n}\n\nfunction removeNthFromNonDuplicates(refs: RoleRefs, tracker: ReturnType<typeof createRoleNameTracker>): void {\n const duplicates = tracker.getDuplicateKeys();\n for (const [ref, data] of Object.entries(refs)) {\n const key = tracker.getKey(data.role, data.name);\n if (!duplicates.has(key)) delete refs[ref]?.nth;\n }\n}\n\nfunction compactTree(tree: string): string {\n const lines = tree.split('\\n');\n const result: string[] = [];\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i]!;\n if (line.includes('[ref=')) { result.push(line); continue; }\n if (line.includes(':') && !line.trimEnd().endsWith(':')) { result.push(line); continue; }\n const currentIndent = getIndentLevel(line);\n let hasRelevantChildren = false;\n for (let j = i + 1; j < lines.length; j++) {\n if (getIndentLevel(lines[j]!) <= currentIndent) break;\n if (lines[j]?.includes('[ref=')) { hasRelevantChildren = true; break; }\n }\n if (hasRelevantChildren) result.push(line);\n }\n return result.join('\\n');\n}\n\nexport interface SnapshotBuildOptions {\n interactive?: boolean;\n compact?: boolean;\n maxDepth?: number;\n}\n\n/**\n * Build a role snapshot from Playwright's ariaSnapshot() output.\n * Assigns ref IDs (e1, e2, ...) to interactive/content elements.\n */\nexport function buildRoleSnapshotFromAriaSnapshot(\n ariaSnapshot: string,\n options: SnapshotBuildOptions = {},\n): { snapshot: string; refs: RoleRefs } {\n const lines = ariaSnapshot.split('\\n');\n const refs: RoleRefs = {};\n const tracker = createRoleNameTracker();\n let counter = 0;\n const nextRef = () => { counter++; return `e${counter}`; };\n\n if (options.interactive) {\n const result: string[] = [];\n for (const line of lines) {\n const depth = getIndentLevel(line);\n if (options.maxDepth !== undefined && depth > options.maxDepth) continue;\n const match = line.match(/^(\\s*-\\s*)(\\w+)(?:\\s+\"([^\"]*)\")?(.*)$/);\n if (!match) continue;\n const [, , roleRaw, name, suffix] = match;\n if (roleRaw!.startsWith('/')) continue;\n const role = roleRaw!.toLowerCase();\n if (!INTERACTIVE_ROLES.has(role)) continue;\n const ref = nextRef();\n const nth = tracker.getNextIndex(role, name);\n tracker.trackRef(role, name, ref);\n refs[ref] = { role, name, nth };\n let enhanced = `- ${roleRaw}`;\n if (name) enhanced += ` \"${name}\"`;\n enhanced += ` [ref=${ref}]`;\n if (nth > 0) enhanced += ` [nth=${nth}]`;\n if (suffix!.includes('[')) enhanced += suffix;\n result.push(enhanced);\n }\n removeNthFromNonDuplicates(refs, tracker);\n return { snapshot: result.join('\\n') || '(no interactive elements)', refs };\n }\n\n const result: string[] = [];\n for (const line of lines) {\n const depth = getIndentLevel(line);\n if (options.maxDepth !== undefined && depth > options.maxDepth) continue;\n const match = line.match(/^(\\s*-\\s*)(\\w+)(?:\\s+\"([^\"]*)\")?(.*)$/);\n if (!match) { if (!options.interactive) result.push(line); continue; }\n const [, prefix, roleRaw, name, suffix] = match;\n if (roleRaw!.startsWith('/')) { result.push(line); continue; }\n const role = roleRaw!.toLowerCase();\n const isInteractive = INTERACTIVE_ROLES.has(role);\n const isContent = CONTENT_ROLES.has(role);\n const isStructural = STRUCTURAL_ROLES.has(role);\n if (options.compact && isStructural && !name) continue;\n if (!(isInteractive || (isContent && name))) { result.push(line); continue; }\n\n const ref = nextRef();\n const nth = tracker.getNextIndex(role, name);\n tracker.trackRef(role, name, ref);\n refs[ref] = { role, name, nth };\n\n let enhanced = `${prefix}${roleRaw}`;\n if (name) enhanced += ` \"${name}\"`;\n enhanced += ` [ref=${ref}]`;\n if (nth > 0) enhanced += ` [nth=${nth}]`;\n if (suffix) enhanced += suffix;\n result.push(enhanced);\n }\n removeNthFromNonDuplicates(refs, tracker);\n const tree = result.join('\\n') || '(empty)';\n return { snapshot: options.compact ? compactTree(tree) : tree, refs };\n}\n\n/**\n * Build a role snapshot from Playwright's AI snapshot output.\n * Preserves Playwright's own aria-ref ids (e.g. ref=e13).\n */\nexport function buildRoleSnapshotFromAiSnapshot(\n aiSnapshot: string,\n options: SnapshotBuildOptions = {},\n): { snapshot: string; refs: RoleRefs } {\n const lines = String(aiSnapshot ?? '').split('\\n');\n const refs: RoleRefs = {};\n\n function parseAiSnapshotRef(suffix: string): string | null {\n const match = suffix.match(/\\[ref=(e\\d+)\\]/i);\n return match ? match[1]! : null;\n }\n\n if (options.interactive) {\n const out: string[] = [];\n for (const line of lines) {\n const depth = getIndentLevel(line);\n if (options.maxDepth !== undefined && depth > options.maxDepth) continue;\n const match = line.match(/^(\\s*-\\s*)(\\w+)(?:\\s+\"([^\"]*)\")?(.*)$/);\n if (!match) continue;\n const [, , roleRaw, name, suffix] = match;\n if (roleRaw!.startsWith('/')) continue;\n const role = roleRaw!.toLowerCase();\n if (!INTERACTIVE_ROLES.has(role)) continue;\n const ref = parseAiSnapshotRef(suffix!);\n if (!ref) continue;\n refs[ref] = { role, ...(name ? { name } : {}) };\n out.push(`- ${roleRaw}${name ? ` \"${name}\"` : ''}${suffix}`);\n }\n return { snapshot: out.join('\\n') || '(no interactive elements)', refs };\n }\n\n const out: string[] = [];\n for (const line of lines) {\n const depth = getIndentLevel(line);\n if (options.maxDepth !== undefined && depth > options.maxDepth) continue;\n const match = line.match(/^(\\s*-\\s*)(\\w+)(?:\\s+\"([^\"]*)\")?(.*)$/);\n if (!match) { out.push(line); continue; }\n const [, , roleRaw, name, suffix] = match;\n if (roleRaw!.startsWith('/')) { out.push(line); continue; }\n const role = roleRaw!.toLowerCase();\n const isStructural = STRUCTURAL_ROLES.has(role);\n if (options.compact && isStructural && !name) continue;\n const ref = parseAiSnapshotRef(suffix!);\n if (ref) refs[ref] = { role, ...(name ? { name } : {}) };\n out.push(line);\n }\n const tree = out.join('\\n') || '(empty)';\n return { snapshot: options.compact ? compactTree(tree) : tree, refs };\n}\n\nexport function getRoleSnapshotStats(snapshot: string, refs: RoleRefs) {\n const interactive = Object.values(refs).filter(r => INTERACTIVE_ROLES.has(r.role)).length;\n return {\n lines: snapshot.split('\\n').length,\n chars: snapshot.length,\n refs: Object.keys(refs).length,\n interactive,\n };\n}\n","import { getPageForTargetId, ensurePageState, storeRoleRefsForTarget } from '../connection.js';\nimport { buildRoleSnapshotFromAiSnapshot, getRoleSnapshotStats } from './ref-map.js';\nimport type { SnapshotResult, SnapshotOptions } from '../types.js';\n\n/**\n * Take an AI-readable snapshot using Playwright's _snapshotForAI.\n * This is the primary snapshot method — uses Playwright's built-in AI mode.\n */\nexport async function snapshotAi(opts: {\n cdpUrl: string;\n targetId?: string;\n maxChars?: number;\n timeoutMs?: number;\n options?: SnapshotOptions;\n}): Promise<SnapshotResult> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n\n const maybe = page as any;\n if (!maybe._snapshotForAI) {\n throw new Error('Playwright _snapshotForAI is not available. Upgrade playwright-core to >= 1.50.');\n }\n\n const result = await maybe._snapshotForAI({\n timeout: Math.max(500, Math.min(60000, Math.floor(opts.timeoutMs ?? 5000))),\n track: 'response',\n });\n\n let snapshot = String(result?.full ?? '');\n const maxChars = opts.maxChars;\n const limit = typeof maxChars === 'number' && Number.isFinite(maxChars) && maxChars > 0\n ? Math.floor(maxChars) : undefined;\n\n let truncated = false;\n if (limit && snapshot.length > limit) {\n snapshot = `${snapshot.slice(0, limit)}\\n\\n[...TRUNCATED - page too large]`;\n truncated = true;\n }\n\n const built = buildRoleSnapshotFromAiSnapshot(snapshot, opts.options);\n storeRoleRefsForTarget({\n page,\n cdpUrl: opts.cdpUrl,\n targetId: opts.targetId,\n refs: built.refs,\n mode: 'aria',\n });\n\n return {\n snapshot: built.snapshot,\n refs: built.refs,\n stats: getRoleSnapshotStats(built.snapshot, built.refs),\n };\n}\n","import { getPageForTargetId, ensurePageState, storeRoleRefsForTarget } from '../connection.js';\nimport {\n buildRoleSnapshotFromAriaSnapshot,\n buildRoleSnapshotFromAiSnapshot,\n getRoleSnapshotStats,\n} from './ref-map.js';\nimport type { SnapshotResult, AriaSnapshotResult, AriaNode, SnapshotOptions } from '../types.js';\n\n/**\n * Take a role-based snapshot using Playwright's ariaSnapshot() or _snapshotForAI.\n * This produces a tree with ref IDs that can be targeted by actions.\n */\nexport async function snapshotRole(opts: {\n cdpUrl: string;\n targetId?: string;\n selector?: string;\n frameSelector?: string;\n refsMode?: 'role' | 'aria';\n options?: {\n interactive?: boolean;\n compact?: boolean;\n maxDepth?: number;\n };\n}): Promise<SnapshotResult> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n\n // AI/aria mode: use _snapshotForAI\n if (opts.refsMode === 'aria') {\n if (opts.selector?.trim() || opts.frameSelector?.trim()) {\n throw new Error('refs=aria does not support selector/frame snapshots yet.');\n }\n const maybe = page as any;\n if (!maybe._snapshotForAI) {\n throw new Error('refs=aria requires Playwright _snapshotForAI support.');\n }\n const result = await maybe._snapshotForAI({ timeout: 5000, track: 'response' });\n const built = buildRoleSnapshotFromAiSnapshot(String(result?.full ?? ''), opts.options);\n storeRoleRefsForTarget({\n page,\n cdpUrl: opts.cdpUrl,\n targetId: opts.targetId,\n refs: built.refs,\n mode: 'aria',\n });\n return {\n snapshot: built.snapshot,\n refs: built.refs,\n stats: getRoleSnapshotStats(built.snapshot, built.refs),\n };\n }\n\n // Role mode: use ariaSnapshot()\n const frameSelector = opts.frameSelector?.trim() || '';\n const selector = opts.selector?.trim() || '';\n const locator = frameSelector\n ? (selector\n ? page.frameLocator(frameSelector).locator(selector)\n : page.frameLocator(frameSelector).locator(':root'))\n : (selector\n ? page.locator(selector)\n : page.locator(':root'));\n\n const ariaSnapshot = await locator.ariaSnapshot();\n const built = buildRoleSnapshotFromAriaSnapshot(String(ariaSnapshot ?? ''), opts.options);\n\n storeRoleRefsForTarget({\n page,\n cdpUrl: opts.cdpUrl,\n targetId: opts.targetId,\n refs: built.refs,\n frameSelector: frameSelector || undefined,\n mode: 'role',\n });\n\n return {\n snapshot: built.snapshot,\n refs: built.refs,\n stats: getRoleSnapshotStats(built.snapshot, built.refs),\n };\n}\n\n/**\n * Take a raw ARIA accessibility tree snapshot via CDP.\n */\nexport async function snapshotAria(opts: {\n cdpUrl: string;\n targetId?: string;\n limit?: number;\n}): Promise<AriaSnapshotResult> {\n const limit = Math.max(1, Math.min(2000, Math.floor(opts.limit ?? 500)));\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n\n const session = await page.context().newCDPSession(page);\n try {\n await session.send('Accessibility.enable').catch(() => {});\n const res = await session.send('Accessibility.getFullAXTree') as { nodes?: any[] };\n return { nodes: formatAriaNodes(Array.isArray(res?.nodes) ? res.nodes : [], limit) };\n } finally {\n await session.detach().catch(() => {});\n }\n}\n\nfunction axValue(v: any): string {\n if (!v || typeof v !== 'object') return '';\n const value = v.value;\n if (typeof value === 'string') return value;\n if (typeof value === 'number' || typeof value === 'boolean') return String(value);\n return '';\n}\n\nfunction formatAriaNodes(nodes: any[], limit: number): AriaNode[] {\n const byId = new Map<string, any>();\n for (const n of nodes) if (n.nodeId) byId.set(n.nodeId, n);\n\n const referenced = new Set<string>();\n for (const n of nodes) for (const c of n.childIds ?? []) referenced.add(c);\n\n const root = nodes.find(n => n.nodeId && !referenced.has(n.nodeId)) ?? nodes[0];\n if (!root?.nodeId) return [];\n\n const out: AriaNode[] = [];\n const stack: Array<{ id: string; depth: number }> = [{ id: root.nodeId, depth: 0 }];\n\n while (stack.length && out.length < limit) {\n const popped = stack.pop();\n if (!popped) break;\n const { id, depth } = popped;\n const n = byId.get(id);\n if (!n) continue;\n\n const role = axValue(n.role);\n const name = axValue(n.name);\n const value = axValue(n.value);\n const description = axValue(n.description);\n const ref = `ax${out.length + 1}`;\n\n out.push({\n ref,\n role: role || 'unknown',\n name: name || '',\n ...(value ? { value } : {}),\n ...(description ? { description } : {}),\n ...(typeof n.backendDOMNodeId === 'number' ? { backendDOMNodeId: n.backendDOMNodeId } : {}),\n depth,\n });\n\n const children = (n.childIds ?? []).filter((c: string) => byId.has(c));\n for (let i = children.length - 1; i >= 0; i--) {\n if (children[i]) stack.push({ id: children[i], depth: depth + 1 });\n }\n }\n\n return out;\n}\n","import {\n getPageForTargetId,\n ensurePageState,\n restoreRoleRefsForTarget,\n refLocator,\n toAIFriendlyError,\n normalizeTimeoutMs,\n} from '../connection.js';\nimport type { FormField } from '../types.js';\n\nexport async function clickViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n ref: string;\n doubleClick?: boolean;\n button?: string;\n modifiers?: string[];\n timeoutMs?: number;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });\n\n const locator = refLocator(page, opts.ref);\n const timeout = Math.max(500, Math.min(60000, Math.floor(opts.timeoutMs ?? 8000)));\n\n try {\n if (opts.doubleClick) {\n await locator.dblclick({ timeout, button: opts.button, modifiers: opts.modifiers });\n } else {\n await locator.click({ timeout, button: opts.button, modifiers: opts.modifiers });\n }\n } catch (err) {\n throw toAIFriendlyError(err, opts.ref);\n }\n}\n\nexport async function hoverViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n ref: string;\n timeoutMs?: number;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });\n\n try {\n await refLocator(page, opts.ref).hover({\n timeout: Math.max(500, Math.min(60000, opts.timeoutMs ?? 8000)),\n });\n } catch (err) {\n throw toAIFriendlyError(err, opts.ref);\n }\n}\n\nexport async function typeViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n ref: string;\n text: string;\n submit?: boolean;\n slowly?: boolean;\n timeoutMs?: number;\n}): Promise<void> {\n const text = String(opts.text ?? '');\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });\n\n const locator = refLocator(page, opts.ref);\n const timeout = Math.max(500, Math.min(60000, opts.timeoutMs ?? 8000));\n\n try {\n if (opts.slowly) {\n await locator.click({ timeout });\n await locator.type(text, { timeout, delay: 75 });\n } else {\n await locator.fill(text, { timeout });\n }\n if (opts.submit) await locator.press('Enter', { timeout });\n } catch (err) {\n throw toAIFriendlyError(err, opts.ref);\n }\n}\n\nexport async function selectOptionViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n ref: string;\n values: string[];\n timeoutMs?: number;\n}): Promise<void> {\n if (!opts.values?.length) throw new Error('values are required');\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });\n\n try {\n await refLocator(page, opts.ref).selectOption(opts.values, {\n timeout: Math.max(500, Math.min(60000, opts.timeoutMs ?? 8000)),\n });\n } catch (err) {\n throw toAIFriendlyError(err, opts.ref);\n }\n}\n\nexport async function dragViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n startRef: string;\n endRef: string;\n timeoutMs?: number;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });\n\n try {\n await refLocator(page, opts.startRef).dragTo(refLocator(page, opts.endRef), {\n timeout: Math.max(500, Math.min(60000, opts.timeoutMs ?? 8000)),\n });\n } catch (err) {\n throw toAIFriendlyError(err, `${opts.startRef} -> ${opts.endRef}`);\n }\n}\n\nexport async function fillFormViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n fields: FormField[];\n timeoutMs?: number;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });\n\n const timeout = Math.max(500, Math.min(60000, opts.timeoutMs ?? 8000));\n\n for (const field of opts.fields) {\n const ref = field.ref.trim();\n const type = field.type.trim();\n const rawValue = field.value;\n const value = typeof rawValue === 'string' ? rawValue :\n (typeof rawValue === 'number' || typeof rawValue === 'boolean') ? String(rawValue) : '';\n\n if (!ref || !type) continue;\n const locator = refLocator(page, ref);\n\n if (type === 'checkbox' || type === 'radio') {\n const checked = rawValue === true || rawValue === 1 || rawValue === '1' || rawValue === 'true';\n try {\n await locator.setChecked(checked, { timeout });\n } catch (err) {\n throw toAIFriendlyError(err, ref);\n }\n continue;\n }\n\n try {\n await locator.fill(value, { timeout });\n } catch (err) {\n throw toAIFriendlyError(err, ref);\n }\n }\n}\n\nexport async function scrollIntoViewViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n ref: string;\n timeoutMs?: number;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });\n\n try {\n await refLocator(page, opts.ref).scrollIntoViewIfNeeded({\n timeout: normalizeTimeoutMs(opts.timeoutMs, 20000),\n });\n } catch (err) {\n throw toAIFriendlyError(err, opts.ref);\n }\n}\n","import { getPageForTargetId, ensurePageState } from '../connection.js';\n\nexport async function pressKeyViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n key: string;\n delayMs?: number;\n}): Promise<void> {\n const key = String(opts.key ?? '').trim();\n if (!key) throw new Error('key is required');\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n await page.keyboard.press(key, { delay: Math.max(0, Math.floor(opts.delayMs ?? 0)) });\n}\n","import { connectBrowser, getPageForTargetId, ensurePageState, ensureContextState, pageTargetId, findPageByTargetId, getAllPages } from '../connection.js';\nimport type { BrowserTab } from '../types.js';\n\nexport async function navigateViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n url: string;\n timeoutMs?: number;\n}): Promise<{ url: string }> {\n const url = String(opts.url ?? '').trim();\n if (!url) throw new Error('url is required');\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n await page.goto(url, { timeout: Math.max(1000, Math.min(120000, opts.timeoutMs ?? 20000)) });\n return { url: page.url() };\n}\n\nexport async function listPagesViaPlaywright(opts: { cdpUrl: string }): Promise<BrowserTab[]> {\n const { browser } = await connectBrowser(opts.cdpUrl);\n const pages = await getAllPages(browser);\n const results: BrowserTab[] = [];\n for (const page of pages) {\n const tid = await pageTargetId(page).catch(() => null);\n if (tid) results.push({\n targetId: tid,\n title: await page.title().catch(() => ''),\n url: page.url(),\n type: 'page',\n });\n }\n return results;\n}\n\nexport async function createPageViaPlaywright(opts: {\n cdpUrl: string;\n url?: string;\n}): Promise<BrowserTab> {\n const { browser } = await connectBrowser(opts.cdpUrl);\n const context = browser.contexts()[0] ?? await browser.newContext();\n ensureContextState(context);\n const page = await context.newPage();\n ensurePageState(page);\n const targetUrl = (opts.url ?? '').trim() || 'about:blank';\n if (targetUrl !== 'about:blank') {\n await page.goto(targetUrl, { timeout: 30000 }).catch(() => {});\n }\n const tid = await pageTargetId(page).catch(() => null);\n if (!tid) throw new Error('Failed to get targetId for new page');\n return {\n targetId: tid,\n title: await page.title().catch(() => ''),\n url: page.url(),\n type: 'page',\n };\n}\n\nexport async function closePageByTargetIdViaPlaywright(opts: {\n cdpUrl: string;\n targetId: string;\n}): Promise<void> {\n const { browser } = await connectBrowser(opts.cdpUrl);\n const page = await findPageByTargetId(browser, opts.targetId, opts.cdpUrl);\n if (!page) throw new Error(`Tab not found (targetId: ${opts.targetId}). Use browser.tabs() to list open tabs.`);\n await page.close();\n}\n\nexport async function focusPageByTargetIdViaPlaywright(opts: {\n cdpUrl: string;\n targetId: string;\n}): Promise<void> {\n const { browser } = await connectBrowser(opts.cdpUrl);\n const page = await findPageByTargetId(browser, opts.targetId, opts.cdpUrl);\n if (!page) throw new Error(`Tab not found (targetId: ${opts.targetId}). Use browser.tabs() to list open tabs.`);\n try {\n await page.bringToFront();\n } catch (err) {\n const session = await page.context().newCDPSession(page);\n try {\n await session.send('Page.bringToFront');\n } catch {\n throw err;\n } finally {\n await session.detach().catch(() => {});\n }\n }\n}\n\nexport async function resizeViewportViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n width: number;\n height: number;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n await page.setViewportSize({\n width: Math.max(1, Math.floor(opts.width)),\n height: Math.max(1, Math.floor(opts.height)),\n });\n}\n","import { getPageForTargetId, ensurePageState, normalizeTimeoutMs } from '../connection.js';\n\nexport async function waitForViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n timeMs?: number;\n text?: string;\n textGone?: string;\n selector?: string;\n url?: string;\n loadState?: 'load' | 'domcontentloaded' | 'networkidle';\n fn?: string;\n timeoutMs?: number;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n const timeout = normalizeTimeoutMs(opts.timeoutMs, 20000);\n\n if (typeof opts.timeMs === 'number' && Number.isFinite(opts.timeMs)) {\n await page.waitForTimeout(Math.max(0, opts.timeMs));\n }\n if (opts.text) {\n await page.getByText(opts.text).first().waitFor({ state: 'visible', timeout });\n }\n if (opts.textGone) {\n await page.getByText(opts.textGone).first().waitFor({ state: 'hidden', timeout });\n }\n if (opts.selector) {\n const selector = String(opts.selector).trim();\n if (selector) await page.locator(selector).first().waitFor({ state: 'visible', timeout });\n }\n if (opts.url) {\n const url = String(opts.url).trim();\n if (url) await page.waitForURL(url, { timeout });\n }\n if (opts.loadState) {\n await page.waitForLoadState(opts.loadState, { timeout });\n }\n if (opts.fn) {\n const fn = String(opts.fn).trim();\n if (fn) await page.waitForFunction(fn, { timeout });\n }\n}\n","import {\n getPageForTargetId,\n ensurePageState,\n restoreRoleRefsForTarget,\n refLocator,\n} from '../connection.js';\n\nexport interface FrameEvalResult {\n frameUrl: string;\n frameName: string;\n result: unknown;\n}\n\n/**\n * Evaluate JavaScript in ALL frames (including cross-origin iframes).\n * Playwright can access cross-origin frames via CDP, bypassing same-origin policy.\n * Returns results from each frame where evaluation succeeded.\n */\nexport async function evaluateInAllFramesViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n fn: string;\n}): Promise<FrameEvalResult[]> {\n const fnText = String(opts.fn ?? '').trim();\n if (!fnText) throw new Error('function is required');\n\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n const frames = page.frames();\n const results: FrameEvalResult[] = [];\n\n for (const frame of frames) {\n try {\n // Runs in the frame's browser context (sandboxed), not in Node.js\n const result = await frame.evaluate(\n // eslint-disable-next-line no-eval\n (fnBody: string) => {\n 'use strict';\n try {\n const candidate = (0, eval)('(' + fnBody + ')');\n return typeof candidate === 'function' ? candidate() : candidate;\n } catch (err: any) {\n throw new Error('Invalid evaluate function: ' + (err?.message ?? String(err)));\n }\n },\n fnText,\n );\n results.push({\n frameUrl: frame.url(),\n frameName: frame.name(),\n result,\n });\n } catch {\n // Frame may have been detached or navigation in progress — skip\n }\n }\n\n return results;\n}\n\n/**\n * Evaluate JavaScript in the browser page context.\n * This is intentionally using eval() to execute user-provided browser-side code,\n * which is the core purpose of this function — running arbitrary JS in the page.\n * The code runs in the browser sandbox, not in Node.js.\n */\nexport async function evaluateViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n fn: string;\n ref?: string;\n}): Promise<unknown> {\n const fnText = String(opts.fn ?? '').trim();\n if (!fnText) throw new Error('function is required');\n\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });\n\n if (opts.ref) {\n const locator = refLocator(page, opts.ref);\n // Runs in the browser page context (sandboxed), not in Node.js\n return await locator.evaluate(\n // eslint-disable-next-line no-eval\n (el: Element, fnBody: string) => {\n 'use strict';\n try {\n const candidate = (0, eval)('(' + fnBody + ')');\n return typeof candidate === 'function' ? candidate(el) : candidate;\n } catch (err: any) {\n throw new Error('Invalid evaluate function: ' + (err?.message ?? String(err)));\n }\n },\n fnText,\n );\n }\n\n // Runs in the browser page context (sandboxed), not in Node.js\n return await page.evaluate(\n // eslint-disable-next-line no-eval\n (fnBody: string) => {\n 'use strict';\n try {\n const candidate = (0, eval)('(' + fnBody + ')');\n return typeof candidate === 'function' ? candidate() : candidate;\n } catch (err: any) {\n throw new Error('Invalid evaluate function: ' + (err?.message ?? String(err)));\n }\n },\n fnText,\n );\n}\n","import {\n getPageForTargetId,\n ensurePageState,\n restoreRoleRefsForTarget,\n refLocator,\n} from '../connection.js';\n\nexport async function takeScreenshotViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n fullPage?: boolean;\n ref?: string;\n element?: string;\n type?: 'png' | 'jpeg';\n}): Promise<{ buffer: Buffer }> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });\n const type = opts.type ?? 'png';\n\n if (opts.ref) {\n if (opts.fullPage) throw new Error('fullPage is not supported for element screenshots');\n return { buffer: await refLocator(page, opts.ref).screenshot({ type }) };\n }\n if (opts.element) {\n if (opts.fullPage) throw new Error('fullPage is not supported for element screenshots');\n return { buffer: await page.locator(opts.element).first().screenshot({ type }) };\n }\n return { buffer: await page.screenshot({ type, fullPage: Boolean(opts.fullPage) }) };\n}\n","import { getPageForTargetId, ensurePageState } from '../connection.js';\n\nexport async function pdfViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n}): Promise<{ buffer: Buffer }> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n return { buffer: await page.pdf({ printBackground: true }) };\n}\n","import { getPageForTargetId, ensurePageState } from '../connection.js';\nimport type { ConsoleMessage, PageError, NetworkRequest } from '../types.js';\n\nfunction consolePriority(level: string): number {\n switch (level) {\n case 'error': return 3;\n case 'warning': return 2;\n case 'info':\n case 'log': return 1;\n case 'debug': return 0;\n default: return 1;\n }\n}\n\nexport async function getConsoleMessagesViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n level?: string;\n}): Promise<ConsoleMessage[]> {\n const state = ensurePageState(await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId }));\n if (!opts.level) return [...state.console];\n const min = consolePriority(opts.level);\n return state.console.filter(msg => consolePriority(msg.type) >= min);\n}\n\nexport async function getPageErrorsViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n clear?: boolean;\n}): Promise<{ errors: PageError[] }> {\n const state = ensurePageState(await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId }));\n const errors = [...state.errors];\n if (opts.clear) state.errors = [];\n return { errors };\n}\n\nexport async function getNetworkRequestsViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n filter?: string;\n clear?: boolean;\n}): Promise<{ requests: NetworkRequest[] }> {\n const state = ensurePageState(await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId }));\n const raw = [...state.requests];\n const filter = typeof opts.filter === 'string' ? opts.filter.trim() : '';\n const requests = filter ? raw.filter(r => r.url.includes(filter)) : raw;\n if (opts.clear) {\n state.requests = [];\n state.requestIds = new WeakMap();\n }\n return { requests };\n}\n","import { getPageForTargetId, ensurePageState } from '../connection.js';\nimport type { CookieData, StorageKind } from '../types.js';\n\n// ── Cookies ──\n\nexport async function cookiesGetViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n}): Promise<{ cookies: any[] }> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n return { cookies: await page.context().cookies() };\n}\n\nexport async function cookiesSetViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n cookie: CookieData;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n const cookie = opts.cookie;\n if (!cookie.name || cookie.value === undefined) throw new Error('cookie name and value are required');\n const hasUrl = typeof cookie.url === 'string' && cookie.url.trim();\n const hasDomainPath = typeof cookie.domain === 'string' && cookie.domain.trim() &&\n typeof cookie.path === 'string' && cookie.path.trim();\n if (!hasUrl && !hasDomainPath) throw new Error('cookie requires url, or domain+path');\n await page.context().addCookies([cookie as any]);\n}\n\nexport async function cookiesClearViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n await page.context().clearCookies();\n}\n\n// ── localStorage / sessionStorage ──\n\nexport async function storageGetViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n kind: StorageKind;\n key?: string;\n}): Promise<{ values: Record<string, string> }> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n return {\n values: await page.evaluate(\n ({ kind, key }: { kind: string; key?: string }) => {\n const store = kind === 'session' ? window.sessionStorage : window.localStorage;\n if (key) {\n const value = store.getItem(key);\n return value === null ? {} : { [key]: value };\n }\n const out: Record<string, string> = {};\n for (let i = 0; i < store.length; i++) {\n const k = store.key(i);\n if (!k) continue;\n const v = store.getItem(k);\n if (v !== null) out[k] = v;\n }\n return out;\n },\n { kind: opts.kind, key: opts.key },\n ) ?? {},\n };\n}\n\nexport async function storageSetViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n kind: StorageKind;\n key: string;\n value: string;\n}): Promise<void> {\n const key = String(opts.key ?? '');\n if (!key) throw new Error('key is required');\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n await page.evaluate(\n ({ kind, key: k, value }: { kind: string; key: string; value: string }) => {\n (kind === 'session' ? window.sessionStorage : window.localStorage).setItem(k, value);\n },\n { kind: opts.kind, key, value: String(opts.value ?? '') },\n );\n}\n\nexport async function storageClearViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n kind: StorageKind;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n await page.evaluate(\n ({ kind }: { kind: string }) => {\n (kind === 'session' ? window.sessionStorage : window.localStorage).clear();\n },\n { kind: opts.kind },\n );\n}\n","import { launchChrome, stopChrome, isChromeReachable } from './chrome-launcher.js';\nimport { connectBrowser, disconnectBrowser, getPageForTargetId, ensurePageState, restoreRoleRefsForTarget, refLocator, pageTargetId, getAllPages } from './connection.js';\nimport { snapshotAi } from './snapshot/ai-snapshot.js';\nimport { snapshotRole, snapshotAria } from './snapshot/aria-snapshot.js';\nimport { clickViaPlaywright, hoverViaPlaywright, typeViaPlaywright, selectOptionViaPlaywright, dragViaPlaywright, fillFormViaPlaywright, scrollIntoViewViaPlaywright } from './actions/interaction.js';\nimport { pressKeyViaPlaywright } from './actions/keyboard.js';\nimport { navigateViaPlaywright, listPagesViaPlaywright, createPageViaPlaywright, closePageByTargetIdViaPlaywright, focusPageByTargetIdViaPlaywright, resizeViewportViaPlaywright } from './actions/navigation.js';\nimport { waitForViaPlaywright } from './actions/wait.js';\nimport { evaluateViaPlaywright, evaluateInAllFramesViaPlaywright, type FrameEvalResult } from './actions/evaluate.js';\nimport { takeScreenshotViaPlaywright } from './capture/screenshot.js';\nimport { pdfViaPlaywright } from './capture/pdf.js';\nimport { getConsoleMessagesViaPlaywright, getPageErrorsViaPlaywright, getNetworkRequestsViaPlaywright } from './capture/activity.js';\nimport { cookiesGetViaPlaywright, cookiesSetViaPlaywright, cookiesClearViaPlaywright, storageGetViaPlaywright, storageSetViaPlaywright, storageClearViaPlaywright } from './storage/index.js';\nimport type {\n LaunchOptions, SnapshotResult, SnapshotOptions, AriaSnapshotResult,\n BrowserTab, FormField, ClickOptions, TypeOptions, WaitOptions,\n ScreenshotOptions, ConsoleMessage, PageError, NetworkRequest,\n CookieData, StorageKind, RunningChrome,\n} from './types.js';\n\n/**\n * Represents a single browser page/tab with ref-based automation.\n *\n * The workflow is: **snapshot → read refs → act on refs**.\n *\n * @example\n * ```ts\n * const page = await browser.open('https://example.com');\n *\n * // 1. Take a snapshot to get refs\n * const { snapshot, refs } = await page.snapshot();\n * // snapshot: AI-readable text tree\n * // refs: { \"e1\": { role: \"link\", name: \"More info\" }, ... }\n *\n * // 2. Act on refs\n * await page.click('e1');\n * await page.type('e3', 'hello');\n * ```\n */\nexport class CrawlPage {\n private readonly cdpUrl: string;\n private readonly targetId: string;\n\n /** @internal */\n constructor(cdpUrl: string, targetId: string) {\n this.cdpUrl = cdpUrl;\n this.targetId = targetId;\n }\n\n /** The CDP target ID for this page. Use this to identify the page in multi-tab scenarios. */\n get id(): string {\n return this.targetId;\n }\n\n // ── Snapshot ──────────────────────────────────────────────────\n\n /**\n * Take an AI-readable snapshot of the page.\n *\n * Returns a text tree with numbered refs (`e1`, `e2`, ...) that map to\n * interactive elements. Use these refs with actions like `click()` and `type()`.\n *\n * @param opts - Snapshot options (mode, filtering, depth limits)\n * @returns Snapshot text, ref map, and statistics\n *\n * @example\n * ```ts\n * // Default snapshot (aria mode)\n * const { snapshot, refs } = await page.snapshot();\n *\n * // Interactive elements only, compact\n * const result = await page.snapshot({ interactive: true, compact: true });\n *\n * // Role-based mode (uses getByRole resolution)\n * const result = await page.snapshot({ mode: 'role' });\n * ```\n */\n async snapshot(opts?: SnapshotOptions): Promise<SnapshotResult> {\n if (opts?.mode === 'role') {\n return snapshotRole({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n selector: opts?.selector,\n frameSelector: opts?.frameSelector,\n refsMode: 'role',\n options: {\n interactive: opts?.interactive,\n compact: opts?.compact,\n maxDepth: opts?.maxDepth,\n },\n });\n }\n // Default: aria mode (uses Playwright's _snapshotForAI)\n return snapshotAi({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n maxChars: opts?.maxChars,\n options: {\n interactive: opts?.interactive,\n compact: opts?.compact,\n maxDepth: opts?.maxDepth,\n },\n });\n }\n\n /**\n * Take a raw ARIA accessibility tree snapshot via CDP.\n *\n * Unlike `snapshot()`, this returns structured node data rather than\n * an AI-readable text tree. Useful for programmatic accessibility analysis.\n *\n * @param opts - Options (limit: max nodes to return, default 500)\n * @returns Array of accessibility tree nodes\n */\n async ariaSnapshot(opts?: { limit?: number }): Promise<AriaSnapshotResult> {\n return snapshotAria({ cdpUrl: this.cdpUrl, targetId: this.targetId, limit: opts?.limit });\n }\n\n // ── Interactions ─────────────────────────────────────────────\n\n /**\n * Click an element by ref.\n *\n * @param ref - Ref ID from a snapshot (e.g. `'e1'`)\n * @param opts - Click options (double-click, button, modifiers)\n *\n * @example\n * ```ts\n * await page.click('e1');\n * await page.click('e2', { doubleClick: true });\n * await page.click('e3', { button: 'right' });\n * await page.click('e4', { modifiers: ['Control'] });\n * ```\n */\n async click(ref: string, opts?: ClickOptions): Promise<void> {\n return clickViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n ref,\n doubleClick: opts?.doubleClick,\n button: opts?.button,\n modifiers: opts?.modifiers,\n timeoutMs: opts?.timeoutMs,\n });\n }\n\n /**\n * Type text into an input element by ref.\n *\n * By default, uses Playwright's `fill()` for instant input. Use `slowly: true`\n * to simulate real keystroke typing with a 75ms delay per character.\n *\n * @param ref - Ref ID of the input element (e.g. `'e3'`)\n * @param text - Text to type\n * @param opts - Type options (submit, slowly)\n *\n * @example\n * ```ts\n * await page.type('e3', 'hello world');\n * await page.type('e3', 'slow typing', { slowly: true });\n * await page.type('e3', 'search query', { submit: true }); // press Enter after\n * ```\n */\n async type(ref: string, text: string, opts?: TypeOptions): Promise<void> {\n return typeViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n ref,\n text,\n submit: opts?.submit,\n slowly: opts?.slowly,\n timeoutMs: opts?.timeoutMs,\n });\n }\n\n /**\n * Hover over an element by ref.\n *\n * @param ref - Ref ID from a snapshot\n * @param opts - Timeout options\n */\n async hover(ref: string, opts?: { timeoutMs?: number }): Promise<void> {\n return hoverViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n ref,\n timeoutMs: opts?.timeoutMs,\n });\n }\n\n /**\n * Select option(s) in a `<select>` dropdown by ref.\n *\n * @param ref - Ref ID of the select element\n * @param values - One or more option labels/values to select\n *\n * @example\n * ```ts\n * await page.select('e5', 'Option A');\n * await page.select('e5', 'Option A', 'Option B'); // multi-select\n * ```\n */\n async select(ref: string, ...values: string[]): Promise<void> {\n return selectOptionViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n ref,\n values,\n });\n }\n\n /**\n * Drag one element to another.\n *\n * @param startRef - Ref ID of the element to drag\n * @param endRef - Ref ID of the drop target\n * @param opts - Timeout options\n */\n async drag(startRef: string, endRef: string, opts?: { timeoutMs?: number }): Promise<void> {\n return dragViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n startRef,\n endRef,\n timeoutMs: opts?.timeoutMs,\n });\n }\n\n /**\n * Fill multiple form fields at once.\n *\n * Supports text inputs, checkboxes, and radio buttons.\n *\n * @param fields - Array of form fields to fill\n *\n * @example\n * ```ts\n * await page.fill([\n * { ref: 'e2', type: 'text', value: 'Jane Doe' },\n * { ref: 'e4', type: 'text', value: 'jane@example.com' },\n * { ref: 'e6', type: 'checkbox', value: true },\n * ]);\n * ```\n */\n async fill(fields: FormField[]): Promise<void> {\n return fillFormViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n fields,\n });\n }\n\n /**\n * Scroll an element into the visible viewport.\n *\n * @param ref - Ref ID of the element to scroll to\n * @param opts - Timeout options\n */\n async scrollIntoView(ref: string, opts?: { timeoutMs?: number }): Promise<void> {\n return scrollIntoViewViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n ref,\n timeoutMs: opts?.timeoutMs,\n });\n }\n\n // ── Keyboard ─────────────────────────────────────────────────\n\n /**\n * Press a keyboard key or key combination.\n *\n * Uses Playwright's key names. Supports combinations with `+`.\n *\n * @param key - Key to press (e.g. `'Enter'`, `'Tab'`, `'Control+a'`, `'Meta+c'`)\n * @param opts - Options (delayMs: hold time between keydown and keyup)\n *\n * @example\n * ```ts\n * await page.press('Enter');\n * await page.press('Control+a');\n * await page.press('Meta+Shift+p');\n * ```\n */\n async press(key: string, opts?: { delayMs?: number }): Promise<void> {\n return pressKeyViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n key,\n delayMs: opts?.delayMs,\n });\n }\n\n // ── Navigation ───────────────────────────────────────────────\n\n /**\n * Navigate to a URL.\n *\n * @param url - The URL to navigate to\n * @param opts - Timeout options\n * @returns The final URL after navigation (may differ due to redirects)\n */\n async goto(url: string, opts?: { timeoutMs?: number }): Promise<{ url: string }> {\n return navigateViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n url,\n timeoutMs: opts?.timeoutMs,\n });\n }\n\n // ── Wait ─────────────────────────────────────────────────────\n\n /**\n * Wait for various conditions on the page.\n *\n * Multiple conditions can be specified — they are checked in order.\n *\n * @param opts - Wait conditions (text, URL, load state, selector, etc.)\n *\n * @example\n * ```ts\n * await page.waitFor({ loadState: 'networkidle' });\n * await page.waitFor({ text: 'Welcome back' });\n * await page.waitFor({ url: '**\\/dashboard' });\n * await page.waitFor({ timeMs: 1000 }); // sleep\n * ```\n */\n async waitFor(opts: WaitOptions): Promise<void> {\n return waitForViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n ...opts,\n });\n }\n\n // ── Evaluate ─────────────────────────────────────────────────\n\n /**\n * Run JavaScript in the browser page context.\n *\n * The function string is evaluated in the browser's sandbox, not in Node.js.\n * Pass a `ref` to receive the element as the first argument.\n *\n * @param fn - JavaScript function body as a string\n * @param opts - Options (ref: scope evaluation to a specific element)\n * @returns The return value of the evaluated function\n *\n * @example\n * ```ts\n * const title = await page.evaluate('() => document.title');\n * const text = await page.evaluate('(el) => el.textContent', { ref: 'e1' });\n * const count = await page.evaluate('() => document.querySelectorAll(\"img\").length');\n * ```\n */\n async evaluate(fn: string, opts?: { ref?: string }): Promise<unknown> {\n return evaluateViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n fn,\n ref: opts?.ref,\n });\n }\n\n /**\n * Run JavaScript in ALL frames on the page (including cross-origin iframes).\n *\n * Playwright can access cross-origin frames via CDP, bypassing the same-origin policy.\n * This is essential for filling payment iframes (Stripe, etc.).\n *\n * @param fn - JavaScript function body as a string\n * @returns Array of results from each frame where evaluation succeeded\n *\n * @example\n * ```ts\n * const results = await page.evaluateInAllFrames(`() => {\n * const el = document.querySelector('input[name=\"cardnumber\"]');\n * return el ? 'found' : null;\n * }`);\n * ```\n */\n async evaluateInAllFrames(fn: string): Promise<FrameEvalResult[]> {\n return evaluateInAllFramesViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n fn,\n });\n }\n\n // ── Capture ──────────────────────────────────────────────────\n\n /**\n * Take a screenshot of the page or a specific element.\n *\n * @param opts - Screenshot options (fullPage, ref, element, type)\n * @returns PNG or JPEG image as a Buffer\n *\n * @example\n * ```ts\n * const screenshot = await page.screenshot();\n * const fullPage = await page.screenshot({ fullPage: true });\n * const element = await page.screenshot({ ref: 'e1' });\n * ```\n */\n async screenshot(opts?: ScreenshotOptions): Promise<Buffer> {\n const result = await takeScreenshotViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n fullPage: opts?.fullPage,\n ref: opts?.ref,\n element: opts?.element,\n type: opts?.type,\n });\n return result.buffer;\n }\n\n /**\n * Export the page as a PDF.\n *\n * Only works in headless mode.\n *\n * @returns PDF document as a Buffer\n */\n async pdf(): Promise<Buffer> {\n const result = await pdfViaPlaywright({ cdpUrl: this.cdpUrl, targetId: this.targetId });\n return result.buffer;\n }\n\n /**\n * Get console messages captured from the page.\n *\n * Messages are buffered automatically. Use `level` to filter by minimum severity.\n *\n * @param opts - Filter options (level: `'debug'` | `'log'` | `'info'` | `'warning'` | `'error'`)\n * @returns Array of captured console messages\n */\n async consoleLogs(opts?: { level?: string }): Promise<ConsoleMessage[]> {\n return getConsoleMessagesViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n level: opts?.level,\n });\n }\n\n /**\n * Get uncaught errors from the page.\n *\n * @param opts - Options (clear: reset the error buffer after reading)\n * @returns Array of captured page errors\n */\n async pageErrors(opts?: { clear?: boolean }): Promise<PageError[]> {\n const result = await getPageErrorsViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n clear: opts?.clear,\n });\n return result.errors;\n }\n\n /**\n * Get network requests captured from the page.\n *\n * @param opts - Options (filter: URL substring match, clear: reset the buffer)\n * @returns Array of captured network requests\n *\n * @example\n * ```ts\n * const all = await page.networkRequests();\n * const apiCalls = await page.networkRequests({ filter: '/api/' });\n * const fresh = await page.networkRequests({ clear: true }); // read and clear\n * ```\n */\n async networkRequests(opts?: { filter?: string; clear?: boolean }): Promise<NetworkRequest[]> {\n const result = await getNetworkRequestsViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n filter: opts?.filter,\n clear: opts?.clear,\n });\n return result.requests;\n }\n\n // ── Viewport ─────────────────────────────────────────────────\n\n /**\n * Resize the browser viewport.\n *\n * @param width - Viewport width in pixels\n * @param height - Viewport height in pixels\n */\n async resize(width: number, height: number): Promise<void> {\n return resizeViewportViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n width,\n height,\n });\n }\n\n // ── Storage ──────────────────────────────────────────────────\n\n /**\n * Get all cookies for the current browser context.\n *\n * @returns Array of cookie objects\n */\n async cookies(): Promise<any[]> {\n const result = await cookiesGetViaPlaywright({ cdpUrl: this.cdpUrl, targetId: this.targetId });\n return result.cookies;\n }\n\n /**\n * Set a cookie in the browser context.\n *\n * @param cookie - Cookie data (must include `name`, `value`, and either `url` or `domain`+`path`)\n *\n * @example\n * ```ts\n * await page.setCookie({\n * name: 'token',\n * value: 'abc123',\n * url: 'https://example.com',\n * });\n * ```\n */\n async setCookie(cookie: CookieData): Promise<void> {\n return cookiesSetViaPlaywright({ cdpUrl: this.cdpUrl, targetId: this.targetId, cookie });\n }\n\n /** Clear all cookies in the browser context. */\n async clearCookies(): Promise<void> {\n return cookiesClearViaPlaywright({ cdpUrl: this.cdpUrl, targetId: this.targetId });\n }\n\n /**\n * Get values from localStorage or sessionStorage.\n *\n * @param kind - `'local'` for localStorage, `'session'` for sessionStorage\n * @param key - Optional specific key to retrieve (returns all if omitted)\n * @returns Key-value map of storage entries\n */\n async storageGet(kind: StorageKind, key?: string): Promise<Record<string, string>> {\n const result = await storageGetViaPlaywright({\n cdpUrl: this.cdpUrl, targetId: this.targetId, kind, key,\n });\n return result.values;\n }\n\n /**\n * Set a value in localStorage or sessionStorage.\n *\n * @param kind - `'local'` for localStorage, `'session'` for sessionStorage\n * @param key - Storage key\n * @param value - Storage value\n */\n async storageSet(kind: StorageKind, key: string, value: string): Promise<void> {\n return storageSetViaPlaywright({\n cdpUrl: this.cdpUrl, targetId: this.targetId, kind, key, value,\n });\n }\n\n /**\n * Clear all entries in localStorage or sessionStorage.\n *\n * @param kind - `'local'` for localStorage, `'session'` for sessionStorage\n */\n async storageClear(kind: StorageKind): Promise<void> {\n return storageClearViaPlaywright({\n cdpUrl: this.cdpUrl, targetId: this.targetId, kind,\n });\n }\n}\n\n/**\n * Main entry point for browserclaw.\n *\n * Launch or connect to a browser, then open pages and automate them\n * using the snapshot + ref pattern.\n *\n * @example\n * ```ts\n * import { BrowserClaw } from 'browserclaw';\n *\n * const browser = await BrowserClaw.launch({ headless: false });\n * const page = await browser.open('https://example.com');\n *\n * const { snapshot, refs } = await page.snapshot();\n * console.log(snapshot); // AI-readable page tree\n * console.log(refs); // { \"e1\": { role: \"link\", name: \"More info\" }, ... }\n *\n * await page.click('e1');\n * await browser.stop();\n * ```\n */\nexport class BrowserClaw {\n private readonly cdpUrl: string;\n private chrome: RunningChrome | null;\n\n private constructor(cdpUrl: string, chrome: RunningChrome | null) {\n this.cdpUrl = cdpUrl;\n this.chrome = chrome;\n }\n\n /**\n * Launch a new Chrome instance and connect to it.\n *\n * Automatically detects Chrome, Brave, Edge, or Chromium on the system.\n * Creates a dedicated browser profile to avoid conflicts with your daily browser.\n *\n * @param opts - Launch options (headless, executablePath, cdpPort, etc.)\n * @returns A connected BrowserClaw instance\n *\n * @example\n * ```ts\n * // Default: visible Chrome window\n * const browser = await BrowserClaw.launch();\n *\n * // Headless mode\n * const browser = await BrowserClaw.launch({ headless: true });\n *\n * // Specific browser\n * const browser = await BrowserClaw.launch({\n * executablePath: '/usr/bin/google-chrome',\n * });\n * ```\n */\n static async launch(opts: LaunchOptions = {}): Promise<BrowserClaw> {\n const chrome = await launchChrome(opts);\n const cdpUrl = `http://127.0.0.1:${chrome.cdpPort}`;\n return new BrowserClaw(cdpUrl, chrome);\n }\n\n /**\n * Connect to an already-running Chrome instance via its CDP endpoint.\n *\n * The Chrome instance must have been started with `--remote-debugging-port`.\n *\n * @param cdpUrl - CDP endpoint URL (e.g. `'http://localhost:9222'`)\n * @returns A connected BrowserClaw instance\n *\n * @example\n * ```ts\n * // Chrome started with: chrome --remote-debugging-port=9222\n * const browser = await BrowserClaw.connect('http://localhost:9222');\n * ```\n */\n static async connect(cdpUrl: string): Promise<BrowserClaw> {\n if (!await isChromeReachable(cdpUrl, 3000)) {\n throw new Error(`Cannot connect to Chrome at ${cdpUrl}. Is Chrome running with --remote-debugging-port?`);\n }\n await connectBrowser(cdpUrl);\n return new BrowserClaw(cdpUrl, null);\n }\n\n /**\n * Open a URL in a new tab and return the page handle.\n *\n * @param url - URL to navigate to\n * @returns A CrawlPage for the new tab\n *\n * @example\n * ```ts\n * const page = await browser.open('https://example.com');\n * const { snapshot, refs } = await page.snapshot();\n * ```\n */\n async open(url: string): Promise<CrawlPage> {\n const tab = await createPageViaPlaywright({ cdpUrl: this.cdpUrl, url });\n return new CrawlPage(this.cdpUrl, tab.targetId);\n }\n\n /**\n * Get a CrawlPage handle for the currently active tab.\n *\n * @returns CrawlPage for the first/active page\n */\n async currentPage(): Promise<CrawlPage> {\n const { browser } = await connectBrowser(this.cdpUrl);\n const pages = await getAllPages(browser);\n if (!pages.length) throw new Error('No pages available');\n const tid = await pageTargetId(pages[0]!).catch(() => null);\n return new CrawlPage(this.cdpUrl, tid ?? '');\n }\n\n /**\n * List all open tabs.\n *\n * @returns Array of tab information objects\n */\n async tabs(): Promise<BrowserTab[]> {\n return listPagesViaPlaywright({ cdpUrl: this.cdpUrl });\n }\n\n /**\n * Bring a tab to the foreground.\n *\n * @param targetId - CDP target ID of the tab (from `tabs()` or `page.id`)\n */\n async focus(targetId: string): Promise<void> {\n return focusPageByTargetIdViaPlaywright({ cdpUrl: this.cdpUrl, targetId });\n }\n\n /**\n * Close a tab.\n *\n * @param targetId - CDP target ID of the tab to close\n */\n async close(targetId: string): Promise<void> {\n return closePageByTargetIdViaPlaywright({ cdpUrl: this.cdpUrl, targetId });\n }\n\n /**\n * Get a CrawlPage handle for a specific tab by its target ID.\n *\n * Unlike `open()`, this doesn't create a new tab — it wraps an existing one.\n *\n * @param targetId - CDP target ID of the tab\n * @returns CrawlPage for the specified tab\n */\n page(targetId: string): CrawlPage {\n return new CrawlPage(this.cdpUrl, targetId);\n }\n\n /** The CDP endpoint URL for this browser connection. */\n get url(): string {\n return this.cdpUrl;\n }\n\n /**\n * Stop the browser and clean up all resources.\n *\n * If the browser was launched by `BrowserClaw.launch()`, the Chrome process\n * will be terminated. If connected via `BrowserClaw.connect()`, only the\n * Playwright connection is closed.\n */\n async stop(): Promise<void> {\n await disconnectBrowser();\n if (this.chrome) {\n await stopChrome(this.chrome);\n this.chrome = null;\n }\n }\n}\n"]}