41 lines
1.8 KiB
JavaScript
41 lines
1.8 KiB
JavaScript
import { z } from 'zod';
|
|
import { errorResult, jsonResult, toErrorMessage } from '../shared.js';
|
|
import { browserManager } from './browserManager.js';
|
|
export function registerBrowserNavigateTool(server) {
|
|
server.registerTool('browser_navigate', {
|
|
title: 'Browser Navigate',
|
|
description: 'Open a URL in a headless/headed Playwright browser session. Reuses the same session across calls, so later tools (screenshot, inspect_dom, click, etc.) operate on the same page.',
|
|
inputSchema: {
|
|
url: z.string().url().describe('URL to navigate to, e.g. the local dev server URL from start_dev_server.'),
|
|
headless: z.boolean().optional().default(true).describe('Run browser headlessly.'),
|
|
waitUntil: z
|
|
.enum(['load', 'domcontentloaded', 'networkidle'])
|
|
.optional()
|
|
.default('load')
|
|
.describe('When to consider navigation complete.'),
|
|
resetLogs: z
|
|
.boolean()
|
|
.optional()
|
|
.default(true)
|
|
.describe('Clear previously captured console logs before navigating.'),
|
|
},
|
|
}, async ({ url, headless, waitUntil, resetLogs: shouldResetLogs }) => {
|
|
try {
|
|
const session = await browserManager.getSession(headless);
|
|
if (shouldResetLogs)
|
|
browserManager.resetLogs();
|
|
const response = await session.page.goto(url, { waitUntil });
|
|
const title = await session.page.title().catch(() => '');
|
|
return jsonResult({
|
|
url,
|
|
title,
|
|
status: response?.status() ?? null,
|
|
finalUrl: response?.url() ?? url,
|
|
});
|
|
}
|
|
catch (error) {
|
|
return errorResult(toErrorMessage(error));
|
|
}
|
|
});
|
|
}
|
|
//# sourceMappingURL=navigate.js.map
|