mcp-accessibility-scanner 1.1.2 → 2.0.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 (110) hide show
  1. package/lib/browserContextFactory.js +83 -99
  2. package/lib/browserContextFactory.js.map +1 -1
  3. package/lib/browserServerBackend.js +78 -0
  4. package/lib/browserServerBackend.js.map +1 -0
  5. package/lib/config.js +77 -20
  6. package/lib/config.js.map +1 -1
  7. package/lib/context.js +109 -174
  8. package/lib/context.js.map +1 -1
  9. package/lib/extension/cdpRelay.js +359 -0
  10. package/lib/extension/cdpRelay.js.map +1 -0
  11. package/lib/extension/extensionContextFactory.js +57 -0
  12. package/lib/extension/extensionContextFactory.js.map +1 -0
  13. package/lib/extension/protocol.js +19 -0
  14. package/lib/extension/protocol.js.map +1 -0
  15. package/lib/index.js +7 -3
  16. package/lib/index.js.map +1 -1
  17. package/lib/{transport.js → mcp/http.js} +65 -63
  18. package/lib/mcp/http.js.map +1 -0
  19. package/lib/mcp/inProcessTransport.js +73 -0
  20. package/lib/mcp/inProcessTransport.js.map +1 -0
  21. package/lib/mcp/manualPromise.js.map +1 -0
  22. package/lib/mcp/mdb.js +199 -0
  23. package/lib/mcp/mdb.js.map +1 -0
  24. package/lib/mcp/proxyBackend.js +105 -0
  25. package/lib/mcp/proxyBackend.js.map +1 -0
  26. package/lib/mcp/server.js +124 -0
  27. package/lib/mcp/server.js.map +1 -0
  28. package/lib/mcp/tool.js +33 -0
  29. package/lib/mcp/tool.js.map +1 -0
  30. package/lib/program.js +81 -26
  31. package/lib/program.js.map +1 -1
  32. package/lib/response.js +166 -0
  33. package/lib/response.js.map +1 -0
  34. package/lib/sessionLog.js +122 -0
  35. package/lib/sessionLog.js.map +1 -0
  36. package/lib/tab.js +171 -23
  37. package/lib/tab.js.map +1 -1
  38. package/lib/tools/common.js +12 -25
  39. package/lib/tools/common.js.map +1 -1
  40. package/lib/tools/console.js +4 -15
  41. package/lib/tools/console.js.map +1 -1
  42. package/lib/tools/dialogs.js +14 -19
  43. package/lib/tools/dialogs.js.map +1 -1
  44. package/lib/tools/evaluate.js +54 -0
  45. package/lib/tools/evaluate.js.map +1 -0
  46. package/lib/tools/files.js +12 -19
  47. package/lib/tools/files.js.map +1 -1
  48. package/lib/tools/form.js +58 -0
  49. package/lib/tools/form.js.map +1 -0
  50. package/lib/tools/install.js +7 -10
  51. package/lib/tools/install.js.map +1 -1
  52. package/lib/tools/keyboard.js +49 -17
  53. package/lib/tools/keyboard.js.map +1 -1
  54. package/lib/tools/mouse.js +100 -0
  55. package/lib/tools/mouse.js.map +1 -0
  56. package/lib/tools/navigate.js +13 -52
  57. package/lib/tools/navigate.js.map +1 -1
  58. package/lib/tools/network.js +5 -15
  59. package/lib/tools/network.js.map +1 -1
  60. package/lib/tools/pdf.js +8 -17
  61. package/lib/tools/pdf.js.map +1 -1
  62. package/lib/tools/screenshot.js +36 -34
  63. package/lib/tools/screenshot.js.map +1 -1
  64. package/lib/tools/snapshot.js +103 -154
  65. package/lib/tools/snapshot.js.map +1 -1
  66. package/lib/tools/tabs.js +34 -93
  67. package/lib/tools/tabs.js.map +1 -1
  68. package/lib/tools/tool.js +15 -0
  69. package/lib/tools/tool.js.map +1 -1
  70. package/lib/tools/utils.js +7 -13
  71. package/lib/tools/utils.js.map +1 -1
  72. package/lib/tools/verify.js +138 -0
  73. package/lib/tools/verify.js.map +1 -0
  74. package/lib/tools/wait.js +11 -15
  75. package/lib/tools/wait.js.map +1 -1
  76. package/lib/tools.js +19 -23
  77. package/lib/tools.js.map +1 -1
  78. package/lib/{javascript.js → utils/codegen.js} +2 -2
  79. package/lib/utils/codegen.js.map +1 -0
  80. package/lib/{fileUtils.js → utils/fileUtils.js} +6 -2
  81. package/lib/utils/fileUtils.js.map +1 -0
  82. package/lib/utils/guid.js +23 -0
  83. package/lib/utils/guid.js.map +1 -0
  84. package/lib/utils/log.js +22 -0
  85. package/lib/utils/log.js.map +1 -0
  86. package/lib/{package.js → utils/package.js} +4 -4
  87. package/lib/utils/package.js.map +1 -0
  88. package/lib/vscode/host.js +129 -0
  89. package/lib/vscode/host.js.map +1 -0
  90. package/lib/vscode/main.js +63 -0
  91. package/lib/vscode/main.js.map +1 -0
  92. package/package.json +20 -20
  93. package/lib/browserServer.js +0 -152
  94. package/lib/browserServer.js.map +0 -1
  95. package/lib/connection.js +0 -83
  96. package/lib/connection.js.map +0 -1
  97. package/lib/fileUtils.js.map +0 -1
  98. package/lib/httpServer.js +0 -202
  99. package/lib/httpServer.js.map +0 -1
  100. package/lib/javascript.js.map +0 -1
  101. package/lib/manualPromise.js.map +0 -1
  102. package/lib/package.js.map +0 -1
  103. package/lib/pageSnapshot.js +0 -44
  104. package/lib/pageSnapshot.js.map +0 -1
  105. package/lib/server.js +0 -49
  106. package/lib/server.js.map +0 -1
  107. package/lib/tools/vision.js +0 -190
  108. package/lib/tools/vision.js.map +0 -1
  109. package/lib/transport.js.map +0 -1
  110. /package/lib/{manualPromise.js → mcp/manualPromise.js} +0 -0
