@superblocksteam/vite-plugin-file-sync 2.0.67-next.1 → 2.0.68-next.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 (116) hide show
  1. package/dist/ai-service/agent/tools/apis/analysis.d.ts.map +1 -1
  2. package/dist/ai-service/agent/tools/apis/analysis.js +4 -0
  3. package/dist/ai-service/agent/tools/apis/analysis.js.map +1 -1
  4. package/dist/ai-service/agent/tools/apis/api-executor.d.ts +9 -1
  5. package/dist/ai-service/agent/tools/apis/api-executor.d.ts.map +1 -1
  6. package/dist/ai-service/agent/tools/apis/api-executor.js +4 -1
  7. package/dist/ai-service/agent/tools/apis/api-executor.js.map +1 -1
  8. package/dist/ai-service/agent/tools/apis/api-validation-orchestrator.d.ts +1 -0
  9. package/dist/ai-service/agent/tools/apis/api-validation-orchestrator.d.ts.map +1 -1
  10. package/dist/ai-service/agent/tools/apis/api-validation-orchestrator.js +1 -1
  11. package/dist/ai-service/agent/tools/apis/api-validation-orchestrator.js.map +1 -1
  12. package/dist/ai-service/agent/tools/apis/test-api.d.ts +5 -0
  13. package/dist/ai-service/agent/tools/apis/test-api.d.ts.map +1 -1
  14. package/dist/ai-service/agent/tools/apis/test-api.js +9 -1
  15. package/dist/ai-service/agent/tools/apis/test-api.js.map +1 -1
  16. package/dist/ai-service/agent/tools2/tools/read.d.ts +1 -1
  17. package/dist/ai-service/index.d.ts +23 -2
  18. package/dist/ai-service/index.d.ts.map +1 -1
  19. package/dist/ai-service/index.js +99 -0
  20. package/dist/ai-service/index.js.map +1 -1
  21. package/dist/ai-service/judge/debug-browser.d.ts +8 -0
  22. package/dist/ai-service/judge/debug-browser.d.ts.map +1 -0
  23. package/dist/ai-service/judge/debug-browser.js +79 -0
  24. package/dist/ai-service/judge/debug-browser.js.map +1 -0
  25. package/dist/ai-service/judge/index.d.ts +12 -0
  26. package/dist/ai-service/judge/index.d.ts.map +1 -0
  27. package/dist/ai-service/judge/index.js +11 -0
  28. package/dist/ai-service/judge/index.js.map +1 -0
  29. package/dist/ai-service/judge/integration/mcp-client.d.ts +82 -0
  30. package/dist/ai-service/judge/integration/mcp-client.d.ts.map +1 -0
  31. package/dist/ai-service/judge/integration/mcp-client.js +276 -0
  32. package/dist/ai-service/judge/integration/mcp-client.js.map +1 -0
  33. package/dist/ai-service/judge/integration/playwright-bridge.d.ts +142 -0
  34. package/dist/ai-service/judge/integration/playwright-bridge.d.ts.map +1 -0
  35. package/dist/ai-service/judge/integration/playwright-bridge.js +217 -0
  36. package/dist/ai-service/judge/integration/playwright-bridge.js.map +1 -0
  37. package/dist/ai-service/judge/judge-eval-http.d.ts +3 -0
  38. package/dist/ai-service/judge/judge-eval-http.d.ts.map +1 -0
  39. package/dist/ai-service/judge/judge-eval-http.js +541 -0
  40. package/dist/ai-service/judge/judge-eval-http.js.map +1 -0
  41. package/dist/ai-service/judge/judge-eval-service-runner.d.ts +35 -0
  42. package/dist/ai-service/judge/judge-eval-service-runner.d.ts.map +1 -0
  43. package/dist/ai-service/judge/judge-eval-service-runner.js +124 -0
  44. package/dist/ai-service/judge/judge-eval-service-runner.js.map +1 -0
  45. package/dist/ai-service/judge/judge-executor.d.ts +65 -0
  46. package/dist/ai-service/judge/judge-executor.d.ts.map +1 -0
  47. package/dist/ai-service/judge/judge-executor.js +334 -0
  48. package/dist/ai-service/judge/judge-executor.js.map +1 -0
  49. package/dist/ai-service/judge/judge-service.d.ts +161 -0
  50. package/dist/ai-service/judge/judge-service.d.ts.map +1 -0
  51. package/dist/ai-service/judge/judge-service.js +241 -0
  52. package/dist/ai-service/judge/judge-service.js.map +1 -0
  53. package/dist/ai-service/judge/prompts/evaluation-criteria.d.ts +37 -0
  54. package/dist/ai-service/judge/prompts/evaluation-criteria.d.ts.map +1 -0
  55. package/dist/ai-service/judge/prompts/evaluation-criteria.js +283 -0
  56. package/dist/ai-service/judge/prompts/evaluation-criteria.js.map +1 -0
  57. package/dist/ai-service/judge/prompts/system-prompt.d.ts +30 -0
  58. package/dist/ai-service/judge/prompts/system-prompt.d.ts.map +1 -0
  59. package/dist/ai-service/judge/prompts/system-prompt.js +212 -0
  60. package/dist/ai-service/judge/prompts/system-prompt.js.map +1 -0
  61. package/dist/ai-service/judge/storage/csv-storage.d.ts +99 -0
  62. package/dist/ai-service/judge/storage/csv-storage.d.ts.map +1 -0
  63. package/dist/ai-service/judge/storage/csv-storage.js +274 -0
  64. package/dist/ai-service/judge/storage/csv-storage.js.map +1 -0
  65. package/dist/ai-service/judge/storage/index.d.ts +9 -0
  66. package/dist/ai-service/judge/storage/index.d.ts.map +1 -0
  67. package/dist/ai-service/judge/storage/index.js +7 -0
  68. package/dist/ai-service/judge/storage/index.js.map +1 -0
  69. package/dist/ai-service/judge/storage/interface.d.ts +51 -0
  70. package/dist/ai-service/judge/storage/interface.d.ts.map +1 -0
  71. package/dist/ai-service/judge/storage/interface.js +8 -0
  72. package/dist/ai-service/judge/storage/interface.js.map +1 -0
  73. package/dist/ai-service/judge/storage/types.d.ts +54 -0
  74. package/dist/ai-service/judge/storage/types.d.ts.map +1 -0
  75. package/dist/ai-service/judge/storage/types.js +7 -0
  76. package/dist/ai-service/judge/storage/types.js.map +1 -0
  77. package/dist/ai-service/judge/tools/index.d.ts +22 -0
  78. package/dist/ai-service/judge/tools/index.d.ts.map +1 -0
  79. package/dist/ai-service/judge/tools/index.js +29 -0
  80. package/dist/ai-service/judge/tools/index.js.map +1 -0
  81. package/dist/ai-service/judge/tools/playwright-action.d.ts +18 -0
  82. package/dist/ai-service/judge/tools/playwright-action.d.ts.map +1 -0
  83. package/dist/ai-service/judge/tools/playwright-action.js +171 -0
  84. package/dist/ai-service/judge/tools/playwright-action.js.map +1 -0
  85. package/dist/ai-service/judge/tools/submit-feedback.d.ts +41 -0
  86. package/dist/ai-service/judge/tools/submit-feedback.d.ts.map +1 -0
  87. package/dist/ai-service/judge/tools/submit-feedback.js +150 -0
  88. package/dist/ai-service/judge/tools/submit-feedback.js.map +1 -0
  89. package/dist/ai-service/judge/types.d.ts +169 -0
  90. package/dist/ai-service/judge/types.d.ts.map +1 -0
  91. package/dist/ai-service/judge/types.js +8 -0
  92. package/dist/ai-service/judge/types.js.map +1 -0
  93. package/dist/ai-service/llm/interaction/adapters/vercel.d.ts.map +1 -1
  94. package/dist/ai-service/llm/interaction/adapters/vercel.js.map +1 -1
  95. package/dist/ai-service/llm/interaction/provider.d.ts +10 -9
  96. package/dist/ai-service/llm/interaction/provider.d.ts.map +1 -1
  97. package/dist/ai-service/llmobs/middleware/stream-text.d.ts +8 -8
  98. package/dist/ai-service/llmobs/middleware/stream-text.d.ts.map +1 -1
  99. package/dist/ai-service/llmobs/middleware/stream-text.js.map +1 -1
  100. package/dist/ai-service/llmobs/tracer.d.ts.map +1 -1
  101. package/dist/ai-service/llmobs/tracer.js +2 -1
  102. package/dist/ai-service/llmobs/tracer.js.map +1 -1
  103. package/dist/ai-service/mcp/embedded-playwright-mcp-server.d.ts +53 -0
  104. package/dist/ai-service/mcp/embedded-playwright-mcp-server.d.ts.map +1 -0
  105. package/dist/ai-service/mcp/embedded-playwright-mcp-server.js +541 -0
  106. package/dist/ai-service/mcp/embedded-playwright-mcp-server.js.map +1 -0
  107. package/dist/ai-service/mcp/playwright-server.d.ts +114 -0
  108. package/dist/ai-service/mcp/playwright-server.d.ts.map +1 -0
  109. package/dist/ai-service/mcp/playwright-server.js +109 -0
  110. package/dist/ai-service/mcp/playwright-server.js.map +1 -0
  111. package/dist/server-rpc/client.js +1 -1
  112. package/dist/server-rpc/client.js.map +1 -1
  113. package/dist/socket-manager.d.ts.map +1 -1
  114. package/dist/socket-manager.js +8 -0
  115. package/dist/socket-manager.js.map +1 -1
  116. package/package.json +7 -6
