From f5df8c67f3019642c550f8143924181f8471d24d Mon Sep 17 00:00:00 2001 From: Adam Ladachowski Date: Wed, 11 Feb 2026 12:18:06 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=92=AC=20Commit=20message:=20Update=20202?= =?UTF-8?q?6-02-11=2012:18:05,=2014=20files,=201838=20lines?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 📁 Files changed: 14 📝 Lines changed: 1838 • CLAUDE.md • README.md • TODO.md • browser.d.ts • browser.d.ts.map • browser.js • browser.js.map • mcp.js • mcp.js.map • types.d.ts • types.d.ts.map • browser.ts • mcp.ts • types.ts --- CLAUDE.md | 64 +++++++ README.md | 118 +++++++++++- TODO.md | 32 ++-- dist/browser.d.ts | 52 +++++- dist/browser.d.ts.map | 2 +- dist/browser.js | 410 +++++++++++++++++++++++++++++++++++++++--- dist/browser.js.map | 2 +- dist/mcp.js | 186 +++++++++++++++++++ dist/mcp.js.map | 2 +- dist/types.d.ts | 129 ++++++++++++- dist/types.d.ts.map | 2 +- src/browser.ts | 400 +++++++++++++++++++++++++++++++++++++++++ src/mcp.ts | 280 +++++++++++++++++++++++++++++ src/types.ts | 159 +++++++++++++++- 14 files changed, 1790 insertions(+), 48 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index e8e5f06..2430d01 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -62,6 +62,27 @@ Commands are typed objects with a `cmd` discriminator: All commands return `{ ok: true, ...data }` or `{ ok: false, error: string }`. +### Command Categories + +| Category | Commands | +|----------|----------| +| Navigation | `goto`, `back`, `forward`, `reload`, `wait` | +| Interaction | `click`, `type`, `hover`, `select`, `keys`, `scroll`, `upload` | +| Content | `query`, `screenshot`, `url`, `html`, `eval` | +| Debugging | `console`, `errors`, `network`, `intercept`, `metrics`, `a11y` | +| Storage | `cookies`, `storage`, `dialog`, `session_save`, `session_restore` | +| Viewport | `viewport`, `emulate` | +| Image | `favicon`, `convert`, `resize`, `crop`, `compress`, `thumbnail` | + +### Event Listeners + +The browser automatically captures events when launched: + +- **Console**: `page.on('console')` - Captures all console messages +- **Errors**: `page.on('pageerror')` - Captures uncaught exceptions +- **Network**: `page.on('request/response/requestfailed')` - Captures all network activity +- **Dialogs**: `page.on('dialog')` - Handles alert/confirm/prompt dialogs + ## CLI Options Key flags: `-s ` (server mode), `-q ` (query), `-c ` (click), `-t =` (type), `-i` (interactive), `--headed` (visible browser). @@ -81,3 +102,46 @@ browse-mcp ``` The MCP server (`src/mcp.ts`) exposes all browser commands as tools. It uses stdio transport and auto-launches the browser on first command. + +### Debugging Tools + +```bash +# Get console logs +curl localhost:13373 -d '{"cmd":"console","level":"error"}' + +# Get page errors +curl localhost:13373 -d '{"cmd":"errors"}' + +# Get network requests (all or failed only) +curl localhost:13373 -d '{"cmd":"network","filter":"failed"}' + +# Block requests matching pattern +curl localhost:13373 -d '{"cmd":"intercept","action":"block","pattern":"**/*ads*"}' + +# Mock API response +curl localhost:13373 -d '{"cmd":"intercept","action":"mock","pattern":"**/api/*","status":200,"body":"{\"mock\":true}"}' + +# Get performance metrics +curl localhost:13373 -d '{"cmd":"metrics","resources":true}' + +# Get accessibility tree +curl localhost:13373 -d '{"cmd":"a11y"}' + +# Emulate mobile device +curl localhost:13373 -d '{"cmd":"emulate","device":"iPhone 13"}' +``` + +### MCP Resources + +Resources can be accessed via `@` mentions in Claude Code: + +| Resource | Description | +|----------|-------------| +| `browser://state` | Current browser state | +| `browser://console` | Console messages | +| `browser://network` | All network requests | +| `browser://network/failed` | Failed requests only | +| `browser://errors` | Page errors | +| `browser://a11y` | Accessibility tree | +| `browser://html` | Page HTML (truncated) | +| `browser://screenshot` | Page screenshot | diff --git a/README.md b/README.md index 7879ded..20a27ef 100644 --- a/README.md +++ b/README.md @@ -145,9 +145,79 @@ Add to Claude Code's MCP config (`~/.claude/settings.json`): } ``` -**Available Tools:** `goto`, `click`, `type`, `query`, `screenshot`, `url`, `html`, `back`, `forward`, `reload`, `wait`, `eval` +### MCP Tools Reference -**Image Processing Tools:** `favicon`, `convert`, `resize`, `crop`, `compress`, `thumbnail` +**Navigation & Interaction:** +| Tool | Description | +|------|-------------| +| `goto` | Navigate to a URL | +| `click` | Click on an element | +| `type` | Type text into an input field | +| `hover` | Hover over an element | +| `select` | Select option(s) in a dropdown | +| `keys` | Send keyboard shortcuts (e.g., "Enter", "Control+a") | +| `scroll` | Scroll page or element into view | +| `upload` | Upload files to a file input | +| `back`, `forward`, `reload` | Browser navigation | +| `wait` | Wait for a specified time | + +**Debugging & Inspection:** +| Tool | Description | +|------|-------------| +| `console` | Get captured console messages (log, warn, error, etc.) | +| `errors` | Get page errors (uncaught exceptions) | +| `network` | Get captured network requests/responses | +| `intercept` | Block or mock network requests | +| `metrics` | Get performance metrics and DOM statistics | +| `a11y` | Get accessibility tree snapshot | + +**Page Content:** +| Tool | Description | +|------|-------------| +| `query` | Query elements by CSS selector | +| `screenshot` | Take a screenshot | +| `url` | Get current URL and title | +| `html` | Get page HTML content | +| `eval` | Execute JavaScript in browser context | + +**Storage & Session:** +| Tool | Description | +|------|-------------| +| `cookies` | Get, set, delete, or clear cookies | +| `storage` | Access localStorage or sessionStorage | +| `dialog` | Configure how browser dialogs are handled | +| `session_save` | Save session state to file | +| `session_restore` | Restore session from file | + +**Viewport & Emulation:** +| Tool | Description | +|------|-------------| +| `viewport` | Resize browser viewport | +| `emulate` | Emulate a mobile device | + +**Image Processing:** +| Tool | Description | +|------|-------------| +| `favicon` | Generate favicon set from image | +| `convert` | Convert image format | +| `resize` | Resize image | +| `crop` | Crop image | +| `compress` | Compress image | +| `thumbnail` | Create thumbnail | + +### MCP Resources + +| Resource | Description | +|----------|-------------| +| `browser://state` | Browser state (URL, title, launched) | +| `browser://html` | Page HTML (truncated to 10KB) | +| `browser://html/full` | Complete page HTML | +| `browser://console` | Captured console messages | +| `browser://network` | All network requests | +| `browser://network/failed` | Failed requests only | +| `browser://errors` | Page errors | +| `browser://a11y` | Accessibility tree | +| `browser://screenshot` | Page screenshot as base64 PNG | ## Programmatic Usage @@ -182,18 +252,56 @@ const server = await startServer({ port: 3000, headless: false }); ### ClaudeBrowser +**Lifecycle:** - `launch()` - Launch the browser - `close()` - Close the browser +- `newPage()` - Open new page + +**Navigation:** - `goto(url)` - Navigate to URL +- `back()` / `forward()` / `reload()` - Browser navigation +- `wait(ms)` - Wait for timeout + +**Interaction:** - `click(selector)` - Click element - `type(selector, text)` - Type into input +- `hover(selector)` - Hover over element +- `select(selector, value)` - Select dropdown option(s) +- `keys(keys)` - Press keyboard keys +- `scroll(selector?, x?, y?)` - Scroll page or element +- `upload(selector, files)` - Upload files + +**Content:** - `query(selector)` - Query elements, returns attributes - `screenshot(path?, fullPage?)` - Take screenshot - `getUrl()` - Get current URL and title - `getHtml(full?)` - Get page HTML -- `back()` / `forward()` / `reload()` - Navigation -- `wait(ms)` - Wait for timeout -- `newPage()` - Open new page +- `eval(script)` - Execute JavaScript + +**Debugging:** +- `getConsole(level?, clear?)` - Get console messages +- `getErrors(clear?)` - Get page errors +- `getNetwork(filter?, clear?)` - Get network requests +- `getMetrics(includeResources?)` - Get performance metrics +- `getA11y(selector?)` - Get accessibility tree + +**Storage:** +- `getCookies(name?)` - Get cookies +- `setCookie(name, value, url?)` - Set cookie +- `deleteCookie(name)` / `clearCookies()` - Remove cookies +- `getStorage(type, key?)` - Get localStorage/sessionStorage +- `setStorage(type, key, value)` - Set storage item +- `deleteStorage(type, key)` / `clearStorage(type)` - Remove storage + +**Interception:** +- `addIntercept(pattern, action, response?)` - Block or mock requests +- `clearIntercepts()` - Remove all intercepts + +**Viewport:** +- `setViewport(width, height)` - Resize viewport +- `emulate(device)` - Emulate device (e.g., 'iPhone 13') + +**Commands:** - `executeCommand(cmd)` - Execute a command object ### BrowserServer diff --git a/TODO.md b/TODO.md index 1fab8b6..09bcf7e 100644 --- a/TODO.md +++ b/TODO.md @@ -2,7 +2,7 @@ ## Phase 1: Core Debugging (Console & Errors) - [x] Step 1.1: Add Console Command -- [ ] Step 1.2: Add Page Errors Command +- [x] Step 1.2: Add Page Errors Command ## Phase 2: Network Monitoring - [x] Step 2.1: Add Network Logging @@ -10,30 +10,30 @@ - [x] Step 2.3: Add Request Interception ## Phase 3: Performance & Metrics -- [ ] Step 3.1: Add Performance Metrics -- [ ] Step 3.2: Add Resource Timing +- [x] Step 3.1: Add Performance Metrics +- [x] Step 3.2: Add Resource Timing ## Phase 4: Accessibility -- [ ] Step 4.1: Add Accessibility Snapshot +- [x] Step 4.1: Add Accessibility Snapshot ## Phase 5: Dialog Handling -- [ ] Step 5.1: Add Dialog Command +- [x] Step 5.1: Add Dialog Command ## Phase 6: Storage & Cookies -- [ ] Step 6.1: Add Cookies Command -- [ ] Step 6.2: Add Storage Command +- [x] Step 6.1: Add Cookies Command +- [x] Step 6.2: Add Storage Command ## Phase 7: Advanced Interactions -- [ ] Step 7.1: Add Hover Command -- [ ] Step 7.2: Add Select Command -- [ ] Step 7.3: Add Keys Command -- [ ] Step 7.4: Add Upload Command -- [ ] Step 7.5: Add Scroll Command +- [x] Step 7.1: Add Hover Command +- [x] Step 7.2: Add Select Command +- [x] Step 7.3: Add Keys Command +- [x] Step 7.4: Add Upload Command +- [x] Step 7.5: Add Scroll Command ## Phase 8: Viewport & Emulation -- [ ] Step 8.1: Add Viewport Command -- [ ] Step 8.2: Add Emulate Command +- [x] Step 8.1: Add Viewport Command +- [x] Step 8.2: Add Emulate Command ## Phase 9: Documentation -- [ ] Step 9.1: Update README -- [ ] Step 9.2: Update CLAUDE.md +- [x] Step 9.1: Update README +- [x] Step 9.2: Update CLAUDE.md diff --git a/dist/browser.d.ts b/dist/browser.d.ts index fca208b..add5562 100644 --- a/dist/browser.d.ts +++ b/dist/browser.d.ts @@ -1,5 +1,5 @@ import { type BrowserContext, type Page } from 'playwright'; -import type { BrowserCommand, BrowserOptions, CommandResponse, ConsoleMessage, ElementInfo, NetworkEntry } from './types.js'; +import type { A11yNode, BrowserCommand, BrowserOptions, CommandResponse, ConsoleMessage, DialogEntry, ElementInfo, MetricsData, NetworkEntry, PageError } from './types.js'; export declare class ClaudeBrowser { private browser; private context; @@ -7,9 +7,14 @@ export declare class ClaudeBrowser { private options; private consoleMessages; private networkEntries; + private pageErrors; + private dialogHistory; + private dialogConfig; private interceptPatterns; constructor(options?: BrowserOptions); launch(): Promise; + private setupErrorListener; + private setupDialogListener; private setupConsoleListener; private setupNetworkListener; close(): Promise; @@ -52,13 +57,58 @@ export declare class ClaudeBrowser { clearConsole(): void; getNetwork(filter?: string, clear?: boolean): NetworkEntry[]; clearNetwork(): void; + getErrors(clear?: boolean): PageError[]; + clearErrors(): void; + getMetrics(includeResources?: boolean): Promise; + getA11y(selector?: string): Promise; + getDialogs(): DialogEntry[]; + clearDialogs(): void; + setDialogConfig(config: { + autoAccept?: boolean; + autoDismiss?: boolean; + text?: string; + }): void; + getDialogConfig(): { + autoAccept: boolean; + autoDismiss: boolean; + }; addIntercept(pattern: string, action: 'block' | 'mock', response?: { status?: number; body?: string; contentType?: string; }): Promise; + private handleIntercept; clearIntercepts(): Promise; getInterceptPatterns(): string[]; + getCookies(name?: string): Promise>; + setCookie(name: string, value: string, url?: string): Promise; + deleteCookie(name: string): Promise; + clearCookies(): Promise; + getStorage(type: 'local' | 'session', key?: string): Promise>; + setStorage(type: 'local' | 'session', key: string, value: string): Promise; + deleteStorage(type: 'local' | 'session', key: string): Promise; + clearStorage(type: 'local' | 'session'): Promise; + hover(selector: string): Promise; + select(selector: string, value: string | string[]): Promise; + keys(keys: string): Promise; + upload(selector: string, files: string[]): Promise; + scroll(selector?: string, x?: number, y?: number): Promise; + setViewport(width: number, height: number): Promise<{ + width: number; + height: number; + }>; + emulate(device: string): Promise<{ + width: number; + height: number; + }>; + private handleDialogCommand; + private handleCookiesCommand; + private handleStorageCommand; executeCommand(cmd: BrowserCommand): Promise; } //# sourceMappingURL=browser.d.ts.map \ No newline at end of file diff --git a/dist/browser.d.ts.map b/dist/browser.d.ts.map index 9fd34e7..128d0c7 100644 --- a/dist/browser.d.ts.map +++ b/dist/browser.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/browser.js b/dist/browser.js index 62171aa..ef81bb5 100644 --- a/dist/browser.js +++ b/dist/browser.js @@ -8,6 +8,9 @@ export class ClaudeBrowser { options; consoleMessages = []; networkEntries = []; + pageErrors = []; + dialogHistory = []; + dialogConfig = { autoAccept: false, autoDismiss: false, promptText: '' }; interceptPatterns = new Map(); constructor(options = {}) { this.options = { @@ -27,6 +30,41 @@ export class ClaudeBrowser { this.page = await this.context.newPage(); this.setupConsoleListener(this.page); this.setupNetworkListener(this.page); + this.setupErrorListener(this.page); + this.setupDialogListener(this.page); + } + setupErrorListener(page) { + page.on('pageerror', (error) => { + this.pageErrors.push({ + message: error.message, + stack: error.stack, + timestamp: Date.now(), + }); + }); + } + setupDialogListener(page) { + page.on('dialog', async (dialog) => { + const entry = { + type: dialog.type(), + message: dialog.message(), + defaultValue: dialog.defaultValue() || undefined, + timestamp: Date.now(), + }; + if (this.dialogConfig.autoAccept) { + await dialog.accept(this.dialogConfig.promptText || undefined); + entry.response = this.dialogConfig.promptText || true; + } + else if (this.dialogConfig.autoDismiss) { + await dialog.dismiss(); + entry.response = false; + } + else { + // Default: accept to prevent blocking + await dialog.accept(); + entry.response = true; + } + this.dialogHistory.push(entry); + }); } setupConsoleListener(page) { page.on('console', (msg) => { @@ -180,6 +218,8 @@ export class ClaudeBrowser { this.page = await this.context.newPage(); this.setupConsoleListener(this.page); this.setupNetworkListener(this.page); + this.setupErrorListener(this.page); + this.setupDialogListener(this.page); } async eval(script) { const page = this.ensurePage(); @@ -216,29 +256,142 @@ export class ClaudeBrowser { clearNetwork() { this.networkEntries = []; } + getErrors(clear = false) { + const errors = this.pageErrors; + if (clear) { + this.pageErrors = []; + } + return errors; + } + clearErrors() { + this.pageErrors = []; + } + async getMetrics(includeResources = false) { + const page = this.ensurePage(); + const metricsScript = `(() => { + const timing = performance.timing; + const navigationStart = timing.navigationStart; + const paintEntries = performance.getEntriesByType('paint'); + const firstPaint = paintEntries.find(e => e.name === 'first-paint'); + const fcp = paintEntries.find(e => e.name === 'first-contentful-paint'); + return { + timing: { + domContentLoaded: timing.domContentLoadedEventEnd - navigationStart, + load: timing.loadEventEnd - navigationStart, + firstPaint: firstPaint ? firstPaint.startTime : undefined, + firstContentfulPaint: fcp ? fcp.startTime : undefined, + }, + dom: { + nodes: document.getElementsByTagName('*').length, + scripts: document.getElementsByTagName('script').length, + stylesheets: document.getElementsByTagName('link').length, + images: document.getElementsByTagName('img').length, + }, + }; + })()`; + const metrics = (await page.evaluate(metricsScript)); + if (includeResources) { + const resourcesScript = `(() => { + return performance.getEntriesByType('resource').map(entry => ({ + name: entry.name, + type: entry.initiatorType, + duration: Math.round(entry.duration), + size: entry.transferSize || 0, + })); + })()`; + const resources = (await page.evaluate(resourcesScript)); + return { ...metrics, resources }; + } + return metrics; + } + async getA11y(selector) { + const page = this.ensurePage(); + // Build a11y tree using ARIA attributes and semantic roles + const selectorArg = selector ? JSON.stringify(selector) : 'null'; + const script = `((selector) => { + function getA11yNode(el) { + const role = el.getAttribute('role') || getImplicitRole(el); + const name = getAccessibleName(el); + const node = { role, name: name || undefined }; + const value = el.value || el.getAttribute('aria-valuenow'); + if (value) node.value = String(value); + const desc = el.getAttribute('aria-describedby'); + if (desc) { + const descEl = document.getElementById(desc); + if (descEl) node.description = descEl.textContent?.trim(); + } + const children = []; + for (const child of el.children) { + if (isAccessible(child)) children.push(getA11yNode(child)); + } + if (children.length) node.children = children; + return node; + } + function getImplicitRole(el) { + const tag = el.tagName.toLowerCase(); + const roleMap = { button:'button', a:'link', input:'textbox', img:'img', + h1:'heading', h2:'heading', h3:'heading', h4:'heading', nav:'navigation', + main:'main', footer:'contentinfo', header:'banner', aside:'complementary', + form:'form', table:'table', ul:'list', ol:'list', li:'listitem' }; + return roleMap[tag] || 'generic'; + } + function getAccessibleName(el) { + return el.getAttribute('aria-label') || el.getAttribute('alt') + || el.getAttribute('title') || (el.tagName === 'INPUT' ? el.placeholder : null) + || el.textContent?.trim().slice(0, 100); + } + function isAccessible(el) { + if (el.nodeType !== 1) return false; + if (el.getAttribute('aria-hidden') === 'true') return false; + const style = getComputedStyle(el); + return style.display !== 'none' && style.visibility !== 'hidden'; + } + const root = selector ? document.querySelector(selector) : document.body; + return root ? getA11yNode(root) : null; + })(${selectorArg})`; + return page.evaluate(script); + } + getDialogs() { + return this.dialogHistory; + } + clearDialogs() { + this.dialogHistory = []; + } + setDialogConfig(config) { + if (config.autoAccept !== undefined) + this.dialogConfig.autoAccept = config.autoAccept; + if (config.autoDismiss !== undefined) + this.dialogConfig.autoDismiss = config.autoDismiss; + if (config.text !== undefined) + this.dialogConfig.promptText = config.text; + } + getDialogConfig() { + return { autoAccept: this.dialogConfig.autoAccept, autoDismiss: this.dialogConfig.autoDismiss }; + } async addIntercept(pattern, action, response) { const page = this.ensurePage(); this.interceptPatterns.set(pattern, { action, response }); - await page.route(pattern, async (route) => { - const config = this.interceptPatterns.get(pattern); - if (!config) { - await route.continue(); - return; - } - if (config.action === 'block') { - await route.abort(); - } - else if (config.action === 'mock' && config.response) { - await route.fulfill({ - status: config.response.status || 200, - contentType: config.response.contentType || 'application/json', - body: config.response.body || '', - }); - } - else { - await route.continue(); - } - }); + await page.route(pattern, (route) => this.handleIntercept(pattern, route)); + } + async handleIntercept(pattern, route) { + const config = this.interceptPatterns.get(pattern); + if (!config) { + await route.continue(); + return; + } + if (config.action === 'block') { + await route.abort(); + return; + } + if (config.action === 'mock' && config.response) { + await route.fulfill({ + status: config.response.status || 200, + contentType: config.response.contentType || 'application/json', + body: config.response.body || '', + }); + return; + } + await route.continue(); } async clearIntercepts() { const page = this.ensurePage(); @@ -250,6 +403,177 @@ export class ClaudeBrowser { getInterceptPatterns() { return Array.from(this.interceptPatterns.keys()); } + // Phase 6: Cookies & Storage + async getCookies(name) { + const context = this.getContext(); + if (!context) + throw new Error('Browser not launched'); + const cookies = await context.cookies(); + const filtered = name ? cookies.filter((c) => c.name === name) : cookies; + return filtered.map((c) => ({ name: c.name, value: c.value, domain: c.domain, path: c.path })); + } + async setCookie(name, value, url) { + const context = this.getContext(); + if (!context) + throw new Error('Browser not launched'); + const page = this.ensurePage(); + await context.addCookies([{ name, value, url: url || page.url() }]); + } + async deleteCookie(name) { + const context = this.getContext(); + if (!context) + throw new Error('Browser not launched'); + const cookies = await context.cookies(); + const toKeep = cookies.filter((c) => c.name !== name); + await context.clearCookies(); + if (toKeep.length > 0) + await context.addCookies(toKeep); + } + async clearCookies() { + const context = this.getContext(); + if (!context) + throw new Error('Browser not launched'); + await context.clearCookies(); + } + async getStorage(type, key) { + const page = this.ensurePage(); + const storage = type === 'local' ? 'localStorage' : 'sessionStorage'; + const script = key + ? `({ [${JSON.stringify(key)}]: ${storage}.getItem(${JSON.stringify(key)}) || '' })` + : `Object.fromEntries(Array.from({ length: ${storage}.length }, (_, i) => { + const k = ${storage}.key(i); return [k, ${storage}.getItem(k)]; + }))`; + return page.evaluate(script); + } + async setStorage(type, key, value) { + const page = this.ensurePage(); + const storage = type === 'local' ? 'localStorage' : 'sessionStorage'; + await page.evaluate(`${storage}.setItem(${JSON.stringify(key)}, ${JSON.stringify(value)})`); + } + async deleteStorage(type, key) { + const page = this.ensurePage(); + const storage = type === 'local' ? 'localStorage' : 'sessionStorage'; + await page.evaluate(`${storage}.removeItem(${JSON.stringify(key)})`); + } + async clearStorage(type) { + const page = this.ensurePage(); + const storage = type === 'local' ? 'localStorage' : 'sessionStorage'; + await page.evaluate(`${storage}.clear()`); + } + // Phase 7: Advanced Interactions + async hover(selector) { + const page = this.ensurePage(); + await page.hover(selector); + } + async select(selector, value) { + const page = this.ensurePage(); + return page.selectOption(selector, value); + } + async keys(keys) { + const page = this.ensurePage(); + await page.keyboard.press(keys); + } + async upload(selector, files) { + const page = this.ensurePage(); + await page.setInputFiles(selector, files); + } + async scroll(selector, x, y) { + const page = this.ensurePage(); + if (selector) { + await page.locator(selector).scrollIntoViewIfNeeded(); + } + else { + await page.evaluate(`window.scrollTo(${x || 0}, ${y || 0})`); + } + } + // Phase 8: Viewport & Emulation + async setViewport(width, height) { + const page = this.ensurePage(); + await page.setViewportSize({ width, height }); + return { width, height }; + } + async emulate(device) { + const page = this.ensurePage(); + const { devices } = await import('playwright'); + const deviceConfig = devices[device]; + if (!deviceConfig) + throw new Error(`Unknown device: ${device}. Try 'iPhone 13', 'Pixel 5', etc.`); + await page.setViewportSize(deviceConfig.viewport); + return deviceConfig.viewport; + } + handleDialogCommand(cmd) { + switch (cmd.action) { + case 'status': + return { ok: true, dialogs: this.getDialogs(), dialogConfig: this.getDialogConfig() }; + case 'accept': + this.setDialogConfig({ autoAccept: true, autoDismiss: false, text: cmd.text }); + return { ok: true, dialogConfig: this.getDialogConfig() }; + case 'dismiss': + this.setDialogConfig({ autoAccept: false, autoDismiss: true }); + return { ok: true, dialogConfig: this.getDialogConfig() }; + case 'config': + this.setDialogConfig({ + autoAccept: cmd.autoAccept, + autoDismiss: cmd.autoDismiss, + text: cmd.text, + }); + return { ok: true, dialogConfig: this.getDialogConfig() }; + default: + return { ok: false, error: 'Unknown dialog action' }; + } + } + async handleCookiesCommand(cmd) { + switch (cmd.action) { + case 'get': { + const cookies = await this.getCookies(cmd.name); + return { ok: true, cookies, count: cookies.length }; + } + case 'set': { + if (!cmd.name || !cmd.value) + return { ok: false, error: 'Name and value required' }; + await this.setCookie(cmd.name, cmd.value, cmd.url); + return { ok: true }; + } + case 'delete': { + if (!cmd.name) + return { ok: false, error: 'Name required' }; + await this.deleteCookie(cmd.name); + return { ok: true }; + } + case 'clear': { + await this.clearCookies(); + return { ok: true }; + } + default: + return { ok: false, error: 'Unknown cookies action' }; + } + } + async handleStorageCommand(cmd) { + switch (cmd.action) { + case 'get': { + const storage = await this.getStorage(cmd.type, cmd.key); + return { ok: true, storage, count: Object.keys(storage).length }; + } + case 'set': { + if (!cmd.key || cmd.value === undefined) + return { ok: false, error: 'Key and value required' }; + await this.setStorage(cmd.type, cmd.key, cmd.value); + return { ok: true }; + } + case 'delete': { + if (!cmd.key) + return { ok: false, error: 'Key required' }; + await this.deleteStorage(cmd.type, cmd.key); + return { ok: true }; + } + case 'clear': { + await this.clearStorage(cmd.type); + return { ok: true }; + } + default: + return { ok: false, error: 'Unknown storage action' }; + } + } async executeCommand(cmd) { try { switch (cmd.cmd) { @@ -332,6 +656,52 @@ export class ClaudeBrowser { await this.addIntercept(cmd.pattern, cmd.action, cmd.response); return { ok: true, patterns: this.getInterceptPatterns() }; } + case 'errors': { + const errors = this.getErrors(cmd.clear); + return { ok: true, count: errors.length, errors }; + } + case 'metrics': { + const metrics = await this.getMetrics(cmd.resources); + return { ok: true, metrics }; + } + case 'a11y': { + const a11y = await this.getA11y(cmd.selector); + return { ok: true, a11y: a11y || undefined }; + } + case 'dialog': + return this.handleDialogCommand(cmd); + case 'cookies': + return this.handleCookiesCommand(cmd); + case 'storage': + return this.handleStorageCommand(cmd); + case 'hover': { + await this.hover(cmd.selector); + return { ok: true }; + } + case 'select': { + const selected = await this.select(cmd.selector, cmd.value); + return { ok: true, selected }; + } + case 'keys': { + await this.keys(cmd.keys); + return { ok: true }; + } + case 'upload': { + await this.upload(cmd.selector, cmd.files); + return { ok: true }; + } + case 'scroll': { + await this.scroll(cmd.selector, cmd.x, cmd.y); + return { ok: true }; + } + case 'viewport': { + const viewport = await this.setViewport(cmd.width, cmd.height); + return { ok: true, viewport }; + } + case 'emulate': { + const viewport = await this.emulate(cmd.device); + return { ok: true, viewport }; + } case 'favicon': { const result = await image.createFavicon(cmd.input, cmd.outputDir); return { ok: true, files: result.files, outputDir: result.outputDir }; diff --git a/dist/browser.js.map b/dist/browser.js.map index 78427a8..e8db28e 100644 --- a/dist/browser.js.map +++ b/dist/browser.js.map @@ -1 +1 @@ -{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/mcp.js b/dist/mcp.js index fc7281d..cf9a2d5 100755 --- a/dist/mcp.js +++ b/dist/mcp.js @@ -162,6 +162,141 @@ server.tool('intercept', 'Block or mock network requests matching a pattern', { await browser.addIntercept(pattern, action, response); return textResult(JSON.stringify({ ok: true, action, pattern, patterns: browser.getInterceptPatterns() })); })); +// Page errors +server.tool('errors', 'Get captured page errors (uncaught exceptions and unhandled promise rejections)', { + clear: z.boolean().optional().default(false).describe('Clear errors after retrieving'), +}, withLogging('errors', async ({ clear }) => { + await ensureLaunched(); + const errors = browser.getErrors(clear); + return textResult(JSON.stringify({ ok: true, count: errors.length, errors })); +})); +// Performance metrics +server.tool('metrics', 'Get page performance metrics and DOM statistics', { + resources: z + .boolean() + .optional() + .default(false) + .describe('Include individual resource timing entries'), +}, withLogging('metrics', async ({ resources }) => { + await ensureLaunched(); + const metrics = await browser.getMetrics(resources); + return textResult(JSON.stringify({ ok: true, metrics })); +})); +// Accessibility +server.tool('a11y', 'Get accessibility tree snapshot for the page or a specific element', { + selector: z.string().optional().describe('CSS selector to get subtree for specific element'), +}, withLogging('a11y', async ({ selector }) => { + await ensureLaunched(); + const a11y = await browser.getA11y(selector); + return textResult(JSON.stringify({ ok: true, a11y })); +})); +// Dialog handling +server.tool('dialog', 'Configure how browser dialogs (alert, confirm, prompt) are handled', { + action: z + .enum(['status', 'accept', 'dismiss', 'config']) + .describe('Action: status (get history), accept (auto-accept), dismiss (auto-dismiss), config (set both)'), + text: z.string().optional().describe('Text to enter for prompt dialogs when accepting'), + autoAccept: z.boolean().optional().describe('Auto-accept dialogs (for config action)'), + autoDismiss: z.boolean().optional().describe('Auto-dismiss dialogs (for config action)'), +}, withLogging('dialog', async ({ action, text, autoAccept, autoDismiss }) => { + await ensureLaunched(); + if (action === 'status') { + return textResult(JSON.stringify({ + ok: true, + dialogs: browser.getDialogs(), + config: browser.getDialogConfig(), + })); + } + if (action === 'accept') { + browser.setDialogConfig({ autoAccept: true, autoDismiss: false, text }); + return textResult(JSON.stringify({ ok: true, config: browser.getDialogConfig() })); + } + if (action === 'dismiss') { + browser.setDialogConfig({ autoAccept: false, autoDismiss: true }); + return textResult(JSON.stringify({ ok: true, config: browser.getDialogConfig() })); + } + browser.setDialogConfig({ autoAccept, autoDismiss, text }); + return textResult(JSON.stringify({ ok: true, config: browser.getDialogConfig() })); +})); +// Cookies +server.tool('cookies', 'Get, set, delete, or clear browser cookies', { + action: z.enum(['get', 'set', 'delete', 'clear']).describe('Action to perform'), + name: z.string().optional().describe('Cookie name (for get/set/delete)'), + value: z.string().optional().describe('Cookie value (for set)'), + url: z.string().optional().describe('URL for cookie (for set, defaults to current page)'), +}, withLogging('cookies', async ({ action, name, value, url }) => { + await ensureLaunched(); + const result = await browser.executeCommand({ cmd: 'cookies', action, name, value, url }); + return textResult(JSON.stringify(result)); +})); +// Storage +server.tool('storage', 'Get, set, delete, or clear localStorage or sessionStorage', { + type: z.enum(['local', 'session']).describe('Storage type'), + action: z.enum(['get', 'set', 'delete', 'clear']).describe('Action to perform'), + key: z.string().optional().describe('Storage key'), + value: z.string().optional().describe('Value to set'), +}, withLogging('storage', async ({ type, action, key, value }) => { + await ensureLaunched(); + const result = await browser.executeCommand({ cmd: 'storage', type, action, key, value }); + return textResult(JSON.stringify(result)); +})); +// Hover +server.tool('hover', 'Hover over an element to trigger hover states', { selector: z.string().describe('CSS selector of element to hover') }, withLogging('hover', async ({ selector }) => { + await ensureLaunched(); + await browser.hover(selector); + return textResult(JSON.stringify({ ok: true })); +})); +// Select +server.tool('select', 'Select option(s) in a dropdown/select element', { + selector: z.string().describe('CSS selector of select element'), + value: z.union([z.string(), z.array(z.string())]).describe('Value(s) to select'), +}, withLogging('select', async ({ selector, value }) => { + await ensureLaunched(); + const selected = await browser.select(selector, value); + return textResult(JSON.stringify({ ok: true, selected })); +})); +// Keys +server.tool('keys', 'Send keyboard keys or shortcuts (e.g., "Enter", "Control+a", "Escape")', { keys: z.string().describe('Key or key combination to press') }, withLogging('keys', async ({ keys }) => { + await ensureLaunched(); + await browser.keys(keys); + return textResult(JSON.stringify({ ok: true })); +})); +// Upload +server.tool('upload', 'Upload files to a file input element', { + selector: z.string().describe('CSS selector of file input'), + files: z.array(z.string()).describe('Array of file paths to upload'), +}, withLogging('upload', async ({ selector, files }) => { + await ensureLaunched(); + await browser.upload(selector, files); + return textResult(JSON.stringify({ ok: true })); +})); +// Scroll +server.tool('scroll', 'Scroll the page or an element into view', { + selector: z.string().optional().describe('CSS selector to scroll into view'), + x: z.number().optional().describe('X position to scroll to (if no selector)'), + y: z.number().optional().describe('Y position to scroll to (if no selector)'), +}, withLogging('scroll', async ({ selector, x, y }) => { + await ensureLaunched(); + await browser.scroll(selector, x, y); + return textResult(JSON.stringify({ ok: true })); +})); +// Viewport +server.tool('viewport', 'Resize the browser viewport', { + width: z.number().describe('Viewport width in pixels'), + height: z.number().describe('Viewport height in pixels'), +}, withLogging('viewport', async ({ width, height }) => { + await ensureLaunched(); + const viewport = await browser.setViewport(width, height); + return textResult(JSON.stringify({ ok: true, viewport })); +})); +// Emulate +server.tool('emulate', 'Emulate a mobile device (viewport, user agent, touch)', { + device: z.string().describe('Device name (e.g., "iPhone 13", "Pixel 5", "iPad Pro")'), +}, withLogging('emulate', async ({ device }) => { + await ensureLaunched(); + const viewport = await browser.emulate(device); + return textResult(JSON.stringify({ ok: true, device, viewport })); +})); // Utility server.tool('wait', 'Wait for a specified time in milliseconds', { ms: z.number().optional().default(1000) }, withLogging('wait', async ({ ms }) => { await ensureLaunched(); @@ -468,6 +603,57 @@ server.resource('Failed Requests', 'browser://network/failed', { ], }; }); +// Resource: browser://errors - Captured page errors +server.resource('Page Errors', 'browser://errors', { + description: 'Uncaught exceptions and unhandled promise rejections', + mimeType: 'application/json', +}, async () => { + if (!launched) { + return { + contents: [ + { + uri: 'browser://errors', + mimeType: 'application/json', + text: JSON.stringify({ launched: false, errors: [] }), + }, + ], + }; + } + const errors = browser.getErrors(false); + return { + contents: [ + { + uri: 'browser://errors', + mimeType: 'application/json', + text: JSON.stringify({ launched: true, count: errors.length, errors }), + }, + ], + }; +}); +// Resource: browser://a11y - Accessibility tree snapshot +server.resource('Accessibility Tree', 'browser://a11y', { description: 'Accessibility tree snapshot of the current page', mimeType: 'application/json' }, async () => { + if (!launched) { + return { + contents: [ + { + uri: 'browser://a11y', + mimeType: 'application/json', + text: JSON.stringify({ launched: false, a11y: null }), + }, + ], + }; + } + const a11y = await browser.getA11y(); + return { + contents: [ + { + uri: 'browser://a11y', + mimeType: 'application/json', + text: JSON.stringify({ launched: true, a11y }), + }, + ], + }; +}); // Resource: browser://screenshot - Current page screenshot (base64) server.resource('Page Screenshot', 'browser://screenshot', { description: 'Screenshot of the current page as base64 PNG', mimeType: 'image/png' }, async () => { if (!launched) { diff --git a/dist/mcp.js.map b/dist/mcp.js.map index bffe438..523c65a 100644 --- a/dist/mcp.js.map +++ b/dist/mcp.js.map @@ -1 +1 @@ -{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/types.d.ts b/dist/types.d.ts index 80936e7..d9978dc 100644 --- a/dist/types.d.ts +++ b/dist/types.d.ts @@ -142,7 +142,114 @@ export interface InterceptCommand { contentType?: string; }; } -export type BrowserCommand = GotoCommand | ClickCommand | TypeCommand | QueryCommand | ScreenshotCommand | UrlCommand | HtmlCommand | BackCommand | ForwardCommand | ReloadCommand | WaitCommand | NewPageCommand | CloseCommand | EvalCommand | FaviconCommand | ConvertCommand | ResizeCommand | CropCommand | CompressCommand | ThumbnailCommand | ConsoleCommand | NetworkCommand | InterceptCommand; +export interface PageError { + message: string; + stack?: string; + timestamp: number; +} +export interface ErrorsCommand { + cmd: 'errors'; + clear?: boolean; +} +export interface MetricsData { + timing: { + domContentLoaded?: number; + load?: number; + firstPaint?: number; + firstContentfulPaint?: number; + }; + dom: { + nodes: number; + scripts: number; + stylesheets: number; + images: number; + }; + resources?: Array<{ + name: string; + type: string; + duration: number; + size: number; + }>; +} +export interface MetricsCommand { + cmd: 'metrics'; + resources?: boolean; +} +export interface A11yNode { + role: string; + name?: string; + value?: string; + description?: string; + children?: A11yNode[]; +} +export interface A11yCommand { + cmd: 'a11y'; + selector?: string; +} +export interface DialogEntry { + type: 'alert' | 'confirm' | 'prompt' | 'beforeunload'; + message: string; + defaultValue?: string; + response?: string | boolean; + timestamp: number; +} +export interface DialogCommand { + cmd: 'dialog'; + action: 'status' | 'accept' | 'dismiss' | 'config'; + text?: string; + autoAccept?: boolean; + autoDismiss?: boolean; +} +export interface CookiesCommand { + cmd: 'cookies'; + action: 'get' | 'set' | 'delete' | 'clear'; + name?: string; + value?: string; + domain?: string; + path?: string; + url?: string; +} +export interface StorageCommand { + cmd: 'storage'; + type: 'local' | 'session'; + action: 'get' | 'set' | 'delete' | 'clear'; + key?: string; + value?: string; +} +export interface HoverCommand { + cmd: 'hover'; + selector: string; +} +export interface SelectCommand { + cmd: 'select'; + selector: string; + value: string | string[]; +} +export interface KeysCommand { + cmd: 'keys'; + keys: string; +} +export interface UploadCommand { + cmd: 'upload'; + selector: string; + files: string[]; +} +export interface ScrollCommand { + cmd: 'scroll'; + selector?: string; + x?: number; + y?: number; +} +export interface ViewportCommand { + cmd: 'viewport'; + width: number; + height: number; +} +export interface EmulateCommand { + cmd: 'emulate'; + device: string; +} +export type BrowserCommand = GotoCommand | ClickCommand | TypeCommand | QueryCommand | ScreenshotCommand | UrlCommand | HtmlCommand | BackCommand | ForwardCommand | ReloadCommand | WaitCommand | NewPageCommand | CloseCommand | EvalCommand | FaviconCommand | ConvertCommand | ResizeCommand | CropCommand | CompressCommand | ThumbnailCommand | ConsoleCommand | NetworkCommand | InterceptCommand | ErrorsCommand | MetricsCommand | A11yCommand | DialogCommand | CookiesCommand | StorageCommand | HoverCommand | SelectCommand | KeysCommand | UploadCommand | ScrollCommand | ViewportCommand | EmulateCommand; export interface SuccessResponse { ok: true; url?: string; @@ -161,6 +268,26 @@ export interface SuccessResponse { messages?: ConsoleMessage[]; requests?: NetworkEntry[]; patterns?: string[]; + errors?: PageError[]; + metrics?: MetricsData; + a11y?: A11yNode; + dialogs?: DialogEntry[]; + dialogConfig?: { + autoAccept: boolean; + autoDismiss: boolean; + }; + cookies?: Array<{ + name: string; + value: string; + domain: string; + path: string; + }>; + storage?: Record; + viewport?: { + width: number; + height: number; + }; + selected?: string[]; } export interface ErrorResponse { ok: false; diff --git a/dist/types.d.ts.map b/dist/types.d.ts.map index 4e26387..5063b8b 100644 --- a/dist/types.d.ts.map +++ b/dist/types.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/browser.ts b/src/browser.ts index c90b058..e616ef5 100644 --- a/src/browser.ts +++ b/src/browser.ts @@ -2,12 +2,19 @@ import { resolve } from 'node:path'; import { type Browser, type BrowserContext, type Page, type Route, webkit } from 'playwright'; import * as image from './image.js'; import type { + A11yNode, BrowserCommand, BrowserOptions, CommandResponse, ConsoleMessage, + CookiesCommand, + DialogCommand, + DialogEntry, ElementInfo, + MetricsData, NetworkEntry, + PageError, + StorageCommand, } from './types.js'; export class ClaudeBrowser { @@ -17,6 +24,9 @@ export class ClaudeBrowser { private options: Required; private consoleMessages: ConsoleMessage[] = []; private networkEntries: NetworkEntry[] = []; + private pageErrors: PageError[] = []; + private dialogHistory: DialogEntry[] = []; + private dialogConfig = { autoAccept: false, autoDismiss: false, promptText: '' }; private interceptPatterns: Map< string, { @@ -44,6 +54,43 @@ export class ClaudeBrowser { this.page = await this.context.newPage(); this.setupConsoleListener(this.page); this.setupNetworkListener(this.page); + this.setupErrorListener(this.page); + this.setupDialogListener(this.page); + } + + private setupErrorListener(page: Page): void { + page.on('pageerror', (error) => { + this.pageErrors.push({ + message: error.message, + stack: error.stack, + timestamp: Date.now(), + }); + }); + } + + private setupDialogListener(page: Page): void { + page.on('dialog', async (dialog) => { + const entry: DialogEntry = { + type: dialog.type() as DialogEntry['type'], + message: dialog.message(), + defaultValue: dialog.defaultValue() || undefined, + timestamp: Date.now(), + }; + + if (this.dialogConfig.autoAccept) { + await dialog.accept(this.dialogConfig.promptText || undefined); + entry.response = this.dialogConfig.promptText || true; + } else if (this.dialogConfig.autoDismiss) { + await dialog.dismiss(); + entry.response = false; + } else { + // Default: accept to prevent blocking + await dialog.accept(); + entry.response = true; + } + + this.dialogHistory.push(entry); + }); } private setupConsoleListener(page: Page): void { @@ -219,6 +266,8 @@ export class ClaudeBrowser { this.page = await this.context.newPage(); this.setupConsoleListener(this.page); this.setupNetworkListener(this.page); + this.setupErrorListener(this.page); + this.setupDialogListener(this.page); } async eval(script: string): Promise { @@ -260,6 +309,129 @@ export class ClaudeBrowser { this.networkEntries = []; } + getErrors(clear = false): PageError[] { + const errors = this.pageErrors; + if (clear) { + this.pageErrors = []; + } + return errors; + } + + clearErrors(): void { + this.pageErrors = []; + } + + async getMetrics(includeResources = false): Promise { + const page = this.ensurePage(); + + const metricsScript = `(() => { + const timing = performance.timing; + const navigationStart = timing.navigationStart; + const paintEntries = performance.getEntriesByType('paint'); + const firstPaint = paintEntries.find(e => e.name === 'first-paint'); + const fcp = paintEntries.find(e => e.name === 'first-contentful-paint'); + return { + timing: { + domContentLoaded: timing.domContentLoadedEventEnd - navigationStart, + load: timing.loadEventEnd - navigationStart, + firstPaint: firstPaint ? firstPaint.startTime : undefined, + firstContentfulPaint: fcp ? fcp.startTime : undefined, + }, + dom: { + nodes: document.getElementsByTagName('*').length, + scripts: document.getElementsByTagName('script').length, + stylesheets: document.getElementsByTagName('link').length, + images: document.getElementsByTagName('img').length, + }, + }; + })()`; + + const metrics = (await page.evaluate(metricsScript)) as MetricsData; + + if (includeResources) { + const resourcesScript = `(() => { + return performance.getEntriesByType('resource').map(entry => ({ + name: entry.name, + type: entry.initiatorType, + duration: Math.round(entry.duration), + size: entry.transferSize || 0, + })); + })()`; + const resources = (await page.evaluate(resourcesScript)) as MetricsData['resources']; + return { ...metrics, resources }; + } + + return metrics; + } + + async getA11y(selector?: string): Promise { + const page = this.ensurePage(); + + // Build a11y tree using ARIA attributes and semantic roles + const selectorArg = selector ? JSON.stringify(selector) : 'null'; + const script = `((selector) => { + function getA11yNode(el) { + const role = el.getAttribute('role') || getImplicitRole(el); + const name = getAccessibleName(el); + const node = { role, name: name || undefined }; + const value = el.value || el.getAttribute('aria-valuenow'); + if (value) node.value = String(value); + const desc = el.getAttribute('aria-describedby'); + if (desc) { + const descEl = document.getElementById(desc); + if (descEl) node.description = descEl.textContent?.trim(); + } + const children = []; + for (const child of el.children) { + if (isAccessible(child)) children.push(getA11yNode(child)); + } + if (children.length) node.children = children; + return node; + } + function getImplicitRole(el) { + const tag = el.tagName.toLowerCase(); + const roleMap = { button:'button', a:'link', input:'textbox', img:'img', + h1:'heading', h2:'heading', h3:'heading', h4:'heading', nav:'navigation', + main:'main', footer:'contentinfo', header:'banner', aside:'complementary', + form:'form', table:'table', ul:'list', ol:'list', li:'listitem' }; + return roleMap[tag] || 'generic'; + } + function getAccessibleName(el) { + return el.getAttribute('aria-label') || el.getAttribute('alt') + || el.getAttribute('title') || (el.tagName === 'INPUT' ? el.placeholder : null) + || el.textContent?.trim().slice(0, 100); + } + function isAccessible(el) { + if (el.nodeType !== 1) return false; + if (el.getAttribute('aria-hidden') === 'true') return false; + const style = getComputedStyle(el); + return style.display !== 'none' && style.visibility !== 'hidden'; + } + const root = selector ? document.querySelector(selector) : document.body; + return root ? getA11yNode(root) : null; + })(${selectorArg})`; + + return page.evaluate(script) as Promise; + } + + getDialogs(): DialogEntry[] { + return this.dialogHistory; + } + + clearDialogs(): void { + this.dialogHistory = []; + } + + setDialogConfig(config: { autoAccept?: boolean; autoDismiss?: boolean; text?: string }): void { + if (config.autoAccept !== undefined) this.dialogConfig.autoAccept = config.autoAccept; + if (config.autoDismiss !== undefined) this.dialogConfig.autoDismiss = config.autoDismiss; + if (config.text !== undefined) this.dialogConfig.promptText = config.text; + } + + getDialogConfig(): { autoAccept: boolean; autoDismiss: boolean } { + return { autoAccept: this.dialogConfig.autoAccept, autoDismiss: this.dialogConfig.autoDismiss }; + } + async addIntercept( pattern: string, action: 'block' | 'mock', @@ -303,6 +475,188 @@ export class ClaudeBrowser { return Array.from(this.interceptPatterns.keys()); } + // Phase 6: Cookies & Storage + async getCookies( + name?: string + ): Promise> { + const context = this.getContext(); + if (!context) throw new Error('Browser not launched'); + const cookies = await context.cookies(); + const filtered = name ? cookies.filter((c) => c.name === name) : cookies; + return filtered.map((c) => ({ name: c.name, value: c.value, domain: c.domain, path: c.path })); + } + + async setCookie(name: string, value: string, url?: string): Promise { + const context = this.getContext(); + if (!context) throw new Error('Browser not launched'); + const page = this.ensurePage(); + await context.addCookies([{ name, value, url: url || page.url() }]); + } + + async deleteCookie(name: string): Promise { + const context = this.getContext(); + if (!context) throw new Error('Browser not launched'); + const cookies = await context.cookies(); + const toKeep = cookies.filter((c) => c.name !== name); + await context.clearCookies(); + if (toKeep.length > 0) await context.addCookies(toKeep); + } + + async clearCookies(): Promise { + const context = this.getContext(); + if (!context) throw new Error('Browser not launched'); + await context.clearCookies(); + } + + async getStorage(type: 'local' | 'session', key?: string): Promise> { + const page = this.ensurePage(); + const storage = type === 'local' ? 'localStorage' : 'sessionStorage'; + const script = key + ? `({ [${JSON.stringify(key)}]: ${storage}.getItem(${JSON.stringify(key)}) || '' })` + : `Object.fromEntries(Array.from({ length: ${storage}.length }, (_, i) => { + const k = ${storage}.key(i); return [k, ${storage}.getItem(k)]; + }))`; + return page.evaluate(script) as Promise>; + } + + async setStorage(type: 'local' | 'session', key: string, value: string): Promise { + const page = this.ensurePage(); + const storage = type === 'local' ? 'localStorage' : 'sessionStorage'; + await page.evaluate(`${storage}.setItem(${JSON.stringify(key)}, ${JSON.stringify(value)})`); + } + + async deleteStorage(type: 'local' | 'session', key: string): Promise { + const page = this.ensurePage(); + const storage = type === 'local' ? 'localStorage' : 'sessionStorage'; + await page.evaluate(`${storage}.removeItem(${JSON.stringify(key)})`); + } + + async clearStorage(type: 'local' | 'session'): Promise { + const page = this.ensurePage(); + const storage = type === 'local' ? 'localStorage' : 'sessionStorage'; + await page.evaluate(`${storage}.clear()`); + } + + // Phase 7: Advanced Interactions + async hover(selector: string): Promise { + const page = this.ensurePage(); + await page.hover(selector); + } + + async select(selector: string, value: string | string[]): Promise { + const page = this.ensurePage(); + return page.selectOption(selector, value); + } + + async keys(keys: string): Promise { + const page = this.ensurePage(); + await page.keyboard.press(keys); + } + + async upload(selector: string, files: string[]): Promise { + const page = this.ensurePage(); + await page.setInputFiles(selector, files); + } + + async scroll(selector?: string, x?: number, y?: number): Promise { + const page = this.ensurePage(); + if (selector) { + await page.locator(selector).scrollIntoViewIfNeeded(); + } else { + await page.evaluate(`window.scrollTo(${x || 0}, ${y || 0})`); + } + } + + // Phase 8: Viewport & Emulation + async setViewport(width: number, height: number): Promise<{ width: number; height: number }> { + const page = this.ensurePage(); + await page.setViewportSize({ width, height }); + return { width, height }; + } + + async emulate(device: string): Promise<{ width: number; height: number }> { + const page = this.ensurePage(); + const { devices } = await import('playwright'); + const deviceConfig = devices[device]; + if (!deviceConfig) + throw new Error(`Unknown device: ${device}. Try 'iPhone 13', 'Pixel 5', etc.`); + await page.setViewportSize(deviceConfig.viewport); + return deviceConfig.viewport; + } + + private handleDialogCommand(cmd: DialogCommand): CommandResponse { + switch (cmd.action) { + case 'status': + return { ok: true, dialogs: this.getDialogs(), dialogConfig: this.getDialogConfig() }; + case 'accept': + this.setDialogConfig({ autoAccept: true, autoDismiss: false, text: cmd.text }); + return { ok: true, dialogConfig: this.getDialogConfig() }; + case 'dismiss': + this.setDialogConfig({ autoAccept: false, autoDismiss: true }); + return { ok: true, dialogConfig: this.getDialogConfig() }; + case 'config': + this.setDialogConfig({ + autoAccept: cmd.autoAccept, + autoDismiss: cmd.autoDismiss, + text: cmd.text, + }); + return { ok: true, dialogConfig: this.getDialogConfig() }; + default: + return { ok: false, error: 'Unknown dialog action' }; + } + } + + private async handleCookiesCommand(cmd: CookiesCommand): Promise { + switch (cmd.action) { + case 'get': { + const cookies = await this.getCookies(cmd.name); + return { ok: true, cookies, count: cookies.length }; + } + case 'set': { + if (!cmd.name || !cmd.value) return { ok: false, error: 'Name and value required' }; + await this.setCookie(cmd.name, cmd.value, cmd.url); + return { ok: true }; + } + case 'delete': { + if (!cmd.name) return { ok: false, error: 'Name required' }; + await this.deleteCookie(cmd.name); + return { ok: true }; + } + case 'clear': { + await this.clearCookies(); + return { ok: true }; + } + default: + return { ok: false, error: 'Unknown cookies action' }; + } + } + + private async handleStorageCommand(cmd: StorageCommand): Promise { + switch (cmd.action) { + case 'get': { + const storage = await this.getStorage(cmd.type, cmd.key); + return { ok: true, storage, count: Object.keys(storage).length }; + } + case 'set': { + if (!cmd.key || cmd.value === undefined) + return { ok: false, error: 'Key and value required' }; + await this.setStorage(cmd.type, cmd.key, cmd.value); + return { ok: true }; + } + case 'delete': { + if (!cmd.key) return { ok: false, error: 'Key required' }; + await this.deleteStorage(cmd.type, cmd.key); + return { ok: true }; + } + case 'clear': { + await this.clearStorage(cmd.type); + return { ok: true }; + } + default: + return { ok: false, error: 'Unknown storage action' }; + } + } + async executeCommand(cmd: BrowserCommand): Promise { try { switch (cmd.cmd) { @@ -385,6 +739,52 @@ export class ClaudeBrowser { await this.addIntercept(cmd.pattern, cmd.action, cmd.response); return { ok: true, patterns: this.getInterceptPatterns() }; } + case 'errors': { + const errors = this.getErrors(cmd.clear); + return { ok: true, count: errors.length, errors }; + } + case 'metrics': { + const metrics = await this.getMetrics(cmd.resources); + return { ok: true, metrics }; + } + case 'a11y': { + const a11y = await this.getA11y(cmd.selector); + return { ok: true, a11y: a11y || undefined }; + } + case 'dialog': + return this.handleDialogCommand(cmd); + case 'cookies': + return this.handleCookiesCommand(cmd); + case 'storage': + return this.handleStorageCommand(cmd); + case 'hover': { + await this.hover(cmd.selector); + return { ok: true }; + } + case 'select': { + const selected = await this.select(cmd.selector, cmd.value); + return { ok: true, selected }; + } + case 'keys': { + await this.keys(cmd.keys); + return { ok: true }; + } + case 'upload': { + await this.upload(cmd.selector, cmd.files); + return { ok: true }; + } + case 'scroll': { + await this.scroll(cmd.selector, cmd.x, cmd.y); + return { ok: true }; + } + case 'viewport': { + const viewport = await this.setViewport(cmd.width, cmd.height); + return { ok: true, viewport }; + } + case 'emulate': { + const viewport = await this.emulate(cmd.device); + return { ok: true, viewport }; + } case 'favicon': { const result = await image.createFavicon(cmd.input, cmd.outputDir); return { ok: true, files: result.files, outputDir: result.outputDir }; diff --git a/src/mcp.ts b/src/mcp.ts index 2044fad..4d6a4fa 100644 --- a/src/mcp.ts +++ b/src/mcp.ts @@ -259,6 +259,223 @@ server.tool( }) ); +// Page errors +server.tool( + 'errors', + 'Get captured page errors (uncaught exceptions and unhandled promise rejections)', + { + clear: z.boolean().optional().default(false).describe('Clear errors after retrieving'), + }, + withLogging('errors', async ({ clear }) => { + await ensureLaunched(); + const errors = browser.getErrors(clear); + return textResult(JSON.stringify({ ok: true, count: errors.length, errors })); + }) +); + +// Performance metrics +server.tool( + 'metrics', + 'Get page performance metrics and DOM statistics', + { + resources: z + .boolean() + .optional() + .default(false) + .describe('Include individual resource timing entries'), + }, + withLogging('metrics', async ({ resources }) => { + await ensureLaunched(); + const metrics = await browser.getMetrics(resources); + return textResult(JSON.stringify({ ok: true, metrics })); + }) +); + +// Accessibility +server.tool( + 'a11y', + 'Get accessibility tree snapshot for the page or a specific element', + { + selector: z.string().optional().describe('CSS selector to get subtree for specific element'), + }, + withLogging('a11y', async ({ selector }) => { + await ensureLaunched(); + const a11y = await browser.getA11y(selector); + return textResult(JSON.stringify({ ok: true, a11y })); + }) +); + +// Dialog handling +server.tool( + 'dialog', + 'Configure how browser dialogs (alert, confirm, prompt) are handled', + { + action: z + .enum(['status', 'accept', 'dismiss', 'config']) + .describe( + 'Action: status (get history), accept (auto-accept), dismiss (auto-dismiss), config (set both)' + ), + text: z.string().optional().describe('Text to enter for prompt dialogs when accepting'), + autoAccept: z.boolean().optional().describe('Auto-accept dialogs (for config action)'), + autoDismiss: z.boolean().optional().describe('Auto-dismiss dialogs (for config action)'), + }, + withLogging('dialog', async ({ action, text, autoAccept, autoDismiss }) => { + await ensureLaunched(); + if (action === 'status') { + return textResult( + JSON.stringify({ + ok: true, + dialogs: browser.getDialogs(), + config: browser.getDialogConfig(), + }) + ); + } + if (action === 'accept') { + browser.setDialogConfig({ autoAccept: true, autoDismiss: false, text }); + return textResult(JSON.stringify({ ok: true, config: browser.getDialogConfig() })); + } + if (action === 'dismiss') { + browser.setDialogConfig({ autoAccept: false, autoDismiss: true }); + return textResult(JSON.stringify({ ok: true, config: browser.getDialogConfig() })); + } + browser.setDialogConfig({ autoAccept, autoDismiss, text }); + return textResult(JSON.stringify({ ok: true, config: browser.getDialogConfig() })); + }) +); + +// Cookies +server.tool( + 'cookies', + 'Get, set, delete, or clear browser cookies', + { + action: z.enum(['get', 'set', 'delete', 'clear']).describe('Action to perform'), + name: z.string().optional().describe('Cookie name (for get/set/delete)'), + value: z.string().optional().describe('Cookie value (for set)'), + url: z.string().optional().describe('URL for cookie (for set, defaults to current page)'), + }, + withLogging('cookies', async ({ action, name, value, url }) => { + await ensureLaunched(); + const result = await browser.executeCommand({ cmd: 'cookies', action, name, value, url }); + return textResult(JSON.stringify(result)); + }) +); + +// Storage +server.tool( + 'storage', + 'Get, set, delete, or clear localStorage or sessionStorage', + { + type: z.enum(['local', 'session']).describe('Storage type'), + action: z.enum(['get', 'set', 'delete', 'clear']).describe('Action to perform'), + key: z.string().optional().describe('Storage key'), + value: z.string().optional().describe('Value to set'), + }, + withLogging('storage', async ({ type, action, key, value }) => { + await ensureLaunched(); + const result = await browser.executeCommand({ cmd: 'storage', type, action, key, value }); + return textResult(JSON.stringify(result)); + }) +); + +// Hover +server.tool( + 'hover', + 'Hover over an element to trigger hover states', + { selector: z.string().describe('CSS selector of element to hover') }, + withLogging('hover', async ({ selector }) => { + await ensureLaunched(); + await browser.hover(selector); + return textResult(JSON.stringify({ ok: true })); + }) +); + +// Select +server.tool( + 'select', + 'Select option(s) in a dropdown/select element', + { + selector: z.string().describe('CSS selector of select element'), + value: z.union([z.string(), z.array(z.string())]).describe('Value(s) to select'), + }, + withLogging('select', async ({ selector, value }) => { + await ensureLaunched(); + const selected = await browser.select(selector, value); + return textResult(JSON.stringify({ ok: true, selected })); + }) +); + +// Keys +server.tool( + 'keys', + 'Send keyboard keys or shortcuts (e.g., "Enter", "Control+a", "Escape")', + { keys: z.string().describe('Key or key combination to press') }, + withLogging('keys', async ({ keys }) => { + await ensureLaunched(); + await browser.keys(keys); + return textResult(JSON.stringify({ ok: true })); + }) +); + +// Upload +server.tool( + 'upload', + 'Upload files to a file input element', + { + selector: z.string().describe('CSS selector of file input'), + files: z.array(z.string()).describe('Array of file paths to upload'), + }, + withLogging('upload', async ({ selector, files }) => { + await ensureLaunched(); + await browser.upload(selector, files); + return textResult(JSON.stringify({ ok: true })); + }) +); + +// Scroll +server.tool( + 'scroll', + 'Scroll the page or an element into view', + { + selector: z.string().optional().describe('CSS selector to scroll into view'), + x: z.number().optional().describe('X position to scroll to (if no selector)'), + y: z.number().optional().describe('Y position to scroll to (if no selector)'), + }, + withLogging('scroll', async ({ selector, x, y }) => { + await ensureLaunched(); + await browser.scroll(selector, x, y); + return textResult(JSON.stringify({ ok: true })); + }) +); + +// Viewport +server.tool( + 'viewport', + 'Resize the browser viewport', + { + width: z.number().describe('Viewport width in pixels'), + height: z.number().describe('Viewport height in pixels'), + }, + withLogging('viewport', async ({ width, height }) => { + await ensureLaunched(); + const viewport = await browser.setViewport(width, height); + return textResult(JSON.stringify({ ok: true, viewport })); + }) +); + +// Emulate +server.tool( + 'emulate', + 'Emulate a mobile device (viewport, user agent, touch)', + { + device: z.string().describe('Device name (e.g., "iPhone 13", "Pixel 5", "iPad Pro")'), + }, + withLogging('emulate', async ({ device }) => { + await ensureLaunched(); + const viewport = await browser.emulate(device); + return textResult(JSON.stringify({ ok: true, device, viewport })); + }) +); + // Utility server.tool( 'wait', @@ -681,6 +898,69 @@ server.resource( } ); +// Resource: browser://errors - Captured page errors +server.resource( + 'Page Errors', + 'browser://errors', + { + description: 'Uncaught exceptions and unhandled promise rejections', + mimeType: 'application/json', + }, + async () => { + if (!launched) { + return { + contents: [ + { + uri: 'browser://errors', + mimeType: 'application/json', + text: JSON.stringify({ launched: false, errors: [] }), + }, + ], + }; + } + const errors = browser.getErrors(false); + return { + contents: [ + { + uri: 'browser://errors', + mimeType: 'application/json', + text: JSON.stringify({ launched: true, count: errors.length, errors }), + }, + ], + }; + } +); + +// Resource: browser://a11y - Accessibility tree snapshot +server.resource( + 'Accessibility Tree', + 'browser://a11y', + { description: 'Accessibility tree snapshot of the current page', mimeType: 'application/json' }, + async () => { + if (!launched) { + return { + contents: [ + { + uri: 'browser://a11y', + mimeType: 'application/json', + text: JSON.stringify({ launched: false, a11y: null }), + }, + ], + }; + } + const a11y = await browser.getA11y(); + return { + contents: [ + { + uri: 'browser://a11y', + mimeType: 'application/json', + text: JSON.stringify({ launched: true, a11y }), + }, + ], + }; + } +); + // Resource: browser://screenshot - Current page screenshot (base64) server.resource( 'Page Screenshot', diff --git a/src/types.ts b/src/types.ts index 0406778..4579e5f 100644 --- a/src/types.ts +++ b/src/types.ts @@ -171,6 +171,133 @@ export interface InterceptCommand { }; } +export interface PageError { + message: string; + stack?: string; + timestamp: number; +} + +export interface ErrorsCommand { + cmd: 'errors'; + clear?: boolean; +} + +export interface MetricsData { + timing: { + domContentLoaded?: number; + load?: number; + firstPaint?: number; + firstContentfulPaint?: number; + }; + dom: { + nodes: number; + scripts: number; + stylesheets: number; + images: number; + }; + resources?: Array<{ + name: string; + type: string; + duration: number; + size: number; + }>; +} + +export interface MetricsCommand { + cmd: 'metrics'; + resources?: boolean; +} + +export interface A11yNode { + role: string; + name?: string; + value?: string; + description?: string; + children?: A11yNode[]; +} + +export interface A11yCommand { + cmd: 'a11y'; + selector?: string; +} + +export interface DialogEntry { + type: 'alert' | 'confirm' | 'prompt' | 'beforeunload'; + message: string; + defaultValue?: string; + response?: string | boolean; + timestamp: number; +} + +export interface DialogCommand { + cmd: 'dialog'; + action: 'status' | 'accept' | 'dismiss' | 'config'; + text?: string; + autoAccept?: boolean; + autoDismiss?: boolean; +} + +// Phase 6: Storage & Cookies +export interface CookiesCommand { + cmd: 'cookies'; + action: 'get' | 'set' | 'delete' | 'clear'; + name?: string; + value?: string; + domain?: string; + path?: string; + url?: string; +} + +export interface StorageCommand { + cmd: 'storage'; + type: 'local' | 'session'; + action: 'get' | 'set' | 'delete' | 'clear'; + key?: string; + value?: string; +} + +// Phase 7: Advanced Interactions +export interface HoverCommand { + cmd: 'hover'; + selector: string; +} + +export interface SelectCommand { + cmd: 'select'; + selector: string; + value: string | string[]; +} + +export interface KeysCommand { + cmd: 'keys'; + keys: string; +} + +export interface UploadCommand { + cmd: 'upload'; + selector: string; + files: string[]; +} + +export interface ScrollCommand { + cmd: 'scroll'; + selector?: string; + x?: number; + y?: number; +} + +// Phase 8: Viewport & Emulation +export interface ViewportCommand { + cmd: 'viewport'; + width: number; + height: number; +} + +export interface EmulateCommand { + cmd: 'emulate'; + device: string; +} + export type BrowserCommand = | GotoCommand | ClickCommand @@ -194,7 +321,20 @@ export type BrowserCommand = | ThumbnailCommand | ConsoleCommand | NetworkCommand - | InterceptCommand; + | InterceptCommand + | ErrorsCommand + | MetricsCommand + | A11yCommand + | DialogCommand + | CookiesCommand + | StorageCommand + | HoverCommand + | SelectCommand + | KeysCommand + | UploadCommand + | ScrollCommand + | ViewportCommand + | EmulateCommand; // Response types export interface SuccessResponse { @@ -218,6 +358,23 @@ export interface SuccessResponse { // Network fields requests?: NetworkEntry[]; patterns?: string[]; + // Error fields + errors?: PageError[]; + // Metrics fields + metrics?: MetricsData; + // Accessibility fields + a11y?: A11yNode; + // Dialog fields + dialogs?: DialogEntry[]; + dialogConfig?: { autoAccept: boolean; autoDismiss: boolean }; + // Cookie fields + cookies?: Array<{ name: string; value: string; domain: string; path: string }>; + // Storage fields + storage?: Record; + // Viewport fields + viewport?: { width: number; height: number }; + // Selected values + selected?: string[]; } export interface ErrorResponse {