@n8n/mcp-browser 0.1.0-rc1

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.
Files changed (73) hide show
  1. package/LICENSE.md +88 -0
  2. package/README.md +175 -0
  3. package/dist/adapters/playwright.d.ts +72 -0
  4. package/dist/adapters/playwright.js +684 -0
  5. package/dist/adapters/playwright.js.map +1 -0
  6. package/dist/browser-discovery.d.ts +12 -0
  7. package/dist/browser-discovery.js +219 -0
  8. package/dist/browser-discovery.js.map +1 -0
  9. package/dist/build.tsbuildinfo +1 -0
  10. package/dist/cdp-relay-protocol.d.ts +81 -0
  11. package/dist/cdp-relay-protocol.js +5 -0
  12. package/dist/cdp-relay-protocol.js.map +1 -0
  13. package/dist/cdp-relay.d.ts +52 -0
  14. package/dist/cdp-relay.js +508 -0
  15. package/dist/cdp-relay.js.map +1 -0
  16. package/dist/connection.d.ts +15 -0
  17. package/dist/connection.js +137 -0
  18. package/dist/connection.js.map +1 -0
  19. package/dist/errors.d.ts +40 -0
  20. package/dist/errors.js +83 -0
  21. package/dist/errors.js.map +1 -0
  22. package/dist/index.d.ts +7 -0
  23. package/dist/index.js +12 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/logger.d.ts +10 -0
  26. package/dist/logger.js +88 -0
  27. package/dist/logger.js.map +1 -0
  28. package/dist/server-config.d.ts +7 -0
  29. package/dist/server-config.js +45 -0
  30. package/dist/server-config.js.map +1 -0
  31. package/dist/server.d.ts +2 -0
  32. package/dist/server.js +93 -0
  33. package/dist/server.js.map +1 -0
  34. package/dist/tools/helpers.d.ts +15 -0
  35. package/dist/tools/helpers.js +77 -0
  36. package/dist/tools/helpers.js.map +1 -0
  37. package/dist/tools/index.d.ts +2 -0
  38. package/dist/tools/index.js +25 -0
  39. package/dist/tools/index.js.map +1 -0
  40. package/dist/tools/inspection.d.ts +3 -0
  41. package/dist/tools/inspection.js +205 -0
  42. package/dist/tools/inspection.js.map +1 -0
  43. package/dist/tools/interaction.d.ts +3 -0
  44. package/dist/tools/interaction.js +211 -0
  45. package/dist/tools/interaction.js.map +1 -0
  46. package/dist/tools/navigation.d.ts +3 -0
  47. package/dist/tools/navigation.js +75 -0
  48. package/dist/tools/navigation.js.map +1 -0
  49. package/dist/tools/response-envelope.d.ts +13 -0
  50. package/dist/tools/response-envelope.js +92 -0
  51. package/dist/tools/response-envelope.js.map +1 -0
  52. package/dist/tools/schemas.d.ts +236 -0
  53. package/dist/tools/schemas.js +46 -0
  54. package/dist/tools/schemas.js.map +1 -0
  55. package/dist/tools/session.d.ts +3 -0
  56. package/dist/tools/session.js +81 -0
  57. package/dist/tools/session.js.map +1 -0
  58. package/dist/tools/state.d.ts +3 -0
  59. package/dist/tools/state.js +108 -0
  60. package/dist/tools/state.js.map +1 -0
  61. package/dist/tools/tabs.d.ts +3 -0
  62. package/dist/tools/tabs.js +121 -0
  63. package/dist/tools/tabs.js.map +1 -0
  64. package/dist/tools/wait.d.ts +3 -0
  65. package/dist/tools/wait.js +39 -0
  66. package/dist/tools/wait.js.map +1 -0
  67. package/dist/types.d.ts +170 -0
  68. package/dist/types.js +15 -0
  69. package/dist/types.js.map +1 -0
  70. package/dist/utils.d.ts +8 -0
  71. package/dist/utils.js +54 -0
  72. package/dist/utils.js.map +1 -0
  73. package/package.json +48 -0
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.withSnapshotEnvelope = exports.pageIdField = exports.modalStateSchema = exports.elementTargetSchema = exports.consoleSummarySchema = void 0;
4
+ exports.extractDomain = extractDomain;
5
+ exports.createConnectedTool = createConnectedTool;
6
+ const logger_1 = require("../logger");
7
+ const response_envelope_1 = require("./response-envelope");
8
+ const log = (0, logger_1.createLogger)('connected-tool');
9
+ var schemas_1 = require("./schemas");
10
+ Object.defineProperty(exports, "consoleSummarySchema", { enumerable: true, get: function () { return schemas_1.consoleSummarySchema; } });
11
+ Object.defineProperty(exports, "elementTargetSchema", { enumerable: true, get: function () { return schemas_1.elementTargetSchema; } });
12
+ Object.defineProperty(exports, "modalStateSchema", { enumerable: true, get: function () { return schemas_1.modalStateSchema; } });
13
+ Object.defineProperty(exports, "pageIdField", { enumerable: true, get: function () { return schemas_1.pageIdField; } });
14
+ Object.defineProperty(exports, "withSnapshotEnvelope", { enumerable: true, get: function () { return schemas_1.withSnapshotEnvelope; } });
15
+ function extractDomain(url) {
16
+ try {
17
+ return new URL(url).hostname || 'browser';
18
+ }
19
+ catch {
20
+ return 'browser';
21
+ }
22
+ }
23
+ function createConnectedTool(connection, name, description, inputSchema, fn, outputSchema, options, getResourceFromArgs) {
24
+ return {
25
+ name,
26
+ description,
27
+ inputSchema,
28
+ outputSchema,
29
+ async execute(args, _context) {
30
+ try {
31
+ const { state, pageId } = (0, response_envelope_1.resolvePageContext)(connection, args);
32
+ let tabsBefore;
33
+ if (!options?.skipEnrichment) {
34
+ tabsBefore = new Set(await state.adapter.listTabIds());
35
+ log.debug(`tabsBefore snapshot: ${tabsBefore.size} tab(s)`);
36
+ }
37
+ const result = options?.waitForCompletion
38
+ ? await state.adapter.waitForCompletion(pageId, async () => await fn(state, args, pageId))
39
+ : await fn(state, args, pageId);
40
+ if (!options?.skipEnrichment) {
41
+ const enrichPageId = state.activePageId || pageId;
42
+ await (0, response_envelope_1.enrichResponse)(result, state, enrichPageId, options ?? {}, tabsBefore);
43
+ }
44
+ const currentUrl = state.adapter.getPageUrl(pageId);
45
+ if (currentUrl) {
46
+ const pageInfo = state.pages.get(pageId);
47
+ if (pageInfo)
48
+ pageInfo.url = currentUrl;
49
+ }
50
+ return result;
51
+ }
52
+ catch (error) {
53
+ return await (0, response_envelope_1.buildErrorResponse)(error, connection, args, options ?? {});
54
+ }
55
+ },
56
+ getAffectedResources(args, _context) {
57
+ const resource = getResourceFromArgs
58
+ ? getResourceFromArgs(args)
59
+ : getConnectionResource(connection);
60
+ return [{ toolGroup: 'browser', resource, description: `Browser: ${resource}` }];
61
+ },
62
+ };
63
+ }
64
+ function getConnectionResource(connection) {
65
+ try {
66
+ const state = connection.getConnection();
67
+ const liveUrl = state.adapter.getPageUrl(state.activePageId);
68
+ if (liveUrl)
69
+ return extractDomain(liveUrl);
70
+ const activePage = state.pages.get(state.activePageId);
71
+ return activePage?.url ? extractDomain(activePage.url) : 'browser';
72
+ }
73
+ catch {
74
+ return 'browser';
75
+ }
76
+ }
77
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/tools/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { BrowserToolkit, Config } from '../types';
2
+ export declare function createBrowserTools(config?: Partial<Config>): BrowserToolkit;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createBrowserTools = createBrowserTools;
4
+ const connection_1 = require("../connection");
5
+ const inspection_1 = require("./inspection");
6
+ const interaction_1 = require("./interaction");
7
+ const navigation_1 = require("./navigation");
8
+ const session_1 = require("./session");
9
+ const state_1 = require("./state");
10
+ const tabs_1 = require("./tabs");
11
+ const wait_1 = require("./wait");
12
+ function createBrowserTools(config) {
13
+ const connection = new connection_1.BrowserConnection(config);
14
+ const tools = [
15
+ ...(0, session_1.createSessionTools)(connection),
16
+ ...(0, tabs_1.createTabTools)(connection),
17
+ ...(0, navigation_1.createNavigationTools)(connection),
18
+ ...(0, interaction_1.createInteractionTools)(connection),
19
+ ...(0, inspection_1.createInspectionTools)(connection),
20
+ ...(0, wait_1.createWaitTools)(connection),
21
+ ...(0, state_1.createStateTools)(connection),
22
+ ];
23
+ return { tools, connection };
24
+ }
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":";;AAUA,gDAcC;AAxBD,8CAAkD;AAElD,6CAAqD;AACrD,+CAAuD;AACvD,6CAAqD;AACrD,uCAA+C;AAC/C,mCAA2C;AAC3C,iCAAwC;AACxC,iCAAyC;AAEzC,SAAgB,kBAAkB,CAAC,MAAwB;IAC1D,MAAM,UAAU,GAAG,IAAI,8BAAiB,CAAC,MAAM,CAAC,CAAC;IAEjD,MAAM,KAAK,GAAqB;QAC/B,GAAG,IAAA,4BAAkB,EAAC,UAAU,CAAC;QACjC,GAAG,IAAA,qBAAc,EAAC,UAAU,CAAC;QAC7B,GAAG,IAAA,kCAAqB,EAAC,UAAU,CAAC;QACpC,GAAG,IAAA,oCAAsB,EAAC,UAAU,CAAC;QACrC,GAAG,IAAA,kCAAqB,EAAC,UAAU,CAAC;QACpC,GAAG,IAAA,sBAAe,EAAC,UAAU,CAAC;QAC9B,GAAG,IAAA,wBAAgB,EAAC,UAAU,CAAC;KAC/B,CAAC;IAEF,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { BrowserConnection } from '../connection';
2
+ import type { ToolDefinition } from '../types';
3
+ export declare function createInspectionTools(connection: BrowserConnection): ToolDefinition[];
@@ -0,0 +1,205 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.createInspectionTools = createInspectionTools;
37
+ const zod_1 = require("zod");
38
+ const utils_1 = require("../utils");
39
+ const helpers_1 = require("./helpers");
40
+ function createInspectionTools(connection) {
41
+ return [
42
+ browserSnapshot(connection),
43
+ browserScreenshot(connection),
44
+ browserContent(connection),
45
+ browserEvaluate(connection),
46
+ browserConsole(connection),
47
+ browserPdf(connection),
48
+ browserNetwork(connection),
49
+ ];
50
+ }
51
+ const browserSnapshotSchema = zod_1.z
52
+ .object({
53
+ scope: helpers_1.elementTargetSchema
54
+ .optional()
55
+ .describe('Optionally scope to a subtree rooted at this element'),
56
+ pageId: helpers_1.pageIdField,
57
+ })
58
+ .describe('Get ref-annotated accessibility tree of the page');
59
+ const browserSnapshotOutputSchema = zod_1.z.object({
60
+ snapshot: zod_1.z.string(),
61
+ });
62
+ function browserSnapshot(connection) {
63
+ return (0, helpers_1.createConnectedTool)(connection, 'browser_snapshot', 'Use this tool as your primary way to observe the page. Returns a ref-annotated accessibility tree — a compact text representation of all visible elements. Each interactive element gets a numeric ref for use in subsequent tool calls (browser_click, browser_type, etc.). Snapshots are small and fast. Prefer this over browser_screenshot unless you specifically need visual/layout information.', browserSnapshotSchema, async (state, input, pageId) => {
64
+ const result = await state.adapter.snapshot(pageId, input.scope);
65
+ return (0, utils_1.formatCallToolResult)({ snapshot: result.tree });
66
+ }, browserSnapshotOutputSchema);
67
+ }
68
+ const browserScreenshotSchema = zod_1.z
69
+ .object({
70
+ element: helpers_1.elementTargetSchema
71
+ .optional()
72
+ .describe('Optionally target a specific element to screenshot'),
73
+ fullPage: zod_1.z.boolean().optional().describe('Capture full scrollable page'),
74
+ pageId: helpers_1.pageIdField,
75
+ })
76
+ .describe('Take a screenshot of the page or a specific element');
77
+ function browserScreenshot(connection) {
78
+ return (0, helpers_1.createConnectedTool)(connection, 'browser_screenshot', 'Take a screenshot of the page or a specific element. Returns a base64-encoded PNG image. Note: Prefer browser_snapshot for most tasks — it is smaller, faster, and returns refs for element targeting. Use screenshots only when you need visual information (layout, images, charts).', browserScreenshotSchema, async (state, input, pageId) => {
79
+ const base64 = await state.adapter.screenshot(pageId, input.element, {
80
+ fullPage: input.fullPage,
81
+ });
82
+ return (0, utils_1.formatImageResponse)(base64, {
83
+ hint: 'Prefer browser_snapshot for element discovery and interaction — it returns refs and uses less context.',
84
+ });
85
+ });
86
+ }
87
+ const browserContentSchema = zod_1.z
88
+ .object({
89
+ selector: zod_1.z
90
+ .string()
91
+ .optional()
92
+ .describe('CSS selector to scope extraction to a specific element. If omitted, extracts full page'),
93
+ pageId: helpers_1.pageIdField,
94
+ })
95
+ .describe('Extract page content as structured markdown');
96
+ const browserContentOutputSchema = zod_1.z.object({
97
+ title: zod_1.z.string(),
98
+ content: zod_1.z.string(),
99
+ url: zod_1.z.string(),
100
+ });
101
+ function browserContent(connection) {
102
+ return (0, helpers_1.createConnectedTool)(connection, 'browser_content', 'Extract page content as structured markdown with headings, links, lists, and tables preserved. Uses readability extraction to strip navigation, ads, and boilerplate. Prefer browser_snapshot for element discovery and interaction; use this when you need to read and understand page text content.', browserContentSchema, async (state, input, pageId) => {
103
+ const { html, url } = await state.adapter.getContent(pageId, input.selector);
104
+ const [{ JSDOM, VirtualConsole }, { Readability }, TurndownModule, { gfm }] = await Promise.all([
105
+ Promise.resolve().then(() => __importStar(require('jsdom'))),
106
+ Promise.resolve().then(() => __importStar(require('@mozilla/readability'))),
107
+ Promise.resolve().then(() => __importStar(require('turndown'))),
108
+ Promise.resolve().then(() => __importStar(require('@joplin/turndown-plugin-gfm'))),
109
+ ]);
110
+ const TurndownService = TurndownModule.default;
111
+ const virtualConsole = new VirtualConsole();
112
+ const dom = new JSDOM(html, { url, virtualConsole });
113
+ const article = new Readability(dom.window.document, { keepClasses: true }).parse();
114
+ const title = article?.title ?? '';
115
+ const articleHtml = article?.content ?? '';
116
+ const turndownService = new TurndownService({
117
+ headingStyle: 'atx',
118
+ codeBlockStyle: 'fenced',
119
+ });
120
+ turndownService.use(gfm);
121
+ const content = articleHtml ? turndownService.turndown(articleHtml) : '';
122
+ return (0, utils_1.formatCallToolResult)({ title, content, url });
123
+ }, browserContentOutputSchema);
124
+ }
125
+ const browserEvaluateSchema = zod_1.z
126
+ .object({
127
+ script: zod_1.z.string().describe('JavaScript to execute'),
128
+ pageId: helpers_1.pageIdField,
129
+ })
130
+ .describe('Execute JavaScript in the page context');
131
+ const browserEvaluateOutputSchema = zod_1.z.object({
132
+ result: zod_1.z.unknown(),
133
+ });
134
+ function browserEvaluate(connection) {
135
+ return (0, helpers_1.createConnectedTool)(connection, 'browser_evaluate', 'Execute JavaScript in the page context and return the result. The script must be an expression or IIFE. The result is JSON-serialized.', browserEvaluateSchema, async (state, input, pageId) => {
136
+ const result = await state.adapter.evaluate(pageId, input.script);
137
+ return (0, utils_1.formatCallToolResult)({ result });
138
+ }, browserEvaluateOutputSchema);
139
+ }
140
+ const browserConsoleSchema = zod_1.z
141
+ .object({
142
+ level: zod_1.z
143
+ .enum(['log', 'warn', 'error', 'info', 'debug'])
144
+ .optional()
145
+ .describe('Filter by log level. Each level includes more severe levels (e.g. "info" includes errors and warnings)'),
146
+ clear: zod_1.z.boolean().optional().describe('Clear buffer after reading'),
147
+ pageId: helpers_1.pageIdField,
148
+ })
149
+ .describe('Get console messages and page errors');
150
+ const browserConsoleOutputSchema = zod_1.z.object({
151
+ entries: zod_1.z.array(zod_1.z.object({
152
+ level: zod_1.z.string(),
153
+ text: zod_1.z.string(),
154
+ timestamp: zod_1.z.number(),
155
+ })),
156
+ });
157
+ function browserConsole(connection) {
158
+ return (0, helpers_1.createConnectedTool)(connection, 'browser_console', 'Get console messages and page errors (uncaught exceptions). Page errors appear as entries with level "error". Use level filter to narrow results.', browserConsoleSchema, async (state, input, pageId) => {
159
+ const entries = await state.adapter.getConsole(pageId, input.level, input.clear);
160
+ return (0, utils_1.formatCallToolResult)({ entries });
161
+ }, browserConsoleOutputSchema);
162
+ }
163
+ const browserPdfSchema = zod_1.z
164
+ .object({
165
+ format: zod_1.z.enum(['A4', 'Letter', 'Legal']).optional().describe('Page format (default: "A4")'),
166
+ landscape: zod_1.z.boolean().optional().describe('Landscape orientation'),
167
+ pageId: helpers_1.pageIdField,
168
+ })
169
+ .describe('Generate a PDF of the current page');
170
+ const browserPdfOutputSchema = zod_1.z.object({
171
+ pdf: zod_1.z.string(),
172
+ pages: zod_1.z.number(),
173
+ });
174
+ function browserPdf(connection) {
175
+ return (0, helpers_1.createConnectedTool)(connection, 'browser_pdf', 'Generate a PDF of the current page.', browserPdfSchema, async (state, input, pageId) => {
176
+ const result = await state.adapter.pdf(pageId, {
177
+ format: input.format,
178
+ landscape: input.landscape,
179
+ });
180
+ return (0, utils_1.formatCallToolResult)({ pdf: result.data, pages: result.pages });
181
+ }, browserPdfOutputSchema);
182
+ }
183
+ const browserNetworkSchema = zod_1.z
184
+ .object({
185
+ filter: zod_1.z.string().optional().describe('URL pattern filter (glob)'),
186
+ clear: zod_1.z.boolean().optional().describe('Clear buffer after reading'),
187
+ pageId: helpers_1.pageIdField,
188
+ })
189
+ .describe('Get recent network requests and responses');
190
+ const browserNetworkOutputSchema = zod_1.z.object({
191
+ requests: zod_1.z.array(zod_1.z.object({
192
+ url: zod_1.z.string(),
193
+ method: zod_1.z.string(),
194
+ status: zod_1.z.number(),
195
+ contentType: zod_1.z.string().optional(),
196
+ timestamp: zod_1.z.number(),
197
+ })),
198
+ });
199
+ function browserNetwork(connection) {
200
+ return (0, helpers_1.createConnectedTool)(connection, 'browser_network', 'Get recent network requests and responses.', browserNetworkSchema, async (state, input, pageId) => {
201
+ const requests = await state.adapter.getNetwork(pageId, input.filter, input.clear);
202
+ return (0, utils_1.formatCallToolResult)({ requests });
203
+ }, browserNetworkOutputSchema);
204
+ }
205
+ //# sourceMappingURL=inspection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspection.js","sourceRoot":"","sources":["../../src/tools/inspection.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,sDAUC;AAjBD,6BAAwB;AAIxB,oCAAqE;AACrE,uCAAkF;AAElF,SAAgB,qBAAqB,CAAC,UAA6B;IAClE,OAAO;QACN,eAAe,CAAC,UAAU,CAAC;QAC3B,iBAAiB,CAAC,UAAU,CAAC;QAC7B,cAAc,CAAC,UAAU,CAAC;QAC1B,eAAe,CAAC,UAAU,CAAC;QAC3B,cAAc,CAAC,UAAU,CAAC;QAC1B,UAAU,CAAC,UAAU,CAAC;QACtB,cAAc,CAAC,UAAU,CAAC;KAC1B,CAAC;AACH,CAAC;AAMD,MAAM,qBAAqB,GAAG,OAAC;KAC7B,MAAM,CAAC;IACP,KAAK,EAAE,6BAAmB;SACxB,QAAQ,EAAE;SACV,QAAQ,CAAC,sDAAsD,CAAC;IAClE,MAAM,EAAE,qBAAW;CACnB,CAAC;KACD,QAAQ,CAAC,kDAAkD,CAAC,CAAC;AAE/D,MAAM,2BAA2B,GAAG,OAAC,CAAC,MAAM,CAAC;IAC5C,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE;CACpB,CAAC,CAAC;AAEH,SAAS,eAAe,CAAC,UAA6B;IACrD,OAAO,IAAA,6BAAmB,EACzB,UAAU,EACV,kBAAkB,EAClB,wYAAwY,EACxY,qBAAqB,EACrB,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAC9B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACjE,OAAO,IAAA,4BAAoB,EAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC,EACD,2BAA2B,CAC3B,CAAC;AACH,CAAC;AAMD,MAAM,uBAAuB,GAAG,OAAC;KAC/B,MAAM,CAAC;IACP,OAAO,EAAE,6BAAmB;SAC1B,QAAQ,EAAE;SACV,QAAQ,CAAC,oDAAoD,CAAC;IAChE,QAAQ,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IACzE,MAAM,EAAE,qBAAW;CACnB,CAAC;KACD,QAAQ,CAAC,qDAAqD,CAAC,CAAC;AAElE,SAAS,iBAAiB,CAAC,UAA6B;IACvD,OAAO,IAAA,6BAAmB,EACzB,UAAU,EACV,oBAAoB,EACpB,wRAAwR,EACxR,uBAAuB,EACvB,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAC9B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE;YACpE,QAAQ,EAAE,KAAK,CAAC,QAAQ;SACxB,CAAC,CAAC;QAEH,OAAO,IAAA,2BAAmB,EAAC,MAAM,EAAE;YAClC,IAAI,EAAE,wGAAwG;SAC9G,CAAC,CAAC;IACJ,CAAC,CACD,CAAC;AACH,CAAC;AAMD,MAAM,oBAAoB,GAAG,OAAC;KAC5B,MAAM,CAAC;IACP,QAAQ,EAAE,OAAC;SACT,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACR,wFAAwF,CACxF;IACF,MAAM,EAAE,qBAAW;CACnB,CAAC;KACD,QAAQ,CAAC,6CAA6C,CAAC,CAAC;AAE1D,MAAM,0BAA0B,GAAG,OAAC,CAAC,MAAM,CAAC;IAC3C,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE;IACjB,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE;IACnB,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE;CACf,CAAC,CAAC;AAEH,SAAS,cAAc,CAAC,UAA6B;IACpD,OAAO,IAAA,6BAAmB,EACzB,UAAU,EACV,iBAAiB,EACjB,uSAAuS,EACvS,oBAAoB,EACpB,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAC9B,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAE7E,MAAM,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,cAAc,EAAE,EAAE,GAAG,EAAE,CAAC,GAC1E,MAAM,OAAO,CAAC,GAAG,CAAC;8DACV,OAAO;8DACP,sBAAsB;8DACtB,UAAU;8DACV,6BAA6B;SACpC,CAAC,CAAC;QAEJ,MAAM,eAAe,GAAG,cAAc,CAAC,OAAO,CAAC;QAE/C,MAAM,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QAEpF,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;QACnC,MAAM,WAAW,GAAG,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;QAE3C,MAAM,eAAe,GAAG,IAAI,eAAe,CAAC;YAC3C,YAAY,EAAE,KAAK;YACnB,cAAc,EAAE,QAAQ;SACxB,CAAC,CAAC;QACH,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEzB,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAEzE,OAAO,IAAA,4BAAoB,EAAC,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IACtD,CAAC,EACD,0BAA0B,CAC1B,CAAC;AACH,CAAC;AAMD,MAAM,qBAAqB,GAAG,OAAC;KAC7B,MAAM,CAAC;IACP,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IACpD,MAAM,EAAE,qBAAW;CACnB,CAAC;KACD,QAAQ,CAAC,wCAAwC,CAAC,CAAC;AAErD,MAAM,2BAA2B,GAAG,OAAC,CAAC,MAAM,CAAC;IAC5C,MAAM,EAAE,OAAC,CAAC,OAAO,EAAE;CACnB,CAAC,CAAC;AAEH,SAAS,eAAe,CAAC,UAA6B;IACrD,OAAO,IAAA,6BAAmB,EACzB,UAAU,EACV,kBAAkB,EAClB,wIAAwI,EACxI,qBAAqB,EACrB,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAC9B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAClE,OAAO,IAAA,4BAAoB,EAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC,EACD,2BAA2B,CAC3B,CAAC;AACH,CAAC;AAMD,MAAM,oBAAoB,GAAG,OAAC;KAC5B,MAAM,CAAC;IACP,KAAK,EAAE,OAAC;SACN,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;SAC/C,QAAQ,EAAE;SACV,QAAQ,CACR,wGAAwG,CACxG;IACF,KAAK,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IACpE,MAAM,EAAE,qBAAW;CACnB,CAAC;KACD,QAAQ,CAAC,sCAAsC,CAAC,CAAC;AAEnD,MAAM,0BAA0B,GAAG,OAAC,CAAC,MAAM,CAAC;IAC3C,OAAO,EAAE,OAAC,CAAC,KAAK,CACf,OAAC,CAAC,MAAM,CAAC;QACR,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE;QACjB,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE;QAChB,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE;KACrB,CAAC,CACF;CACD,CAAC,CAAC;AAEH,SAAS,cAAc,CAAC,UAA6B;IACpD,OAAO,IAAA,6BAAmB,EACzB,UAAU,EACV,iBAAiB,EACjB,mJAAmJ,EACnJ,oBAAoB,EACpB,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAC9B,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACjF,OAAO,IAAA,4BAAoB,EAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAC1C,CAAC,EACD,0BAA0B,CAC1B,CAAC;AACH,CAAC;AAMD,MAAM,gBAAgB,GAAG,OAAC;KACxB,MAAM,CAAC;IACP,MAAM,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAC5F,SAAS,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IACnE,MAAM,EAAE,qBAAW;CACnB,CAAC;KACD,QAAQ,CAAC,oCAAoC,CAAC,CAAC;AAEjD,MAAM,sBAAsB,GAAG,OAAC,CAAC,MAAM,CAAC;IACvC,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE;IACf,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE;CACjB,CAAC,CAAC;AAEH,SAAS,UAAU,CAAC,UAA6B;IAChD,OAAO,IAAA,6BAAmB,EACzB,UAAU,EACV,aAAa,EACb,qCAAqC,EACrC,gBAAgB,EAChB,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAC9B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE;YAC9C,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,SAAS,EAAE,KAAK,CAAC,SAAS;SAC1B,CAAC,CAAC;QACH,OAAO,IAAA,4BAAoB,EAAC,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACxE,CAAC,EACD,sBAAsB,CACtB,CAAC;AACH,CAAC;AAMD,MAAM,oBAAoB,GAAG,OAAC;KAC5B,MAAM,CAAC;IACP,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACnE,KAAK,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IACpE,MAAM,EAAE,qBAAW;CACnB,CAAC;KACD,QAAQ,CAAC,2CAA2C,CAAC,CAAC;AAExD,MAAM,0BAA0B,GAAG,OAAC,CAAC,MAAM,CAAC;IAC3C,QAAQ,EAAE,OAAC,CAAC,KAAK,CAChB,OAAC,CAAC,MAAM,CAAC;QACR,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE;QACf,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE;QAClB,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE;QAClB,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAClC,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE;KACrB,CAAC,CACF;CACD,CAAC,CAAC;AAEH,SAAS,cAAc,CAAC,UAA6B;IACpD,OAAO,IAAA,6BAAmB,EACzB,UAAU,EACV,iBAAiB,EACjB,4CAA4C,EAC5C,oBAAoB,EACpB,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAC9B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACnF,OAAO,IAAA,4BAAoB,EAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC3C,CAAC,EACD,0BAA0B,CAC1B,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { BrowserConnection } from '../connection';
2
+ import type { ToolDefinition } from '../types';
3
+ export declare function createInteractionTools(connection: BrowserConnection): ToolDefinition[];
@@ -0,0 +1,211 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createInteractionTools = createInteractionTools;
4
+ const zod_1 = require("zod");
5
+ const utils_1 = require("../utils");
6
+ const helpers_1 = require("./helpers");
7
+ function createInteractionTools(connection) {
8
+ return [
9
+ browserClick(connection),
10
+ browserType(connection),
11
+ browserSelect(connection),
12
+ browserDrag(connection),
13
+ browserHover(connection),
14
+ browserPress(connection),
15
+ browserScroll(connection),
16
+ browserUpload(connection),
17
+ browserDialog(connection),
18
+ ];
19
+ }
20
+ const browserClickSchema = zod_1.z
21
+ .object({
22
+ element: helpers_1.elementTargetSchema.describe('Element to click'),
23
+ button: zod_1.z
24
+ .enum(['left', 'right', 'middle'])
25
+ .optional()
26
+ .describe('Mouse button (default: "left")'),
27
+ clickCount: zod_1.z.number().int().optional().describe('Number of clicks (2 = double-click)'),
28
+ modifiers: zod_1.z
29
+ .array(zod_1.z.enum(['Alt', 'Control', 'Meta', 'Shift']))
30
+ .optional()
31
+ .describe('Modifier keys to hold'),
32
+ pageId: helpers_1.pageIdField,
33
+ })
34
+ .describe('Click an element');
35
+ const browserClickOutputSchema = (0, helpers_1.withSnapshotEnvelope)({
36
+ clicked: zod_1.z.boolean(),
37
+ ref: zod_1.z.string().optional(),
38
+ });
39
+ function browserClick(connection) {
40
+ return (0, helpers_1.createConnectedTool)(connection, 'browser_click', 'Click an element. Use ref from browser_snapshot (preferred) or a selector as fallback.', browserClickSchema, async (state, input, pageId) => {
41
+ await state.adapter.click(pageId, input.element, {
42
+ button: input.button,
43
+ clickCount: input.clickCount,
44
+ modifiers: input.modifiers,
45
+ });
46
+ return (0, utils_1.formatCallToolResult)({
47
+ clicked: true,
48
+ ...('ref' in input.element ? { ref: input.element.ref } : {}),
49
+ });
50
+ }, browserClickOutputSchema, { autoSnapshot: true, waitForCompletion: true });
51
+ }
52
+ const browserTypeSchema = zod_1.z
53
+ .object({
54
+ element: helpers_1.elementTargetSchema.describe('Element to type into'),
55
+ text: zod_1.z.string().describe('Text to type'),
56
+ clear: zod_1.z.boolean().optional().describe('Clear existing text first'),
57
+ submit: zod_1.z.boolean().optional().describe('Press Enter after typing'),
58
+ delay: zod_1.z.number().optional().describe('Delay between keystrokes in ms'),
59
+ pageId: helpers_1.pageIdField,
60
+ })
61
+ .describe('Type text into an element');
62
+ const browserTypeOutputSchema = (0, helpers_1.withSnapshotEnvelope)({
63
+ typed: zod_1.z.boolean(),
64
+ ref: zod_1.z.string().optional(),
65
+ text: zod_1.z.string(),
66
+ });
67
+ function browserType(connection) {
68
+ return (0, helpers_1.createConnectedTool)(connection, 'browser_type', 'Type text into an element. Use ref from browser_snapshot (preferred) or a selector as fallback.', browserTypeSchema, async (state, input, pageId) => {
69
+ await state.adapter.type(pageId, input.element, input.text, {
70
+ clear: input.clear,
71
+ submit: input.submit,
72
+ delay: input.delay,
73
+ });
74
+ return (0, utils_1.formatCallToolResult)({
75
+ typed: true,
76
+ ...('ref' in input.element ? { ref: input.element.ref } : {}),
77
+ text: input.text,
78
+ });
79
+ }, browserTypeOutputSchema, { autoSnapshot: true, waitForCompletion: true });
80
+ }
81
+ const browserSelectSchema = zod_1.z
82
+ .object({
83
+ element: helpers_1.elementTargetSchema.describe('Select element to interact with'),
84
+ values: zod_1.z.array(zod_1.z.string()).describe('Option values or labels to select'),
85
+ pageId: helpers_1.pageIdField,
86
+ })
87
+ .describe('Select option(s) in a <select> element');
88
+ const browserSelectOutputSchema = (0, helpers_1.withSnapshotEnvelope)({
89
+ selected: zod_1.z.array(zod_1.z.string()),
90
+ });
91
+ function browserSelect(connection) {
92
+ return (0, helpers_1.createConnectedTool)(connection, 'browser_select', 'Select option(s) in a <select> element. Use ref from browser_snapshot (preferred) or a selector as fallback.', browserSelectSchema, async (state, input, pageId) => {
93
+ const selected = await state.adapter.select(pageId, input.element, input.values);
94
+ return (0, utils_1.formatCallToolResult)({ selected });
95
+ }, browserSelectOutputSchema, { autoSnapshot: true, waitForCompletion: true });
96
+ }
97
+ const browserDragSchema = zod_1.z
98
+ .object({
99
+ from: helpers_1.elementTargetSchema.describe('Source element to drag from'),
100
+ to: helpers_1.elementTargetSchema.describe('Target element to drag to'),
101
+ pageId: helpers_1.pageIdField,
102
+ })
103
+ .describe('Drag from one element to another');
104
+ const browserDragOutputSchema = (0, helpers_1.withSnapshotEnvelope)({
105
+ dragged: zod_1.z.boolean(),
106
+ });
107
+ function browserDrag(connection) {
108
+ return (0, helpers_1.createConnectedTool)(connection, 'browser_drag', 'Drag from one element to another. Use refs from browser_snapshot (preferred) or selectors as fallback.', browserDragSchema, async (state, input, pageId) => {
109
+ await state.adapter.drag(pageId, input.from, input.to);
110
+ return (0, utils_1.formatCallToolResult)({ dragged: true });
111
+ }, browserDragOutputSchema, { autoSnapshot: true, waitForCompletion: true });
112
+ }
113
+ const browserHoverSchema = zod_1.z
114
+ .object({
115
+ element: helpers_1.elementTargetSchema.describe('Element to hover over'),
116
+ pageId: helpers_1.pageIdField,
117
+ })
118
+ .describe('Hover over an element');
119
+ const browserHoverOutputSchema = (0, helpers_1.withSnapshotEnvelope)({
120
+ hovered: zod_1.z.boolean(),
121
+ });
122
+ function browserHover(connection) {
123
+ return (0, helpers_1.createConnectedTool)(connection, 'browser_hover', 'Hover over an element. Use ref from browser_snapshot (preferred) or a selector as fallback.', browserHoverSchema, async (state, input, pageId) => {
124
+ await state.adapter.hover(pageId, input.element);
125
+ return (0, utils_1.formatCallToolResult)({ hovered: true });
126
+ }, browserHoverOutputSchema, { autoSnapshot: true, waitForCompletion: true });
127
+ }
128
+ const browserPressSchema = zod_1.z
129
+ .object({
130
+ keys: zod_1.z.string().describe('Key or key combination (e.g. "Enter", "Control+A")'),
131
+ pageId: helpers_1.pageIdField,
132
+ })
133
+ .describe('Press keyboard key(s)');
134
+ const browserPressOutputSchema = (0, helpers_1.withSnapshotEnvelope)({
135
+ pressed: zod_1.z.string(),
136
+ });
137
+ function browserPress(connection) {
138
+ return (0, helpers_1.createConnectedTool)(connection, 'browser_press', 'Press keyboard key(s). Examples: "Enter", "Control+A", "Escape".', browserPressSchema, async (state, input, pageId) => {
139
+ await state.adapter.press(pageId, input.keys);
140
+ return (0, utils_1.formatCallToolResult)({ pressed: input.keys });
141
+ }, browserPressOutputSchema, { autoSnapshot: true, waitForCompletion: true });
142
+ }
143
+ const scrollToElementSchema = zod_1.z.object({
144
+ mode: zod_1.z.literal('element').describe('Scroll an element into view'),
145
+ element: helpers_1.elementTargetSchema.describe('Element to scroll into view'),
146
+ pageId: helpers_1.pageIdField,
147
+ });
148
+ const scrollByDirectionSchema = zod_1.z.object({
149
+ mode: zod_1.z.literal('direction').describe('Scroll the page by direction/amount'),
150
+ direction: zod_1.z.enum(['up', 'down']).describe('Scroll direction'),
151
+ amount: zod_1.z.number().optional().describe('Pixels to scroll (default: 500)'),
152
+ pageId: helpers_1.pageIdField,
153
+ });
154
+ const browserScrollSchema = zod_1.z
155
+ .discriminatedUnion('mode', [scrollToElementSchema, scrollByDirectionSchema])
156
+ .describe('Scroll an element into view, or scroll the page by direction/amount');
157
+ const browserScrollOutputSchema = (0, helpers_1.withSnapshotEnvelope)({
158
+ scrolled: zod_1.z.boolean(),
159
+ });
160
+ function browserScroll(connection) {
161
+ return (0, helpers_1.createConnectedTool)(connection, 'browser_scroll', 'Scroll an element into view (mode: "element"), or scroll the page by direction/amount (mode: "direction").', browserScrollSchema, async (state, input, pageId) => {
162
+ if (input.mode === 'element') {
163
+ await state.adapter.scroll(pageId, input.element, {});
164
+ }
165
+ else {
166
+ await state.adapter.scroll(pageId, undefined, {
167
+ direction: input.direction,
168
+ amount: input.amount,
169
+ });
170
+ }
171
+ return (0, utils_1.formatCallToolResult)({ scrolled: true });
172
+ }, browserScrollOutputSchema, { autoSnapshot: true, waitForCompletion: true });
173
+ }
174
+ const browserUploadSchema = zod_1.z
175
+ .object({
176
+ element: helpers_1.elementTargetSchema
177
+ .optional()
178
+ .describe('File input element (not needed when a file chooser dialog is pending)'),
179
+ files: zod_1.z.array(zod_1.z.string()).describe('Absolute file paths to upload'),
180
+ pageId: helpers_1.pageIdField,
181
+ })
182
+ .describe('Set files on a file input element or fulfill a pending file chooser dialog');
183
+ const browserUploadOutputSchema = (0, helpers_1.withSnapshotEnvelope)({
184
+ uploaded: zod_1.z.boolean(),
185
+ files: zod_1.z.array(zod_1.z.string()),
186
+ });
187
+ function browserUpload(connection) {
188
+ return (0, helpers_1.createConnectedTool)(connection, 'browser_upload', 'Set files on a file input element, or fulfill a pending file chooser dialog. If a file chooser is pending, no element target is needed.', browserUploadSchema, async (state, input, pageId) => {
189
+ await state.adapter.upload(pageId, input.element, input.files);
190
+ return (0, utils_1.formatCallToolResult)({ uploaded: true, files: input.files });
191
+ }, browserUploadOutputSchema, { autoSnapshot: true, waitForCompletion: true });
192
+ }
193
+ const browserDialogSchema = zod_1.z
194
+ .object({
195
+ action: zod_1.z.enum(['accept', 'dismiss']).describe('How to handle the dialog'),
196
+ text: zod_1.z.string().optional().describe('Text to enter (for prompt dialogs)'),
197
+ pageId: helpers_1.pageIdField,
198
+ })
199
+ .describe('Handle a JavaScript dialog');
200
+ const browserDialogOutputSchema = (0, helpers_1.withSnapshotEnvelope)({
201
+ handled: zod_1.z.boolean(),
202
+ action: zod_1.z.string(),
203
+ dialogType: zod_1.z.string(),
204
+ });
205
+ function browserDialog(connection) {
206
+ return (0, helpers_1.createConnectedTool)(connection, 'browser_dialog', 'Handle a JavaScript dialog (alert, confirm, prompt, beforeunload). Call before the action that triggers the dialog, or when a dialog is already pending.', browserDialogSchema, async (state, input, pageId) => {
207
+ const dialogType = await state.adapter.dialog(pageId, input.action, input.text);
208
+ return (0, utils_1.formatCallToolResult)({ handled: true, action: input.action, dialogType });
209
+ }, browserDialogOutputSchema, { autoSnapshot: true, waitForCompletion: true });
210
+ }
211
+ //# sourceMappingURL=interaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interaction.js","sourceRoot":"","sources":["../../src/tools/interaction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { BrowserConnection } from '../connection';
2
+ import type { ToolDefinition } from '../types';
3
+ export declare function createNavigationTools(connection: BrowserConnection): ToolDefinition[];