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,10 +14,62 @@
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';
17
+ import { defineTabTool, defineTool } from './tool.js';
18
+ import * as javascript from '../utils/codegen.js';
19
19
  import { generateLocator } from './utils.js';
20
- import AxeBuilder from '@axe-core/playwright';
20
+ import AxeBuilder from "@axe-core/playwright";
21
+ const tagValues = [
22
+ 'wcag2a', 'wcag2aa', 'wcag2aaa', 'wcag21a', 'wcag21aa', 'wcag21aaa',
23
+ 'wcag22a', 'wcag22aa', 'wcag22aaa', 'section508', 'cat.aria', 'cat.color',
24
+ 'cat.forms', 'cat.keyboard', 'cat.language', 'cat.name-role-value',
25
+ 'cat.parsing', 'cat.semantics', 'cat.sensory-and-visual-cues',
26
+ 'cat.structure', 'cat.tables', 'cat.text-alternatives', 'cat.time-and-media',
27
+ ];
28
+ const scanPageSchema = z.object({
29
+ violationsTag: z
30
+ .array(z.enum(tagValues))
31
+ .min(1)
32
+ .default([...tagValues])
33
+ .describe('Array of tags to filter violations by. If not specified, all violations are returned.')
34
+ });
35
+ const dedupeViolationNodes = (nodes) => {
36
+ const seen = new Set();
37
+ return nodes.filter((node) => {
38
+ const key = JSON.stringify({ target: node.target ?? [], html: node.html ?? '' });
39
+ if (seen.has(key))
40
+ return false;
41
+ seen.add(key);
42
+ return true;
43
+ });
44
+ };
45
+ const scanPage = defineTool({
46
+ capability: 'core',
47
+ schema: {
48
+ name: 'scan_page',
49
+ title: 'Scan page for accessibility violations',
50
+ description: 'Scan the current page for accessibility violations using Axe',
51
+ inputSchema: scanPageSchema,
52
+ type: 'destructive',
53
+ },
54
+ handle: async (context, params, response) => {
55
+ const tab = context.currentTabOrDie();
56
+ const axe = new AxeBuilder({ page: tab.page }).withTags(params.violationsTag);
57
+ const results = await axe.analyze();
58
+ response.addResult([
59
+ `URL: ${results.url}`,
60
+ '',
61
+ `Violations: ${results.violations.length}, Incomplete: ${results.incomplete.length}, Passes: ${results.passes.length}, Inapplicable: ${results.inapplicable.length}`,
62
+ ].join('\n'));
63
+ results.violations.forEach((violation) => {
64
+ const uniqueNodes = dedupeViolationNodes(violation.nodes);
65
+ response.addResult([
66
+ '',
67
+ `Tags : ${violation.tags}`,
68
+ `Violations: ${JSON.stringify(uniqueNodes, null, 2)}`,
69
+ ].join('\n'));
70
+ });
71
+ },
72
+ });
21
73
  const snapshot = defineTool({
22
74
  capability: 'core',
23
75
  schema: {
@@ -27,35 +79,20 @@ const snapshot = defineTool({
27
79
  inputSchema: z.object({}),
28
80
  type: 'readOnly',
29
81
  },
30
- handle: async (context) => {
82
+ handle: async (context, params, response) => {
31
83
  await context.ensureTab();
32
- return {
33
- code: [`// <internal code to capture accessibility snapshot>`],
34
- captureSnapshot: true,
35
- waitForNetwork: false,
36
- };
84
+ response.setIncludeSnapshot();
37
85
  },
38
86
  });
39
- const elementSchema = z.object({
87
+ export const elementSchema = z.object({
40
88
  element: z.string().describe('Human-readable element description used to obtain permission to interact with the element'),
41
89
  ref: z.string().describe('Exact target element reference from the page snapshot'),
42
90
  });
43
- const tagValues = [
44
- 'wcag2a', 'wcag2aa', 'wcag2aaa', 'wcag21a', 'wcag21aa', 'wcag21aaa',
45
- 'wcag22a', 'wcag22aa', 'wcag22aaa', 'section508', 'cat.aria', 'cat.color',
46
- 'cat.forms', 'cat.keyboard', 'cat.language', 'cat.name-role-value',
47
- 'cat.parsing', 'cat.semantics', 'cat.sensory-and-visual-cues',
48
- 'cat.structure', 'cat.tables', 'cat.text-alternatives', 'cat.time-and-media',
49
- ];
50
- const scanPageSchema = z.object({
51
- violationsTag: z
52
- .array(z.enum(tagValues))
53
- .min(1).describe('Array of tags to filter violations by. If not specified, all violations are returned.'),
54
- });
55
91
  const clickSchema = elementSchema.extend({
56
92
  doubleClick: z.boolean().optional().describe('Whether to perform a double click instead of a single click'),
93
+ button: z.enum(['left', 'right', 'middle']).optional().describe('Button to click, defaults to left'),
57
94
  });
58
- const click = defineTool({
95
+ const click = defineTabTool({
59
96
  capability: 'core',
60
97
  schema: {
61
98
  name: 'browser_click',
@@ -64,27 +101,24 @@ const click = defineTool({
64
101
  inputSchema: clickSchema,
65
102
  type: 'destructive',
66
103
  },
67
- handle: async (context, params) => {
68
- const tab = context.currentTabOrDie();
69
- const locator = tab.snapshotOrDie().refLocator(params);
70
- const code = [];
71
- if (params.doubleClick) {
72
- code.push(`// Double click ${params.element}`);
73
- code.push(`await page.${await generateLocator(locator)}.dblclick();`);
74
- }
75
- else {
76
- code.push(`// Click ${params.element}`);
77
- code.push(`await page.${await generateLocator(locator)}.click();`);
78
- }
79
- return {
80
- code,
81
- action: () => params.doubleClick ? locator.dblclick() : locator.click(),
82
- captureSnapshot: true,
83
- waitForNetwork: true,
84
- };
104
+ handle: async (tab, params, response) => {
105
+ response.setIncludeSnapshot();
106
+ const locator = await tab.refLocator(params);
107
+ const button = params.button;
108
+ const buttonAttr = button ? `{ button: '${button}' }` : '';
109
+ if (params.doubleClick)
110
+ response.addCode(`await page.${await generateLocator(locator)}.dblclick(${buttonAttr});`);
111
+ else
112
+ response.addCode(`await page.${await generateLocator(locator)}.click(${buttonAttr});`);
113
+ await tab.waitForCompletion(async () => {
114
+ if (params.doubleClick)
115
+ await locator.dblclick({ button });
116
+ else
117
+ await locator.click({ button });
118
+ });
85
119
  },
86
120
  });
87
- const drag = defineTool({
121
+ const drag = defineTabTool({
88
122
  capability: 'core',
89
123
  schema: {
90
124
  name: 'browser_drag',
@@ -98,23 +132,19 @@ const drag = defineTool({
98
132
  }),
99
133
  type: 'destructive',
100
134
  },
101
- handle: async (context, params) => {
102
- const snapshot = context.currentTabOrDie().snapshotOrDie();
103
- const startLocator = snapshot.refLocator({ ref: params.startRef, element: params.startElement });
104
- const endLocator = snapshot.refLocator({ ref: params.endRef, element: params.endElement });
105
- const code = [
106
- `// Drag ${params.startElement} to ${params.endElement}`,
107
- `await page.${await generateLocator(startLocator)}.dragTo(page.${await generateLocator(endLocator)});`
108
- ];
109
- return {
110
- code,
111
- action: () => startLocator.dragTo(endLocator),
112
- captureSnapshot: true,
113
- waitForNetwork: true,
114
- };
135
+ handle: async (tab, params, response) => {
136
+ response.setIncludeSnapshot();
137
+ const [startLocator, endLocator] = await tab.refLocators([
138
+ { ref: params.startRef, element: params.startElement },
139
+ { ref: params.endRef, element: params.endElement },
140
+ ]);
141
+ await tab.waitForCompletion(async () => {
142
+ await startLocator.dragTo(endLocator);
143
+ });
144
+ response.addCode(`await page.${await generateLocator(startLocator)}.dragTo(page.${await generateLocator(endLocator)});`);
115
145
  },
116
146
  });
117
- const hover = defineTool({
147
+ const hover = defineTabTool({
118
148
  capability: 'core',
119
149
  schema: {
120
150
  name: 'browser_hover',
@@ -123,67 +153,19 @@ const hover = defineTool({
123
153
  inputSchema: elementSchema,
124
154
  type: 'readOnly',
125
155
  },
126
- handle: async (context, params) => {
127
- const snapshot = context.currentTabOrDie().snapshotOrDie();
128
- const locator = snapshot.refLocator(params);
129
- const code = [
130
- `// Hover over ${params.element}`,
131
- `await page.${await generateLocator(locator)}.hover();`
132
- ];
133
- return {
134
- code,
135
- action: () => locator.hover(),
136
- captureSnapshot: true,
137
- waitForNetwork: true,
138
- };
139
- },
140
- });
141
- const typeSchema = elementSchema.extend({
142
- text: z.string().describe('Text to type into the element'),
143
- submit: z.boolean().optional().describe('Whether to submit entered text (press Enter after)'),
144
- 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.'),
145
- });
146
- const type = defineTool({
147
- capability: 'core',
148
- schema: {
149
- name: 'browser_type',
150
- title: 'Type text',
151
- description: 'Type text into editable element',
152
- inputSchema: typeSchema,
153
- type: 'destructive',
154
- },
155
- handle: async (context, params) => {
156
- const snapshot = context.currentTabOrDie().snapshotOrDie();
157
- const locator = snapshot.refLocator(params);
158
- const code = [];
159
- const steps = [];
160
- if (params.slowly) {
161
- code.push(`// Press "${params.text}" sequentially into "${params.element}"`);
162
- code.push(`await page.${await generateLocator(locator)}.pressSequentially(${javascript.quote(params.text)});`);
163
- steps.push(() => locator.pressSequentially(params.text));
164
- }
165
- else {
166
- code.push(`// Fill "${params.text}" into "${params.element}"`);
167
- code.push(`await page.${await generateLocator(locator)}.fill(${javascript.quote(params.text)});`);
168
- steps.push(() => locator.fill(params.text));
169
- }
170
- if (params.submit) {
171
- code.push(`// Submit text`);
172
- code.push(`await page.${await generateLocator(locator)}.press('Enter');`);
173
- steps.push(() => locator.press('Enter'));
174
- }
175
- return {
176
- code,
177
- action: () => steps.reduce((acc, step) => acc.then(step), Promise.resolve()),
178
- captureSnapshot: true,
179
- waitForNetwork: true,
180
- };
156
+ handle: async (tab, params, response) => {
157
+ response.setIncludeSnapshot();
158
+ const locator = await tab.refLocator(params);
159
+ response.addCode(`await page.${await generateLocator(locator)}.hover();`);
160
+ await tab.waitForCompletion(async () => {
161
+ await locator.hover();
162
+ });
181
163
  },
182
164
  });
183
165
  const selectOptionSchema = elementSchema.extend({
184
166
  values: z.array(z.string()).describe('Array of values to select in the dropdown. This can be a single value or multiple values.'),
185
167
  });
186
- const selectOption = defineTool({
168
+ const selectOption = defineTabTool({
187
169
  capability: 'core',
188
170
  schema: {
189
171
  name: 'browser_select_option',
@@ -192,54 +174,21 @@ const selectOption = defineTool({
192
174
  inputSchema: selectOptionSchema,
193
175
  type: 'destructive',
194
176
  },
195
- handle: async (context, params) => {
196
- const snapshot = context.currentTabOrDie().snapshotOrDie();
197
- const locator = snapshot.refLocator(params);
198
- const code = [
199
- `// Select options [${params.values.join(', ')}] in ${params.element}`,
200
- `await page.${await generateLocator(locator)}.selectOption(${javascript.formatObject(params.values)});`
201
- ];
202
- return {
203
- code,
204
- action: () => locator.selectOption(params.values).then(() => {
205
- }),
206
- captureSnapshot: true,
207
- waitForNetwork: true,
208
- };
209
- },
210
- });
211
- const scanPage = defineTool({
212
- capability: 'core',
213
- schema: {
214
- name: 'scan_page',
215
- title: 'Scan page for accessibility violations',
216
- description: 'Scan the current page for accessibility violations using Axe',
217
- inputSchema: scanPageSchema,
218
- type: 'destructive',
219
- },
220
- handle: async (context, params) => {
221
- const tab = context.currentTabOrDie();
222
- const axe = new AxeBuilder({ page: tab.page }).withTags(params.violationsTag);
223
- return {
224
- code: [`// Scan page for accessibility violations with tags: ${params.violationsTag.join(', ')}`],
225
- action: async () => {
226
- const results = await axe.analyze();
227
- return {
228
- content: [{ type: 'text', text: JSON.stringify(results, null, 2) }],
229
- };
230
- },
231
- captureSnapshot: true,
232
- waitForNetwork: true,
233
- };
177
+ handle: async (tab, params, response) => {
178
+ response.setIncludeSnapshot();
179
+ const locator = await tab.refLocator(params);
180
+ response.addCode(`await page.${await generateLocator(locator)}.selectOption(${javascript.formatObject(params.values)});`);
181
+ await tab.waitForCompletion(async () => {
182
+ await locator.selectOption(params.values);
183
+ });
234
184
  },
235
185
  });
236
186
  export default [
237
187
  snapshot,
238
188
  click,
239
- scanPage,
240
189
  drag,
241
190
  hover,
242
- type,
243
191
  selectOption,
192
+ scanPage
244
193
  ];
245
194
  //# sourceMappingURL=snapshot.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/tools/snapshot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/tools/snapshot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AACtB,OAAO,EAAC,aAAa,EAAE,UAAU,EAAC,MAAM,WAAW,CAAC;AACpD,OAAO,KAAK,UAAU,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAC,eAAe,EAAC,MAAM,YAAY,CAAC;AAC3C,OAAO,UAAU,MAAM,sBAAsB,CAAC;AAG9C,MAAM,SAAS,GAAG;IACd,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW;IACnE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW;IACzE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,qBAAqB;IAClE,aAAa,EAAE,eAAe,EAAE,6BAA6B;IAC7D,eAAe,EAAE,YAAY,EAAE,uBAAuB,EAAE,oBAAoB;CACtE,CAAC;AAGX,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,aAAa,EAAE,CAAC;SACX,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SACxB,GAAG,CAAC,CAAC,CAAC;SACN,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;SACvB,QAAQ,CAAC,uFAAuF,CAAC;CACzG,CAAC,CAAC;AAMH,MAAM,oBAAoB,GAAG,CAAC,KAAgB,EAAa,EAAE;IACzD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,EAAC,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,EAAC,CAAC,CAAC;QAC/E,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YACb,OAAO,KAAK,CAAC;QAEjB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,OAAO,IAAI,CAAC;IAChB,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,UAAU,CAAC;IACxB,UAAU,EAAE,MAAM;IAClB,MAAM,EAAE;QACJ,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,wCAAwC;QAC/C,WAAW,EAAE,8DAA8D;QAC3E,WAAW,EAAE,cAAc;QAC3B,IAAI,EAAE,aAAa;KACtB;IAED,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE;QACxC,MAAM,GAAG,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;QACtC,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,EAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAE5E,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;QAEpC,QAAQ,CAAC,SAAS,CAAC;YACf,QAAQ,OAAO,CAAC,GAAG,EAAE;YACrB,EAAE;YACF,eAAe,OAAO,CAAC,UAAU,CAAC,MAAM,iBAAiB,OAAO,CAAC,UAAU,CAAC,MAAM,aAAa,OAAO,CAAC,MAAM,CAAC,MAAM,mBAAmB,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE;SACvK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAGd,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;YACrC,MAAM,WAAW,GAAG,oBAAoB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAE1D,QAAQ,CAAC,SAAS,CAAC;gBACf,EAAE;gBACF,UAAU,SAAS,CAAC,IAAI,EAAE;gBAC1B,eAAe,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;aACxD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACP,CAAC;CACJ,CAAC,CAAC;AAEH,MAAM,QAAQ,GAAG,UAAU,CAAC;IACxB,UAAU,EAAE,MAAM;IAClB,MAAM,EAAE;QACJ,IAAI,EAAE,kBAAkB;QACxB,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,oFAAoF;QACjG,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,IAAI,EAAE,UAAU;KACnB;IAED,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE;QACxC,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;QAC1B,QAAQ,CAAC,kBAAkB,EAAE,CAAC;IAClC,CAAC;CACJ,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2FAA2F,CAAC;IACzH,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uDAAuD,CAAC;CACpF,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC;IACrC,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6DAA6D,CAAC;IAC3G,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;CACvG,CAAC,CAAC;AAEH,MAAM,KAAK,GAAG,aAAa,CAAC;IACxB,UAAU,EAAE,MAAM;IAClB,MAAM,EAAE;QACJ,IAAI,EAAE,eAAe;QACrB,KAAK,EAAE,OAAO;QACd,WAAW,EAAE,6BAA6B;QAC1C,WAAW,EAAE,WAAW;QACxB,IAAI,EAAE,aAAa;KACtB;IAED,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE;QACpC,QAAQ,CAAC,kBAAkB,EAAE,CAAC;QAE9B,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,cAAc,MAAM,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAE3D,IAAI,MAAM,CAAC,WAAW;YAClB,QAAQ,CAAC,OAAO,CAAC,cAAc,MAAM,eAAe,CAAC,OAAO,CAAC,aAAa,UAAU,IAAI,CAAC,CAAC;;YAE1F,QAAQ,CAAC,OAAO,CAAC,cAAc,MAAM,eAAe,CAAC,OAAO,CAAC,UAAU,UAAU,IAAI,CAAC,CAAC;QAG3F,MAAM,GAAG,CAAC,iBAAiB,CAAC,KAAK,IAAI,EAAE;YACnC,IAAI,MAAM,CAAC,WAAW;gBAClB,MAAM,OAAO,CAAC,QAAQ,CAAC,EAAC,MAAM,EAAC,CAAC,CAAC;;gBAEjC,MAAM,OAAO,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACP,CAAC;CACJ,CAAC,CAAC;AAEH,MAAM,IAAI,GAAG,aAAa,CAAC;IACvB,UAAU,EAAE,MAAM;IAClB,MAAM,EAAE;QACJ,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,4CAA4C;QACzD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YAClB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sGAAsG,CAAC;YACzI,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uDAAuD,CAAC;YACtF,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sGAAsG,CAAC;YACvI,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uDAAuD,CAAC;SACvF,CAAC;QACF,IAAI,EAAE,aAAa;KACtB;IAED,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE;QACpC,QAAQ,CAAC,kBAAkB,EAAE,CAAC;QAE9B,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC;YACrD,EAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,YAAY,EAAC;YACpD,EAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,UAAU,EAAC;SACnD,CAAC,CAAC;QAEH,MAAM,GAAG,CAAC,iBAAiB,CAAC,KAAK,IAAI,EAAE;YACnC,MAAM,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,OAAO,CAAC,cAAc,MAAM,eAAe,CAAC,YAAY,CAAC,gBAAgB,MAAM,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC7H,CAAC;CACJ,CAAC,CAAC;AAEH,MAAM,KAAK,GAAG,aAAa,CAAC;IACxB,UAAU,EAAE,MAAM;IAClB,MAAM,EAAE;QACJ,IAAI,EAAE,eAAe;QACrB,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,4BAA4B;QACzC,WAAW,EAAE,aAAa;QAC1B,IAAI,EAAE,UAAU;KACnB;IAED,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE;QACpC,QAAQ,CAAC,kBAAkB,EAAE,CAAC;QAE9B,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC7C,QAAQ,CAAC,OAAO,CAAC,cAAc,MAAM,eAAe,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAE1E,MAAM,GAAG,CAAC,iBAAiB,CAAC,KAAK,IAAI,EAAE;YACnC,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;IACP,CAAC;CACJ,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,aAAa,CAAC,MAAM,CAAC;IAC5C,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,2FAA2F,CAAC;CACpI,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,aAAa,CAAC;IAC/B,UAAU,EAAE,MAAM;IAClB,MAAM,EAAE;QACJ,IAAI,EAAE,uBAAuB;QAC7B,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,gCAAgC;QAC7C,WAAW,EAAE,kBAAkB;QAC/B,IAAI,EAAE,aAAa;KACtB;IAED,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE;QACpC,QAAQ,CAAC,kBAAkB,EAAE,CAAC;QAE9B,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC7C,QAAQ,CAAC,OAAO,CAAC,cAAc,MAAM,eAAe,CAAC,OAAO,CAAC,iBAAiB,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAE1H,MAAM,GAAG,CAAC,iBAAiB,CAAC,KAAK,IAAI,EAAE;YACnC,MAAM,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IACP,CAAC;CACJ,CAAC,CAAC;AAEH,eAAe;IACX,QAAQ;IACR,KAAK;IACL,IAAI;IACJ,KAAK;IACL,YAAY;IACZ,QAAQ;CACX,CAAC"}
package/lib/tools/tabs.js CHANGED
@@ -15,105 +15,46 @@
15
15
  */
16
16
  import { z } from 'zod';
17
17
  import { defineTool } from './tool.js';
18
- const listTabs = defineTool({
19
- capability: 'tabs',
18
+ const browserTabs = defineTool({
19
+ capability: 'core-tabs',
20
20
  schema: {
21
- name: 'browser_tab_list',
22
- title: 'List tabs',
23
- description: 'List browser tabs',
24
- inputSchema: z.object({}),
25
- type: 'readOnly',
26
- },
27
- handle: async (context) => {
28
- await context.ensureTab();
29
- return {
30
- code: [`// <internal code to list tabs>`],
31
- captureSnapshot: false,
32
- waitForNetwork: false,
33
- resultOverride: {
34
- content: [{
35
- type: 'text',
36
- text: await context.listTabsMarkdown(),
37
- }],
38
- },
39
- };
40
- },
41
- });
42
- const selectTab = captureSnapshot => defineTool({
43
- capability: 'tabs',
44
- schema: {
45
- name: 'browser_tab_select',
46
- title: 'Select a tab',
47
- description: 'Select a tab by index',
48
- inputSchema: z.object({
49
- index: z.number().describe('The index of the tab to select'),
50
- }),
51
- type: 'readOnly',
52
- },
53
- handle: async (context, params) => {
54
- await context.selectTab(params.index);
55
- const code = [
56
- `// <internal code to select tab ${params.index}>`,
57
- ];
58
- return {
59
- code,
60
- captureSnapshot,
61
- waitForNetwork: false
62
- };
63
- },
64
- });
65
- const newTab = captureSnapshot => defineTool({
66
- capability: 'tabs',
67
- schema: {
68
- name: 'browser_tab_new',
69
- title: 'Open a new tab',
70
- description: 'Open a new tab',
71
- inputSchema: z.object({
72
- url: z.string().optional().describe('The URL to navigate to in the new tab. If not provided, the new tab will be blank.'),
73
- }),
74
- type: 'readOnly',
75
- },
76
- handle: async (context, params) => {
77
- await context.newTab();
78
- if (params.url)
79
- await context.currentTabOrDie().navigate(params.url);
80
- const code = [
81
- `// <internal code to open a new tab>`,
82
- ];
83
- return {
84
- code,
85
- captureSnapshot,
86
- waitForNetwork: false
87
- };
88
- },
89
- });
90
- const closeTab = captureSnapshot => defineTool({
91
- capability: 'tabs',
92
- schema: {
93
- name: 'browser_tab_close',
94
- title: 'Close a tab',
95
- description: 'Close a tab',
21
+ name: 'browser_tabs',
22
+ title: 'Manage tabs',
23
+ description: 'List, create, close, or select a browser tab.',
96
24
  inputSchema: z.object({
97
- index: z.number().optional().describe('The index of the tab to close. Closes current tab if not provided.'),
25
+ action: z.enum(['list', 'new', 'close', 'select']).describe('Operation to perform'),
26
+ index: z.number().optional().describe('Tab index, used for close/select. If omitted for close, current tab is closed.'),
98
27
  }),
99
28
  type: 'destructive',
100
29
  },
101
- handle: async (context, params) => {
102
- await context.closeTab(params.index);
103
- const code = [
104
- `// <internal code to close tab ${params.index}>`,
105
- ];
106
- return {
107
- code,
108
- captureSnapshot,
109
- waitForNetwork: false
110
- };
30
+ handle: async (context, params, response) => {
31
+ switch (params.action) {
32
+ case 'list': {
33
+ await context.ensureTab();
34
+ response.setIncludeTabs();
35
+ return;
36
+ }
37
+ case 'new': {
38
+ await context.newTab();
39
+ response.setIncludeTabs();
40
+ return;
41
+ }
42
+ case 'close': {
43
+ await context.closeTab(params.index);
44
+ response.setIncludeSnapshot();
45
+ return;
46
+ }
47
+ case 'select': {
48
+ if (params.index === undefined)
49
+ throw new Error('Tab index is required');
50
+ await context.selectTab(params.index);
51
+ response.setIncludeSnapshot();
52
+ return;
53
+ }
54
+ }
111
55
  },
112
56
  });
113
- export default (captureSnapshot) => [
114
- listTabs,
115
- newTab(captureSnapshot),
116
- selectTab(captureSnapshot),
117
- closeTab(captureSnapshot),
57
+ export default [
58
+ browserTabs,
118
59
  ];
119
60
  //# sourceMappingURL=tabs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tabs.js","sourceRoot":"","sources":["../../src/tools/tabs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tabs.js","sourceRoot":"","sources":["../../src/tools/tabs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,WAAW,GAAG,UAAU,CAAC;IAC7B,UAAU,EAAE,WAAW;IAEvB,MAAM,EAAE;QACN,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,+CAA+C;QAC5D,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YACnF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gFAAgF,CAAC;SACxH,CAAC;QACF,IAAI,EAAE,aAAa;KACpB;IAED,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE;QAC1C,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;YACtB,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;gBAC1B,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAC1B,OAAO;YACT,CAAC;YACD,KAAK,KAAK,CAAC,CAAC,CAAC;gBACX,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC;gBACvB,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAC1B,OAAO;YACT,CAAC;YACD,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACrC,QAAQ,CAAC,kBAAkB,EAAE,CAAC;gBAC9B,OAAO;YACT,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;oBAC5B,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;gBAC3C,MAAM,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACtC,QAAQ,CAAC,kBAAkB,EAAE,CAAC;gBAC9B,OAAO;YACT,CAAC;QACH,CAAC;IACH,CAAC;CACF,CAAC,CAAC;AAEH,eAAe;IACb,WAAW;CACZ,CAAC"}
package/lib/tools/tool.js CHANGED
@@ -16,4 +16,19 @@
16
16
  export function defineTool(tool) {
17
17
  return tool;
18
18
  }
19
+ export function defineTabTool(tool) {
20
+ return {
21
+ ...tool,
22
+ handle: async (context, params, response) => {
23
+ const tab = context.currentTabOrDie();
24
+ const modalStates = tab.modalStates().map(state => state.type);
25
+ if (tool.clearsModalState && !modalStates.includes(tool.clearsModalState))
26
+ response.addError(`Error: The tool "${tool.schema.name}" can only be used when there is related modal state present.\n` + tab.modalStatesMarkdown().join('\n'));
27
+ else if (!tool.clearsModalState && modalStates.length)
28
+ response.addError(`Error: Tool "${tool.schema.name}" does not handle the modal state.\n` + tab.modalStatesMarkdown().join('\n'));
29
+ else
30
+ return tool.handle(tab, params, response);
31
+ },
32
+ };
33
+ }
19
34
  //# sourceMappingURL=tool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool.js","sourceRoot":"","sources":["../../src/tools/tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAmDH,MAAM,UAAU,UAAU,CAA0B,IAAiB;IACnE,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"tool.js","sourceRoot":"","sources":["../../src/tools/tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AA8BH,MAAM,UAAU,UAAU,CAAyB,IAAiB;IAClE,OAAO,IAAI,CAAC;AACd,CAAC;AASD,MAAM,UAAU,aAAa,CAAyB,IAAoB;IACxE,OAAO;QACL,GAAG,IAAI;QACP,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE;YAC1C,MAAM,GAAG,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;YACtC,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/D,IAAI,IAAI,CAAC,gBAAgB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC;gBACvE,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,IAAI,CAAC,MAAM,CAAC,IAAI,iEAAiE,GAAG,GAAG,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;iBAC7J,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,WAAW,CAAC,MAAM;gBACnD,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,IAAI,CAAC,MAAM,CAAC,IAAI,sCAAsC,GAAG,GAAG,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;;gBAEjI,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC9C,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -13,7 +13,9 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- export async function waitForCompletion(context, tab, callback) {
16
+ // @ts-ignore
17
+ import { asLocator } from 'playwright-core/lib/utils';
18
+ export async function waitForCompletion(tab, callback) {
17
19
  const requests = new Set();
18
20
  let frameNavigated = false;
19
21
  let waitCallback = () => { };
@@ -51,28 +53,20 @@ export async function waitForCompletion(context, tab, callback) {
51
53
  if (!requests.size && !frameNavigated)
52
54
  waitCallback();
53
55
  await waitBarrier;
54
- await context.waitForTimeout(1000);
56
+ await tab.waitForTimeout(1000);
55
57
  return result;
56
58
  }
57
59
  finally {
58
60
  dispose();
59
61
  }
60
62
  }
61
- export function sanitizeForFilePath(s) {
62
- const sanitize = (s) => s.replace(/[\x00-\x2C\x2E-\x2F\x3A-\x40\x5B-\x60\x7B-\x7F]+/g, '-');
63
- const separator = s.lastIndexOf('.');
64
- if (separator === -1)
65
- return sanitize(s);
66
- return sanitize(s.substring(0, separator)) + '.' + sanitize(s.substring(separator + 1));
67
- }
68
63
  export async function generateLocator(locator) {
69
64
  try {
70
- return await locator._generateLocatorString();
65
+ const { resolvedSelector } = await locator._resolveSelector();
66
+ return asLocator('javascript', resolvedSelector);
71
67
  }
72
68
  catch (e) {
73
- if (e instanceof Error && /locator._generateLocatorString: No element matching locator/.test(e.message))
74
- throw new Error('Ref not found, likely because element was removed. Use browser_snapshot to see what elements are currently on the page.');
75
- throw e;
69
+ throw new Error('Ref not found, likely because element was removed. Use browser_snapshot to see what elements are currently on the page.');
76
70
  }
77
71
  }
78
72
  export async function callOnPageNoTrace(page, callback) {
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/tools/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/tools/utils.ts"],"names":[],"mappings":"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"}