cdp-mcp 0.1.2 → 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.
- package/README.md +100 -37
- package/dist/contract.d.ts +11 -0
- package/dist/contract.js +11 -0
- package/dist/contract.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/locator.d.ts +108 -0
- package/dist/locator.js +176 -0
- package/dist/locator.js.map +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.js +4 -0
- package/dist/server.js.map +1 -1
- package/dist/session/browser.d.ts +29 -0
- package/dist/session/browser.js +17 -2
- package/dist/session/browser.js.map +1 -1
- package/dist/session/buffers.d.ts +48 -0
- package/dist/session/pause.d.ts +21 -0
- package/dist/session/state.d.ts +53 -0
- package/dist/sourcemap/loader.d.ts +4 -0
- package/dist/sourcemap/normalize.d.ts +2 -0
- package/dist/sourcemap/store.d.ts +57 -0
- package/dist/tools/_locator_runtime.d.ts +31 -0
- package/dist/tools/_locator_runtime.js +243 -0
- package/dist/tools/_locator_runtime.js.map +1 -0
- package/dist/tools/_register.d.ts +2 -0
- package/dist/tools/breakpoints.d.ts +4 -0
- package/dist/tools/console.d.ts +2 -0
- package/dist/tools/dom.d.ts +2 -0
- package/dist/tools/dom.js +3 -221
- package/dist/tools/dom.js.map +1 -1
- package/dist/tools/execution.d.ts +29 -0
- package/dist/tools/forms.d.ts +8 -0
- package/dist/tools/forms.js +256 -0
- package/dist/tools/forms.js.map +1 -0
- package/dist/tools/inspect.d.ts +2 -0
- package/dist/tools/nav.d.ts +2 -0
- package/dist/tools/network.d.ts +2 -0
- package/dist/tools/session.d.ts +2 -0
- package/dist/tools/session.js +1 -1
- package/dist/tools/session.js.map +1 -1
- package/dist/tools/source.d.ts +2 -0
- package/dist/tools/storage.d.ts +2 -0
- package/dist/tools/storage.js +296 -0
- package/dist/tools/storage.js.map +1 -0
- package/dist/util/browser-resolve.d.ts +19 -0
- package/dist/util/errors.d.ts +7 -0
- package/dist/util/format.d.ts +20 -0
- package/dist/util/log.d.ts +6 -0
- package/docs/chromium-sandboxing.md +197 -0
- package/docs/known-chromium-gaps.md +138 -0
- package/docs/launchd-service.md +217 -0
- package/docs/local-l3-e2e-setup.md +199 -0
- package/docs/systemd-service.md +233 -0
- package/package.json +18 -2
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
|
-
|
|
7
|
-
|
|
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
|
-
${
|
|
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();
|
package/dist/tools/dom.js.map
CHANGED
|
@@ -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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"}
|