cdp-mcp 0.1.3 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/README.md +67 -31
  2. package/dist/contract.d.ts +11 -0
  3. package/dist/contract.js +11 -0
  4. package/dist/contract.js.map +1 -0
  5. package/dist/index.d.ts +18 -0
  6. package/dist/locator.d.ts +108 -0
  7. package/dist/locator.js +176 -0
  8. package/dist/locator.js.map +1 -0
  9. package/dist/server.d.ts +2 -0
  10. package/dist/server.js +4 -0
  11. package/dist/server.js.map +1 -1
  12. package/dist/session/browser.d.ts +29 -0
  13. package/dist/session/browser.js +17 -2
  14. package/dist/session/browser.js.map +1 -1
  15. package/dist/session/buffers.d.ts +48 -0
  16. package/dist/session/pause.d.ts +21 -0
  17. package/dist/session/state.d.ts +53 -0
  18. package/dist/sourcemap/loader.d.ts +4 -0
  19. package/dist/sourcemap/normalize.d.ts +2 -0
  20. package/dist/sourcemap/store.d.ts +57 -0
  21. package/dist/tools/_locator_runtime.d.ts +31 -0
  22. package/dist/tools/_locator_runtime.js +243 -0
  23. package/dist/tools/_locator_runtime.js.map +1 -0
  24. package/dist/tools/_register.d.ts +2 -0
  25. package/dist/tools/breakpoints.d.ts +4 -0
  26. package/dist/tools/console.d.ts +2 -0
  27. package/dist/tools/dom.d.ts +2 -0
  28. package/dist/tools/dom.js +3 -221
  29. package/dist/tools/dom.js.map +1 -1
  30. package/dist/tools/execution.d.ts +29 -0
  31. package/dist/tools/forms.d.ts +8 -0
  32. package/dist/tools/forms.js +256 -0
  33. package/dist/tools/forms.js.map +1 -0
  34. package/dist/tools/inspect.d.ts +2 -0
  35. package/dist/tools/nav.d.ts +2 -0
  36. package/dist/tools/network.d.ts +2 -0
  37. package/dist/tools/session.d.ts +2 -0
  38. package/dist/tools/session.js +1 -1
  39. package/dist/tools/session.js.map +1 -1
  40. package/dist/tools/source.d.ts +2 -0
  41. package/dist/tools/storage.d.ts +2 -0
  42. package/dist/tools/storage.js +296 -0
  43. package/dist/tools/storage.js.map +1 -0
  44. package/dist/util/browser-resolve.d.ts +19 -0
  45. package/dist/util/errors.d.ts +7 -0
  46. package/dist/util/format.d.ts +20 -0
  47. package/dist/util/log.d.ts +6 -0
  48. package/docs/chromium-sandboxing.md +6 -0
  49. package/docs/local-l3-e2e-setup.md +199 -0
  50. package/package.json +13 -1
package/dist/tools/dom.js CHANGED
@@ -3,20 +3,8 @@ import { writeFile } from "node:fs/promises";
3
3
  import { requireSession } from "../session/state.js";
4
4
  import { ToolError } from "../util/errors.js";
5
5
  import { registerJsonTool } from "./_register.js";
6
- const locatorBySchema = z.enum(["css", "text", "role", "test_id", "testId", "label", "placeholder", "name"]);
7
- const locatorShape = {
8
- by: locatorBySchema.optional().describe("Locator strategy. Omit when passing selector/css for a CSS lookup."),
9
- selector: z.string().optional().describe("CSS selector. Equivalent to by=css."),
10
- css: z.string().optional().describe("CSS selector. Equivalent to selector."),
11
- text: z.string().optional().describe("Text to match for by=text."),
12
- role: z.string().optional().describe("ARIA/implicit role for by=role, e.g. button, link, textbox."),
13
- name: z.string().optional().describe("Accessible name, field name, or fallback value depending on the locator strategy."),
14
- test_id: z.string().optional().describe("Value for data-testid, data-test-id, or data-test."),
15
- testId: z.string().optional().describe("CamelCase alias for test_id."),
16
- label: z.string().optional().describe("Label text for by=label."),
17
- placeholder: z.string().optional().describe("Placeholder text for by=placeholder."),
18
- exact: z.boolean().optional().describe("Default false: substring match for text/name-like fields."),
19
- };
6
+ import { locatorShape } from "../locator.js";
7
+ import { normalizeLocator, locatorHelpersScript, locatorReadScript } from "./_locator_runtime.js";
20
8
  const waitStateSchema = z.enum(["visible", "hidden", "attached", "detached"]);
