ultimate-playwright-mcp 0.1.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 (131) hide show
  1. package/LICENSE +26 -0
  2. package/README.md +286 -0
  3. package/dist/browser/cdp.d.ts +37 -0
  4. package/dist/browser/cdp.d.ts.map +1 -0
  5. package/dist/browser/cdp.helpers.d.ts +13 -0
  6. package/dist/browser/cdp.helpers.d.ts.map +1 -0
  7. package/dist/browser/cdp.helpers.js +38 -0
  8. package/dist/browser/cdp.helpers.js.map +1 -0
  9. package/dist/browser/cdp.js +77 -0
  10. package/dist/browser/cdp.js.map +1 -0
  11. package/dist/browser/chrome-tab-groups.d.ts +93 -0
  12. package/dist/browser/chrome-tab-groups.d.ts.map +1 -0
  13. package/dist/browser/chrome-tab-groups.js +458 -0
  14. package/dist/browser/chrome-tab-groups.js.map +1 -0
  15. package/dist/browser/chrome.d.ts +11 -0
  16. package/dist/browser/chrome.d.ts.map +1 -0
  17. package/dist/browser/chrome.js +74 -0
  18. package/dist/browser/chrome.js.map +1 -0
  19. package/dist/browser/pw-role-snapshot.d.ts +41 -0
  20. package/dist/browser/pw-role-snapshot.d.ts.map +1 -0
  21. package/dist/browser/pw-role-snapshot.js +346 -0
  22. package/dist/browser/pw-role-snapshot.js.map +1 -0
  23. package/dist/browser/pw-session.d.ts +145 -0
  24. package/dist/browser/pw-session.d.ts.map +1 -0
  25. package/dist/browser/pw-session.js +468 -0
  26. package/dist/browser/pw-session.js.map +1 -0
  27. package/dist/browser/pw-tools-activity.d.ts +27 -0
  28. package/dist/browser/pw-tools-activity.d.ts.map +1 -0
  29. package/dist/browser/pw-tools-activity.js +52 -0
  30. package/dist/browser/pw-tools-activity.js.map +1 -0
  31. package/dist/browser/pw-tools-downloads.d.ts +40 -0
  32. package/dist/browser/pw-tools-downloads.d.ts.map +1 -0
  33. package/dist/browser/pw-tools-downloads.js +191 -0
  34. package/dist/browser/pw-tools-downloads.js.map +1 -0
  35. package/dist/browser/pw-tools-interactions.d.ts +122 -0
  36. package/dist/browser/pw-tools-interactions.d.ts.map +1 -0
  37. package/dist/browser/pw-tools-interactions.js +434 -0
  38. package/dist/browser/pw-tools-interactions.js.map +1 -0
  39. package/dist/browser/pw-tools-responses.d.ts +19 -0
  40. package/dist/browser/pw-tools-responses.d.ts.map +1 -0
  41. package/dist/browser/pw-tools-responses.js +98 -0
  42. package/dist/browser/pw-tools-responses.js.map +1 -0
  43. package/dist/browser/pw-tools-shared.d.ts +12 -0
  44. package/dist/browser/pw-tools-shared.d.ts.map +1 -0
  45. package/dist/browser/pw-tools-shared.js +55 -0
  46. package/dist/browser/pw-tools-shared.js.map +1 -0
  47. package/dist/browser/pw-tools-snapshot.d.ts +70 -0
  48. package/dist/browser/pw-tools-snapshot.d.ts.map +1 -0
  49. package/dist/browser/pw-tools-snapshot.js +151 -0
  50. package/dist/browser/pw-tools-snapshot.js.map +1 -0
  51. package/dist/browser/pw-tools-state.d.ts +52 -0
  52. package/dist/browser/pw-tools-state.d.ts.map +1 -0
  53. package/dist/browser/pw-tools-state.js +159 -0
  54. package/dist/browser/pw-tools-state.js.map +1 -0
  55. package/dist/browser/pw-tools-storage.d.ts +53 -0
  56. package/dist/browser/pw-tools-storage.d.ts.map +1 -0
  57. package/dist/browser/pw-tools-storage.js +81 -0
  58. package/dist/browser/pw-tools-storage.js.map +1 -0
  59. package/dist/browser/pw-tools-trace.d.ts +18 -0
  60. package/dist/browser/pw-tools-trace.d.ts.map +1 -0
  61. package/dist/browser/pw-tools-trace.js +31 -0
  62. package/dist/browser/pw-tools-trace.js.map +1 -0
  63. package/dist/browser/tab-groups.d.ts +94 -0
  64. package/dist/browser/tab-groups.d.ts.map +1 -0
  65. package/dist/browser/tab-groups.js +303 -0
  66. package/dist/browser/tab-groups.js.map +1 -0
  67. package/dist/browser/target-id.d.ts +20 -0
  68. package/dist/browser/target-id.d.ts.map +1 -0
  69. package/dist/browser/target-id.js +29 -0
  70. package/dist/browser/target-id.js.map +1 -0
  71. package/dist/cli.d.ts +6 -0
  72. package/dist/cli.d.ts.map +1 -0
  73. package/dist/cli.js +35 -0
  74. package/dist/cli.js.map +1 -0
  75. package/dist/config.d.ts +32 -0
  76. package/dist/config.d.ts.map +1 -0
  77. package/dist/config.js +7 -0
  78. package/dist/config.js.map +1 -0
  79. package/dist/daemon/chrome-daemon.d.ts +7 -0
  80. package/dist/daemon/chrome-daemon.d.ts.map +1 -0
  81. package/dist/daemon/chrome-daemon.js +264 -0
  82. package/dist/daemon/chrome-daemon.js.map +1 -0
  83. package/dist/daemon/cli.d.ts +6 -0
  84. package/dist/daemon/cli.d.ts.map +1 -0
  85. package/dist/daemon/cli.js +110 -0
  86. package/dist/daemon/cli.js.map +1 -0
  87. package/dist/daemon/manager.d.ts +22 -0
  88. package/dist/daemon/manager.d.ts.map +1 -0
  89. package/dist/daemon/manager.js +89 -0
  90. package/dist/daemon/manager.js.map +1 -0
  91. package/dist/index.d.ts +9 -0
  92. package/dist/index.d.ts.map +1 -0
  93. package/dist/index.js +9 -0
  94. package/dist/index.js.map +1 -0
  95. package/dist/mcp/server.d.ts +41 -0
  96. package/dist/mcp/server.d.ts.map +1 -0
  97. package/dist/mcp/server.js +122 -0
  98. package/dist/mcp/server.js.map +1 -0
  99. package/dist/mcp/tools/actions.d.ts +6 -0
  100. package/dist/mcp/tools/actions.d.ts.map +1 -0
  101. package/dist/mcp/tools/actions.js +214 -0
  102. package/dist/mcp/tools/actions.js.map +1 -0
  103. package/dist/mcp/tools/navigate.d.ts +6 -0
  104. package/dist/mcp/tools/navigate.d.ts.map +1 -0
  105. package/dist/mcp/tools/navigate.js +31 -0
  106. package/dist/mcp/tools/navigate.js.map +1 -0
  107. package/dist/mcp/tools/snapshot.d.ts +6 -0
  108. package/dist/mcp/tools/snapshot.d.ts.map +1 -0
  109. package/dist/mcp/tools/snapshot.js +26 -0
  110. package/dist/mcp/tools/snapshot.js.map +1 -0
  111. package/dist/mcp/tools/tab-group.d.ts +9 -0
  112. package/dist/mcp/tools/tab-group.d.ts.map +1 -0
  113. package/dist/mcp/tools/tab-group.js +173 -0
  114. package/dist/mcp/tools/tab-group.js.map +1 -0
  115. package/dist/mcp/tools/tabs.d.ts +6 -0
  116. package/dist/mcp/tools/tabs.d.ts.map +1 -0
  117. package/dist/mcp/tools/tabs.js +209 -0
  118. package/dist/mcp/tools/tabs.js.map +1 -0
  119. package/dist/utils/command-format.d.ts +6 -0
  120. package/dist/utils/command-format.d.ts.map +1 -0
  121. package/dist/utils/command-format.js +8 -0
  122. package/dist/utils/command-format.js.map +1 -0
  123. package/dist/utils/errors.d.ts +6 -0
  124. package/dist/utils/errors.d.ts.map +1 -0
  125. package/dist/utils/errors.js +22 -0
  126. package/dist/utils/errors.js.map +1 -0
  127. package/dist/utils/extension-installer.d.ts +16 -0
  128. package/dist/utils/extension-installer.d.ts.map +1 -0
  129. package/dist/utils/extension-installer.js +134 -0
  130. package/dist/utils/extension-installer.js.map +1 -0
  131. package/package.json +75 -0
