/// import { z } from 'zod'; import { errorResult, jsonResult, toErrorMessage } from '../shared.js'; import { browserManager } from './browserManager.js'; export function registerBrowserInspectDomTool(server) { server.registerTool('browser_inspect_dom', { title: 'Browser Inspect DOM', description: 'Query the DOM of the current page by CSS selector and return the outerHTML, inner text, and selected computed styles of the first matching element.', inputSchema: { selector: z.string().min(1).describe('CSS selector to query.'), includeStyles: z .array(z.string()) .optional() .default(['color', 'backgroundColor', 'fontSize', 'display']) .describe('Computed CSS properties to return.'), }, }, async ({ selector, includeStyles }) => { try { const session = await browserManager.getSession(); const element = session.page.locator(selector).first(); await element.waitFor({ state: 'attached', timeout: 5000 }); const outerHTML = await element.evaluate((el) => el.outerHTML).catch(() => null); const text = await element.innerText().catch(() => null); const styles = await element.evaluate((el, props) => { const computed = window.getComputedStyle(el); return Object.fromEntries(props.map((p) => [p, computed.getPropertyValue(p)])); }, includeStyles); const count = await session.page.locator(selector).count(); return jsonResult({ selector, matchCount: count, outerHTML, text, styles, }); } catch (error) { return errorResult(toErrorMessage(error)); } }); } //# sourceMappingURL=inspectDom.js.map