21
9
  export function registerDomTools(server) {
22
10
  registerJsonTool(server, "query_selector", "Find an element by CSS selector. Returns nodeId + a short preview.", { selector: z.string() }, async (input) => {
@@ -193,50 +181,6 @@ function pairsToObj(pairs) {
193
181
  }
194
182
  return out;
195
183
  }
196
- function normalizeLocator(input) {
197
- const by = input.by ?? (input.selector || input.css ? "css" : undefined);
198
- if (!by)
199
- throw new ToolError("missing_arg", "by is required unless selector/css is supplied");
200
- switch (by) {
201
- case "css": {
202
- const selector = input.selector ?? input.css;
203
- if (!selector)
204
- throw new ToolError("missing_arg", "selector or css is required for by=css");
205
- return { ...input, by, selector };
206
- }
207
- case "role":
208
- if (!input.role)
209
- throw new ToolError("missing_arg", "role is required for by=role");
210
- return { ...input, by };
211
- case "text":
212
- if (!input.text && !input.name)
213
- throw new ToolError("missing_arg", "text or name is required for by=text");
214
- return { ...input, by, text: input.text ?? input.name };
215
- case "test_id":
216
- case "testId": {
217
- const testId = input.test_id ?? input.testId ?? input.name;
218
- if (!testId)
219
- throw new ToolError("missing_arg", `test_id, testId, or name is required for by=${by}`);
220
- return { ...input, by, test_id: testId };
221
- }
222
- case "label": {
223
- const label = input.label ?? input.name;
224
- if (!label)
225
- throw new ToolError("missing_arg", "label or name is required for by=label");
226
- return { ...input, by, label };
227
- }
228
- case "placeholder": {
229
- const placeholder = input.placeholder ?? input.name;
230
- if (!placeholder)
231
- throw new ToolError("missing_arg", "placeholder or name is required for by=placeholder");
232
- return { ...input, by, placeholder };
233
- }
234
- case "name":
235
- if (!input.name)
236
- throw new ToolError("missing_arg", "name is required for by=name");
237
- return { ...input, by };
238
- }
239
- }
240
184
  async function evaluateLocator(locator, options) {
241
185
  const s = requireSession();
242
186
  const res = await s.client.send("Runtime.evaluate", {
@@ -267,7 +211,7 @@ function buildLocateExpression(locator, options) {
267
211
  return `(() => {
268
212
  const spec = ${JSON.stringify(locator)};
269
213
  const options = ${JSON.stringify(options)};
270
- ${locatorRuntimeScript()}
214
+ ${locatorHelpersScript()}${locatorReadScript()}
271
215
  return locate(spec, options);
272
216
  })()`;
273
217
  }
@@ -278,168 +222,6 @@ function buildFormStateExpression(input) {
278
222
  return readFormState(input);
279
223
  })()`;
280
224
  }
281
- function locatorRuntimeScript() {
282
- return String.raw `
283
- const compact = (value) => (value || "").replace(/\s+/g, " ").trim();
284
- const lower = (value) => compact(value).toLowerCase();
285
- const cssEscape = (value) => globalThis.CSS?.escape ? globalThis.CSS.escape(value) : String(value).replace(/["\\]/g, "\\$&");
286
- const matchesText = (actual, expected, exact) => {
287
- if (expected == null || expected === "") return true;
288
- const a = lower(actual);
289
- const e = lower(expected);
290
- return exact ? a === e : a.includes(e);
291
- };
292
- const textOf = (el) => compact(el.innerText || el.textContent || "");
293
- const isVisible = (el) => {
294
- if (!el.isConnected) return false;
295
- const style = getComputedStyle(el);
296
- if (style.visibility === "hidden" || style.display === "none" || Number(style.opacity) === 0) return false;
297
- const rect = el.getBoundingClientRect();
298
- return rect.width > 0 && rect.height > 0;
299
- };
300
- const labelText = (el) => {
301
- if ("labels" in el && el.labels && el.labels.length > 0) {
302
- return compact(Array.from(el.labels).map((label) => label.innerText || label.textContent || "").join(" "));
303
- }
304
- return "";
305
- };
306
- const accessibleName = (el) => {
307
- const ariaLabel = el.getAttribute("aria-label");
308
- if (ariaLabel) return compact(ariaLabel);
309
- const labelledBy = el.getAttribute("aria-labelledby");
310
- if (labelledBy) {
311
- const text = labelledBy
312
- .split(/\s+/)
313
- .map((id) => document.getElementById(id)?.innerText || document.getElementById(id)?.textContent || "")
314
- .join(" ");
315
- if (compact(text)) return compact(text);
316
- }
317
- const label = labelText(el);
318
- if (label) return label;
319
- if (el instanceof HTMLInputElement && ["button", "submit", "reset"].includes(el.type)) return compact(el.value);
320
- if (el instanceof HTMLInputElement || el instanceof HTMLTextAreaElement) return compact(el.placeholder || el.value || "");
321
- if (el instanceof HTMLImageElement) return compact(el.alt || "");
322
- return textOf(el);
323
- };
324
- const implicitRole = (el) => {
325
- const explicit = el.getAttribute("role");
326
- if (explicit) return lower(explicit.split(/\s+/)[0]);
327
- const tag = el.tagName.toLowerCase();
328
- if (tag === "button") return "button";
329
- if (tag === "a" && el.hasAttribute("href")) return "link";
330
- if (/^h[1-6]$/.test(tag)) return "heading";
331
- if (tag === "textarea") return "textbox";
332
- if (tag === "select") return el.multiple ? "listbox" : "combobox";
333
- if (tag === "img") return "img";
334
- if (el.isContentEditable) return "textbox";
335
- if (tag === "input") {
336
- const type = lower(el.getAttribute("type") || "text");
337
- if (["button", "submit", "reset"].includes(type)) return "button";
338
- if (type === "checkbox") return "checkbox";
339
- if (type === "radio") return "radio";
340
- if (type === "range") return "slider";
341
- if (["email", "password", "search", "tel", "text", "url", ""].includes(type)) return "textbox";
342
- if (type === "number") return "spinbutton";
343
- }
344
- return "";
345
- };
346
- const cssPath = (el) => {
347
- if (el.id) return "#" + cssEscape(el.id);
348
- const testId = el.getAttribute("data-testid") || el.getAttribute("data-test-id") || el.getAttribute("data-test");
349
- if (testId) return "[" + (el.hasAttribute("data-testid") ? "data-testid" : el.hasAttribute("data-test-id") ? "data-test-id" : "data-test") + "=\"" + cssEscape(testId) + "\"]";
350
- const parts = [];
351
- let node = el;
352
- while (node && node.nodeType === Node.ELEMENT_NODE && parts.length < 5) {
353
- const tag = node.tagName.toLowerCase();
354
- const name = node.getAttribute("name");
355
- if (name) {
356
- parts.unshift(tag + "[name=\"" + cssEscape(name) + "\"]");
357
- break;
358
- }
359
- const siblings = Array.from(node.parentElement?.children || []).filter((child) => child.tagName === node.tagName);
360
- const index = siblings.indexOf(node) + 1;
361
- parts.unshift(siblings.length > 1 ? tag + ":nth-of-type(" + index + ")" : tag);
362
- node = node.parentElement;
363
- }
364
- return parts.join(" > ");
365
- };
366
- const elementInfo = (el) => {
367
- const rect = el.getBoundingClientRect();
368
- const info = {
369
- selector: cssPath(el),
370
- tag: el.tagName.toLowerCase(),
371
- role: implicitRole(el) || undefined,
372
- name: accessibleName(el) || undefined,
373
- text: textOf(el).slice(0, 300),
374
- visible: isVisible(el),
375
- disabled: "disabled" in el ? !!el.disabled : undefined,
376
- value: "value" in el ? el.value : undefined,
377
- checked: "checked" in el ? !!el.checked : undefined,
378
- bbox: { x: rect.x, y: rect.y, width: rect.width, height: rect.height },
379
- };
380
- return Object.fromEntries(Object.entries(info).filter(([, value]) => value !== undefined && value !== ""));
381
- };
382
- const queryAll = (selector) => {
383
- try {
384
- return { ok: true, elements: Array.from(document.querySelectorAll(selector)) };
385
- } catch (error) {
386
- return { ok: false, error: "Invalid CSS selector " + selector + ": " + error.message };
387
- }
388
- };
389
- const leafTextMatches = (el, expected, exact) => {
390
- if (!matchesText(textOf(el), expected, exact)) return false;
391
- return !Array.from(el.children).some((child) => matchesText(textOf(child), expected, exact));
392
- };
393
- const findElements = (spec) => {
394
- const by = spec.by || (spec.selector || spec.css ? "css" : "");
395
- const exact = !!spec.exact;
396
- if (by === "css") return queryAll(spec.selector || spec.css);
397
- if (by === "text") {
398
- return { ok: true, elements: Array.from(document.querySelectorAll("body *")).filter((el) => leafTextMatches(el, spec.text || spec.name, exact)) };
399
- }
400
- if (by === "role") {
401
- return { ok: true, elements: Array.from(document.querySelectorAll("body *")).filter((el) => implicitRole(el) === lower(spec.role) && matchesText(accessibleName(el), spec.name, exact)) };
402
- }
403
- if (by === "test_id" || by === "testId") {
404
- const wanted = spec.test_id || spec.testId || spec.name;
405
- const candidates = Array.from(document.querySelectorAll("[data-testid], [data-test-id], [data-test]"));
406
- return { ok: true, elements: candidates.filter((el) => [el.getAttribute("data-testid"), el.getAttribute("data-test-id"), el.getAttribute("data-test")].some((value) => matchesText(value, wanted, true))) };
407
- }
408
- if (by === "label") {
409
- const wanted = spec.label || spec.name;
410
- const controls = [];
411
- for (const label of Array.from(document.querySelectorAll("label"))) {
412
- if (!matchesText(textOf(label), wanted, exact)) continue;
413
- const control = label.control || label.querySelector("input, textarea, select, button");
414
- if (control) controls.push(control);
415
- }
416
- return { ok: true, elements: controls };
417
- }
418
- if (by === "placeholder") {
419
- const wanted = spec.placeholder || spec.name;
420
- return { ok: true, elements: Array.from(document.querySelectorAll("[placeholder]")).filter((el) => matchesText(el.getAttribute("placeholder"), wanted, exact)) };
421
- }
422
- if (by === "name") {
423
- return { ok: true, elements: Array.from(document.querySelectorAll("[name]")).filter((el) => matchesText(el.getAttribute("name"), spec.name, true)) };
424
- }
425
- return { ok: false, error: "Unsupported locator strategy: " + by };
426
- };
427
- const locate = (spec, options) => {
428
- const found = findElements(spec);
429
- if (!found.ok) return { ok: false, error: found.error, found: false, count: 0, visible_count: 0, matches: [] };
430
- const all = found.elements;
431
- const visible = all.filter(isVisible);
432
- const returned = (options.includeHidden ? all : visible).slice(0, options.limit || 20).map(elementInfo);
433
- return {
434
- ok: true,
435
- found: returned.length > 0,
436
- count: all.length,
437
- visible_count: visible.length,
438
- matches: returned,
439
- };
440
- };
441
- `;
442
- }
443
225
  function formStateRuntimeScript() {
444
226
  return String.raw `
445
227
  const compact = (value) => (value || "").replace(/\s+/g, " ").trim();
@@ -1 +1 @@
1
- {"version":3,"file":"dom.js","sourceRoot":"","sources":["../../src/tools/dom.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dom.js","sourceRoot":"","sources":["../../src/tools/dom.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { Protocol } from "devtools-protocol";
3
+ import { requireSession } from "../session/state.js";
4
+ export declare function registerExecutionTools(server: McpServer): void;
5
+ export declare function summarizePause(s: ReturnType<typeof requireSession>, reason: Protocol.Debugger.PausedEvent["reason"], hitBreakpoints: string[] | undefined, data: object | undefined, callFrames: Protocol.Debugger.CallFrame[], sessionId: string | undefined): {
6
+ reason: "ambiguous" | "assert" | "CSPViolation" | "debugCommand" | "DOM" | "EventListener" | "exception" | "instrumentation" | "OOM" | "other" | "promiseRejection" | "XHR" | "step";
7
+ hit_breakpoint_ids: string[];
8
+ session_id: string | null;
9
+ data: object | null;
10
+ call_stack: {
11
+ index: number;
12
+ frame_id: string;
13
+ session_id: string | null;
14
+ function_name: string;
15
+ file: string;
16
+ line: number;
17
+ column: number;
18
+ js_url: string | undefined;
19
+ js_line: number;
20
+ js_column: number;
21
+ scope_types: ("catch" | "global" | "local" | "with" | "closure" | "block" | "script" | "eval" | "module" | "wasm-expression-stack")[];
22
+ this: {
23
+ type: "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function" | "map" | "error" | "array" | "null" | "node" | "regexp" | "date" | "set" | "weakmap" | "weakset" | "iterator" | "generator" | "proxy" | "promise" | "typedarray" | "arraybuffer" | "dataview" | "webassemblymemory" | "wasmvalue" | "trustedtype";
24
+ preview: string;
25
+ } | null;
26
+ }[];
27
+ };
28
+ /** @internal exported for unit tests; not part of the MCP tool surface. */
29
+ export declare function matchUserBreakpoints(s: ReturnType<typeof requireSession>, hit: string[], pauseSessionId: string | undefined): string[];
@@ -0,0 +1,8 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ /**
3
+ * Form-driving tools (issue #12 items 1, 2, 3, 6). Each LocatorSpec-driven tool
4
+ * resolves its target through the shared in-page locator runtime (the same
5
+ * `findElements`/visibility semantics as `locate`), mutates it, and dispatches
6
+ * `input`/`change` so app frameworks observe the change.
7
+ */
8
+ export declare function registerFormTools(server: McpServer): void;
@@ -0,0 +1,256 @@
1
+ import { z } from "zod";
2
+ import { requireSession } from "../session/state.js";
3
+ import { ToolError } from "../util/errors.js";
4
+ import { registerJsonTool } from "./_register.js";
5
+ import { locatorShape } from "../locator.js";
6
+ import { normalizeLocator, locatorHelpersScript, mutationHelpersScript, } from "./_locator_runtime.js";
7
+ /**
8
+ * Form-driving tools (issue #12 items 1, 2, 3, 6). Each LocatorSpec-driven tool
9
+ * resolves its target through the shared in-page locator runtime (the same
10
+ * `findElements`/visibility semantics as `locate`), mutates it, and dispatches
11
+ * `input`/`change` so app frameworks observe the change.
12
+ */
13
+ export function registerFormTools(server) {
14
+ registerJsonTool(server, "select_option", "Set the value of a native <select> located by LocatorSpec. Match options by option_value, option_label, and/or option_index (named distinctly from the locator's own fields). Dispatches input + change. For <select multiple>, pass multiple:true to select every match. Returns status:\"selected\" with the resolved option(s).", {
15
+ ...locatorShape,
16
+ option_value: z
17
+ .union([z.string(), z.array(z.string())])
18
+ .optional()
19
+ .describe("Option value attribute(s) to select."),
20
+ option_label: z
21
+ .union([z.string(), z.array(z.string())])
22
+ .optional()
23
+ .describe("Visible option label/text to select."),
24
+ option_index: z
25
+ .union([z.number().int().nonnegative(), z.array(z.number().int().nonnegative())])
26
+ .optional()
27
+ .describe("Zero-based option index(es) to select."),
28
+ multiple: z.boolean().optional().describe("Select every match in a <select multiple> (default false: first match only)."),
29
+ session_id: z.string().optional().describe("Target a worker/iframe session; omit for the root page."),
30
+ }, async (input) => {
31
+ const values = toArray(input.option_value);
32
+ const labels = toArray(input.option_label);
33
+ const indexes = toArray(input.option_index);
34
+ if (values.length === 0 && labels.length === 0 && indexes.length === 0) {
35
+ throw new ToolError("missing_arg", "select_option requires one of option_value, option_label, or option_index");
36
+ }
37
+ const locator = normalizeLocator(input);
38
+ const body = String.raw `
39
+ if (!(el instanceof HTMLSelectElement)) return { ok: false, error: "element is not a <select>", code: "wrong_element" };
40
+ const wantValues = ${JSON.stringify(values)};
41
+ const wantLabels = ${JSON.stringify(labels)};
42
+ const wantIndexes = ${JSON.stringify(indexes)};
43
+ const allowMultiple = ${JSON.stringify(!!input.multiple)} && el.multiple;
44
+ const optionLabel = (opt) => (opt.label || opt.textContent || "").trim();
45
+ const isMatch = (opt, i) => wantValues.includes(opt.value) || wantLabels.includes(optionLabel(opt)) || wantIndexes.includes(i);
46
+ const options = Array.from(el.options);
47
+ const selected = [];
48
+ if (allowMultiple) {
49
+ // Decide matches before mutating: a zero-match select_option must
50
+ // leave the existing selection untouched (and fall through to the
51
+ // not_found return below) rather than deselect every option and
52
+ // report an error without firing events. On a real match the
53
+ // non-matches are cleared, giving multi-select replace semantics.
54
+ const matched = options.map((opt, i) => isMatch(opt, i));
55
+ if (matched.some(Boolean)) {
56
+ options.forEach((opt, i) => {
57
+ opt.selected = matched[i];
58
+ if (matched[i]) selected.push({ value: opt.value, label: optionLabel(opt), index: i });
59
+ });
60
+ }
61
+ } else {
62
+ for (let i = 0; i < options.length; i++) {
63
+ if (isMatch(options[i], i)) {
64
+ el.value = options[i].value;
65
+ selected.push({ value: options[i].value, label: optionLabel(options[i]), index: i });
66
+ break;
67
+ }
68
+ }
69
+ }
70
+ if (selected.length === 0) return { ok: false, error: "no <option> matched the requested value/label/index", code: "not_found" };
71
+ fireEvents(el, ["input", "change"]);
72
+ return { ok: true, selected, multiple: el.multiple, count };
73
+ `;
74
+ const v = await runMutation(locator, body, input.session_id);
75
+ if (!v.ok)
76
+ throw new ToolError(v.code ?? "not_found", v.error ?? "select_option failed");
77
+ return { status: "selected", selected: v.selected, multiple: v.multiple, count: v.count };
78
+ });
79
+ registerToggle(server, "check");
80
+ registerToggle(server, "uncheck");
81
+ registerJsonTool(server, "fill", "Set an input, textarea, or contenteditable element (located by LocatorSpec) to exactly the given value, replacing any existing contents. Dispatches input + change. Use this (not type_text) when you need the field to end up equal to a specific value.", {
82
+ ...locatorShape,
83
+ value: z.string().describe("The exact value the field should contain afterwards (replaces existing contents)."),
84
+ session_id: z.string().optional().describe("Target a worker/iframe session; omit for the root page."),
85
+ }, async (input) => {
86
+ const locator = normalizeLocator(input);
87
+ const body = String.raw `
88
+ // fill writes free text, so restrict to text-like controls. Many other
89
+ // elements expose a "value" property whose meaning is not "the text the
90
+ // user sees" — <select> (the selected option), checkbox/radio (the
91
+ // submitted value, not the checked state), and button/submit/reset/file/
92
+ // image/range/color inputs — so editing them via fill would be surprising.
93
+ // Those get a structured wrong_element; use select_option / check / uncheck.
94
+ const NON_TEXT_INPUT_TYPES = ["button", "submit", "reset", "checkbox", "radio", "file", "image", "range", "color"];
95
+ const isTextInput = el instanceof HTMLInputElement && !NON_TEXT_INPUT_TYPES.includes((el.getAttribute("type") || "text").toLowerCase());
96
+ const fillable = el.isContentEditable || el instanceof HTMLTextAreaElement || isTextInput;
97
+ if (!fillable) {
98
+ const tag = el.tagName.toLowerCase();
99
+ const detail = el instanceof HTMLInputElement ? "<input type=" + (el.getAttribute("type") || "text") + ">" : "<" + tag + ">";
100
+ return { ok: false, error: "element is not fillable — fill targets a text <input>, <textarea>, or contenteditable, got " + detail, code: "wrong_element" };
101
+ }
102
+ const value = ${JSON.stringify(input.value)};
103
+ el.focus();
104
+ if (!("value" in el) && el.isContentEditable) { el.textContent = value; }
105
+ else { el.value = value; }
106
+ fireEvents(el, ["input", "change"]);
107
+ return { ok: true, tag: el.tagName.toLowerCase(), count };
108
+ `;
109
+ const v = await runMutation(locator, body, input.session_id);
110
+ if (!v.ok)
111
+ throw new ToolError(v.code ?? "not_found", v.error ?? "fill failed");
112
+ return { status: "filled", value_length: input.value.length, tag: v.tag, count: v.count };
113
+ });
114
+ registerJsonTool(server, "suggest_locator", "Given a starting element (by node_id or CSS selector), return ranked LocatorSpec candidates (role+name → text → test-id → label → placeholder → name → CSS fallback), each annotated with how many elements it currently matches (1 = unambiguous) and whether it resolves back to the target. Useful for validating/normalising a locator before driving with it.", {
115
+ node_id: z.number().int().positive().optional().describe("DOM nodeId from query_selector/locate."),
116
+ selector: z.string().optional().describe("CSS selector for the starting element (alternative to node_id)."),
117
+ session_id: z.string().optional().describe("Target a worker/iframe session; omit for the root page."),
118
+ }, async (input) => {
119
+ const s = requireSession();
120
+ if (input.node_id === undefined && !input.selector) {
121
+ throw new ToolError("missing_arg", "node_id or selector required");
122
+ }
123
+ let value;
124
+ if (input.selector && input.node_id === undefined) {
125
+ const expression = `(() => {
126
+ ${locatorHelpersScript()}${suggestDefScript()}
127
+ let el;
128
+ try {
129
+ el = document.querySelector(${JSON.stringify(input.selector)});
130
+ } catch (e) {
131
+ return { ok: false, error: "Invalid CSS selector " + ${JSON.stringify(input.selector)} + ": " + e.message, code: "invalid_selector" };
132
+ }
133
+ if (!el) return { ok: false, error: "no element matches selector", code: "not_found" };
134
+ return suggest(el);
135
+ })()`;
136
+ const res = await s.client.send("Runtime.evaluate", { expression, returnByValue: true }, input.session_id);
137
+ value = res.result.value;
138
+ }
139
+ else {
140
+ const resolved = await s.client.send("DOM.resolveNode", { nodeId: input.node_id }, input.session_id);
141
+ const objectId = resolved.object?.objectId;
142
+ if (!objectId)
143
+ throw new ToolError("not_found", `could not resolve node ${input.node_id}`);
144
+ const functionDeclaration = `function() {
145
+ ${locatorHelpersScript()}${suggestDefScript()}
146
+ return suggest(this);
147
+ }`;
148
+ const res = await s.client.send("Runtime.callFunctionOn", { objectId, functionDeclaration, returnByValue: true }, input.session_id);
149
+ value = res.result.value;
150
+ }
151
+ if (!value || !value.ok)
152
+ throw new ToolError(value?.code ?? "not_found", value?.error ?? "suggest_locator failed");
153
+ return { candidates: value.candidates, recommended: value.recommended };
154
+ });
155
+ }
156
+ function toArray(x) {
157
+ if (x === undefined)
158
+ return [];
159
+ return Array.isArray(x) ? x : [x];
160
+ }
161
+ /**
162
+ * Resolve `locator` to a single element in the page and run `body` against it.
163
+ * `body` is JS that runs with `el` (the resolved element), `count` (total
164
+ * matches), and `fireEvents(el, types)` in scope, and must `return` a
165
+ * `{ ok, ... }` object (with an optional `code` on failure).
166
+ */
167
+ async function runMutation(locator, body, sessionId) {
168
+ const s = requireSession();
169
+ const expression = `(() => {
170
+ const spec = ${JSON.stringify(locator)};
171
+ ${locatorHelpersScript()}${mutationHelpersScript()}
172
+ const resolved = resolveOne(spec);
173
+ if (!resolved.ok) return { ok: false, error: resolved.error, code: resolved.code ?? "not_found" };
174
+ const el = resolved.el;
175
+ const count = resolved.count;
176
+ ${body}
177
+ })()`;
178
+ const res = await s.client.send("Runtime.evaluate", { expression, returnByValue: true }, sessionId);
179
+ return res.result.value;
180
+ }
181
+ function registerToggle(server, name) {
182
+ const wantChecked = name === "check";
183
+ const description = name === "check"
184
+ ? "Ensure a checkbox or radio (located by LocatorSpec) is checked. Idempotent: returns status:\"already-checked\" with no events if it already is, else sets it and dispatches input + change."
185
+ : "Ensure a checkbox or radio (located by LocatorSpec) is unchecked. Idempotent: returns status:\"already-unchecked\" with no events if it already is, else clears it and dispatches input + change.";
186
+ registerJsonTool(server, name, description, { ...locatorShape, session_id: z.string().optional().describe("Target a worker/iframe session; omit for the root page.") }, async (input) => {
187
+ const locator = normalizeLocator(input);
188
+ const body = String.raw `
189
+ if (!(el instanceof HTMLInputElement) || (el.type !== "checkbox" && el.type !== "radio"))
190
+ return { ok: false, error: "element is not a checkbox or radio", code: "wrong_element" };
191
+ if (el.checked === ${JSON.stringify(wantChecked)}) return { ok: true, changed: false, checked: el.checked, count };
192
+ el.checked = ${JSON.stringify(wantChecked)};
193
+ fireEvents(el, ["input", "change"]);
194
+ return { ok: true, changed: true, checked: el.checked, count };
195
+ `;
196
+ const v = await runMutation(locator, body, input.session_id);
197
+ if (!v.ok)
198
+ throw new ToolError(v.code ?? "not_found", v.error ?? `${name} failed`);
199
+ const status = wantChecked
200
+ ? v.changed
201
+ ? "checked"
202
+ : "already-checked"
203
+ : v.changed
204
+ ? "unchecked"
205
+ : "already-unchecked";
206
+ return { status, checked: v.checked, count: v.count };
207
+ });
208
+ }
209
+ /**
210
+ * In-page `suggest(el)` definition. Compose after `locatorHelpersScript()` (it
211
+ * relies on `implicitRole`/`accessibleName`/`labelText`/`textOf`/`cssPath`/
212
+ * `findElements`). Builds ranked candidates and re-runs `findElements` per
213
+ * candidate so the reported match counts are exactly what `locate` would produce.
214
+ */
215
+ function suggestDefScript() {
216
+ return String.raw `
217
+ const suggest = (el) => {
218
+ const role = implicitRole(el);
219
+ const name = accessibleName(el);
220
+ const text = textOf(el);
221
+ const testId = el.getAttribute("data-testid") || el.getAttribute("data-test-id") || el.getAttribute("data-test");
222
+ const label = labelText(el);
223
+ const placeholder = el.getAttribute("placeholder");
224
+ const nameAttr = el.getAttribute("name");
225
+ const cands = [];
226
+ if (role && name) cands.push({ by: "role", role, name });
227
+ if (text && text.length <= 80) cands.push({ by: "text", text });
228
+ if (testId) cands.push({ by: "test_id", test_id: testId });
229
+ if (label) cands.push({ by: "label", label });
230
+ if (placeholder) cands.push({ by: "placeholder", placeholder });
231
+ if (nameAttr) cands.push({ by: "name", name: nameAttr });
232
+ cands.push({ by: "css", css: cssPath(el) });
233
+ // findElements role/text both scan "body *"; cache it once since we call per candidate.
234
+ const bodyEls = Array.from(document.querySelectorAll("body *"));
235
+ const resolveMatches = (locator) => {
236
+ if (locator.by === "text") return bodyEls.filter((e) => leafTextMatches(e, locator.text || locator.name, !!locator.exact));
237
+ if (locator.by === "role") return bodyEls.filter((e) => implicitRole(e) === lower(locator.role) && matchesText(accessibleName(e), locator.name, !!locator.exact));
238
+ const found = findElements(locator);
239
+ return found.ok ? found.elements : [];
240
+ };
241
+ const annotated = cands.map((locator) => {
242
+ const els = resolveMatches(locator);
243
+ return {
244
+ locator,
245
+ match_count: els.length,
246
+ unambiguous: els.length === 1,
247
+ resolves_to_target: els.indexOf(el) !== -1,
248
+ };
249
+ });
250
+ let recommended = annotated.findIndex((c) => c.unambiguous && c.resolves_to_target);
251
+ if (recommended < 0) recommended = annotated.findIndex((c) => c.resolves_to_target);
252
+ return { ok: true, candidates: annotated, recommended: recommended < 0 ? null : recommended };
253
+ };
254
+ `;
255
+ }
256
+ //# sourceMappingURL=forms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forms.js","sourceRoot":"","sources":["../../src/tools/forms.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerInspectTools(server: McpServer): void;
@@ -0,0 +1,2 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerNavTools(server: McpServer): void;
@@ -0,0 +1,2 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerNetworkTools(server: McpServer): void;
@@ -0,0 +1,2 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerSessionTools(server: McpServer): void;