@@ -0,0 +1,434 @@
1
+ /**
2
+ * Extracted from OpenClaw (https://github.com/openclaw/openclaw)
3
+ * Original: src/browser/pw-tools-core.interactions.ts
4
+ * License: MIT
5
+ */
6
+ import { ensurePageState, getPageForTargetId, refLocator, restoreRoleRefsForTarget, } from "./pw-session.js";
7
+ import { normalizeTimeoutMs, requireRef, toAIFriendlyError } from "./pw-tools-shared.js";
8
+ export async function highlightViaPlaywright(opts) {
9
+ const page = await getPageForTargetId(opts);
10
+ ensurePageState(page);
11
+ restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });
12
+ const ref = requireRef(opts.ref);
13
+ try {
14
+ await refLocator(page, ref).highlight();
15
+ }
16
+ catch (err) {
17
+ throw toAIFriendlyError(err, ref);
18
+ }
19
+ }
20
+ export async function clickViaPlaywright(opts) {
21
+ const page = await getPageForTargetId({
22
+ cdpUrl: opts.cdpUrl,
23
+ targetId: opts.targetId,
24
+ });
25
+ ensurePageState(page);
26
+ restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });
27
+ const ref = requireRef(opts.ref);
28
+ const locator = refLocator(page, ref);
29
+ const timeout = Math.max(500, Math.min(60_000, Math.floor(opts.timeoutMs ?? 8000)));
30
+ try {
31
+ if (opts.doubleClick) {
32
+ await locator.dblclick({
33
+ timeout,
34
+ button: opts.button,
35
+ modifiers: opts.modifiers,
36
+ });
37
+ }
38
+ else {
39
+ await locator.click({
40
+ timeout,
41
+ button: opts.button,
42
+ modifiers: opts.modifiers,
43
+ });
44
+ }
45
+ }
46
+ catch (err) {
47
+ throw toAIFriendlyError(err, ref);
48
+ }
49
+ }
50
+ export async function hoverViaPlaywright(opts) {
51
+ const ref = requireRef(opts.ref);
52
+ const page = await getPageForTargetId(opts);
53
+ ensurePageState(page);
54
+ restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });
55
+ try {
56
+ await refLocator(page, ref).hover({
57
+ timeout: Math.max(500, Math.min(60_000, opts.timeoutMs ?? 8000)),
58
+ });
59
+ }
60
+ catch (err) {
61
+ throw toAIFriendlyError(err, ref);
62
+ }
63
+ }
64
+ export async function dragViaPlaywright(opts) {
65
+ const startRef = requireRef(opts.startRef);
66
+ const endRef = requireRef(opts.endRef);
67
+ if (!startRef || !endRef) {
68
+ throw new Error("startRef and endRef are required");
69
+ }
70
+ const page = await getPageForTargetId(opts);
71
+ ensurePageState(page);
72
+ restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });
73
+ try {
74
+ await refLocator(page, startRef).dragTo(refLocator(page, endRef), {
75
+ timeout: Math.max(500, Math.min(60_000, opts.timeoutMs ?? 8000)),
76
+ });
77
+ }
78
+ catch (err) {
79
+ throw toAIFriendlyError(err, `${startRef} -> ${endRef}`);
80
+ }
81
+ }
82
+ export async function selectOptionViaPlaywright(opts) {
83
+ const ref = requireRef(opts.ref);
84
+ if (!opts.values?.length) {
85
+ throw new Error("values are required");
86
+ }
87
+ const page = await getPageForTargetId(opts);
88
+ ensurePageState(page);
89
+ restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });
90
+ try {
91
+ await refLocator(page, ref).selectOption(opts.values, {
92
+ timeout: Math.max(500, Math.min(60_000, opts.timeoutMs ?? 8000)),
93
+ });
94
+ }
95
+ catch (err) {
96
+ throw toAIFriendlyError(err, ref);
97
+ }
98
+ }
99
+ export async function pressKeyViaPlaywright(opts) {
100
+ const key = String(opts.key ?? "").trim();
101
+ if (!key) {
102
+ throw new Error("key is required");
103
+ }
104
+ const page = await getPageForTargetId(opts);
105
+ ensurePageState(page);
106
+ await page.keyboard.press(key, {
107
+ delay: Math.max(0, Math.floor(opts.delayMs ?? 0)),
108
+ });
109
+ }
110
+ export async function typeViaPlaywright(opts) {
111
+ const text = String(opts.text ?? "");
112
+ const page = await getPageForTargetId(opts);
113
+ ensurePageState(page);
114
+ restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });
115
+ const ref = requireRef(opts.ref);
116
+ const locator = refLocator(page, ref);
117
+ const timeout = Math.max(500, Math.min(60_000, opts.timeoutMs ?? 8000));
118
+ try {
119
+ if (opts.slowly) {
120
+ await locator.click({ timeout });
121
+ await locator.type(text, { timeout, delay: 75 });
122
+ }
123
+ else {
124
+ await locator.fill(text, { timeout });
125
+ }
126
+ if (opts.submit) {
127
+ await locator.press("Enter", { timeout });
128
+ }
129
+ }
130
+ catch (err) {
131
+ throw toAIFriendlyError(err, ref);
132
+ }
133
+ }
134
+ export async function fillFormViaPlaywright(opts) {
135
+ const page = await getPageForTargetId(opts);
136
+ ensurePageState(page);
137
+ restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });
138
+ const timeout = Math.max(500, Math.min(60_000, opts.timeoutMs ?? 8000));
139
+ for (const field of opts.fields) {
140
+ const ref = field.ref.trim();
141
+ const type = field.type.trim();
142
+ const rawValue = field.value;
143
+ const value = typeof rawValue === "string"
144
+ ? rawValue
145
+ : typeof rawValue === "number" || typeof rawValue === "boolean"
146
+ ? String(rawValue)
147
+ : "";
148
+ if (!ref || !type) {
149
+ continue;
150
+ }
151
+ const locator = refLocator(page, ref);
152
+ if (type === "checkbox" || type === "radio") {
153
+ const checked = rawValue === true || rawValue === 1 || rawValue === "1" || rawValue === "true";
154
+ try {
155
+ await locator.setChecked(checked, { timeout });
156
+ }
157
+ catch (err) {
158
+ throw toAIFriendlyError(err, ref);
159
+ }
160
+ continue;
161
+ }
162
+ try {
163
+ await locator.fill(value, { timeout });
164
+ }
165
+ catch (err) {
166
+ throw toAIFriendlyError(err, ref);
167
+ }
168
+ }
169
+ }
170
+ export async function evaluateViaPlaywright(opts) {
171
+ const fnText = String(opts.fn ?? "").trim();
172
+ if (!fnText) {
173
+ throw new Error("function is required");
174
+ }
175
+ const page = await getPageForTargetId(opts);
176
+ ensurePageState(page);
177
+ restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });
178
+ if (opts.ref) {
179
+ const locator = refLocator(page, opts.ref);
180
+ // Use Function constructor at runtime to avoid esbuild adding __name helper
181
+ // which doesn't exist in the browser context
182
+ // eslint-disable-next-line @typescript-eslint/no-implied-eval -- required for browser-context eval
183
+ const elementEvaluator = new Function("el", "fnBody", `
184
+ "use strict";
185
+ try {
186
+ var candidate = eval("(" + fnBody + ")");
187
+ return typeof candidate === "function" ? candidate(el) : candidate;
188
+ } catch (err) {
189
+ throw new Error("Invalid evaluate function: " + (err && err.message ? err.message : String(err)));
190
+ }
191
+ `);
192
+ return await locator.evaluate(elementEvaluator, fnText);
193
+ }
194
+ // Use Function constructor at runtime to avoid esbuild adding __name helper
195
+ // which doesn't exist in the browser context
196
+ // eslint-disable-next-line @typescript-eslint/no-implied-eval -- required for browser-context eval
197
+ const browserEvaluator = new Function("fnBody", `
198
+ "use strict";
199
+ try {
200
+ var candidate = eval("(" + fnBody + ")");
201
+ return typeof candidate === "function" ? candidate() : candidate;
202
+ } catch (err) {
203
+ throw new Error("Invalid evaluate function: " + (err && err.message ? err.message : String(err)));
204
+ }
205
+ `);
206
+ return await page.evaluate(browserEvaluator, fnText);
207
+ }
208
+ export async function scrollIntoViewViaPlaywright(opts) {
209
+ const page = await getPageForTargetId(opts);
210
+ ensurePageState(page);
211
+ restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });
212
+ const timeout = normalizeTimeoutMs(opts.timeoutMs, 20_000);
213
+ const ref = requireRef(opts.ref);
214
+ const locator = refLocator(page, ref);
215
+ try {
216
+ await locator.scrollIntoViewIfNeeded({ timeout });
217
+ }
218
+ catch (err) {
219
+ throw toAIFriendlyError(err, ref);
220
+ }
221
+ }
222
+ export async function waitForViaPlaywright(opts) {
223
+ const page = await getPageForTargetId(opts);
224
+ ensurePageState(page);
225
+ const timeout = normalizeTimeoutMs(opts.timeoutMs, 20_000);
226
+ if (typeof opts.timeMs === "number" && Number.isFinite(opts.timeMs)) {
227
+ await page.waitForTimeout(Math.max(0, opts.timeMs));
228
+ }
229
+ if (opts.text) {
230
+ await page.getByText(opts.text).first().waitFor({
231
+ state: "visible",
232
+ timeout,
233
+ });
234
+ }
235
+ if (opts.textGone) {
236
+ await page.getByText(opts.textGone).first().waitFor({
237
+ state: "hidden",
238
+ timeout,
239
+ });
240
+ }
241
+ if (opts.selector) {
242
+ const selector = String(opts.selector).trim();
243
+ if (selector) {
244
+ await page.locator(selector).first().waitFor({ state: "visible", timeout });
245
+ }
246
+ }
247
+ if (opts.url) {
248
+ const url = String(opts.url).trim();
249
+ if (url) {
250
+ await page.waitForURL(url, { timeout });
251
+ }
252
+ }
253
+ if (opts.loadState) {
254
+ await page.waitForLoadState(opts.loadState, { timeout });
255
+ }
256
+ if (opts.fn) {
257
+ const fn = String(opts.fn).trim();
258
+ if (fn) {
259
+ await page.waitForFunction(fn, { timeout });
260
+ }
261
+ }
262
+ }
263
+ export async function takeScreenshotViaPlaywright(opts) {
264
+ const page = await getPageForTargetId(opts);
265
+ ensurePageState(page);
266
+ restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });
267
+ const type = opts.type ?? "png";
268
+ if (opts.ref) {
269
+ if (opts.fullPage) {
270
+ throw new Error("fullPage is not supported for element screenshots");
271
+ }
272
+ const locator = refLocator(page, opts.ref);
273
+ const buffer = await locator.screenshot({ type });
274
+ return { buffer };
275
+ }
276
+ if (opts.element) {
277
+ if (opts.fullPage) {
278
+ throw new Error("fullPage is not supported for element screenshots");
279
+ }
280
+ const locator = page.locator(opts.element).first();
281
+ const buffer = await locator.screenshot({ type });
282
+ return { buffer };
283
+ }
284
+ const buffer = await page.screenshot({
285
+ type,
286
+ fullPage: Boolean(opts.fullPage),
287
+ });
288
+ return { buffer };
289
+ }
290
+ export async function screenshotWithLabelsViaPlaywright(opts) {
291
+ const page = await getPageForTargetId(opts);
292
+ ensurePageState(page);
293
+ restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });
294
+ const type = opts.type ?? "png";
295
+ const maxLabels = typeof opts.maxLabels === "number" && Number.isFinite(opts.maxLabels)
296
+ ? Math.max(1, Math.floor(opts.maxLabels))
297
+ : 150;
298
+ const viewport = await page.evaluate(() => ({
299
+ scrollX: window.scrollX || 0,
300
+ scrollY: window.scrollY || 0,
301
+ width: window.innerWidth || 0,
302
+ height: window.innerHeight || 0,
303
+ }));
304
+ const refs = Object.keys(opts.refs ?? {});
305
+ const boxes = [];
306
+ let skipped = 0;
307
+ for (const ref of refs) {
308
+ if (boxes.length >= maxLabels) {
309
+ skipped += 1;
310
+ continue;
311
+ }
312
+ try {
313
+ const box = await refLocator(page, ref).boundingBox();
314
+ if (!box) {
315
+ skipped += 1;
316
+ continue;
317
+ }
318
+ const x0 = box.x;
319
+ const y0 = box.y;
320
+ const x1 = box.x + box.width;
321
+ const y1 = box.y + box.height;
322
+ const vx0 = viewport.scrollX;
323
+ const vy0 = viewport.scrollY;
324
+ const vx1 = viewport.scrollX + viewport.width;
325
+ const vy1 = viewport.scrollY + viewport.height;
326
+ if (x1 < vx0 || x0 > vx1 || y1 < vy0 || y0 > vy1) {
327
+ skipped += 1;
328
+ continue;
329
+ }
330
+ boxes.push({
331
+ ref,
332
+ x: x0 - viewport.scrollX,
333
+ y: y0 - viewport.scrollY,
334
+ w: Math.max(1, box.width),
335
+ h: Math.max(1, box.height),
336
+ });
337
+ }
338
+ catch {
339
+ skipped += 1;
340
+ }
341
+ }
342
+ try {
343
+ if (boxes.length > 0) {
344
+ await page.evaluate((labels) => {
345
+ const existing = document.querySelectorAll("[data-openclaw-labels]");
346
+ existing.forEach((el) => el.remove());
347
+ const root = document.createElement("div");
348
+ root.setAttribute("data-openclaw-labels", "1");
349
+ root.style.position = "fixed";
350
+ root.style.left = "0";
351
+ root.style.top = "0";
352
+ root.style.zIndex = "2147483647";
353
+ root.style.pointerEvents = "none";
354
+ root.style.fontFamily =
355
+ '"SF Mono","SFMono-Regular",Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace';
356
+ const clamp = (value, min, max) => Math.min(max, Math.max(min, value));
357
+ for (const label of labels) {
358
+ const box = document.createElement("div");
359
+ box.setAttribute("data-openclaw-labels", "1");
360
+ box.style.position = "absolute";
361
+ box.style.left = `${label.x}px`;
362
+ box.style.top = `${label.y}px`;
363
+ box.style.width = `${label.w}px`;
364
+ box.style.height = `${label.h}px`;
365
+ box.style.border = "2px solid #ffb020";
366
+ box.style.boxSizing = "border-box";
367
+ const tag = document.createElement("div");
368
+ tag.setAttribute("data-openclaw-labels", "1");
369
+ tag.textContent = label.ref;
370
+ tag.style.position = "absolute";
371
+ tag.style.left = `${label.x}px`;
372
+ tag.style.top = `${clamp(label.y - 18, 0, 20000)}px`;
373
+ tag.style.background = "#ffb020";
374
+ tag.style.color = "#1a1a1a";
375
+ tag.style.fontSize = "12px";
376
+ tag.style.lineHeight = "14px";
377
+ tag.style.padding = "1px 4px";
378
+ tag.style.borderRadius = "3px";
379
+ tag.style.boxShadow = "0 1px 2px rgba(0,0,0,0.35)";
380
+ tag.style.whiteSpace = "nowrap";
381
+ root.appendChild(box);
382
+ root.appendChild(tag);
383
+ }
384
+ document.documentElement.appendChild(root);
385
+ }, boxes);
386
+ }
387
+ const buffer = await page.screenshot({ type });
388
+ return { buffer, labels: boxes.length, skipped };
389
+ }
390
+ finally {
391
+ await page
392
+ .evaluate(() => {
393
+ const existing = document.querySelectorAll("[data-openclaw-labels]");
394
+ existing.forEach((el) => el.remove());
395
+ })
396
+ .catch(() => { });
397
+ }
398
+ }
399
+ export async function setInputFilesViaPlaywright(opts) {
400
+ const page = await getPageForTargetId(opts);
401
+ ensurePageState(page);
402
+ restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });
403
+ if (!opts.paths.length) {
404
+ throw new Error("paths are required");
405
+ }
406
+ const inputRef = typeof opts.inputRef === "string" ? opts.inputRef.trim() : "";
407
+ const element = typeof opts.element === "string" ? opts.element.trim() : "";
408
+ if (inputRef && element) {
409
+ throw new Error("inputRef and element are mutually exclusive");
410
+ }
411
+ if (!inputRef && !element) {
412
+ throw new Error("inputRef or element is required");
413
+ }
414
+ const locator = inputRef ? refLocator(page, inputRef) : page.locator(element).first();
415
+ try {
416
+ await locator.setInputFiles(opts.paths);
417
+ }
418
+ catch (err) {
419
+ throw toAIFriendlyError(err, inputRef || element);
420
+ }
421
+ try {
422
+ const handle = await locator.elementHandle();
423
+ if (handle) {
424
+ await handle.evaluate((el) => {
425
+ el.dispatchEvent(new Event("input", { bubbles: true }));
426
+ el.dispatchEvent(new Event("change", { bubbles: true }));
427
+ });
428
+ }
429
+ }
430
+ catch {
431
+ // Best-effort for sites that don't react to setInputFiles alone.
432
+ }
433
+ }
434
+ //# sourceMappingURL=pw-tools-interactions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pw-tools-interactions.js","sourceRoot":"","sources":["../../src/browser/pw-tools-interactions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Extracted from OpenClaw (https://github.com/openclaw/openclaw)
3
+ * Original: src/browser/pw-tools-core.responses.ts
4
+ * License: MIT
5
+ */
6
+ export declare function responseBodyViaPlaywright(opts: {
7
+ cdpUrl: string;
8
+ targetId?: string;
9
+ url: string;
10
+ timeoutMs?: number;
11
+ maxChars?: number;
12
+ }): Promise<{
13
+ url: string;
14
+ status?: number;
15
+ headers?: Record<string, string>;
16
+ body: string;
17
+ truncated?: boolean;
18
+ }>;
19
+ //# sourceMappingURL=pw-tools-responses.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pw-tools-responses.d.ts","sourceRoot":"","sources":["../../src/browser/pw-tools-responses.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAuBH,wBAAsB,yBAAyB,CAAC,IAAI,EAAE;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC;IACV,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC,CA0FD"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Extracted from OpenClaw (https://github.com/openclaw/openclaw)
3
+ * Original: src/browser/pw-tools-core.responses.ts
4
+ * License: MIT
5
+ */
6
+ import { formatCliCommand } from "../utils/command-format.js";
7
+ import { ensurePageState, getPageForTargetId } from "./pw-session.js";
8
+ import { normalizeTimeoutMs } from "./pw-tools-shared.js";
9
+ function matchUrlPattern(pattern, url) {
10
+ const p = pattern.trim();
11
+ if (!p) {
12
+ return false;
13
+ }
14
+ if (p === url) {
15
+ return true;
16
+ }
17
+ if (p.includes("*")) {
18
+ // eslint-disable-next-line no-useless-escape
19
+ const escaped = p.replace(/[|\{}()[\]^$+?.]/g, "\$&");
20
+ const regex = new RegExp(`^${escaped.replace(/\*\*/g, ".*").replace(/\*/g, ".*")}$`);
21
+ return regex.test(url);
22
+ }
23
+ return url.includes(p);
24
+ }
25
+ export async function responseBodyViaPlaywright(opts) {
26
+ const pattern = String(opts.url ?? "").trim();
27
+ if (!pattern) {
28
+ throw new Error("url is required");
29
+ }
30
+ const maxChars = typeof opts.maxChars === "number" && Number.isFinite(opts.maxChars)
31
+ ? Math.max(1, Math.min(5_000_000, Math.floor(opts.maxChars)))
32
+ : 200_000;
33
+ const timeout = normalizeTimeoutMs(opts.timeoutMs, 20_000);
34
+ const page = await getPageForTargetId(opts);
35
+ ensurePageState(page);
36
+ const promise = new Promise((resolve, reject) => {
37
+ let done = false;
38
+ let timer;
39
+ let handler;
40
+ const cleanup = () => {
41
+ if (timer) {
42
+ clearTimeout(timer);
43
+ }
44
+ timer = undefined;
45
+ if (handler) {
46
+ page.off("response", handler);
47
+ }
48
+ };
49
+ handler = (resp) => {
50
+ if (done) {
51
+ return;
52
+ }
53
+ const r = resp;
54
+ const u = r.url?.() || "";
55
+ if (!matchUrlPattern(pattern, u)) {
56
+ return;
57
+ }
58
+ done = true;
59
+ cleanup();
60
+ resolve(resp);
61
+ };
62
+ page.on("response", handler);
63
+ timer = setTimeout(() => {
64
+ if (done) {
65
+ return;
66
+ }
67
+ done = true;
68
+ cleanup();
69
+ reject(new Error(`Response not found for url pattern "${pattern}". Run '${formatCliCommand("openclaw browser requests")}' to inspect recent network activity.`));
70
+ }, timeout);
71
+ });
72
+ const resp = (await promise);
73
+ const url = resp.url?.() || "";
74
+ const status = resp.status?.();
75
+ const headers = resp.headers?.();
76
+ let bodyText = "";
77
+ try {
78
+ if (typeof resp.text === "function") {
79
+ bodyText = await resp.text();
80
+ }
81
+ else if (typeof resp.body === "function") {
82
+ const buf = await resp.body();
83
+ bodyText = new TextDecoder("utf-8").decode(buf);
84
+ }
85
+ }
86
+ catch (err) {
87
+ throw new Error(`Failed to read response body for "${url}": ${String(err)}`, { cause: err });
88
+ }
89
+ const trimmed = bodyText.length > maxChars ? bodyText.slice(0, maxChars) : bodyText;
90
+ return {
91
+ url,
92
+ status,
93
+ headers,
94
+ body: trimmed,
95
+ truncated: bodyText.length > maxChars ? true : undefined,
96
+ };
97
+ }
98
+ //# sourceMappingURL=pw-tools-responses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pw-tools-responses.js","sourceRoot":"","sources":["../../src/browser/pw-tools-responses.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Extracted from OpenClaw (https://github.com/openclaw/openclaw)
3
+ * Original: src/browser/pw-tools-core.shared.ts
4
+ * License: MIT
5
+ */
6
+ export declare function bumpUploadArmId(): number;
7
+ export declare function bumpDialogArmId(): number;
8
+ export declare function bumpDownloadArmId(): number;
9
+ export declare function requireRef(value: unknown): string;
10
+ export declare function normalizeTimeoutMs(timeoutMs: number | undefined, fallback: number): number;
11
+ export declare function toAIFriendlyError(error: unknown, selector: string): Error;
12
+ //# sourceMappingURL=pw-tools-shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pw-tools-shared.d.ts","sourceRoot":"","sources":["../../src/browser/pw-tools-shared.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,wBAAgB,eAAe,IAAI,MAAM,CAGxC;AAED,wBAAgB,eAAe,IAAI,MAAM,CAGxC;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAG1C;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAQjD;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,UAEjF;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,KAAK,CAkCzE"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Extracted from OpenClaw (https://github.com/openclaw/openclaw)
3
+ * Original: src/browser/pw-tools-core.shared.ts
4
+ * License: MIT
5
+ */
6
+ import { parseRoleRef } from "./pw-role-snapshot.js";
7
+ let nextUploadArmId = 0;
8
+ let nextDialogArmId = 0;
9
+ let nextDownloadArmId = 0;
10
+ export function bumpUploadArmId() {
11
+ nextUploadArmId += 1;
12
+ return nextUploadArmId;
13
+ }
14
+ export function bumpDialogArmId() {
15
+ nextDialogArmId += 1;
16
+ return nextDialogArmId;
17
+ }
18
+ export function bumpDownloadArmId() {
19
+ nextDownloadArmId += 1;
20
+ return nextDownloadArmId;
21
+ }
22
+ export function requireRef(value) {
23
+ const raw = typeof value === "string" ? value.trim() : "";
24
+ const roleRef = raw ? parseRoleRef(raw) : null;
25
+ const ref = roleRef ?? (raw.startsWith("@") ? raw.slice(1) : raw);
26
+ if (!ref) {
27
+ throw new Error("ref is required");
28
+ }
29
+ return ref;
30
+ }
31
+ export function normalizeTimeoutMs(timeoutMs, fallback) {
32
+ return Math.max(500, Math.min(120_000, timeoutMs ?? fallback));
33
+ }
34
+ export function toAIFriendlyError(error, selector) {
35
+ const message = error instanceof Error ? error.message : String(error);
36
+ if (message.includes("strict mode violation")) {
37
+ const countMatch = message.match(/resolved to (\d+) elements/);
38
+ const count = countMatch ? countMatch[1] : "multiple";
39
+ return new Error(`Selector "${selector}" matched ${count} elements. ` +
40
+ `Run a new snapshot to get updated refs, or use a different ref.`);
41
+ }
42
+ if ((message.includes("Timeout") || message.includes("waiting for")) &&
43
+ (message.includes("to be visible") || message.includes("not visible"))) {
44
+ return new Error(`Element "${selector}" not found or not visible. ` +
45
+ `Run a new snapshot to see current page elements.`);
46
+ }
47
+ if (message.includes("intercepts pointer events") ||
48
+ message.includes("not visible") ||
49
+ message.includes("not receive pointer events")) {
50
+ return new Error(`Element "${selector}" is not interactable (hidden or covered). ` +
51
+ `Try scrolling it into view, closing overlays, or re-snapshotting.`);
52
+ }
53
+ return error instanceof Error ? error : new Error(message);
54
+ }
55
+ //# sourceMappingURL=pw-tools-shared.js.map