@@ -14,11 +14,12 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import { fork } from 'child_process';
17
+ import path from 'path';
18
+ import { fileURLToPath } from 'url';
17
19
  import { z } from 'zod';
18
20
  import { defineTool } from './tool.js';
19
- import { createRequire } from "node:module";
20
21
  const install = defineTool({
21
- capability: 'install',
22
+ capability: 'core-install',
22
23
  schema: {
23
24
  name: 'browser_install',
24
25
  title: 'Install the browser specified in the config',
@@ -26,10 +27,10 @@ const install = defineTool({
26
27
  inputSchema: z.object({}),
27
28
  type: 'destructive',
28
29
  },
29
- handle: async (context) => {
30
+ handle: async (context, params, response) => {
30
31
  const channel = context.config.browser?.launchOptions?.channel ?? context.config.browser?.browserName ?? 'chrome';
31
- const require = createRequire(import.meta.url);
32
- const cliPath = require.resolve('playwright/cli.js');
32
+ const cliUrl = import.meta.resolve('playwright/package.json');
33
+ const cliPath = path.join(fileURLToPath(cliUrl), '..', 'cli.js');
33
34
  const child = fork(cliPath, ['install', channel], {
34
35
  stdio: 'pipe',
35
36
  });
@@ -44,11 +45,7 @@ const install = defineTool({
44
45
  reject(new Error(`Failed to install browser: ${output.join('')}`));
45
46
  });
46
47
  });
47
- return {
48
- code: [`// Browser ${channel} installed`],
49
- captureSnapshot: false,
50
- waitForNetwork: false,
51
- };
48
+ response.setIncludeTabs();
52
49
  },
53
50
  });
54
51
  export default [
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/tools/install.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAGrC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAC,aAAa,EAAC,MAAM,aAAa,CAAC;AAE1C,MAAM,OAAO,GAAG,UAAU,CAAC;IACzB,UAAU,EAAE,SAAS;IACrB,MAAM,EAAE;QACN,IAAI,EAAE,iBAAiB;QACvB,KAAK,EAAE,6CAA6C;QACpD,WAAW,EAAE,mHAAmH;QAChI,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,IAAI,EAAE,aAAa;KACpB;IAED,MAAM,EAAE,KAAK,EAAC,OAAO,EAAC,EAAE;QACtB,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,IAAI,QAAQ,CAAC;QAClH,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE;YAChD,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;QACH,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC/D,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC/D,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;gBACvB,IAAI,IAAI,KAAK,CAAC;oBACZ,OAAO,EAAE,CAAC;;oBAEV,MAAM,CAAC,IAAI,KAAK,CAAC,8BAA8B,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACvE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,OAAO;YACL,IAAI,EAAE,CAAC,cAAc,OAAO,YAAY,CAAC;YACzC,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,KAAK;SACtB,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEH,eAAe;IACb,OAAO;CACR,CAAC"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/tools/install.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAGvC,MAAM,OAAO,GAAG,UAAU,CAAC;IACzB,UAAU,EAAE,cAAc;IAC1B,MAAM,EAAE;QACN,IAAI,EAAE,iBAAiB;QACvB,KAAK,EAAE,6CAA6C;QACpD,WAAW,EAAE,mHAAmH;QAChI,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,IAAI,EAAE,aAAa;KACpB;IAED,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE;QAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,IAAI,QAAQ,CAAC;QAClH,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;QAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QACjE,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE;YAChD,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;QACH,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC/D,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC/D,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;gBACvB,IAAI,IAAI,KAAK,CAAC;oBACZ,OAAO,EAAE,CAAC;;oBAEV,MAAM,CAAC,IAAI,KAAK,CAAC,8BAA8B,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACvE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,cAAc,EAAE,CAAC;IAC5B,CAAC;CACF,CAAC,CAAC;AAEH,eAAe;IACb,OAAO;CACR,CAAC"}
@@ -14,8 +14,11 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import { z } from 'zod';
17
- import { defineTool } from './tool.js';
18
- const pressKey = captureSnapshot => defineTool({
17
+ import { defineTabTool } from './tool.js';
18
+ import { elementSchema } from './snapshot.js';
19
+ import { generateLocator } from './utils.js';
20
+ import * as javascript from '../utils/codegen.js';
21
+ const pressKey = defineTabTool({
19
22
  capability: 'core',
20
23
  schema: {
21
24
  name: 'browser_press_key',
@@ -26,22 +29,51 @@ const pressKey = captureSnapshot => defineTool({
26
29
  }),
27
30
  type: 'destructive',
28
31
  },
29
- handle: async (context, params) => {
30
- const tab = context.currentTabOrDie();
31
- const code = [
32
- `// Press ${params.key}`,
33
- `await page.keyboard.press('${params.key}');`,
34
- ];
35
- const action = () => tab.page.keyboard.press(params.key);
36
- return {
37
- code,
38
- action,
39
- captureSnapshot,
40
- waitForNetwork: true
41
- };
32
+ handle: async (tab, params, response) => {
33
+ response.setIncludeSnapshot();
34
+ response.addCode(`// Press ${params.key}`);
35
+ response.addCode(`await page.keyboard.press('${params.key}');`);
36
+ await tab.waitForCompletion(async () => {
37
+ await tab.page.keyboard.press(params.key);
38
+ });
42
39
  },
43
40
  });
44
- export default (captureSnapshot) => [
45
- pressKey(captureSnapshot),
41
+ const typeSchema = elementSchema.extend({
42
+ text: z.string().describe('Text to type into the element'),
43
+ submit: z.boolean().optional().describe('Whether to submit entered text (press Enter after)'),
44
+ slowly: z.boolean().optional().describe('Whether to type one character at a time. Useful for triggering key handlers in the page. By default entire text is filled in at once.'),
45
+ });
46
+ const type = defineTabTool({
47
+ capability: 'core',
48
+ schema: {
49
+ name: 'browser_type',
50
+ title: 'Type text',
51
+ description: 'Type text into editable element',
52
+ inputSchema: typeSchema,
53
+ type: 'destructive',
54
+ },
55
+ handle: async (tab, params, response) => {
56
+ const locator = await tab.refLocator(params);
57
+ await tab.waitForCompletion(async () => {
58
+ if (params.slowly) {
59
+ response.setIncludeSnapshot();
60
+ response.addCode(`await page.${await generateLocator(locator)}.pressSequentially(${javascript.quote(params.text)});`);
61
+ await locator.pressSequentially(params.text);
62
+ }
63
+ else {
64
+ response.addCode(`await page.${await generateLocator(locator)}.fill(${javascript.quote(params.text)});`);
65
+ await locator.fill(params.text);
66
+ }
67
+ if (params.submit) {
68
+ response.setIncludeSnapshot();
69
+ response.addCode(`await page.${await generateLocator(locator)}.press('Enter');`);
70
+ await locator.press('Enter');
71
+ }
72
+ });
73
+ },
74
+ });
75
+ export default [
76
+ pressKey,
77
+ type,
46
78
  ];
47
79
  //# sourceMappingURL=keyboard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"keyboard.js","sourceRoot":"","sources":["../../src/tools/keyboard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAoB,MAAM,WAAW,CAAC;AAEzD,MAAM,QAAQ,GAAgB,eAAe,CAAC,EAAE,CAAC,UAAU,CAAC;IAC1D,UAAU,EAAE,MAAM;IAElB,MAAM,EAAE;QACN,IAAI,EAAE,mBAAmB;QACzB,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,6BAA6B;QAC1C,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iFAAiF,CAAC;SAC5G,CAAC;QACF,IAAI,EAAE,aAAa;KACpB;IAED,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;QAChC,MAAM,GAAG,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;QAEtC,MAAM,IAAI,GAAG;YACX,YAAY,MAAM,CAAC,GAAG,EAAE;YACxB,8BAA8B,MAAM,CAAC,GAAG,KAAK;SAC9C,CAAC;QAEF,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAEzD,OAAO;YACL,IAAI;YACJ,MAAM;YACN,eAAe;YACf,cAAc,EAAE,IAAI;SACrB,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEH,eAAe,CAAC,eAAwB,EAAE,EAAE,CAAC;IAC3C,QAAQ,CAAC,eAAe,CAAC;CAC1B,CAAC"}
1
+ {"version":3,"file":"keyboard.js","sourceRoot":"","sources":["../../src/tools/keyboard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Copyright (c) Microsoft Corporation.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { z } from 'zod';
17
+ import { defineTabTool } from './tool.js';
18
+ const elementSchema = z.object({
19
+ element: z.string().describe('Human-readable element description used to obtain permission to interact with the element'),
20
+ });
21
+ const mouseMove = defineTabTool({
22
+ capability: 'vision',
23
+ schema: {
24
+ name: 'browser_mouse_move_xy',
25
+ title: 'Move mouse',
26
+ description: 'Move mouse to a given position',
27
+ inputSchema: elementSchema.extend({
28
+ x: z.number().describe('X coordinate'),
29
+ y: z.number().describe('Y coordinate'),
30
+ }),
31
+ type: 'readOnly',
32
+ },
33
+ handle: async (tab, params, response) => {
34
+ response.addCode(`// Move mouse to (${params.x}, ${params.y})`);
35
+ response.addCode(`await page.mouse.move(${params.x}, ${params.y});`);
36
+ await tab.waitForCompletion(async () => {
37
+ await tab.page.mouse.move(params.x, params.y);
38
+ });
39
+ },
40
+ });
41
+ const mouseClick = defineTabTool({
42
+ capability: 'vision',
43
+ schema: {
44
+ name: 'browser_mouse_click_xy',
45
+ title: 'Click',
46
+ description: 'Click left mouse button at a given position',
47
+ inputSchema: elementSchema.extend({
48
+ x: z.number().describe('X coordinate'),
49
+ y: z.number().describe('Y coordinate'),
50
+ }),
51
+ type: 'destructive',
52
+ },
53
+ handle: async (tab, params, response) => {
54
+ response.setIncludeSnapshot();
55
+ response.addCode(`// Click mouse at coordinates (${params.x}, ${params.y})`);
56
+ response.addCode(`await page.mouse.move(${params.x}, ${params.y});`);
57
+ response.addCode(`await page.mouse.down();`);
58
+ response.addCode(`await page.mouse.up();`);
59
+ await tab.waitForCompletion(async () => {
60
+ await tab.page.mouse.move(params.x, params.y);
61
+ await tab.page.mouse.down();
62
+ await tab.page.mouse.up();
63
+ });
64
+ },
65
+ });
66
+ const mouseDrag = defineTabTool({
67
+ capability: 'vision',
68
+ schema: {
69
+ name: 'browser_mouse_drag_xy',
70
+ title: 'Drag mouse',
71
+ description: 'Drag left mouse button to a given position',
72
+ inputSchema: elementSchema.extend({
73
+ startX: z.number().describe('Start X coordinate'),
74
+ startY: z.number().describe('Start Y coordinate'),
75
+ endX: z.number().describe('End X coordinate'),
76
+ endY: z.number().describe('End Y coordinate'),
77
+ }),
78
+ type: 'destructive',
79
+ },
80
+ handle: async (tab, params, response) => {
81
+ response.setIncludeSnapshot();
82
+ response.addCode(`// Drag mouse from (${params.startX}, ${params.startY}) to (${params.endX}, ${params.endY})`);
83
+ response.addCode(`await page.mouse.move(${params.startX}, ${params.startY});`);
84
+ response.addCode(`await page.mouse.down();`);
85
+ response.addCode(`await page.mouse.move(${params.endX}, ${params.endY});`);
86
+ response.addCode(`await page.mouse.up();`);
87
+ await tab.waitForCompletion(async () => {
88
+ await tab.page.mouse.move(params.startX, params.startY);
89
+ await tab.page.mouse.down();
90
+ await tab.page.mouse.move(params.endX, params.endY);
91
+ await tab.page.mouse.up();
92
+ });
93
+ },
94
+ });
95
+ export default [
96
+ mouseMove,
97
+ mouseClick,
98
+ mouseDrag,
99
+ ];
100
+ //# sourceMappingURL=mouse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mouse.js","sourceRoot":"","sources":["../../src/tools/mouse.ts"],"names":[],"mappings":"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"}
@@ -14,8 +14,8 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import { z } from 'zod';
17
- import { defineTool } from './tool.js';
18
- const navigate = captureSnapshot => defineTool({
17
+ import { defineTool, defineTabTool } from './tool.js';
18
+ const navigate = defineTool({
19
19
  capability: 'core',
20
20
  schema: {
21
21
  name: 'browser_navigate',
@@ -26,22 +26,15 @@ const navigate = captureSnapshot => defineTool({
26
26
  }),
27
27
  type: 'destructive',
28
28
  },
29
- handle: async (context, params) => {
29
+ handle: async (context, params, response) => {
30
30
  const tab = await context.ensureTab();
31
31
  await tab.navigate(params.url);
32
- const code = [
33
- `// Navigate to ${params.url}`,
34
- `await page.goto('${params.url}');`,
35
- ];
36
- return {
37
- code,
38
- captureSnapshot,
39
- waitForNetwork: false,
40
- };
32
+ response.setIncludeSnapshot();
33
+ response.addCode(`await page.goto('${params.url}');`);
41
34
  },
42
35
  });
43
- const goBack = captureSnapshot => defineTool({
44
- capability: 'history',
36
+ const goBack = defineTabTool({
37
+ capability: 'core',
45
38
  schema: {
46
39
  name: 'browser_navigate_back',
47
40
  title: 'Go back',
@@ -49,46 +42,14 @@ const goBack = captureSnapshot => defineTool({
49
42
  inputSchema: z.object({}),
50
43
  type: 'readOnly',
51
44
  },
52
- handle: async (context) => {
53
- const tab = await context.ensureTab();
45
+ handle: async (tab, params, response) => {
54
46
  await tab.page.goBack();
55
- const code = [
56
- `// Navigate back`,
57
- `await page.goBack();`,
58
- ];
59
- return {
60
- code,
61
- captureSnapshot,
62
- waitForNetwork: false,
63
- };
64
- },
65
- });
66
- const goForward = captureSnapshot => defineTool({
67
- capability: 'history',
68
- schema: {
69
- name: 'browser_navigate_forward',
70
- title: 'Go forward',
71
- description: 'Go forward to the next page',
72
- inputSchema: z.object({}),
73
- type: 'readOnly',
74
- },
75
- handle: async (context) => {
76
- const tab = context.currentTabOrDie();
77
- await tab.page.goForward();
78
- const code = [
79
- `// Navigate forward`,
80
- `await page.goForward();`,
81
- ];
82
- return {
83
- code,
84
- captureSnapshot,
85
- waitForNetwork: false,
86
- };
47
+ response.setIncludeSnapshot();
48
+ response.addCode(`await page.goBack();`);
87
49
  },
88
50
  });
89
- export default (captureSnapshot) => [
90
- navigate(captureSnapshot),
91
- goBack(captureSnapshot),
92
- goForward(captureSnapshot),
51
+ export default [
52
+ navigate,
53
+ goBack,
93
54
  ];
94
55
  //# sourceMappingURL=navigate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"navigate.js","sourceRoot":"","sources":["../../src/tools/navigate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAoB,MAAM,WAAW,CAAC;AAEzD,MAAM,QAAQ,GAAgB,eAAe,CAAC,EAAE,CAAC,UAAU,CAAC;IAC1D,UAAU,EAAE,MAAM;IAElB,MAAM,EAAE;QACN,IAAI,EAAE,kBAAkB;QACxB,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,mBAAmB;QAChC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;SACnD,CAAC;QACF,IAAI,EAAE,aAAa;KACpB;IAED,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;QAChC,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;QACtC,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAE/B,MAAM,IAAI,GAAG;YACX,kBAAkB,MAAM,CAAC,GAAG,EAAE;YAC9B,oBAAoB,MAAM,CAAC,GAAG,KAAK;SACpC,CAAC;QAEF,OAAO;YACL,IAAI;YACJ,eAAe;YACf,cAAc,EAAE,KAAK;SACtB,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,MAAM,GAAgB,eAAe,CAAC,EAAE,CAAC,UAAU,CAAC;IACxD,UAAU,EAAE,SAAS;IACrB,MAAM,EAAE;QACN,IAAI,EAAE,uBAAuB;QAC7B,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,8BAA8B;QAC3C,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,IAAI,EAAE,UAAU;KACjB;IAED,MAAM,EAAE,KAAK,EAAC,OAAO,EAAC,EAAE;QACtB,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;QACtC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG;YACX,kBAAkB;YAClB,sBAAsB;SACvB,CAAC;QAEF,OAAO;YACL,IAAI;YACJ,eAAe;YACf,cAAc,EAAE,KAAK;SACtB,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,SAAS,GAAgB,eAAe,CAAC,EAAE,CAAC,UAAU,CAAC;IAC3D,UAAU,EAAE,SAAS;IACrB,MAAM,EAAE;QACN,IAAI,EAAE,0BAA0B;QAChC,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,6BAA6B;QAC1C,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,IAAI,EAAE,UAAU;KACjB;IACD,MAAM,EAAE,KAAK,EAAC,OAAO,EAAC,EAAE;QACtB,MAAM,GAAG,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;QACtC,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG;YACX,qBAAqB;YACrB,yBAAyB;SAC1B,CAAC;QACF,OAAO;YACL,IAAI;YACJ,eAAe;YACf,cAAc,EAAE,KAAK;SACtB,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEH,eAAe,CAAC,eAAwB,EAAE,EAAE,CAAC;IAC3C,QAAQ,CAAC,eAAe,CAAC;IACzB,MAAM,CAAC,eAAe,CAAC;IACvB,SAAS,CAAC,eAAe,CAAC;CAC3B,CAAC"}
1
+ {"version":3,"file":"navigate.js","sourceRoot":"","sources":["../../src/tools/navigate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAEtD,MAAM,QAAQ,GAAG,UAAU,CAAC;IAC1B,UAAU,EAAE,MAAM;IAElB,MAAM,EAAE;QACN,IAAI,EAAE,kBAAkB;QACxB,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,mBAAmB;QAChC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;SACnD,CAAC;QACF,IAAI,EAAE,aAAa;KACpB;IAED,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE;QAC1C,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;QACtC,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAE/B,QAAQ,CAAC,kBAAkB,EAAE,CAAC;QAC9B,QAAQ,CAAC,OAAO,CAAC,oBAAoB,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC;IACxD,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,MAAM,GAAG,aAAa,CAAC;IAC3B,UAAU,EAAE,MAAM;IAClB,MAAM,EAAE;QACN,IAAI,EAAE,uBAAuB;QAC7B,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,8BAA8B;QAC3C,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,IAAI,EAAE,UAAU;KACjB;IAED,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE;QACtC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACxB,QAAQ,CAAC,kBAAkB,EAAE,CAAC;QAC9B,QAAQ,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAC3C,CAAC;CACF,CAAC,CAAC;AAEH,eAAe;IACb,QAAQ;IACR,MAAM;CACP,CAAC"}
@@ -14,8 +14,8 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import { z } from 'zod';
17
- import { defineTool } from './tool.js';
18
- const requests = defineTool({
17
+ import { defineTabTool } from './tool.js';
18
+ const requests = defineTabTool({
19
19
  capability: 'core',
20
20
  schema: {
21
21
  name: 'browser_network_requests',
@@ -24,19 +24,9 @@ const requests = defineTool({
24
24
  inputSchema: z.object({}),
25
25
  type: 'readOnly',
26
26
  },
27
- handle: async (context) => {
28
- const requests = context.currentTabOrDie().requests();
29
- const log = [...requests.entries()].map(([request, response]) => renderRequest(request, response)).join('\n');
30
- return {
31
- code: [`// <internal code to list network requests>`],
32
- action: async () => {
33
- return {
34
- content: [{ type: 'text', text: log }]
35
- };
36
- },
37
- captureSnapshot: false,
38
- waitForNetwork: false,
39
- };
27
+ handle: async (tab, params, response) => {
28
+ const requests = tab.requests();
29
+ [...requests.entries()].forEach(([req, res]) => response.addResult(renderRequest(req, res)));
40
30
  },
41
31
  });
42
32
  function renderRequest(request, response) {
@@ -1 +1 @@
1
- {"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/tools/network.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAIvC,MAAM,QAAQ,GAAG,UAAU,CAAC;IAC1B,UAAU,EAAE,MAAM;IAElB,MAAM,EAAE;QACN,IAAI,EAAE,0BAA0B;QAChC,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,qDAAqD;QAClE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,IAAI,EAAE,UAAU;KACjB;IAED,MAAM,EAAE,KAAK,EAAC,OAAO,EAAC,EAAE;QACtB,MAAM,QAAQ,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,QAAQ,EAAE,CAAC;QACtD,MAAM,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9G,OAAO;YACL,IAAI,EAAE,CAAC,6CAA6C,CAAC;YACrD,MAAM,EAAE,KAAK,IAAI,EAAE;gBACjB,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;iBACvC,CAAC;YACJ,CAAC;YACD,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,KAAK;SACtB,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEH,SAAS,aAAa,CAAC,OAA2B,EAAE,QAAoC;IACtF,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACpE,IAAI,QAAQ;QACV,MAAM,CAAC,IAAI,CAAC,OAAO,QAAQ,CAAC,MAAM,EAAE,KAAK,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IACpE,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC;AAED,eAAe;IACb,QAAQ;CACT,CAAC"}
1
+ {"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/tools/network.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAI1C,MAAM,QAAQ,GAAG,aAAa,CAAC;IAC7B,UAAU,EAAE,MAAM;IAElB,MAAM,EAAE;QACN,IAAI,EAAE,0BAA0B;QAChC,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,qDAAqD;QAClE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,IAAI,EAAE,UAAU;KACjB;IAED,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE;QACtC,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;QAChC,CAAC,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/F,CAAC;CACF,CAAC,CAAC;AAEH,SAAS,aAAa,CAAC,OAA2B,EAAE,QAAoC;IACtF,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACpE,IAAI,QAAQ;QACV,MAAM,CAAC,IAAI,CAAC,OAAO,QAAQ,CAAC,MAAM,EAAE,KAAK,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IACpE,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC;AAED,eAAe;IACb,QAAQ;CACT,CAAC"}
package/lib/tools/pdf.js CHANGED
@@ -14,13 +14,12 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import { z } from 'zod';
17
- import { defineTool } from './tool.js';
18
- import * as javascript from '../javascript.js';
19
- import { outputFile } from '../config.js';
17
+ import { defineTabTool } from './tool.js';
18
+ import * as javascript from '../utils/codegen.js';
20
19
  const pdfSchema = z.object({
21
20
  filename: z.string().optional().describe('File name to save the pdf to. Defaults to `page-{timestamp}.pdf` if not specified.'),
22
21
  });
23
- const pdf = defineTool({
22
+ const pdf = defineTabTool({
24
23
  capability: 'pdf',
25
24
  schema: {
26
25
  name: 'browser_pdf_save',
@@ -29,19 +28,11 @@ const pdf = defineTool({
29
28
  inputSchema: pdfSchema,
30
29
  type: 'readOnly',
31
30
  },
32
- handle: async (context, params) => {
33
- const tab = context.currentTabOrDie();
34
- const fileName = await outputFile(context.config, params.filename ?? `page-${new Date().toISOString()}.pdf`);
35
- const code = [
36
- `// Save page as ${fileName}`,
37
- `await page.pdf(${javascript.formatObject({ path: fileName })});`,
38
- ];
39
- return {
40
- code,
41
- action: async () => tab.page.pdf({ path: fileName }).then(() => { }),
42
- captureSnapshot: false,
43
- waitForNetwork: false,
44
- };
31
+ handle: async (tab, params, response) => {
32
+ const fileName = await tab.context.outputFile(params.filename ?? `page-${new Date().toISOString()}.pdf`);
33
+ response.addCode(`await page.pdf(${javascript.formatObject({ path: fileName })});`);
34
+ response.addResult(`Saved page as ${fileName}`);
35
+ await tab.page.pdf({ path: fileName });
45
36
  },
46
37
  });
47
38
  export default [
@@ -1 +1 @@
1
- {"version":3,"file":"pdf.js","sourceRoot":"","sources":["../../src/tools/pdf.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;IACzB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oFAAoF,CAAC;CAC/H,CAAC,CAAC;AAEH,MAAM,GAAG,GAAG,UAAU,CAAC;IACrB,UAAU,EAAE,KAAK;IAEjB,MAAM,EAAE;QACN,IAAI,EAAE,kBAAkB;QACxB,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,kBAAkB;QAC/B,WAAW,EAAE,SAAS;QACtB,IAAI,EAAE,UAAU;KACjB;IAED,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;QAChC,MAAM,GAAG,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAE7G,MAAM,IAAI,GAAG;YACX,mBAAmB,QAAQ,EAAE;YAC7B,kBAAkB,UAAU,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,IAAI;SAClE,CAAC;QAEF,OAAO;YACL,IAAI;YACJ,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;YACnE,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,KAAK;SACtB,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEH,eAAe;IACb,GAAG;CACJ,CAAC"}
1
+ {"version":3,"file":"pdf.js","sourceRoot":"","sources":["../../src/tools/pdf.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,KAAK,UAAU,MAAM,qBAAqB,CAAC;AAElD,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;IACzB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oFAAoF,CAAC;CAC/H,CAAC,CAAC;AAEH,MAAM,GAAG,GAAG,aAAa,CAAC;IACxB,UAAU,EAAE,KAAK;IAEjB,MAAM,EAAE;QACN,IAAI,EAAE,kBAAkB;QACxB,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,kBAAkB;QAC/B,WAAW,EAAE,SAAS;QACtB,IAAI,EAAE,UAAU;KACjB;IAED,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE;QACtC,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACzG,QAAQ,CAAC,OAAO,CAAC,kBAAkB,UAAU,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC;QACpF,QAAQ,CAAC,SAAS,CAAC,iBAAiB,QAAQ,EAAE,CAAC,CAAC;QAChD,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IACzC,CAAC;CACF,CAAC,CAAC;AAEH,eAAe;IACb,GAAG;CACJ,CAAC"}
@@ -14,22 +14,27 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import { z } from 'zod';
17
- import { defineTool } from './tool.js';
18
- import * as javascript from '../javascript.js';
19
- import { outputFile } from '../config.js';
17
+ import { defineTabTool } from './tool.js';
18
+ import * as javascript from '../utils/codegen.js';
20
19
  import { generateLocator } from './utils.js';
21
20
  const screenshotSchema = z.object({
22
- raw: z.boolean().optional().describe('Whether to return without compression (in PNG format). Default is false, which returns a JPEG image.'),
21
+ type: z.enum(['png', 'jpeg']).default('png').describe('Image format for the screenshot. Default is png.'),
23
22
  filename: z.string().optional().describe('File name to save the screenshot to. Defaults to `page-{timestamp}.{png|jpeg}` if not specified.'),
24
23
  element: z.string().optional().describe('Human-readable element description used to obtain permission to screenshot the element. If not provided, the screenshot will be taken of viewport. If element is provided, ref must be provided too.'),
25
24
  ref: z.string().optional().describe('Exact target element reference from the page snapshot. If not provided, the screenshot will be taken of viewport. If ref is provided, element must be provided too.'),
25
+ fullPage: z.boolean().optional().describe('When true, takes a screenshot of the full scrollable page, instead of the currently visible viewport. Cannot be used with element screenshots.'),
26
26
  }).refine(data => {
27
27
  return !!data.element === !!data.ref;
28
28
  }, {
29
29
  message: 'Both element and ref must be provided or neither.',
30
30
  path: ['ref', 'element']
31
+ }).refine(data => {
32
+ return !(data.fullPage && (data.element || data.ref));
33
+ }, {
34
+ message: 'fullPage cannot be used with element screenshots.',
35
+ path: ['fullPage']
31
36
  });
32
- const screenshot = defineTool({
37
+ const screenshot = defineTabTool({
33
38
  capability: 'core',
34
39
  schema: {
35
40
  name: 'browser_take_screenshot',
@@ -38,38 +43,35 @@ const screenshot = defineTool({
38
43
  inputSchema: screenshotSchema,
39
44
  type: 'readOnly',
40
45
  },
41
- handle: async (context, params) => {
42
- const tab = context.currentTabOrDie();
43
- const snapshot = tab.snapshotOrDie();
44
- const fileType = params.raw ? 'png' : 'jpeg';
45
- const fileName = await outputFile(context.config, params.filename ?? `page-${new Date().toISOString()}.${fileType}`);
46
- const options = { type: fileType, quality: fileType === 'png' ? undefined : 50, scale: 'css', path: fileName };
46
+ handle: async (tab, params, response) => {
47
+ const fileType = params.type || 'png';
48
+ const fileName = await tab.context.outputFile(params.filename ?? `page-${new Date().toISOString()}.${fileType}`);
49
+ const options = {
50
+ type: fileType,
51
+ quality: fileType === 'png' ? undefined : 90,
52
+ scale: 'css',
53
+ path: fileName,
54
+ ...(params.fullPage !== undefined && { fullPage: params.fullPage })
55
+ };
47
56
  const isElementScreenshot = params.element && params.ref;
48
- const code = [
49
- `// Screenshot ${isElementScreenshot ? params.element : 'viewport'} and save it as ${fileName}`,
50
- ];
51
- const locator = params.ref ? snapshot.refLocator({ element: params.element || '', ref: params.ref }) : null;
57
+ const screenshotTarget = isElementScreenshot ? params.element : (params.fullPage ? 'full page' : 'viewport');
58
+ response.addCode(`// Screenshot ${screenshotTarget} and save it as ${fileName}`);
59
+ // Only get snapshot when element screenshot is needed
60
+ const locator = params.ref ? await tab.refLocator({ element: params.element || '', ref: params.ref }) : null;
52
61
  if (locator)
53
- code.push(`await page.${await generateLocator(locator)}.screenshot(${javascript.formatObject(options)});`);
62
+ response.addCode(`await page.${await generateLocator(locator)}.screenshot(${javascript.formatObject(options)});`);
54
63
  else
55
- code.push(`await page.screenshot(${javascript.formatObject(options)});`);
56
- const includeBase64 = context.clientSupportsImages();
57
- const action = async () => {
58
- const screenshot = locator ? await locator.screenshot(options) : await tab.page.screenshot(options);
59
- return {
60
- content: includeBase64 ? [{
61
- type: 'image',
62
- data: screenshot.toString('base64'),
63
- mimeType: fileType === 'png' ? 'image/png' : 'image/jpeg',
64
- }] : []
65
- };
66
- };
67
- return {
68
- code,
69
- action,
70
- captureSnapshot: true,
71
- waitForNetwork: false,
72
- };
64
+ response.addCode(`await page.screenshot(${javascript.formatObject(options)});`);
65
+ const buffer = locator ? await locator.screenshot(options) : await tab.page.screenshot(options);
66
+ response.addResult(`Took the ${screenshotTarget} screenshot and saved it as ${fileName}`);
67
+ // https://github.com/microsoft/playwright-mcp/issues/817
68
+ // Never return large images to LLM, saving them to the file system is enough.
69
+ if (!params.fullPage) {
70
+ response.addImage({
71
+ contentType: fileType === 'png' ? 'image/png' : 'image/jpeg',
72
+ data: buffer
73
+ });
74
+ }
73
75
  }
74
76
  });
75
77
  export default [
@@ -1 +1 @@
1
- {"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../src/tools/screenshot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../src/tools/screenshot.ts"],"names":[],"mappings":"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"}