browser-devtools-mcp 0.1.6 → 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.
Files changed (163) hide show
  1. package/LICENSE +93 -21
  2. package/README.md +98 -18
  3. package/dist/cli.js +53 -1721
  4. package/dist/core.js +764 -0
  5. package/dist/daemon-server.js +1 -338
  6. package/dist/index.d.ts +2 -0
  7. package/dist/index.js +210 -80
  8. package/dist/otel/otel-initializer.bundle.js +0 -1
  9. package/dist/tools/a11y/index.d.ts +2 -0
  10. package/dist/tools/content/index.d.ts +2 -0
  11. package/dist/tools/debug/index.d.ts +2 -0
  12. package/dist/tools/figma/compare/index.d.ts +56 -0
  13. package/dist/tools/figma/compare/types.d.ts +15 -0
  14. package/dist/tools/figma/index.d.ts +2 -0
  15. package/dist/tools/index.d.ts +4 -0
  16. package/dist/tools/interaction/index.d.ts +2 -0
  17. package/dist/tools/navigation/index.d.ts +2 -0
  18. package/dist/tools/o11y/index.d.ts +2 -0
  19. package/dist/tools/react/index.d.ts +2 -0
  20. package/dist/tools/run/index.d.ts +2 -0
  21. package/dist/tools/stub/index.d.ts +2 -0
  22. package/dist/tools/sync/index.d.ts +2 -0
  23. package/dist/tools/types.d.ts +21 -0
  24. package/dist/types.d.ts +78 -0
  25. package/package.json +11 -11
  26. package/dist/browser.js +0 -213
  27. package/dist/browser.js.map +0 -1
  28. package/dist/cli.js.map +0 -1
  29. package/dist/config.js +0 -96
  30. package/dist/config.js.map +0 -1
  31. package/dist/context.js +0 -298
  32. package/dist/context.js.map +0 -1
  33. package/dist/daemon-server.js.map +0 -1
  34. package/dist/index.js.map +0 -1
  35. package/dist/logger.js +0 -97
  36. package/dist/logger.js.map +0 -1
  37. package/dist/mcp-server.js +0 -401
  38. package/dist/mcp-server.js.map +0 -1
  39. package/dist/otel/otel-controller.js +0 -323
  40. package/dist/otel/otel-controller.js.map +0 -1
  41. package/dist/otel/otel-initializer.bundle.js.map +0 -7
  42. package/dist/otel/otel-proxy.js +0 -407
  43. package/dist/otel/otel-proxy.js.map +0 -1
  44. package/dist/server-info.js +0 -186
  45. package/dist/server-info.js.map +0 -1
  46. package/dist/tools/a11y/index.js +0 -7
  47. package/dist/tools/a11y/index.js.map +0 -1
  48. package/dist/tools/a11y/take-aria-snapshot.js +0 -54
  49. package/dist/tools/a11y/take-aria-snapshot.js.map +0 -1
  50. package/dist/tools/a11y/take-ax-tree-snapshot.js +0 -850
  51. package/dist/tools/a11y/take-ax-tree-snapshot.js.map +0 -1
  52. package/dist/tools/content/get-as-html.js +0 -164
  53. package/dist/tools/content/get-as-html.js.map +0 -1
  54. package/dist/tools/content/get-as-text.js +0 -76
  55. package/dist/tools/content/get-as-text.js.map +0 -1
  56. package/dist/tools/content/index.js +0 -14
  57. package/dist/tools/content/index.js.map +0 -1
  58. package/dist/tools/content/save-as-pdf.js +0 -119
  59. package/dist/tools/content/save-as-pdf.js.map +0 -1
  60. package/dist/tools/content/take-screenshot.js +0 -272
  61. package/dist/tools/content/take-screenshot.js.map +0 -1
  62. package/dist/tools/figma/compare/compare-image-embedding.js +0 -159
  63. package/dist/tools/figma/compare/compare-image-embedding.js.map +0 -1
  64. package/dist/tools/figma/compare/compare-mssim.js +0 -98
  65. package/dist/tools/figma/compare/compare-mssim.js.map +0 -1
  66. package/dist/tools/figma/compare/compare-text-embedding.js +0 -291
  67. package/dist/tools/figma/compare/compare-text-embedding.js.map +0 -1
  68. package/dist/tools/figma/compare/index.js +0 -139
  69. package/dist/tools/figma/compare/index.js.map +0 -1
  70. package/dist/tools/figma/compare/types.js +0 -3
  71. package/dist/tools/figma/compare/types.js.map +0 -1
  72. package/dist/tools/figma/compare/vector.js +0 -46
  73. package/dist/tools/figma/compare/vector.js.map +0 -1
  74. package/dist/tools/figma/compare-page-with-design.js +0 -240
  75. package/dist/tools/figma/compare-page-with-design.js.map +0 -1
  76. package/dist/tools/figma/figma-service.js +0 -134
  77. package/dist/tools/figma/figma-service.js.map +0 -1
  78. package/dist/tools/figma/index.js +0 -6
  79. package/dist/tools/figma/index.js.map +0 -1
  80. package/dist/tools/index.js +0 -41
  81. package/dist/tools/index.js.map +0 -1
  82. package/dist/tools/interaction/click.js +0 -29
  83. package/dist/tools/interaction/click.js.map +0 -1
  84. package/dist/tools/interaction/drag.js +0 -41
  85. package/dist/tools/interaction/drag.js.map +0 -1
  86. package/dist/tools/interaction/fill.js +0 -28
  87. package/dist/tools/interaction/fill.js.map +0 -1
  88. package/dist/tools/interaction/hover.js +0 -29
  89. package/dist/tools/interaction/hover.js.map +0 -1
  90. package/dist/tools/interaction/index.js +0 -24
  91. package/dist/tools/interaction/index.js.map +0 -1
  92. package/dist/tools/interaction/press-key.js +0 -99
  93. package/dist/tools/interaction/press-key.js.map +0 -1
  94. package/dist/tools/interaction/resize-viewport.js +0 -110
  95. package/dist/tools/interaction/resize-viewport.js.map +0 -1
  96. package/dist/tools/interaction/resize-window.js +0 -261
  97. package/dist/tools/interaction/resize-window.js.map +0 -1
  98. package/dist/tools/interaction/scroll.js +0 -304
  99. package/dist/tools/interaction/scroll.js.map +0 -1
  100. package/dist/tools/interaction/select.js +0 -30
  101. package/dist/tools/interaction/select.js.map +0 -1
  102. package/dist/tools/navigation/go-back.js +0 -76
  103. package/dist/tools/navigation/go-back.js.map +0 -1
  104. package/dist/tools/navigation/go-forward.js +0 -76
  105. package/dist/tools/navigation/go-forward.js.map +0 -1
  106. package/dist/tools/navigation/go-to.js +0 -80
  107. package/dist/tools/navigation/go-to.js.map +0 -1
  108. package/dist/tools/navigation/index.js +0 -14
  109. package/dist/tools/navigation/index.js.map +0 -1
  110. package/dist/tools/navigation/reload.js +0 -76
  111. package/dist/tools/navigation/reload.js.map +0 -1
  112. package/dist/tools/o11y/get-console-messages.js +0 -151
  113. package/dist/tools/o11y/get-console-messages.js.map +0 -1
  114. package/dist/tools/o11y/get-http-requests.js +0 -216
  115. package/dist/tools/o11y/get-http-requests.js.map +0 -1
  116. package/dist/tools/o11y/get-trace-id.js +0 -30
  117. package/dist/tools/o11y/get-trace-id.js.map +0 -1
  118. package/dist/tools/o11y/get-web-vitals.js +0 -595
  119. package/dist/tools/o11y/get-web-vitals.js.map +0 -1
  120. package/dist/tools/o11y/index.js +0 -18
  121. package/dist/tools/o11y/index.js.map +0 -1
  122. package/dist/tools/o11y/new-trace-id.js +0 -32
  123. package/dist/tools/o11y/new-trace-id.js.map +0 -1
  124. package/dist/tools/o11y/set-trace-id.js +0 -28
  125. package/dist/tools/o11y/set-trace-id.js.map +0 -1
  126. package/dist/tools/react/get-component-for-element.js +0 -941
  127. package/dist/tools/react/get-component-for-element.js.map +0 -1
  128. package/dist/tools/react/get-element-for-component.js +0 -1190
  129. package/dist/tools/react/get-element-for-component.js.map +0 -1
  130. package/dist/tools/react/index.js +0 -10
  131. package/dist/tools/react/index.js.map +0 -1
  132. package/dist/tools/run/index.js +0 -7
  133. package/dist/tools/run/index.js.map +0 -1
  134. package/dist/tools/run/js-in-browser.js +0 -51
  135. package/dist/tools/run/js-in-browser.js.map +0 -1
  136. package/dist/tools/run/js-in-sandbox.js +0 -175
  137. package/dist/tools/run/js-in-sandbox.js.map +0 -1
  138. package/dist/tools/stub/clear.js +0 -41
  139. package/dist/tools/stub/clear.js.map +0 -1
  140. package/dist/tools/stub/index.js +0 -14
  141. package/dist/tools/stub/index.js.map +0 -1
  142. package/dist/tools/stub/intercept-http-request.js +0 -112
  143. package/dist/tools/stub/intercept-http-request.js.map +0 -1
  144. package/dist/tools/stub/list.js +0 -75
  145. package/dist/tools/stub/list.js.map +0 -1
  146. package/dist/tools/stub/mock-http-response.js +0 -152
  147. package/dist/tools/stub/mock-http-response.js.map +0 -1
  148. package/dist/tools/stub/stub-controller.js +0 -284
  149. package/dist/tools/stub/stub-controller.js.map +0 -1
  150. package/dist/tools/sync/index.js +0 -6
  151. package/dist/tools/sync/index.js.map +0 -1
  152. package/dist/tools/sync/wait-for-network-idle.js +0 -152
  153. package/dist/tools/sync/wait-for-network-idle.js.map +0 -1
  154. package/dist/tools/tool-executor.js +0 -79
  155. package/dist/tools/tool-executor.js.map +0 -1
  156. package/dist/tools/types.js +0 -3
  157. package/dist/tools/types.js.map +0 -1
  158. package/dist/types.js +0 -55
  159. package/dist/types.js.map +0 -1
  160. package/dist/utils/cli-utils.js +0 -253
  161. package/dist/utils/cli-utils.js.map +0 -1
  162. package/dist/utils.js +0 -85
  163. package/dist/utils.js.map +0 -1