@@ -0,0 +1,541 @@
1
+ import { once } from "node:events";
2
+ import fs from "node:fs";
3
+ import http from "node:http";
4
+ import { chromium, firefox, webkit, } from "playwright";
5
+ const PLAYWRIGHT_ACTIONS = [
6
+ "navigate",
7
+ "click",
8
+ "fill",
9
+ "screenshot",
10
+ "getText",
11
+ "waitForSelector",
12
+ "evaluate",
13
+ "getUrl",
14
+ "reload",
15
+ ];
16
+ export async function startEmbeddedPlaywrightMcpServer(options) {
17
+ let browser;
18
+ let context = null;
19
+ let shouldCloseBrowser = true;
20
+ if (options?.connectWsEndpoint) {
21
+ console.log(`🎬 MCP Server: Connecting to existing browser at ${options.connectWsEndpoint}`);
22
+ browser = await chromium.connect({ wsEndpoint: options.connectWsEndpoint });
23
+ shouldCloseBrowser = false;
24
+ }
25
+ else {
26
+ console.log("🎬 MCP Server: Launching new browser with storage state");
27
+ browser = await launchBrowser();
28
+ }
29
+ console.log(`🎬 MCP Server: Browser contexts available before selection: ${browser.contexts().length}`);
30
+ // Reuse an existing context when connecting to an existing browser
31
+ if (options?.connectWsEndpoint) {
32
+ const existing = browser.contexts();
33
+ if (existing.length > 0) {
34
+ context = existing[0];
35
+ console.log("🎬 MCP Server: Reusing existing browser context");
36
+ }
37
+ else {
38
+ console.warn("🎬 MCP Server: No existing context found on shared browser; falling back to new context with storage/JWT");
39
+ }
40
+ }
41
+ if (!context) {
42
+ const contextOptions = {};
43
+ if (options?.storageStateData) {
44
+ console.log("🎬 MCP Server: Using provided storageStateData");
45
+ contextOptions.storageState = options.storageStateData;
46
+ // Duplicate auth cookies onto app host if needed (e.g., when original domain is auth0)
47
+ if (options.appUrl && options.storageStateData.cookies?.length) {
48
+ const appHost = new URL(options.appUrl).hostname;
49
+ const duplicateCookies = options.storageStateData.cookies
50
+ .filter((c) => ["auth0", "auth0_compat", "did", "did_compat"].includes(c.name))
51
+ .map((c) => ({
52
+ ...c,
53
+ domain: appHost,
54
+ secure: false,
55
+ sameSite: "Lax",
56
+ }));
57
+ contextOptions.storageState.cookies = [
58
+ ...(contextOptions.storageState.cookies || []),
59
+ ...duplicateCookies,
60
+ ];
61
+ }
62
+ }
63
+ else if (options?.storageStatePath) {
64
+ if (fs.existsSync(options.storageStatePath)) {
65
+ console.log(`🎬 MCP Server: Loading storage state from ${options.storageStatePath}`);
66
+ contextOptions.storageState = options.storageStatePath;
67
+ }
68
+ else {
69
+ console.warn(`🎬 MCP Server: Storage state not found at ${options.storageStatePath}, starting without it`);
70
+ }
71
+ }
72
+ context = await browser.newContext(contextOptions);
73
+ }
74
+ // Ensure context exists
75
+ if (!context) {
76
+ throw new Error("Failed to create or reuse a Playwright context");
77
+ }
78
+ // Seed a cookie/localStorage with JWT for app domain if provided
79
+ if (options?.jwt && options?.appUrl) {
80
+ try {
81
+ const appUrl = new URL(options.appUrl);
82
+ const authDomains = new Set([
83
+ appUrl.hostname,
84
+ "login-dev.superblocks.com",
85
+ "login.superblocks.com",
86
+ ]);
87
+ await context.addInitScript(({ token, domains }) => {
88
+ try {
89
+ localStorage.setItem("sb_jwt", token);
90
+ sessionStorage.setItem("sb_jwt", token);
91
+ localStorage.setItem("access_token", token);
92
+ sessionStorage.setItem("access_token", token);
93
+ }
94
+ catch {
95
+ // ignore storage errors
96
+ }
97
+ try {
98
+ domains.forEach((domain) => {
99
+ document.cookie = `x-superblocks-authorization=Bearer ${token}; Path=/; SameSite=None; ${domain === "localhost" ? "" : "Secure;"} Domain=${domain}`;
100
+ document.cookie = `sb_jwt=${token}; Path=/; SameSite=None; ${domain === "localhost" ? "" : "Secure;"} Domain=${domain}`;
101
+ });
102
+ }
103
+ catch {
104
+ // ignore cookie errors
105
+ }
106
+ }, { token: options.jwt, domains: Array.from(authDomains) });
107
+ const cookieBase = {
108
+ value: `Bearer ${options.jwt}`,
109
+ path: "/",
110
+ httpOnly: false,
111
+ sameSite: "None",
112
+ };
113
+ const cookies = [
114
+ {
115
+ ...cookieBase,
116
+ name: "x-superblocks-authorization",
117
+ domain: appUrl.hostname,
118
+ secure: appUrl.protocol === "https:",
119
+ },
120
+ {
121
+ ...cookieBase,
122
+ name: "sb_jwt",
123
+ value: options.jwt,
124
+ domain: appUrl.hostname,
125
+ secure: appUrl.protocol === "https:",
126
+ },
127
+ ];
128
+ authDomains.forEach((domain) => {
129
+ if (domain !== appUrl.hostname) {
130
+ cookies.push({
131
+ ...cookieBase,
132
+ name: "x-superblocks-authorization",
133
+ domain,
134
+ secure: true,
135
+ });
136
+ cookies.push({
137
+ ...cookieBase,
138
+ name: "sb_jwt",
139
+ value: options.jwt,
140
+ domain,
141
+ secure: true,
142
+ });
143
+ }
144
+ });
145
+ await context.addCookies(cookies);
146
+ }
147
+ catch (error) {
148
+ console.warn(`🎬 MCP Server: Failed to seed JWT cookie/localStorage: ${String(error)}`);
149
+ }
150
+ }
151
+ // Seed session storage for app origin if provided
152
+ if (options?.sessionStorageData?.items?.length) {
153
+ const { origin, items } = options.sessionStorageData;
154
+ try {
155
+ await context.addInitScript(({ targetOrigin, entries, }) => {
156
+ if (location.origin === targetOrigin) {
157
+ try {
158
+ entries.forEach(({ name, value }) => {
159
+ sessionStorage.setItem(name, value);
160
+ });
161
+ }
162
+ catch {
163
+ // ignore
164
+ }
165
+ }
166
+ }, { targetOrigin: origin, entries: items });
167
+ }
168
+ catch (error) {
169
+ console.warn(`🎬 MCP Server: Failed to seed sessionStorage: ${String(error)}`);
170
+ }
171
+ }
172
+ // Seed additional origins storage (local/session) if provided
173
+ if (options?.extraOrigins?.length) {
174
+ for (const originData of options.extraOrigins) {
175
+ const { origin, localStorage = [], sessionStorage = [] } = originData;
176
+ const seedLocal = localStorage;
177
+ const seedSession = sessionStorage;
178
+ if (seedLocal.length > 0 || seedSession.length > 0) {
179
+ try {
180
+ await context.addInitScript(({ targetOrigin, lsEntries, ssEntries, }) => {
181
+ if (location.origin === targetOrigin) {
182
+ lsEntries.forEach(({ name, value }) => {
183
+ try {
184
+ globalThis.localStorage?.setItem(name, value);
185
+ }
186
+ catch {
187
+ /* ignore */
188
+ }
189
+ });
190
+ ssEntries.forEach(({ name, value }) => {
191
+ try {
192
+ globalThis.sessionStorage?.setItem(name, value);
193
+ }
194
+ catch {
195
+ /* ignore */
196
+ }
197
+ });
198
+ }
199
+ }, {
200
+ targetOrigin: origin,
201
+ lsEntries: seedLocal,
202
+ ssEntries: seedSession,
203
+ });
204
+ }
205
+ catch (error) {
206
+ console.warn(`🎬 MCP Server: Failed to seed extra origin storage for ${origin}: ${String(error)}`);
207
+ }
208
+ }
209
+ }
210
+ }
211
+ const page = await context.newPage();
212
+ // Prefer an existing page in the reused context (e.g., the CLI-authenticated one)
213
+ const existingPages = context.pages();
214
+ const activePage = existingPages.length > 0 ? existingPages[0] : page;
215
+ const server = http.createServer((req, res) => {
216
+ void (async () => {
217
+ try {
218
+ if (req.method !== "POST") {
219
+ res.writeHead(405, { "Content-Type": "application/json" });
220
+ res.end(JSON.stringify({
221
+ jsonrpc: "2.0",
222
+ id: null,
223
+ error: {
224
+ code: -32600,
225
+ message: "Only POST requests are supported",
226
+ },
227
+ }));
228
+ return;
229
+ }
230
+ const body = await readRequestBody(req);
231
+ let request;
232
+ try {
233
+ request = JSON.parse(body);
234
+ }
235
+ catch (error) {
236
+ res.writeHead(400, { "Content-Type": "application/json" });
237
+ res.end(JSON.stringify({
238
+ jsonrpc: "2.0",
239
+ id: null,
240
+ error: {
241
+ code: -32700,
242
+ message: `Invalid JSON: ${String(error)}`,
243
+ },
244
+ }));
245
+ return;
246
+ }
247
+ const response = await handleJsonRpcRequest(request, activePage);
248
+ res.writeHead(200, { "Content-Type": "application/json" });
249
+ res.end(JSON.stringify(response));
250
+ }
251
+ catch (error) {
252
+ res.writeHead(500, { "Content-Type": "application/json" });
253
+ res.end(JSON.stringify({
254
+ jsonrpc: "2.0",
255
+ id: null,
256
+ error: {
257
+ code: -32603,
258
+ message: `Server error: ${String(error)}`,
259
+ },
260
+ }));
261
+ }
262
+ })();
263
+ });
264
+ server.listen(0, "127.0.0.1");
265
+ await once(server, "listening");
266
+ const address = server.address();
267
+ const url = `http://${address.address}:${address.port}/mcp`;
268
+ return {
269
+ url,
270
+ close: async () => {
271
+ await Promise.allSettled([
272
+ new Promise((resolve, reject) => {
273
+ server.close((error) => {
274
+ if (error) {
275
+ reject(error);
276
+ }
277
+ else {
278
+ resolve();
279
+ }
280
+ });
281
+ }),
282
+ page.close().catch(() => { }),
283
+ context.close().catch(() => { }),
284
+ shouldCloseBrowser
285
+ ? browser.close().catch(() => { })
286
+ : Promise.resolve(),
287
+ ]);
288
+ },
289
+ };
290
+ }
291
+ async function launchBrowser() {
292
+ const browserName = (process.env.PLAYWRIGHT_MCP_BROWSER ??
293
+ "chromium");
294
+ const headless = process.env.HEADLESS !== "false";
295
+ switch (browserName) {
296
+ case "chromium":
297
+ return chromium.launch({ headless });
298
+ case "firefox":
299
+ return firefox.launch({ headless });
300
+ case "webkit":
301
+ return webkit.launch({ headless });
302
+ default:
303
+ throw new Error(`Unsupported PLAYWRIGHT_MCP_BROWSER: ${browserName}`);
304
+ }
305
+ }
306
+ async function readRequestBody(req) {
307
+ const chunks = [];
308
+ for await (const chunk of req) {
309
+ chunks.push(typeof chunk === "string" ? Buffer.from(chunk) : chunk);
310
+ }
311
+ return Buffer.concat(chunks).toString("utf-8");
312
+ }
313
+ async function handleJsonRpcRequest(request, page) {
314
+ const { method, id } = request;
315
+ console.log("🎬 MCP Server: Received request", {
316
+ method,
317
+ id,
318
+ hasParams: !!request.params,
319
+ });
320
+ try {
321
+ if (method === "tools/list") {
322
+ console.log("🎬 MCP Server: Listing tools");
323
+ return {
324
+ jsonrpc: "2.0",
325
+ id,
326
+ result: {
327
+ tools: [
328
+ {
329
+ name: "playwright_action",
330
+ description: "Execute Playwright browser automation actions (navigate, click, fill, screenshot, etc.)",
331
+ inputSchema: {
332
+ type: "object",
333
+ properties: {
334
+ action: {
335
+ type: "string",
336
+ enum: PLAYWRIGHT_ACTIONS,
337
+ },
338
+ },
339
+ required: ["action"],
340
+ },
341
+ },
342
+ ],
343
+ },
344
+ };
345
+ }
346
+ if (method === "tools/call") {
347
+ console.log("🎬 MCP Server: tools/call method");
348
+ const params = request.params;
349
+ console.log("🎬 MCP Server: Tool call params", {
350
+ toolName: params?.name,
351
+ hasArguments: !!params?.arguments,
352
+ action: params?.arguments?.action,
353
+ });
354
+ if (!params || params.name !== "playwright_action") {
355
+ throw new Error(`Unknown tool: ${params?.name ?? "undefined"}`);
356
+ }
357
+ const action = params.arguments?.action;
358
+ if (!action || !PLAYWRIGHT_ACTIONS.includes(action)) {
359
+ throw new Error(`Unsupported Playwright action: ${String(action)}`);
360
+ }
361
+ console.log(`🎬 MCP Server: Executing action: ${action}`);
362
+ const result = await executePlaywrightAction(action, page, params.arguments ?? {});
363
+ console.log(`🎬 MCP Server: Action ${action} completed`, {
364
+ success: result?.success,
365
+ hasResult: !!result,
366
+ });
367
+ return {
368
+ jsonrpc: "2.0",
369
+ id,
370
+ result: {
371
+ content: result,
372
+ },
373
+ };
374
+ }
375
+ if (method === "disconnect") {
376
+ return {
377
+ jsonrpc: "2.0",
378
+ id,
379
+ result: {},
380
+ };
381
+ }
382
+ throw new Error(`Unsupported method: ${method}`);
383
+ }
384
+ catch (error) {
385
+ return {
386
+ jsonrpc: "2.0",
387
+ id,
388
+ error: {
389
+ code: -32603,
390
+ message: String(error),
391
+ },
392
+ };
393
+ }
394
+ }
395
+ async function executePlaywrightAction(action, page, params) {
396
+ console.log("🎬 MCP Server: executePlaywrightAction called", {
397
+ action,
398
+ paramKeys: Object.keys(params),
399
+ url: page.url(),
400
+ });
401
+ switch (action) {
402
+ case "navigate": {
403
+ const url = params.url;
404
+ if (!url)
405
+ throw new Error("Missing url parameter for navigate action");
406
+ console.log(`🎬 MCP Server: Navigating to ${url}`);
407
+ try {
408
+ await page.goto(url, {
409
+ waitUntil: "load",
410
+ timeout: 60000, // 60 second timeout
411
+ });
412
+ console.log(`🎬 MCP Server: Navigation complete`);
413
+ return { success: true, url };
414
+ }
415
+ catch (error) {
416
+ console.error(`🎬 MCP Server: Navigation failed: ${String(error)}`);
417
+ // Return error but don't throw - let the judge handle it
418
+ return {
419
+ success: false,
420
+ error: `Navigation to ${url} failed: ${String(error)}`,
421
+ url,
422
+ };
423
+ }
424
+ }
425
+ case "click": {
426
+ const selector = params.selector;
427
+ if (!selector)
428
+ throw new Error("Missing selector for click action");
429
+ // Always target elements inside the iframe
430
+ const frame = page.frameLocator('[data-test="sb-iframe"]');
431
+ await frame.locator(selector).click({ timeout: params.timeout });
432
+ return { success: true };
433
+ }
434
+ case "fill": {
435
+ const selector = params.selector;
436
+ const value = params.value ?? "";
437
+ if (!selector)
438
+ throw new Error("Missing selector for fill action");
439
+ // Always target elements inside the iframe
440
+ const frame = page.frameLocator('[data-test="sb-iframe"]');
441
+ await frame.locator(selector).fill(value, { timeout: params.timeout });
442
+ return { success: true };
443
+ }
444
+ case "screenshot": {
445
+ const buffer = await page.screenshot({
446
+ fullPage: Boolean(params.fullPage),
447
+ });
448
+ return {
449
+ success: true,
450
+ screenshot: buffer.toString("base64"),
451
+ };
452
+ }
453
+ case "getText": {
454
+ const selector = params.selector;
455
+ if (!selector)
456
+ throw new Error("Missing selector for getText action");
457
+ // Always target elements inside the iframe
458
+ const frame = page.frameLocator('[data-test="sb-iframe"]');
459
+ const text = await frame.locator(selector).textContent({
460
+ timeout: params.timeout,
461
+ });
462
+ return { success: true, text };
463
+ }
464
+ case "waitForSelector": {
465
+ const selector = params.selector;
466
+ if (!selector) {
467
+ throw new Error("Missing selector for waitForSelector action");
468
+ }
469
+ // Always target elements inside the iframe
470
+ const frame = page.frameLocator('[data-test="sb-iframe"]');
471
+ await frame.locator(selector).waitFor({
472
+ timeout: params.timeout ?? 30_000,
473
+ });
474
+ return { success: true };
475
+ }
476
+ case "evaluate": {
477
+ const script = params.script;
478
+ if (typeof script !== "string") {
479
+ throw new Error("Missing script for evaluate action");
480
+ }
481
+ // Check for import/export/require statements that can't be used in browser context
482
+ if (script.includes("import ") ||
483
+ script.includes("export ") ||
484
+ script.includes("require(")) {
485
+ throw new Error("Cannot use import/export/require statements in browser evaluate context. " +
486
+ "Please use plain JavaScript that can run in a browser console. " +
487
+ "For example, use 'document.querySelector' instead of importing libraries.");
488
+ }
489
+ try {
490
+ // Wrap the script in a function to ensure it's evaluated as a function body
491
+ // This prevents Node.js from trying to parse it as a module
492
+ const wrappedScript = `(() => {
493
+ try {
494
+ ${script}
495
+ } catch (e) {
496
+ return { error: e.toString(), stack: e.stack };
497
+ }
498
+ })()`;
499
+ // Always execute JavaScript inside the iframe
500
+ const frameElement = await page
501
+ .locator('[data-test="sb-iframe"]')
502
+ .elementHandle();
503
+ const frame = await frameElement?.contentFrame();
504
+ if (!frame) {
505
+ throw new Error("Could not find iframe [data-test='sb-iframe'] or iframe not loaded");
506
+ }
507
+ const result = await frame.evaluate(wrappedScript);
508
+ // Check if the evaluation returned an error
509
+ if (result && typeof result === "object" && "error" in result) {
510
+ throw new Error(`Browser evaluation failed: ${result.error}`);
511
+ }
512
+ return { success: true, result };
513
+ }
514
+ catch (error) {
515
+ // If the error looks like a syntax error, provide helpful guidance
516
+ const errorMsg = String(error);
517
+ if (errorMsg.includes("SyntaxError") ||
518
+ errorMsg.includes("import") ||
519
+ errorMsg.includes("module")) {
520
+ throw new Error("JavaScript evaluation failed. Make sure your code is browser-compatible " +
521
+ "(no import/export statements). Error: " +
522
+ errorMsg);
523
+ }
524
+ throw error;
525
+ }
526
+ }
527
+ case "getUrl": {
528
+ return { success: true, url: page.url() };
529
+ }
530
+ case "reload": {
531
+ await page.reload({
532
+ waitUntil: params.waitUntil ?? "load",
533
+ timeout: params.timeout,
534
+ });
535
+ return { success: true };
536
+ }
537
+ default:
538
+ throw new Error(`Unhandled Playwright action: ${action}`);
539
+ }
540
+ }
541
+ //# sourceMappingURL=embedded-playwright-mcp-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedded-playwright-mcp-server.js","sourceRoot":"","sources":["../../../src/ai-service/mcp/embedded-playwright-mcp-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Embedded Playwright MCP server for ai-service.
3
+ *
4
+ * Manages lifecycle of the Playwright MCP server that enables
5
+ * judge evaluations to interact with browsers.
6
+ */
7
+ import type { Logger } from "../../util/logger.js";
8
+ /**
9
+ * Handle for the embedded MCP server.
10
+ */
11
+ export interface PlaywrightMcpServer {
12
+ /** Server URL for client connections */
13
+ url: string;
14
+ /** Stops the server and cleans up resources */
15
+ close: () => Promise<void>;
16
+ }
17
+ /**
18
+ * Options for starting the MCP server.
19
+ */
20
+ export interface PlaywrightMcpServerOptions {
21
+ /**
22
+ * Optional path to a Playwright storage state file for authentication.
23
+ * This allows the MCP server's browser to use the same auth cookies/localStorage.
24
+ */
25
+ storageStatePath?: string;
26
+ /**
27
+ * Optional JWT to inject via Authorization headers for all requests.
28
+ */
29
+ jwt?: string;
30
+ /**
31
+ * Optional appUrl for deriving cookie domains when seeding auth.
32
+ */
33
+ appUrl?: string;
34
+ /**
35
+ * Browser to use (chromium, firefox, webkit).
36
+ * Defaults to chromium.
37
+ */
38
+ browser?: "chromium" | "firefox" | "webkit";
39
+ /**
40
+ * Whether to run in headless mode.
41
+ * Defaults to true.
42
+ */
43
+ headless?: boolean;
44
+ /**
45
+ * Optional websocket endpoint for connecting to an existing Playwright browser.
46
+ */
47
+ connectWsEndpoint?: string;
48
+ /**
49
+ * Optional raw storage state data to seed the context.
50
+ */
51
+ storageStateData?: any;
52
+ /**
53
+ * Optional session storage items to seed for the app origin.
54
+ */
55
+ sessionStorageData?: {
56
+ origin: string;
57
+ items: Array<{
58
+ name: string;
59
+ value: string;
60
+ }>;
61
+ };
62
+ /**
63
+ * Additional origins storage to seed (e.g., auth domain).
64
+ */
65
+ extraOrigins?: Array<{
66
+ origin: string;
67
+ localStorage: Array<{
68
+ name: string;
69
+ value: string;
70
+ }>;
71
+ sessionStorage?: Array<{
72
+ name: string;
73
+ value: string;
74
+ }>;
75
+ }>;
76
+ }
77
+ /**
78
+ * Lifecycle manager for the embedded Playwright MCP server.
79
+ *
80
+ * Handles starting, stopping, and status checking of the server.
81
+ * The server runs in the same process as the ai-service.
82
+ */
83
+ export declare class PlaywrightMcpServerManager {
84
+ private server;
85
+ private logger;
86
+ constructor(logger: Logger);
87
+ /**
88
+ * Starts the MCP server if not already running.
89
+ *
90
+ * @param options - Server configuration options
91
+ * @returns Server URL for client connections
92
+ * @throws Error if server fails to start
93
+ */
94
+ start(options?: PlaywrightMcpServerOptions): Promise<string>;
95
+ /**
96
+ * Stops the MCP server if running.
97
+ *
98
+ * Gracefully shuts down the server and cleans up browser resources.
99
+ */
100
+ stop(): Promise<void>;
101
+ /**
102
+ * Checks if the server is currently running.
103
+ *
104
+ * @returns True if server is running
105
+ */
106
+ isRunning(): boolean;
107
+ /**
108
+ * Gets the server URL if running.
109
+ *
110
+ * @returns Server URL or null if not running
111
+ */
112
+ getUrl(): string | null;
113
+ }
114
+ //# sourceMappingURL=playwright-server.d.ts.map