browser-devtools-mcp 0.1.7 → 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/LICENSE +93 -21
- package/README.md +93 -16
- package/dist/cli.js +53 -1721
- package/dist/core.js +764 -0
- package/dist/daemon-server.js +1 -338
- package/dist/index.d.ts +2 -0
- package/dist/index.js +210 -80
- package/dist/otel/otel-initializer.bundle.js +0 -1
- package/dist/tools/a11y/index.d.ts +2 -0
- package/dist/tools/content/index.d.ts +2 -0
- package/dist/tools/debug/index.d.ts +2 -0
- package/dist/tools/figma/compare/index.d.ts +56 -0
- package/dist/tools/figma/compare/types.d.ts +15 -0
- package/dist/tools/figma/index.d.ts +2 -0
- package/dist/tools/index.d.ts +4 -0
- package/dist/tools/interaction/index.d.ts +2 -0
- package/dist/tools/navigation/index.d.ts +2 -0
- package/dist/tools/o11y/index.d.ts +2 -0
- package/dist/tools/react/index.d.ts +2 -0
- package/dist/tools/run/index.d.ts +2 -0
- package/dist/tools/stub/index.d.ts +2 -0
- package/dist/tools/sync/index.d.ts +2 -0
- package/dist/tools/types.d.ts +21 -0
- package/dist/types.d.ts +78 -0
- package/package.json +11 -11
- package/dist/browser.js +0 -213
- package/dist/browser.js.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/config.js +0 -96
- package/dist/config.js.map +0 -1
- package/dist/context.js +0 -298
- package/dist/context.js.map +0 -1
- package/dist/daemon-server.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/logger.js +0 -97
- package/dist/logger.js.map +0 -1
- package/dist/mcp-server.js +0 -401
- package/dist/mcp-server.js.map +0 -1
- package/dist/otel/otel-controller.js +0 -323
- package/dist/otel/otel-controller.js.map +0 -1
- package/dist/otel/otel-initializer.bundle.js.map +0 -7
- package/dist/otel/otel-proxy.js +0 -407
- package/dist/otel/otel-proxy.js.map +0 -1
- package/dist/server-info.js +0 -186
- package/dist/server-info.js.map +0 -1
- package/dist/tools/a11y/index.js +0 -7
- package/dist/tools/a11y/index.js.map +0 -1
- package/dist/tools/a11y/take-aria-snapshot.js +0 -54
- package/dist/tools/a11y/take-aria-snapshot.js.map +0 -1
- package/dist/tools/a11y/take-ax-tree-snapshot.js +0 -850
- package/dist/tools/a11y/take-ax-tree-snapshot.js.map +0 -1
- package/dist/tools/content/get-as-html.js +0 -164
- package/dist/tools/content/get-as-html.js.map +0 -1
- package/dist/tools/content/get-as-text.js +0 -76
- package/dist/tools/content/get-as-text.js.map +0 -1
- package/dist/tools/content/index.js +0 -14
- package/dist/tools/content/index.js.map +0 -1
- package/dist/tools/content/save-as-pdf.js +0 -119
- package/dist/tools/content/save-as-pdf.js.map +0 -1
- package/dist/tools/content/take-screenshot.js +0 -297
- package/dist/tools/content/take-screenshot.js.map +0 -1
- package/dist/tools/figma/compare/compare-image-embedding.js +0 -159
- package/dist/tools/figma/compare/compare-image-embedding.js.map +0 -1
- package/dist/tools/figma/compare/compare-mssim.js +0 -98
- package/dist/tools/figma/compare/compare-mssim.js.map +0 -1
- package/dist/tools/figma/compare/compare-text-embedding.js +0 -291
- package/dist/tools/figma/compare/compare-text-embedding.js.map +0 -1
- package/dist/tools/figma/compare/index.js +0 -139
- package/dist/tools/figma/compare/index.js.map +0 -1
- package/dist/tools/figma/compare/types.js +0 -3
- package/dist/tools/figma/compare/types.js.map +0 -1
- package/dist/tools/figma/compare/vector.js +0 -46
- package/dist/tools/figma/compare/vector.js.map +0 -1
- package/dist/tools/figma/compare-page-with-design.js +0 -240
- package/dist/tools/figma/compare-page-with-design.js.map +0 -1
- package/dist/tools/figma/figma-service.js +0 -134
- package/dist/tools/figma/figma-service.js.map +0 -1
- package/dist/tools/figma/index.js +0 -6
- package/dist/tools/figma/index.js.map +0 -1
- package/dist/tools/index.js +0 -41
- package/dist/tools/index.js.map +0 -1
- package/dist/tools/interaction/click.js +0 -29
- package/dist/tools/interaction/click.js.map +0 -1
- package/dist/tools/interaction/drag.js +0 -41
- package/dist/tools/interaction/drag.js.map +0 -1
- package/dist/tools/interaction/fill.js +0 -28
- package/dist/tools/interaction/fill.js.map +0 -1
- package/dist/tools/interaction/hover.js +0 -29
- package/dist/tools/interaction/hover.js.map +0 -1
- package/dist/tools/interaction/index.js +0 -24
- package/dist/tools/interaction/index.js.map +0 -1
- package/dist/tools/interaction/press-key.js +0 -99
- package/dist/tools/interaction/press-key.js.map +0 -1
- package/dist/tools/interaction/resize-viewport.js +0 -110
- package/dist/tools/interaction/resize-viewport.js.map +0 -1
- package/dist/tools/interaction/resize-window.js +0 -261
- package/dist/tools/interaction/resize-window.js.map +0 -1
- package/dist/tools/interaction/scroll.js +0 -304
- package/dist/tools/interaction/scroll.js.map +0 -1
- package/dist/tools/interaction/select.js +0 -30
- package/dist/tools/interaction/select.js.map +0 -1
- package/dist/tools/navigation/go-back.js +0 -76
- package/dist/tools/navigation/go-back.js.map +0 -1
- package/dist/tools/navigation/go-forward.js +0 -76
- package/dist/tools/navigation/go-forward.js.map +0 -1
- package/dist/tools/navigation/go-to.js +0 -80
- package/dist/tools/navigation/go-to.js.map +0 -1
- package/dist/tools/navigation/index.js +0 -14
- package/dist/tools/navigation/index.js.map +0 -1
- package/dist/tools/navigation/reload.js +0 -76
- package/dist/tools/navigation/reload.js.map +0 -1
- package/dist/tools/o11y/get-console-messages.js +0 -151
- package/dist/tools/o11y/get-console-messages.js.map +0 -1
- package/dist/tools/o11y/get-http-requests.js +0 -216
- package/dist/tools/o11y/get-http-requests.js.map +0 -1
- package/dist/tools/o11y/get-trace-id.js +0 -30
- package/dist/tools/o11y/get-trace-id.js.map +0 -1
- package/dist/tools/o11y/get-web-vitals.js +0 -595
- package/dist/tools/o11y/get-web-vitals.js.map +0 -1
- package/dist/tools/o11y/index.js +0 -18
- package/dist/tools/o11y/index.js.map +0 -1
- package/dist/tools/o11y/new-trace-id.js +0 -32
- package/dist/tools/o11y/new-trace-id.js.map +0 -1
- package/dist/tools/o11y/set-trace-id.js +0 -28
- package/dist/tools/o11y/set-trace-id.js.map +0 -1
- package/dist/tools/react/get-component-for-element.js +0 -941
- package/dist/tools/react/get-component-for-element.js.map +0 -1
- package/dist/tools/react/get-element-for-component.js +0 -1190
- package/dist/tools/react/get-element-for-component.js.map +0 -1
- package/dist/tools/react/index.js +0 -10
- package/dist/tools/react/index.js.map +0 -1
- package/dist/tools/run/index.js +0 -7
- package/dist/tools/run/index.js.map +0 -1
- package/dist/tools/run/js-in-browser.js +0 -51
- package/dist/tools/run/js-in-browser.js.map +0 -1
- package/dist/tools/run/js-in-sandbox.js +0 -175
- package/dist/tools/run/js-in-sandbox.js.map +0 -1
- package/dist/tools/stub/clear.js +0 -41
- package/dist/tools/stub/clear.js.map +0 -1
- package/dist/tools/stub/index.js +0 -14
- package/dist/tools/stub/index.js.map +0 -1
- package/dist/tools/stub/intercept-http-request.js +0 -112
- package/dist/tools/stub/intercept-http-request.js.map +0 -1
- package/dist/tools/stub/list.js +0 -75
- package/dist/tools/stub/list.js.map +0 -1
- package/dist/tools/stub/mock-http-response.js +0 -152
- package/dist/tools/stub/mock-http-response.js.map +0 -1
- package/dist/tools/stub/stub-controller.js +0 -284
- package/dist/tools/stub/stub-controller.js.map +0 -1
- package/dist/tools/sync/index.js +0 -6
- package/dist/tools/sync/index.js.map +0 -1
- package/dist/tools/sync/wait-for-network-idle.js +0 -152
- package/dist/tools/sync/wait-for-network-idle.js.map +0 -1
- package/dist/tools/tool-executor.js +0 -79
- package/dist/tools/tool-executor.js.map +0 -1
- package/dist/tools/types.js +0 -3
- package/dist/tools/types.js.map +0 -1
- package/dist/types.js +0 -55
- package/dist/types.js.map +0 -1
- package/dist/utils/cli-utils.js +0 -253
- package/dist/utils/cli-utils.js.map +0 -1
- package/dist/utils.js +0 -85
- package/dist/utils.js.map +0 -1
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PressKey = void 0;
|
|
4
|
-
const zod_1 = require("zod");
|
|
5
|
-
const DEFAULT_REPEAT_INTERVAL_MS = 50;
|
|
6
|
-
const MIN_REPEAT_INTERVAL_MS = 10;
|
|
7
|
-
class PressKey {
|
|
8
|
-
name() {
|
|
9
|
-
return 'interaction_press-key';
|
|
10
|
-
}
|
|
11
|
-
description() {
|
|
12
|
-
return `
|
|
13
|
-
Presses a keyboard key with optional "hold" and auto-repeat behavior.
|
|
14
|
-
|
|
15
|
-
Key facts:
|
|
16
|
-
- keyboard.press(key, { delay }) does NOT trigger OS-style auto-repeat.
|
|
17
|
-
- Some UI behaviors (especially scrolling) require repeated keydown events.
|
|
18
|
-
- Use repeat=true + holdMs to approximate real keyboard holding.
|
|
19
|
-
|
|
20
|
-
Execution logic:
|
|
21
|
-
- If selector is provided, the element is focused first.
|
|
22
|
-
- If holdMs is omitted or repeat=false:
|
|
23
|
-
→ a single keyboard.press() is executed.
|
|
24
|
-
- If holdMs is provided AND repeat=true:
|
|
25
|
-
→ keyboard.press() is called repeatedly until holdMs elapses.
|
|
26
|
-
`.trim();
|
|
27
|
-
}
|
|
28
|
-
inputSchema() {
|
|
29
|
-
return {
|
|
30
|
-
key: zod_1.z
|
|
31
|
-
.string()
|
|
32
|
-
.describe('Keyboard key to press (e.g. "Enter", "ArrowDown", "a").'),
|
|
33
|
-
selector: zod_1.z
|
|
34
|
-
.string()
|
|
35
|
-
.describe('Optional CSS selector to focus before sending the key.')
|
|
36
|
-
.optional(),
|
|
37
|
-
holdMs: zod_1.z
|
|
38
|
-
.number()
|
|
39
|
-
.int()
|
|
40
|
-
.min(0)
|
|
41
|
-
.describe('Optional duration in milliseconds to hold the key. With repeat=true, this is the total repeat duration.')
|
|
42
|
-
.optional(),
|
|
43
|
-
repeat: zod_1.z
|
|
44
|
-
.boolean()
|
|
45
|
-
.optional()
|
|
46
|
-
.default(false)
|
|
47
|
-
.describe('If true, simulates key auto-repeat by pressing the key repeatedly (useful for scrolling).'),
|
|
48
|
-
repeatIntervalMs: zod_1.z
|
|
49
|
-
.number()
|
|
50
|
-
.int()
|
|
51
|
-
.min(MIN_REPEAT_INTERVAL_MS)
|
|
52
|
-
.optional()
|
|
53
|
-
.default(DEFAULT_REPEAT_INTERVAL_MS)
|
|
54
|
-
.describe(`Interval between repeated key presses in ms (only when repeat=true).`),
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
outputSchema() {
|
|
58
|
-
return {};
|
|
59
|
-
}
|
|
60
|
-
async handle(context, args) {
|
|
61
|
-
/**
|
|
62
|
-
* Focus target element if selector is provided.
|
|
63
|
-
* Otherwise, key events go to the currently focused element or page.
|
|
64
|
-
*/
|
|
65
|
-
if (args.selector) {
|
|
66
|
-
const element = await context.page.waitForSelector(args.selector);
|
|
67
|
-
await element.focus();
|
|
68
|
-
}
|
|
69
|
-
const holdMs = args.holdMs ?? 0;
|
|
70
|
-
const repeat = args.repeat === true;
|
|
71
|
-
/**
|
|
72
|
-
* Simple case:
|
|
73
|
-
* - No hold requested OR repeat disabled
|
|
74
|
-
* - Single press with optional delay
|
|
75
|
-
*/
|
|
76
|
-
if (holdMs <= 0 || repeat === false) {
|
|
77
|
-
await context.page.keyboard.press(args.key, holdMs > 0 ? { delay: holdMs } : undefined);
|
|
78
|
-
return {};
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Auto-repeat simulation:
|
|
82
|
-
* - Repeated key presses until holdMs elapses
|
|
83
|
-
* - Approximates native keyboard repeat behavior
|
|
84
|
-
*/
|
|
85
|
-
const repeatIntervalMs = typeof args.repeatIntervalMs === 'number' &&
|
|
86
|
-
Number.isFinite(args.repeatIntervalMs) &&
|
|
87
|
-
args.repeatIntervalMs >= MIN_REPEAT_INTERVAL_MS
|
|
88
|
-
? Math.floor(args.repeatIntervalMs)
|
|
89
|
-
: DEFAULT_REPEAT_INTERVAL_MS;
|
|
90
|
-
const startMs = Date.now();
|
|
91
|
-
while (Date.now() - startMs < holdMs) {
|
|
92
|
-
await context.page.keyboard.press(args.key);
|
|
93
|
-
await context.page.waitForTimeout(repeatIntervalMs);
|
|
94
|
-
}
|
|
95
|
-
return {};
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
exports.PressKey = PressKey;
|
|
99
|
-
//# sourceMappingURL=press-key.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"press-key.js","sourceRoot":"","sources":["../../../src/tools/interaction/press-key.ts"],"names":[],"mappings":";;;AAUA,6BAAwB;AAExB,MAAM,0BAA0B,GAAW,EAAE,CAAC;AAC9C,MAAM,sBAAsB,GAAW,EAAE,CAAC;AAoE1C,MAAa,QAAQ;IACjB,IAAI;QACA,OAAO,uBAAuB,CAAC;IACnC,CAAC;IAED,WAAW;QACP,OAAO;;;;;;;;;;;;;;SAcN,CAAC,IAAI,EAAE,CAAC;IACb,CAAC;IAED,WAAW;QACP,OAAO;YACH,GAAG,EAAE,OAAC;iBACD,MAAM,EAAE;iBACR,QAAQ,CACL,yDAAyD,CAC5D;YACL,QAAQ,EAAE,OAAC;iBACN,MAAM,EAAE;iBACR,QAAQ,CACL,wDAAwD,CAC3D;iBACA,QAAQ,EAAE;YACf,MAAM,EAAE,OAAC;iBACJ,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,CACL,yGAAyG,CAC5G;iBACA,QAAQ,EAAE;YACf,MAAM,EAAE,OAAC;iBACJ,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,KAAK,CAAC;iBACd,QAAQ,CACL,2FAA2F,CAC9F;YACL,gBAAgB,EAAE,OAAC;iBACd,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,GAAG,CAAC,sBAAsB,CAAC;iBAC3B,QAAQ,EAAE;iBACV,OAAO,CAAC,0BAA0B,CAAC;iBACnC,QAAQ,CACL,sEAAsE,CACzE;SACR,CAAC;IACN,CAAC;IAED,YAAY;QACR,OAAO,EAAE,CAAC;IACd,CAAC;IAED,KAAK,CAAC,MAAM,CACR,OAA2B,EAC3B,IAAmB;QAEnB;;;WAGG;QACH,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,MAAM,OAAO,GAAkB,MAAM,OAAO,CAAC,IAAI,CAAC,eAAe,CAC7D,IAAI,CAAC,QAAQ,CAChB,CAAC;YACF,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QAC1B,CAAC;QAED,MAAM,MAAM,GAAW,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;QACxC,MAAM,MAAM,GAAY,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC;QAE7C;;;;WAIG;QACH,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YAClC,MAAM,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAC7B,IAAI,CAAC,GAAG,EACR,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAC7C,CAAC;YACF,OAAO,EAAE,CAAC;QACd,CAAC;QAED;;;;WAIG;QACH,MAAM,gBAAgB,GAClB,OAAO,IAAI,CAAC,gBAAgB,KAAK,QAAQ;YACzC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC;YACtC,IAAI,CAAC,gBAAgB,IAAI,sBAAsB;YAC3C,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC;YACnC,CAAC,CAAC,0BAA0B,CAAC;QAErC,MAAM,OAAO,GAAW,IAAI,CAAC,GAAG,EAAE,CAAC;QAEnC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,GAAG,MAAM,EAAE,CAAC;YACnC,MAAM,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC5C,MAAM,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;QACxD,CAAC;QAED,OAAO,EAAE,CAAC;IACd,CAAC;CACJ;AAvHD,4BAuHC"}
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ResizeViewport = void 0;
|
|
4
|
-
const zod_1 = require("zod");
|
|
5
|
-
const MIN_VIEWPORT_WIDTH = 200;
|
|
6
|
-
const MIN_VIEWPORT_HEIGHT = 200;
|
|
7
|
-
class ResizeViewport {
|
|
8
|
-
name() {
|
|
9
|
-
return 'interaction_resize-viewport';
|
|
10
|
-
}
|
|
11
|
-
description() {
|
|
12
|
-
return `
|
|
13
|
-
Resizes the PAGE VIEWPORT using Playwright viewport emulation (page.setViewportSize).
|
|
14
|
-
|
|
15
|
-
This affects:
|
|
16
|
-
- window.innerWidth / window.innerHeight
|
|
17
|
-
- CSS media queries (responsive layouts)
|
|
18
|
-
- Layout, rendering and screenshots
|
|
19
|
-
|
|
20
|
-
Notes:
|
|
21
|
-
- This does NOT resize the OS-level browser window.
|
|
22
|
-
- Runtime switching to viewport=null (binding to real window size) is not supported by Playwright.
|
|
23
|
-
If you need real window-driven responsive behavior, start the BrowserContext with viewport: null
|
|
24
|
-
and use the window resize tool instead.
|
|
25
|
-
`.trim();
|
|
26
|
-
}
|
|
27
|
-
inputSchema() {
|
|
28
|
-
return {
|
|
29
|
-
width: zod_1.z
|
|
30
|
-
.number()
|
|
31
|
-
.int()
|
|
32
|
-
.min(MIN_VIEWPORT_WIDTH)
|
|
33
|
-
.describe('Target viewport width in CSS pixels.'),
|
|
34
|
-
height: zod_1.z
|
|
35
|
-
.number()
|
|
36
|
-
.int()
|
|
37
|
-
.min(MIN_VIEWPORT_HEIGHT)
|
|
38
|
-
.describe('Target viewport height in CSS pixels.'),
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
outputSchema() {
|
|
42
|
-
return {
|
|
43
|
-
requested: zod_1.z
|
|
44
|
-
.object({
|
|
45
|
-
width: zod_1.z
|
|
46
|
-
.number()
|
|
47
|
-
.int()
|
|
48
|
-
.describe('Requested viewport width (CSS pixels).'),
|
|
49
|
-
height: zod_1.z
|
|
50
|
-
.number()
|
|
51
|
-
.int()
|
|
52
|
-
.describe('Requested viewport height (CSS pixels).'),
|
|
53
|
-
})
|
|
54
|
-
.describe('Requested viewport configuration.'),
|
|
55
|
-
viewport: zod_1.z
|
|
56
|
-
.object({
|
|
57
|
-
innerWidth: zod_1.z
|
|
58
|
-
.number()
|
|
59
|
-
.int()
|
|
60
|
-
.describe('window.innerWidth after resize (CSS pixels).'),
|
|
61
|
-
innerHeight: zod_1.z
|
|
62
|
-
.number()
|
|
63
|
-
.int()
|
|
64
|
-
.describe('window.innerHeight after resize (CSS pixels).'),
|
|
65
|
-
outerWidth: zod_1.z
|
|
66
|
-
.number()
|
|
67
|
-
.int()
|
|
68
|
-
.describe('window.outerWidth after resize (CSS pixels).'),
|
|
69
|
-
outerHeight: zod_1.z
|
|
70
|
-
.number()
|
|
71
|
-
.int()
|
|
72
|
-
.describe('window.outerHeight after resize (CSS pixels).'),
|
|
73
|
-
devicePixelRatio: zod_1.z
|
|
74
|
-
.number()
|
|
75
|
-
.describe('window.devicePixelRatio after resize.'),
|
|
76
|
-
})
|
|
77
|
-
.describe('Viewport metrics observed inside the page after resizing.'),
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
async handle(context, args) {
|
|
81
|
-
await context.page.setViewportSize({
|
|
82
|
-
width: args.width,
|
|
83
|
-
height: args.height,
|
|
84
|
-
});
|
|
85
|
-
const metrics = await context.page.evaluate(() => {
|
|
86
|
-
return {
|
|
87
|
-
innerWidth: window.innerWidth,
|
|
88
|
-
innerHeight: window.innerHeight,
|
|
89
|
-
outerWidth: window.outerWidth,
|
|
90
|
-
outerHeight: window.outerHeight,
|
|
91
|
-
devicePixelRatio: window.devicePixelRatio,
|
|
92
|
-
};
|
|
93
|
-
});
|
|
94
|
-
return {
|
|
95
|
-
requested: {
|
|
96
|
-
width: args.width,
|
|
97
|
-
height: args.height,
|
|
98
|
-
},
|
|
99
|
-
viewport: {
|
|
100
|
-
innerWidth: Number(metrics.innerWidth),
|
|
101
|
-
innerHeight: Number(metrics.innerHeight),
|
|
102
|
-
outerWidth: Number(metrics.outerWidth),
|
|
103
|
-
outerHeight: Number(metrics.outerHeight),
|
|
104
|
-
devicePixelRatio: Number(metrics.devicePixelRatio),
|
|
105
|
-
},
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
exports.ResizeViewport = ResizeViewport;
|
|
110
|
-
//# sourceMappingURL=resize-viewport.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resize-viewport.js","sourceRoot":"","sources":["../../../src/tools/interaction/resize-viewport.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,261 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ResizeWindow = void 0;
|
|
4
|
-
const zod_1 = require("zod");
|
|
5
|
-
const MIN_WINDOW_WIDTH = 200;
|
|
6
|
-
const MIN_WINDOW_HEIGHT = 200;
|
|
7
|
-
class ResizeWindow {
|
|
8
|
-
name() {
|
|
9
|
-
return 'interaction_resize-window';
|
|
10
|
-
}
|
|
11
|
-
description() {
|
|
12
|
-
return `
|
|
13
|
-
Resizes the REAL BROWSER WINDOW (OS-level window) for the current page using Chrome DevTools Protocol (CDP).
|
|
14
|
-
|
|
15
|
-
This tool works best on Chromium-based browsers (Chromium/Chrome/Edge).
|
|
16
|
-
It is especially useful in headful sessions when you run with viewport emulation disabled (viewport: null),
|
|
17
|
-
so the page layout follows the OS window size.
|
|
18
|
-
|
|
19
|
-
Important:
|
|
20
|
-
- If Playwright viewport emulation is enabled (viewport is NOT null), resizing the OS window may not change page layout.
|
|
21
|
-
- On non-Chromium browsers (Firefox/WebKit), CDP is not available and this tool will fail.
|
|
22
|
-
`.trim();
|
|
23
|
-
}
|
|
24
|
-
inputSchema() {
|
|
25
|
-
return {
|
|
26
|
-
width: zod_1.z
|
|
27
|
-
.number()
|
|
28
|
-
.int()
|
|
29
|
-
.min(MIN_WINDOW_WIDTH)
|
|
30
|
-
.optional()
|
|
31
|
-
.describe('Target window width in pixels (required when state="normal").'),
|
|
32
|
-
height: zod_1.z
|
|
33
|
-
.number()
|
|
34
|
-
.int()
|
|
35
|
-
.min(MIN_WINDOW_HEIGHT)
|
|
36
|
-
.optional()
|
|
37
|
-
.describe('Target window height in pixels (required when state="normal").'),
|
|
38
|
-
state: zod_1.z
|
|
39
|
-
.enum(['normal', 'maximized', 'minimized', 'fullscreen'])
|
|
40
|
-
.optional()
|
|
41
|
-
.default('normal')
|
|
42
|
-
.describe('Target window state. If not "normal", width/height may be ignored by the browser.'),
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
outputSchema() {
|
|
46
|
-
return {
|
|
47
|
-
requested: zod_1.z
|
|
48
|
-
.object({
|
|
49
|
-
width: zod_1.z
|
|
50
|
-
.number()
|
|
51
|
-
.int()
|
|
52
|
-
.nullable()
|
|
53
|
-
.describe('Requested window width (pixels). Null if not provided.'),
|
|
54
|
-
height: zod_1.z
|
|
55
|
-
.number()
|
|
56
|
-
.int()
|
|
57
|
-
.nullable()
|
|
58
|
-
.describe('Requested window height (pixels). Null if not provided.'),
|
|
59
|
-
state: zod_1.z
|
|
60
|
-
.enum([
|
|
61
|
-
'normal',
|
|
62
|
-
'maximized',
|
|
63
|
-
'minimized',
|
|
64
|
-
'fullscreen',
|
|
65
|
-
])
|
|
66
|
-
.describe('Requested window state.'),
|
|
67
|
-
})
|
|
68
|
-
.describe('Requested window change parameters.'),
|
|
69
|
-
before: zod_1.z
|
|
70
|
-
.object({
|
|
71
|
-
windowId: zod_1.z
|
|
72
|
-
.number()
|
|
73
|
-
.int()
|
|
74
|
-
.describe('CDP window id for the current target.'),
|
|
75
|
-
state: zod_1.z
|
|
76
|
-
.string()
|
|
77
|
-
.nullable()
|
|
78
|
-
.describe('Window state before resizing.'),
|
|
79
|
-
left: zod_1.z
|
|
80
|
-
.number()
|
|
81
|
-
.int()
|
|
82
|
-
.nullable()
|
|
83
|
-
.describe('Window left position before resizing.'),
|
|
84
|
-
top: zod_1.z
|
|
85
|
-
.number()
|
|
86
|
-
.int()
|
|
87
|
-
.nullable()
|
|
88
|
-
.describe('Window top position before resizing.'),
|
|
89
|
-
width: zod_1.z
|
|
90
|
-
.number()
|
|
91
|
-
.int()
|
|
92
|
-
.nullable()
|
|
93
|
-
.describe('Window width before resizing.'),
|
|
94
|
-
height: zod_1.z
|
|
95
|
-
.number()
|
|
96
|
-
.int()
|
|
97
|
-
.nullable()
|
|
98
|
-
.describe('Window height before resizing.'),
|
|
99
|
-
})
|
|
100
|
-
.describe('Window bounds before resizing.'),
|
|
101
|
-
after: zod_1.z
|
|
102
|
-
.object({
|
|
103
|
-
windowId: zod_1.z
|
|
104
|
-
.number()
|
|
105
|
-
.int()
|
|
106
|
-
.describe('CDP window id for the current target.'),
|
|
107
|
-
state: zod_1.z
|
|
108
|
-
.string()
|
|
109
|
-
.nullable()
|
|
110
|
-
.describe('Window state after resizing.'),
|
|
111
|
-
left: zod_1.z
|
|
112
|
-
.number()
|
|
113
|
-
.int()
|
|
114
|
-
.nullable()
|
|
115
|
-
.describe('Window left position after resizing.'),
|
|
116
|
-
top: zod_1.z
|
|
117
|
-
.number()
|
|
118
|
-
.int()
|
|
119
|
-
.nullable()
|
|
120
|
-
.describe('Window top position after resizing.'),
|
|
121
|
-
width: zod_1.z
|
|
122
|
-
.number()
|
|
123
|
-
.int()
|
|
124
|
-
.nullable()
|
|
125
|
-
.describe('Window width after resizing.'),
|
|
126
|
-
height: zod_1.z
|
|
127
|
-
.number()
|
|
128
|
-
.int()
|
|
129
|
-
.nullable()
|
|
130
|
-
.describe('Window height after resizing.'),
|
|
131
|
-
})
|
|
132
|
-
.describe('Window bounds after resizing.'),
|
|
133
|
-
viewport: zod_1.z
|
|
134
|
-
.object({
|
|
135
|
-
innerWidth: zod_1.z
|
|
136
|
-
.number()
|
|
137
|
-
.int()
|
|
138
|
-
.describe('window.innerWidth after resizing (CSS pixels).'),
|
|
139
|
-
innerHeight: zod_1.z
|
|
140
|
-
.number()
|
|
141
|
-
.int()
|
|
142
|
-
.describe('window.innerHeight after resizing (CSS pixels).'),
|
|
143
|
-
outerWidth: zod_1.z
|
|
144
|
-
.number()
|
|
145
|
-
.int()
|
|
146
|
-
.describe('window.outerWidth after resizing (CSS pixels).'),
|
|
147
|
-
outerHeight: zod_1.z
|
|
148
|
-
.number()
|
|
149
|
-
.int()
|
|
150
|
-
.describe('window.outerHeight after resizing (CSS pixels).'),
|
|
151
|
-
devicePixelRatio: zod_1.z
|
|
152
|
-
.number()
|
|
153
|
-
.describe('window.devicePixelRatio after resizing.'),
|
|
154
|
-
})
|
|
155
|
-
.describe('Page viewport metrics after resizing (helps verify responsive behavior).'),
|
|
156
|
-
};
|
|
157
|
-
}
|
|
158
|
-
async handle(context, args) {
|
|
159
|
-
const state = args.state ?? 'normal';
|
|
160
|
-
const width = args.width;
|
|
161
|
-
const height = args.height;
|
|
162
|
-
if (state === 'normal') {
|
|
163
|
-
if (typeof width !== 'number' || typeof height !== 'number') {
|
|
164
|
-
throw new Error('state="normal" requires both width and height.');
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
const page = context.page;
|
|
168
|
-
const cdp = await page.context().newCDPSession(page);
|
|
169
|
-
try {
|
|
170
|
-
const info = await cdp.send('Browser.getWindowForTarget', {});
|
|
171
|
-
const windowId = Number(info.windowId);
|
|
172
|
-
const beforeBounds = info.bounds ?? {};
|
|
173
|
-
const before = {
|
|
174
|
-
windowId: windowId,
|
|
175
|
-
state: typeof beforeBounds.windowState === 'string'
|
|
176
|
-
? beforeBounds.windowState
|
|
177
|
-
: null,
|
|
178
|
-
left: typeof beforeBounds.left === 'number'
|
|
179
|
-
? beforeBounds.left
|
|
180
|
-
: null,
|
|
181
|
-
top: typeof beforeBounds.top === 'number'
|
|
182
|
-
? beforeBounds.top
|
|
183
|
-
: null,
|
|
184
|
-
width: typeof beforeBounds.width === 'number'
|
|
185
|
-
? beforeBounds.width
|
|
186
|
-
: null,
|
|
187
|
-
height: typeof beforeBounds.height === 'number'
|
|
188
|
-
? beforeBounds.height
|
|
189
|
-
: null,
|
|
190
|
-
};
|
|
191
|
-
const boundsToSet = {};
|
|
192
|
-
if (state !== 'normal') {
|
|
193
|
-
boundsToSet.windowState = state;
|
|
194
|
-
}
|
|
195
|
-
else {
|
|
196
|
-
boundsToSet.windowState = 'normal';
|
|
197
|
-
boundsToSet.width = width;
|
|
198
|
-
boundsToSet.height = height;
|
|
199
|
-
}
|
|
200
|
-
await cdp.send('Browser.setWindowBounds', {
|
|
201
|
-
windowId: windowId,
|
|
202
|
-
bounds: boundsToSet,
|
|
203
|
-
});
|
|
204
|
-
const afterInfo = await cdp.send('Browser.getWindowForTarget', {});
|
|
205
|
-
const afterBounds = afterInfo.bounds ?? {};
|
|
206
|
-
const after = {
|
|
207
|
-
windowId: windowId,
|
|
208
|
-
state: typeof afterBounds.windowState === 'string'
|
|
209
|
-
? afterBounds.windowState
|
|
210
|
-
: null,
|
|
211
|
-
left: typeof afterBounds.left === 'number'
|
|
212
|
-
? afterBounds.left
|
|
213
|
-
: null,
|
|
214
|
-
top: typeof afterBounds.top === 'number'
|
|
215
|
-
? afterBounds.top
|
|
216
|
-
: null,
|
|
217
|
-
width: typeof afterBounds.width === 'number'
|
|
218
|
-
? afterBounds.width
|
|
219
|
-
: null,
|
|
220
|
-
height: typeof afterBounds.height === 'number'
|
|
221
|
-
? afterBounds.height
|
|
222
|
-
: null,
|
|
223
|
-
};
|
|
224
|
-
const metrics = await page.evaluate(() => {
|
|
225
|
-
return {
|
|
226
|
-
innerWidth: window.innerWidth,
|
|
227
|
-
innerHeight: window.innerHeight,
|
|
228
|
-
outerWidth: window.outerWidth,
|
|
229
|
-
outerHeight: window.outerHeight,
|
|
230
|
-
devicePixelRatio: window.devicePixelRatio,
|
|
231
|
-
};
|
|
232
|
-
});
|
|
233
|
-
const viewport = {
|
|
234
|
-
innerWidth: Number(metrics.innerWidth),
|
|
235
|
-
innerHeight: Number(metrics.innerHeight),
|
|
236
|
-
outerWidth: Number(metrics.outerWidth),
|
|
237
|
-
outerHeight: Number(metrics.outerHeight),
|
|
238
|
-
devicePixelRatio: Number(metrics.devicePixelRatio),
|
|
239
|
-
};
|
|
240
|
-
return {
|
|
241
|
-
requested: {
|
|
242
|
-
width: typeof width === 'number' ? width : null,
|
|
243
|
-
height: typeof height === 'number' ? height : null,
|
|
244
|
-
state: state,
|
|
245
|
-
},
|
|
246
|
-
before,
|
|
247
|
-
after,
|
|
248
|
-
viewport,
|
|
249
|
-
};
|
|
250
|
-
}
|
|
251
|
-
catch (e) {
|
|
252
|
-
const msg = String(e?.message ?? e);
|
|
253
|
-
throw new Error(`Failed to resize real browser window via CDP. This tool works best on Chromium-based browsers. Original error: ${msg}`);
|
|
254
|
-
}
|
|
255
|
-
finally {
|
|
256
|
-
await cdp.detach().catch(() => { });
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
exports.ResizeWindow = ResizeWindow;
|
|
261
|
-
//# sourceMappingURL=resize-window.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resize-window.js","sourceRoot":"","sources":["../../../src/tools/interaction/resize-window.ts"],"names":[],"mappings":"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"}
|