@@ -1,240 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ComparePageWithDesign = void 0;
4
- const compare_1 = require("./compare");
5
- const figma_service_1 = require("./figma-service");
6
- const zod_1 = require("zod");
7
- const DEFAULT_SCREENSHOT_TYPE = 'png';
8
- const DEFAULT_FULL_PAGE = true;
9
- const DEFAULT_MSSIM_MODE = 'semantic';
10
- class ComparePageWithDesign {
11
- name() {
12
- return 'figma_compare-page-with-design';
13
- }
14
- description() {
15
- return `
16
- Compares the CURRENT PAGE UI against a Figma design snapshot and returns a combined similarity score.
17
-
18
- What this tool does:
19
- 1) Fetches a raster snapshot from Figma (frame/node screenshot)
20
- 2) Takes a screenshot of the live browser page (full page or a specific selector)
21
- 3) Computes multiple similarity signals and combines them into one score:
22
- - MSSIM (structural similarity; always available)
23
- - Image embedding similarity (optional; may be skipped if provider is not configured)
24
- - Vision→text→text embedding similarity (optional; may be skipped if provider is not configured)
25
-
26
- How to use it effectively:
27
- - Prefer 'semantic' MSSIM mode when comparing Figma sample data vs real data (less sensitive to text/value differences).
28
- - Use 'raw' MSSIM mode only when you expect near pixel-identical output.
29
- - If you suspect layout/structure mismatch, run with fullPage=true first, then retry with a selector for the problematic region.
30
- - Notes explain which signals were used or skipped; skipped signals usually mean missing cloud configuration (e.g. AWS_REGION, inference profile, etc).
31
-
32
- This tool is designed for UI regression checks, design parity checks, and "does this page still match the intended layout?" validation.
33
- `.trim();
34
- }
35
- inputSchema() {
36
- return {
37
- figmaFileKey: zod_1.z
38
- .string()
39
- .min(1)
40
- .describe('Figma file key (the part after /file/ in Figma URL).'),
41
- figmaNodeId: zod_1.z
42
- .string()
43
- .min(1)
44
- .describe('Figma node id to render (frame/component node id like "12:34").'),
45
- selector: zod_1.z
46
- .string()
47
- .optional()
48
- .describe('Optional CSS selector to compare only a specific region of the page.'),
49
- fullPage: zod_1.z
50
- .boolean()
51
- .optional()
52
- .default(DEFAULT_FULL_PAGE)
53
- .describe('If true, captures the full scrollable page. Ignored when selector is provided.'),
54
- figmaScale: zod_1.z
55
- .number()
56
- .int()
57
- .positive()
58
- .optional()
59
- .describe('Optional scale factor for Figma raster export (e.g. 1, 2, 3).'),
60
- figmaFormat: zod_1.z
61
- .enum(['png', 'jpg'])
62
- .optional()
63
- .describe('Optional raster format for Figma snapshot.'),
64
- weights: zod_1.z
65
- .object({
66
- mssim: zod_1.z
67
- .number()
68
- .positive()
69
- .optional()
70
- .describe('Weight for MSSIM signal.'),
71
- imageEmbedding: zod_1.z
72
- .number()
73
- .positive()
74
- .optional()
75
- .describe('Weight for image embedding signal.'),
76
- textEmbedding: zod_1.z
77
- .number()
78
- .positive()
79
- .optional()
80
- .describe('Weight for vision→text→text embedding signal.'),
81
- })
82
- .optional()
83
- .describe('Optional weights to combine signals. Only active signals participate.'),
84
- mssimMode: zod_1.z
85
- .enum(['raw', 'semantic'])
86
- .optional()
87
- .default(DEFAULT_MSSIM_MODE)
88
- .describe('MSSIM mode. semantic is more robust for real-data vs design-data comparisons.'),
89
- maxDim: zod_1.z
90
- .number()
91
- .int()
92
- .positive()
93
- .optional()
94
- .describe('Optional preprocessing max dimension forwarded to compare pipeline.'),
95
- jpegQuality: zod_1.z
96
- .number()
97
- .int()
98
- .min(50)
99
- .max(100)
100
- .optional()
101
- .describe('Optional JPEG quality forwarded to compare pipeline (used only when JPEG encoding is selected internally).'),
102
- };
103
- }
104
- outputSchema() {
105
- return {
106
- score: zod_1.z
107
- .number()
108
- .describe('Combined similarity score in the range [0..1]. Higher means more similar.'),
109
- notes: zod_1.z
110
- .array(zod_1.z.string())
111
- .describe('Human-readable notes explaining which signals were used and their individual scores.'),
112
- meta: zod_1.z
113
- .object({
114
- pageUrl: zod_1.z
115
- .string()
116
- .describe('URL of the page that was compared.'),
117
- pageTitle: zod_1.z
118
- .string()
119
- .describe('Title of the page that was compared.'),
120
- figmaFileKey: zod_1.z
121
- .string()
122
- .describe('Figma file key used for the design snapshot.'),
123
- figmaNodeId: zod_1.z
124
- .string()
125
- .describe('Figma node id used for the design snapshot.'),
126
- selector: zod_1.z
127
- .string()
128
- .nullable()
129
- .describe('Selector used for page screenshot, if any. Null means full page.'),
130
- fullPage: zod_1.z
131
- .boolean()
132
- .describe('Whether the page screenshot was full-page.'),
133
- pageImageType: zod_1.z
134
- .enum(['png', 'jpeg'])
135
- .describe('Image type of the captured page screenshot.'),
136
- figmaImageType: zod_1.z
137
- .enum(['png', 'jpeg'])
138
- .describe('Image type of the captured Figma snapshot.'),
139
- })
140
- .describe('Metadata about what was compared.'),
141
- };
142
- }
143
- async handle(context, args) {
144
- const pageUrl = String(context.page.url());
145
- const pageTitle = String(await context.page.title());
146
- /**
147
- * 1) Get Figma snapshot
148
- */
149
- const figmaFormat = args.figmaFormat ?? 'png';
150
- const figmaScale = typeof args.figmaScale === 'number' ? args.figmaScale : undefined;
151
- const figmaSnapshot = await (0, figma_service_1.getFigmaDesignScreenshot)({
152
- fileKey: args.figmaFileKey,
153
- nodeId: args.figmaNodeId,
154
- format: figmaFormat,
155
- scale: figmaScale,
156
- });
157
- /**
158
- * 2) Take page screenshot
159
- */
160
- let pagePng;
161
- if (typeof args.selector === 'string' && args.selector.trim()) {
162
- const selector = args.selector.trim();
163
- const locator = context.page.locator(selector);
164
- const count = await locator.count();
165
- if (count === 0) {
166
- throw new Error(`Element not found for selector: ${selector}`);
167
- }
168
- // Screenshot the first matching element
169
- pagePng = await locator.first().screenshot({
170
- type: DEFAULT_SCREENSHOT_TYPE,
171
- });
172
- }
173
- else {
174
- const fullPage = args.fullPage !== false;
175
- pagePng = await context.page.screenshot({
176
- type: DEFAULT_SCREENSHOT_TYPE,
177
- fullPage,
178
- });
179
- }
180
- /**
181
- * 3) Compare via compareWithNotes
182
- */
183
- const pageSs = {
184
- image: pagePng,
185
- type: 'png',
186
- name: 'page',
187
- };
188
- const figmaSs = {
189
- image: figmaSnapshot.image,
190
- type: figmaSnapshot.type === 'jpeg' ? 'jpeg' : 'png',
191
- name: 'figma',
192
- };
193
- const result = await (0, compare_1.compareWithNotes)(pageSs, figmaSs, {
194
- weights: args.weights
195
- ? {
196
- mssim: args.weights.mssim,
197
- vectorEmbedding: args.weights.imageEmbedding,
198
- textEmbedding: args.weights.textEmbedding,
199
- }
200
- : undefined,
201
- mssim: {
202
- mode: (args.mssimMode ?? DEFAULT_MSSIM_MODE),
203
- },
204
- // Forward optional preprocessing params if your compare modules support them.
205
- // If your compareWithNotes signature doesn't accept these, remove them.
206
- imageEmbedding: {
207
- maxDim: args.maxDim,
208
- jpegQuality: typeof args.jpegQuality === 'number'
209
- ? args.jpegQuality
210
- : undefined,
211
- },
212
- textEmbedding: {
213
- maxDim: args.maxDim,
214
- jpegQuality: typeof args.jpegQuality === 'number'
215
- ? args.jpegQuality
216
- : undefined,
217
- },
218
- });
219
- return {
220
- score: result.score,
221
- notes: result.notes,
222
- meta: {
223
- pageUrl,
224
- pageTitle,
225
- figmaFileKey: args.figmaFileKey,
226
- figmaNodeId: args.figmaNodeId,
227
- selector: typeof args.selector === 'string' && args.selector.trim()
228
- ? args.selector.trim()
229
- : null,
230
- fullPage: !(typeof args.selector === 'string' && args.selector.trim())
231
- ? args.fullPage !== false
232
- : false,
233
- pageImageType: 'png',
234
- figmaImageType: figmaSnapshot.type,
235
- },
236
- };
237
- }
238
- }
239
- exports.ComparePageWithDesign = ComparePageWithDesign;
240
- //# sourceMappingURL=compare-page-with-design.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compare-page-with-design.js","sourceRoot":"","sources":["../../../src/tools/figma/compare-page-with-design.ts"],"names":[],"mappings":"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"}
@@ -1,134 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getFigmaDesignScreenshot = getFigmaDesignScreenshot;
7
- exports.assertNodeExists = assertNodeExists;
8
- const config_1 = require("../../config");
9
- const node_crypto_1 = __importDefault(require("node:crypto"));
10
- function _requireFigmaToken() {
11
- const token = config_1.FIGMA_ACCESS_TOKEN;
12
- if (!token) {
13
- throw new Error('No Figma access token configured');
14
- }
15
- return token;
16
- }
17
- function _mimeTypeFor(format) {
18
- if (format === 'jpg') {
19
- return { mimeType: 'image/jpeg', type: 'jpeg' };
20
- }
21
- return { mimeType: 'image/png', type: 'png' };
22
- }
23
- function _buildCacheKey(req) {
24
- const h = node_crypto_1.default.createHash('sha256');
25
- h.update(req.fileKey);
26
- h.update('|');
27
- h.update(req.nodeId);
28
- h.update('|');
29
- h.update(req.format ?? 'png');
30
- h.update('|');
31
- h.update(String(req.scale ?? 2));
32
- return h.digest('hex').slice(0, 24);
33
- }
34
- async function _fetchJson(url, token) {
35
- const res = await fetch(url, {
36
- method: 'GET',
37
- headers: {
38
- 'X-Figma-Token': token,
39
- Accept: 'application/json',
40
- },
41
- });
42
- const text = await res.text();
43
- let json;
44
- try {
45
- json = text ? JSON.parse(text) : {};
46
- }
47
- catch (e) {
48
- throw new Error(`Figma API returned non-JSON response (status=${res.status}). Body: ${text.slice(0, 500)}`);
49
- }
50
- if (!res.ok) {
51
- const msg = typeof json?.err === 'string'
52
- ? json.err
53
- : `Figma API error (status=${res.status})`;
54
- throw new Error(msg);
55
- }
56
- return json;
57
- }
58
- async function _fetchBinary(url) {
59
- const res = await fetch(url, { method: 'GET' });
60
- if (!res.ok) {
61
- const t = await res.text().catch(() => '');
62
- throw new Error(`Failed to download Figma rendered image (status=${res.status}): ${t.slice(0, 300)}`);
63
- }
64
- const ab = await res.arrayBuffer();
65
- return Buffer.from(ab);
66
- }
67
- /**
68
- * Fetches a rendered screenshot of a given node (frame/component/etc) from Figma.
69
- *
70
- * Implementation:
71
- * 1) Calls GET /images/:fileKey?ids=:nodeId&format=png|jpg&scale=N to get a temporary CDN URL.
72
- * 2) Downloads the image bytes from that URL.
73
- *
74
- * Notes:
75
- * - The returned URL is time-limited; download immediately.
76
- * - If you need strict determinism, set a fixed `scale`.
77
- */
78
- async function getFigmaDesignScreenshot(req) {
79
- const token = _requireFigmaToken();
80
- const format = req.format ?? 'png';
81
- const scale = typeof req.scale === 'number' && req.scale > 0 ? req.scale : 2;
82
- const { mimeType, type } = _mimeTypeFor(format);
83
- const base = config_1.FIGMA_API_BASE_URL;
84
- const fileKey = req.fileKey;
85
- const nodeId = req.nodeId;
86
- /**
87
- * Use Figma Images API.
88
- * GET /images/:file_key?ids=...&format=...&scale=...
89
- */
90
- const url = `${base}/images/${encodeURIComponent(fileKey)}` +
91
- `?ids=${encodeURIComponent(nodeId)}` +
92
- `&format=${encodeURIComponent(format)}` +
93
- `&scale=${encodeURIComponent(String(scale))}`;
94
- const imgResp = await _fetchJson(url, token);
95
- const imageUrl = imgResp.images?.[nodeId];
96
- if (!imageUrl) {
97
- const err = typeof imgResp.err === 'string' && imgResp.err.trim()
98
- ? imgResp.err
99
- : 'Figma did not return an image URL for the given nodeId.';
100
- throw new Error(err);
101
- }
102
- const image = await _fetchBinary(imageUrl);
103
- const cacheKey = _buildCacheKey(req);
104
- const out = {
105
- image,
106
- mimeType,
107
- type,
108
- cacheKey,
109
- };
110
- if (req.includeId === true) {
111
- out.nodeId = nodeId;
112
- out.fileKey = fileKey;
113
- }
114
- return out;
115
- }
116
- /**
117
- * Optional helper:
118
- * Validates that the node exists in the file before requesting render.
119
- * This is useful for clearer errors (e.g., nodeId typo).
120
- */
121
- async function assertNodeExists(fileKey, nodeId) {
122
- const token = _requireFigmaToken();
123
- /**
124
- * GET /files/:file_key/nodes?ids=...
125
- */
126
- const url = `${config_1.FIGMA_API_BASE_URL}/files/${encodeURIComponent(fileKey)}/nodes` +
127
- `?ids=${encodeURIComponent(nodeId)}`;
128
- const resp = await _fetchJson(url, token);
129
- const node = resp.nodes?.[nodeId]?.document;
130
- if (!node) {
131
- throw new Error(`Figma node not found: fileKey=${fileKey}, nodeId=${nodeId}`);
132
- }
133
- }
134
- //# sourceMappingURL=figma-service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"figma-service.js","sourceRoot":"","sources":["../../../src/tools/figma/figma-service.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.tools = void 0;
4
- const compare_page_with_design_1 = require("./compare-page-with-design");
5
- exports.tools = [new compare_page_with_design_1.ComparePageWithDesign()];
6
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/figma/index.ts"],"names":[],"mappings":";;;AACA,yEAAmE;AAEtD,QAAA,KAAK,GAAW,CAAC,IAAI,gDAAqB,EAAE,CAAC,CAAC"}
@@ -1,41 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.tools = void 0;
18
- const a11y_1 = require("./a11y");
19
- const content_1 = require("./content");
20
- const figma_1 = require("./figma");
21
- const interaction_1 = require("./interaction");
22
- const navigation_1 = require("./navigation");
23
- const o11y_1 = require("./o11y");
24
- const react_1 = require("./react");
25
- const run_1 = require("./run");
26
- const stub_1 = require("./stub");
27
- const sync_1 = require("./sync");
28
- __exportStar(require("./tool-executor"), exports);
29
- exports.tools = [
30
- ...a11y_1.tools,
31
- ...content_1.tools,
32
- ...figma_1.tools,
33
- ...interaction_1.tools,
34
- ...navigation_1.tools,
35
- ...o11y_1.tools,
36
- ...react_1.tools,
37
- ...run_1.tools,
38
- ...stub_1.tools,
39
- ...sync_1.tools,
40
- ];
41
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACA,iCAA4C;AAC5C,uCAAkD;AAClD,mCAA8C;AAC9C,+CAA0D;AAC1D,6CAAwD;AACxD,iCAA4C;AAC5C,mCAA8C;AAC9C,+BAA0C;AAC1C,iCAA4C;AAC5C,iCAA4C;AAE5C,kDAAgC;AAEnB,QAAA,KAAK,GAAW;IACzB,GAAG,YAAS;IACZ,GAAG,eAAY;IACf,GAAG,aAAU;IACb,GAAG,mBAAgB;IACnB,GAAG,kBAAe;IAClB,GAAG,YAAS;IACZ,GAAG,aAAU;IACb,GAAG,WAAQ;IACX,GAAG,YAAS;IACZ,GAAG,YAAS;CACf,CAAC"}
@@ -1,29 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Click = void 0;
4
- const zod_1 = require("zod");
5
- class Click {
6
- name() {
7
- return 'interaction_click';
8
- }
9
- description() {
10
- return 'Clicks an element on the page.';
11
- }
12
- inputSchema() {
13
- return {
14
- selector: zod_1.z
15
- .string()
16
- .describe('CSS selector for the element to click.'),
17
- };
18
- }
19
- outputSchema() {
20
- return {};
21
- }
22
- async handle(context, args) {
23
- const element = await context.page.waitForSelector(args.selector);
24
- await element.click();
25
- return {};
26
- }
27
- }
28
- exports.Click = Click;
29
- //# sourceMappingURL=click.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"click.js","sourceRoot":"","sources":["../../../src/tools/interaction/click.ts"],"names":[],"mappings":";;;AASA,6BAAwB;AASxB,MAAa,KAAK;IACd,IAAI;QACA,OAAO,mBAAmB,CAAC;IAC/B,CAAC;IAED,WAAW;QACP,OAAO,gCAAgC,CAAC;IAC5C,CAAC;IAED,WAAW;QACP,OAAO;YACH,QAAQ,EAAE,OAAC;iBACN,MAAM,EAAE;iBACR,QAAQ,CAAC,wCAAwC,CAAC;SAC1D,CAAC;IACN,CAAC;IAED,YAAY;QACR,OAAO,EAAE,CAAC;IACd,CAAC;IAED,KAAK,CAAC,MAAM,CACR,OAA2B,EAC3B,IAAgB;QAEhB,MAAM,OAAO,GAAkB,MAAM,OAAO,CAAC,IAAI,CAAC,eAAe,CAC7D,IAAI,CAAC,QAAQ,CAChB,CAAC;QACF,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC;IACd,CAAC;CACJ;AA/BD,sBA+BC"}
@@ -1,41 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Drag = void 0;
4
- const zod_1 = require("zod");
5
- class Drag {
6
- name() {
7
- return 'interaction_drag';
8
- }
9
- description() {
10
- return 'Drags an element to a target location.';
11
- }
12
- inputSchema() {
13
- return {
14
- sourceSelector: zod_1.z
15
- .string()
16
- .describe('CSS selector for the element to drag.'),
17
- targetSelector: zod_1.z
18
- .string()
19
- .describe('CSS selector for the target location.'),
20
- };
21
- }
22
- outputSchema() {
23
- return {};
24
- }
25
- async handle(context, args) {
26
- const sourceElement = await context.page.waitForSelector(args.sourceSelector);
27
- const targetElement = await context.page.waitForSelector(args.targetSelector);
28
- const sourceBound = await sourceElement.boundingBox();
29
- const targetBound = await targetElement.boundingBox();
30
- if (!sourceBound || !targetBound) {
31
- throw new Error('Could not get element positions for drag operation');
32
- }
33
- await context.page.mouse.move(sourceBound.x + sourceBound.width / 2, sourceBound.y + sourceBound.height / 2);
34
- await context.page.mouse.down();
35
- await context.page.mouse.move(targetBound.x + targetBound.width / 2, targetBound.y + targetBound.height / 2);
36
- await context.page.mouse.up();
37
- return {};
38
- }
39
- }
40
- exports.Drag = Drag;
41
- //# sourceMappingURL=drag.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"drag.js","sourceRoot":"","sources":["../../../src/tools/interaction/drag.ts"],"names":[],"mappings":";;;AAUA,6BAAwB;AASxB,MAAa,IAAI;IACb,IAAI;QACA,OAAO,kBAAkB,CAAC;IAC9B,CAAC;IAED,WAAW;QACP,OAAO,wCAAwC,CAAC;IACpD,CAAC;IAED,WAAW;QACP,OAAO;YACH,cAAc,EAAE,OAAC;iBACZ,MAAM,EAAE;iBACR,QAAQ,CAAC,uCAAuC,CAAC;YACtD,cAAc,EAAE,OAAC;iBACZ,MAAM,EAAE;iBACR,QAAQ,CAAC,uCAAuC,CAAC;SACzD,CAAC;IACN,CAAC;IAED,YAAY;QACR,OAAO,EAAE,CAAC;IACd,CAAC;IAED,KAAK,CAAC,MAAM,CACR,OAA2B,EAC3B,IAAe;QAEf,MAAM,aAAa,GAAkB,MAAM,OAAO,CAAC,IAAI,CAAC,eAAe,CACnE,IAAI,CAAC,cAAc,CACtB,CAAC;QACF,MAAM,aAAa,GAAkB,MAAM,OAAO,CAAC,IAAI,CAAC,eAAe,CACnE,IAAI,CAAC,cAAc,CACtB,CAAC;QAEF,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,WAAW,EAAE,CAAC;QACtD,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,WAAW,EAAE,CAAC;QAEtD,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CACX,oDAAoD,CACvD,CAAC;QACN,CAAC;QAED,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CACzB,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,KAAK,GAAG,CAAC,EACrC,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CACzC,CAAC;QACF,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAChC,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CACzB,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,KAAK,GAAG,CAAC,EACrC,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CACzC,CAAC;QACF,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;QAE9B,OAAO,EAAE,CAAC;IACd,CAAC;CACJ;AAzDD,oBAyDC"}
@@ -1,28 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Fill = void 0;
4
- const zod_1 = require("zod");
5
- class Fill {
6
- name() {
7
- return 'interaction_fill';
8
- }
9
- description() {
10
- return 'Fills out an input field.';
11
- }
12
- inputSchema() {
13
- return {
14
- selector: zod_1.z.string().describe('CSS selector for the input field.'),
15
- value: zod_1.z.string().describe('Value to fill.'),
16
- };
17
- }
18
- outputSchema() {
19
- return {};
20
- }
21
- async handle(context, args) {
22
- const element = await context.page.waitForSelector(args.selector);
23
- await element.fill(args.value);
24
- return {};
25
- }
26
- }
27
- exports.Fill = Fill;
28
- //# sourceMappingURL=fill.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fill.js","sourceRoot":"","sources":["../../../src/tools/interaction/fill.ts"],"names":[],"mappings":";;;AAUA,6BAAwB;AASxB,MAAa,IAAI;IACb,IAAI;QACA,OAAO,kBAAkB,CAAC;IAC9B,CAAC;IAED,WAAW;QACP,OAAO,2BAA2B,CAAC;IACvC,CAAC;IAED,WAAW;QACP,OAAO;YACH,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;YAClE,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;SAC/C,CAAC;IACN,CAAC;IAED,YAAY;QACR,OAAO,EAAE,CAAC;IACd,CAAC;IAED,KAAK,CAAC,MAAM,CACR,OAA2B,EAC3B,IAAe;QAEf,MAAM,OAAO,GAAkB,MAAM,OAAO,CAAC,IAAI,CAAC,eAAe,CAC7D,IAAI,CAAC,QAAQ,CAChB,CAAC;QACF,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/B,OAAO,EAAE,CAAC;IACd,CAAC;CACJ;AA9BD,oBA8BC"}
@@ -1,29 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Hover = void 0;
4
- const zod_1 = require("zod");
5
- class Hover {
6
- name() {
7
- return 'interaction_hover';
8
- }
9
- description() {
10
- return 'Hovers an element on the page.';
11
- }
12
- inputSchema() {
13
- return {
14
- selector: zod_1.z
15
- .string()
16
- .describe('CSS selector for the element to hover.'),
17
- };
18
- }
19
- outputSchema() {
20
- return {};
21
- }
22
- async handle(context, args) {
23
- const element = await context.page.waitForSelector(args.selector);
24
- await element.hover();
25
- return {};
26
- }
27
- }
28
- exports.Hover = Hover;
29
- //# sourceMappingURL=hover.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hover.js","sourceRoot":"","sources":["../../../src/tools/interaction/hover.ts"],"names":[],"mappings":";;;AAUA,6BAAwB;AAQxB,MAAa,KAAK;IACd,IAAI;QACA,OAAO,mBAAmB,CAAC;IAC/B,CAAC;IAED,WAAW;QACP,OAAO,gCAAgC,CAAC;IAC5C,CAAC;IAED,WAAW;QACP,OAAO;YACH,QAAQ,EAAE,OAAC;iBACN,MAAM,EAAE;iBACR,QAAQ,CAAC,wCAAwC,CAAC;SAC1D,CAAC;IACN,CAAC;IAED,YAAY;QACR,OAAO,EAAE,CAAC;IACd,CAAC;IAED,KAAK,CAAC,MAAM,CACR,OAA2B,EAC3B,IAAgB;QAEhB,MAAM,OAAO,GAAkB,MAAM,OAAO,CAAC,IAAI,CAAC,eAAe,CAC7D,IAAI,CAAC,QAAQ,CAChB,CAAC;QACF,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC;IACd,CAAC;CACJ;AA/BD,sBA+BC"}
@@ -1,24 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.tools = void 0;
4
- const click_1 = require("./click");
5
- const drag_1 = require("./drag");
6
- const fill_1 = require("./fill");
7
- const hover_1 = require("./hover");
8
- const press_key_1 = require("./press-key");
9
- const resize_viewport_1 = require("./resize-viewport");
10
- const resize_window_1 = require("./resize-window");
11
- const select_1 = require("./select");
12
- const scroll_1 = require("./scroll");
13
- exports.tools = [
14
- new click_1.Click(),
15
- new drag_1.Drag(),
16
- new fill_1.Fill(),
17
- new hover_1.Hover(),
18
- new press_key_1.PressKey(),
19
- new resize_viewport_1.ResizeViewport(),
20
- new resize_window_1.ResizeWindow(),
21
- new select_1.Select(),
22
- new scroll_1.Scroll(),
23
- ];
24
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/interaction/index.ts"],"names":[],"mappings":";;;AACA,mCAAgC;AAChC,iCAA8B;AAC9B,iCAA8B;AAC9B,mCAAgC;AAChC,2CAAuC;AACvC,uDAAmD;AACnD,mDAA+C;AAC/C,qCAAkC;AAClC,qCAAkC;AAErB,QAAA,KAAK,GAAW;IACzB,IAAI,aAAK,EAAE;IACX,IAAI,WAAI,EAAE;IACV,IAAI,WAAI,EAAE;IACV,IAAI,aAAK,EAAE;IACX,IAAI,oBAAQ,EAAE;IACd,IAAI,gCAAc,EAAE;IACpB,IAAI,4BAAY,EAAE;IAClB,IAAI,eAAM,EAAE;IACZ,IAAI,eAAM,EAAE;CACf,CAAC"}