@sudu-cli/fronted-preview-mcp 1.0.0-beta.4 → 1.0.0-beta.6

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 (49) hide show
  1. package/README.md +24 -0
  2. package/dist/handlers/autoFixLoop.d.ts +3 -10
  3. package/dist/handlers/autoFixLoop.js +10 -49
  4. package/dist/handlers/autoFixLoop.js.map +1 -1
  5. package/dist/handlers/click.d.ts +9 -0
  6. package/dist/handlers/click.js +93 -0
  7. package/dist/handlers/click.js.map +1 -0
  8. package/dist/handlers/fill.d.ts +10 -0
  9. package/dist/handlers/fill.js +129 -0
  10. package/dist/handlers/fill.js.map +1 -0
  11. package/dist/handlers/inspect.d.ts +11 -0
  12. package/dist/handlers/inspect.js +138 -0
  13. package/dist/handlers/inspect.js.map +1 -0
  14. package/dist/handlers/screenshot.d.ts +10 -0
  15. package/dist/handlers/screenshot.js +135 -0
  16. package/dist/handlers/screenshot.js.map +1 -0
  17. package/dist/handlers/typescriptDiagnostics.d.ts +9 -0
  18. package/dist/index.js +215 -0
  19. package/dist/index.js.map +1 -1
  20. package/dist/navigate.d.ts +9 -0
  21. package/dist/navigate.js +78 -0
  22. package/dist/navigate.js.map +1 -0
  23. package/dist/strategies/baseStrategy.d.ts +27 -0
  24. package/dist/strategies/baseStrategy.js +23 -0
  25. package/dist/strategies/baseStrategy.js.map +1 -0
  26. package/dist/strategies/index.d.ts +9 -0
  27. package/dist/strategies/index.js +22 -0
  28. package/dist/strategies/index.js.map +1 -0
  29. package/dist/strategies/missingImport.d.ts +16 -0
  30. package/dist/strategies/missingImport.js +156 -0
  31. package/dist/strategies/missingImport.js.map +1 -0
  32. package/dist/strategies/missingProperty.d.ts +13 -0
  33. package/dist/strategies/missingProperty.js +134 -0
  34. package/dist/strategies/missingProperty.js.map +1 -0
  35. package/dist/strategies/networkError.d.ts +10 -0
  36. package/dist/strategies/networkError.js +56 -0
  37. package/dist/strategies/networkError.js.map +1 -0
  38. package/dist/strategies/nullCheckInsertion.d.ts +14 -0
  39. package/dist/strategies/nullCheckInsertion.js +138 -0
  40. package/dist/strategies/nullCheckInsertion.js.map +1 -0
  41. package/dist/strategies/typeAssignment.d.ts +13 -0
  42. package/dist/strategies/typeAssignment.js +121 -0
  43. package/dist/strategies/typeAssignment.js.map +1 -0
  44. package/dist/strategies/unusedImportRemoval.d.ts +11 -0
  45. package/dist/strategies/unusedImportRemoval.js +138 -0
  46. package/dist/strategies/unusedImportRemoval.js.map +1 -0
  47. package/dist/types.d.ts +1 -1
  48. package/dist/types.js.map +1 -1
  49. package/package.json +2 -2
@@ -0,0 +1,135 @@
1
+ import { CDPConnectionManager } from '../cdp/connectionManager.js';
2
+ import { createMCPError, createMCPSuccess } from '../types.js';
3
+ export async function handleScreenshot(args) {
4
+ const { selector, format = 'png', quality = 80, fullPage = false, timeout = 10000 } = args;
5
+ const cdpManager = CDPConnectionManager.getInstance();
6
+ try {
7
+ // Connect to CDP if not already connected
8
+ const connection = await cdpManager.getConnection(9222);
9
+ // Wait for page to be ready if selector is specified
10
+ if (selector) {
11
+ const selectorStartTime = Date.now();
12
+ while (Date.now() - selectorStartTime < timeout) {
13
+ const result = await connection.send('Runtime.evaluate', {
14
+ expression: `document.querySelector('${selector}') !== null`
15
+ });
16
+ if (result.result && result.result.value === true) {
17
+ break;
18
+ }
19
+ await new Promise(resolve => setTimeout(resolve, 100, undefined));
20
+ }
21
+ }
22
+ // Take screenshot based on parameters
23
+ const screenshotParams = {
24
+ format: format,
25
+ quality: quality
26
+ };
27
+ if (fullPage) {
28
+ const metrics = await connection.send('Page.getLayoutMetrics');
29
+ if (metrics && metrics.cssLayoutViewport) {
30
+ screenshotParams.width = Math.ceil(metrics.cssLayoutViewport.clientWidth);
31
+ screenshotParams.height = Math.ceil(metrics.cssLayoutViewport.clientHeight);
32
+ }
33
+ }
34
+ let screenshotData;
35
+ let size;
36
+ if (selector) {
37
+ // Take screenshot of specific element
38
+ const elementInfo = await connection.send('Runtime.evaluate', {
39
+ expression: `
40
+ const element = document.querySelector('${selector}');
41
+ const rect = element.getBoundingClientRect();
42
+ {
43
+ x: rect.left,
44
+ y: rect.top,
45
+ width: rect.width,
46
+ height: rect.height,
47
+ scrollX: window.pageXOffset,
48
+ scrollY: window.pageYOffset
49
+ }
50
+ `,
51
+ returnByValue: true
52
+ });
53
+ const rect = elementInfo.result.value;
54
+ // Scroll to element if needed
55
+ await connection.send('Runtime.evaluate', {
56
+ expression: `
57
+ const element = document.querySelector('${selector}');
58
+ element.scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'center' });
59
+ `
60
+ });
61
+ await new Promise(resolve => setTimeout(resolve, 500));
62
+ // Take screenshot of element
63
+ const screenshotResult = await connection.send('Page.captureScreenshot', {
64
+ ...screenshotParams,
65
+ clip: {
66
+ x: rect.x,
67
+ y: rect.y,
68
+ width: rect.width,
69
+ height: rect.height,
70
+ scale: 1
71
+ }
72
+ });
73
+ screenshotData = screenshotResult.data;
74
+ size = {
75
+ width: rect.width,
76
+ height: rect.height
77
+ };
78
+ }
79
+ else {
80
+ // Take full page screenshot
81
+ const screenshotResult = await connection.send('Page.captureScreenshot', screenshotParams);
82
+ screenshotData = screenshotResult.data;
83
+ if (fullPage) {
84
+ // For full page, we need to get the actual dimensions
85
+ const metrics = await connection.send('Page.getLayoutMetrics');
86
+ if (metrics && metrics.cssLayoutViewport) {
87
+ size = {
88
+ width: Math.ceil(metrics.cssLayoutViewport.clientWidth),
89
+ height: Math.ceil(metrics.cssLayoutViewport.clientHeight)
90
+ };
91
+ }
92
+ else {
93
+ size = {
94
+ width: 1920, // Default fallback
95
+ height: 1080 // Default fallback
96
+ };
97
+ }
98
+ }
99
+ else {
100
+ // For viewport screenshot, we need to get viewport dimensions
101
+ const viewport = await connection.send('Page.getLayoutMetrics');
102
+ if (viewport && viewport.cssLayoutViewport) {
103
+ size = {
104
+ width: viewport.cssLayoutViewport.clientWidth,
105
+ height: viewport.cssLayoutViewport.clientHeight
106
+ };
107
+ }
108
+ else {
109
+ size = {
110
+ width: 1920, // Default fallback
111
+ height: 1080 // Default fallback
112
+ };
113
+ }
114
+ }
115
+ }
116
+ const result = {
117
+ screenshotSuccess: true,
118
+ format: format,
119
+ size: size,
120
+ selectorUsed: selector,
121
+ timestamp: new Date().toISOString()
122
+ };
123
+ // Return base64 encoded screenshot data
124
+ return createMCPSuccess({
125
+ message: 'Screenshot captured successfully',
126
+ ...result,
127
+ data: screenshotData
128
+ });
129
+ }
130
+ catch (error) {
131
+ console.error('Screenshot error:', error);
132
+ return createMCPError('SCREENSHOT_ERROR', `Failed to capture screenshot: ${error instanceof Error ? error.message : String(error)}`, undefined, 'Check if Chrome is running with --remote-debugging-port=9222');
133
+ }
134
+ }
135
+ //# sourceMappingURL=screenshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../src/handlers/screenshot.ts"],"names":[],"mappings":"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"}
@@ -5,5 +5,14 @@ interface GetTypeScriptDiagnosticsArgs {
5
5
  files?: string[];
6
6
  includeWarnings?: boolean;
7
7
  }
8
+ export interface DiagnosticInfo {
9
+ file: string;
10
+ line: number;
11
+ column: number;
12
+ code: number;
13
+ message: string;
14
+ severity: 'error' | 'warning' | 'suggestion' | 'message';
15
+ category: 'typescript' | 'semantic' | 'syntactic' | 'declaration' | 'global' | 'config';
16
+ }
8
17
  declare function handleGetTypeScriptDiagnostics(args: GetTypeScriptDiagnosticsArgs): Promise<MCPToolResponse>;
9
18
  export { handleGetTypeScriptDiagnostics };
package/dist/index.js CHANGED
@@ -10,6 +10,11 @@ import { handleQuickPreview } from './handlers/quickPreview.js';
10
10
  import { handleCheckPageErrors } from './handlers/checkPageErrors.js';
11
11
  import { handleGetTypeScriptDiagnostics } from './handlers/typescriptDiagnostics.js';
12
12
  import { handleAutoFixLoop } from './handlers/autoFixLoop.js';
13
+ import { handleClick } from './handlers/click.js';
14
+ import { handleFill } from './handlers/fill.js';
15
+ import { handleNavigate } from './navigate.js';
16
+ import { handleScreenshot } from './handlers/screenshot.js';
17
+ import { handleInspect } from './handlers/inspect.js';
13
18
  const server = new McpServer({
14
19
  name: 'frontend-preview',
15
20
  version: '1.0.0',
@@ -287,6 +292,216 @@ server.tool('auto_fix_loop', 'Automatically detect and fix frontend errors in an
287
292
  return { content };
288
293
  });
289
294
  // ============================================================
295
+ // Tool: click
296
+ // ============================================================
297
+ server.tool('click', 'Click on a page element using CSS selector or XPath. ' +
298
+ 'Supports left, right, and middle clicks with optional click count. ' +
299
+ 'Waits for element to be available and clickable before performing the action.\n\n' +
300
+ 'Returns { elementFound, elementClickable, clickSuccess, elementInfo, timestamp }.\n\n' +
301
+ 'WHEN TO USE:\n' +
302
+ '- User wants to interact with page elements\n' +
303
+ '- Testing button clicks, link navigation\n' +
304
+ '- Automating form interactions\n\n' +
305
+ 'PREREQUISITE:\n' +
306
+ '- Chrome must be running with --remote-debugging-port=9222\n' +
307
+ '- Page must be loaded before calling this tool\n\n' +
308
+ 'AFTER THIS TOOL:\n' +
309
+ '- Check elementInfo for clicked element details\n' +
310
+ '- Use take_snapshot to verify page state after click', {
311
+ selector: z
312
+ .string()
313
+ .describe('CSS selector or XPath of the element to click (e.g., "#submit-btn", ".login-button", "//button[@id=\'submit\']")'),
314
+ timeout: z
315
+ .number()
316
+ .min(1000)
317
+ .max(30000)
318
+ .optional()
319
+ .describe('Milliseconds to wait for element availability. Defaults to 5000.'),
320
+ button: z
321
+ .enum(['left', 'right', 'middle'])
322
+ .optional()
323
+ .describe('Mouse button to use. Defaults to "left".'),
324
+ clickCount: z
325
+ .number()
326
+ .min(1)
327
+ .max(5)
328
+ .optional()
329
+ .describe('Number of times to click. Defaults to 1.'),
330
+ }, async (args) => {
331
+ return await handleClick(args);
332
+ });
333
+ // ============================================================
334
+ // Tool: fill
335
+ // ============================================================
336
+ server.tool('fill', 'Fill form input fields with specified values. ' +
337
+ 'Supports text inputs, textareas, and select dropdowns. ' +
338
+ 'Can clear fields first and add delays for React/Vue reactivity.\n\n' +
339
+ 'Returns { elementFound, elementInputType, fillSuccess, elementInfo, timestamp }.\n\n' +
340
+ 'WHEN TO USE:\n' +
341
+ '- User wants to fill out forms automatically\n' +
342
+ '- Testing form submissions\n' +
343
+ '- Automating data entry workflows\n\n' +
344
+ 'PREREQUISITE:\n' +
345
+ '- Chrome must be running with --remote-debugging-port=9222\n' +
346
+ '- Page must be loaded before calling this tool\n\n' +
347
+ 'AFTER THIS TOOL:\n' +
348
+ '- Verify fillSuccess to ensure value was set correctly\n' +
349
+ '- Use take_snapshot to check form state', {
350
+ selector: z
351
+ .string()
352
+ .describe('CSS selector of the input field to fill (e.g., "#username", "#email", ".form-input")'),
353
+ value: z
354
+ .string()
355
+ .describe('Value to set in the input field'),
356
+ timeout: z
357
+ .number()
358
+ .min(1000)
359
+ .max(30000)
360
+ .optional()
361
+ .describe('Milliseconds to wait for element availability. Defaults to 5000.'),
362
+ clearFirst: z
363
+ .boolean()
364
+ .optional()
365
+ .describe('Clear the field before filling. Defaults to true.'),
366
+ delay: z
367
+ .number()
368
+ .min(0)
369
+ .max(5000)
370
+ .optional()
371
+ .describe('Delay in milliseconds after filling to allow React/Vue reactivity. Defaults to 100.'),
372
+ }, async (args) => {
373
+ return await handleFill(args);
374
+ });
375
+ // ============================================================
376
+ // Tool: navigate
377
+ // ============================================================
378
+ server.tool('navigate', 'Navigate to a specific URL and wait for page load. ' +
379
+ 'Supports different wait conditions and optional selector waiting.\n\n' +
380
+ 'Returns { navigationSuccess, pageLoaded, loadTime, finalUrl, title, waitForSelectorFound, timestamp }.\n\n' +
381
+ 'WHEN TO USE:\n' +
382
+ '- User wants to navigate to specific pages\n' +
383
+ '- Testing multi-page applications\n' +
384
+ '- Setting up page state before other actions\n\n' +
385
+ 'PREREQUISITE:\n' +
386
+ '- Chrome must be running with --remote-debugging-port=9222\n\n' +
387
+ 'AFTER THIS TOOL:\n' +
388
+ '- Use take_snapshot to verify page loaded correctly\n' +
389
+ '- Check loadTime for performance metrics\n' +
390
+ '- Use other tools to interact with the loaded page', {
391
+ url: z
392
+ .string()
393
+ .describe('URL to navigate to (e.g., "https://example.com", "/dashboard")'),
394
+ timeout: z
395
+ .number()
396
+ .min(1000)
397
+ .max(60000)
398
+ .optional()
399
+ .describe('Milliseconds to wait for navigation. Defaults to 10000.'),
400
+ waitUntil: z
401
+ .enum(['load', 'domcontentloaded', 'networkidle', 'commit'])
402
+ .optional()
403
+ .describe('When to consider navigation complete. Defaults to "load".'),
404
+ waitForSelector: z
405
+ .string()
406
+ .optional()
407
+ .describe('Optional CSS selector to wait for after navigation.'),
408
+ }, async (args) => {
409
+ return await handleNavigate(args);
410
+ });
411
+ // ============================================================
412
+ // Tool: screenshot
413
+ // ============================================================
414
+ server.tool('screenshot', 'Capture screenshots of the page or specific elements. ' +
415
+ 'Supports full page, viewport, and element-specific screenshots. ' +
416
+ 'Multiple formats and quality options available.\n\n' +
417
+ 'Returns { screenshotSuccess, format, size, selectorUsed, timestamp, data }.\n\n' +
418
+ 'WHEN TO USE:\n' +
419
+ '- User wants visual documentation of page state\n' +
420
+ -'Capturing error states or UI issues\n' +
421
+ '- Creating visual test reports\n\n' +
422
+ 'PREREQUISITE:\n' +
423
+ '- Chrome must be running with --remote-debugging-port=9222\n' +
424
+ '- Page must be loaded before calling this tool\n\n' +
425
+ 'AFTER THIS TOOL:\n' +
426
+ '- Use base64 data to save or display the screenshot\n' +
427
+ '- Check size for dimension information\n' +
428
+ '- Combine with element inspection for detailed UI analysis', {
429
+ selector: z
430
+ .string()
431
+ .optional()
432
+ .describe('Optional CSS selector of element to screenshot. If omitted, captures full page or viewport.'),
433
+ format: z
434
+ .enum(['png', 'jpeg', 'webp'])
435
+ .optional()
436
+ .describe('Image format. Defaults to "png".'),
437
+ quality: z
438
+ .number()
439
+ .min(0)
440
+ .max(100)
441
+ .optional()
442
+ .describe('Image quality (0-100). Only applies to JPEG/WebP. Defaults to 80.'),
443
+ fullPage: z
444
+ .boolean()
445
+ .optional()
446
+ .describe('Capture full page instead of viewport. Defaults to false.'),
447
+ timeout: z
448
+ .number()
449
+ .min(1000)
450
+ .max(30000)
451
+ .optional()
452
+ .describe('Milliseconds to wait for element availability if selector is specified. Defaults to 10000.'),
453
+ }, async (args) => {
454
+ return await handleScreenshot(args);
455
+ });
456
+ // ============================================================
457
+ // Tool: inspect
458
+ // ============================================================
459
+ server.tool('inspect', 'Get detailed information about a page element. ' +
460
+ 'Returns comprehensive element data including attributes, styles, ' +
461
+ 'position, children, and accessibility information.\n\n' +
462
+ 'Returns { elementFound, elementInfo, timestamp }.\n\n' +
463
+ 'WHEN TO USE:\n' +
464
+ '- User wants detailed element information for debugging\n' +
465
+ '- Understanding page structure and element properties\n' +
466
+ '- Debugging CSS styling and layout issues\n\n' +
467
+ 'PREREQUISITE:\n' +
468
+ '- Chrome must be running with --remote-debugging-port=9222\n' +
469
+ '- Page must be loaded before calling this tool\n\n' +
470
+ 'AFTER THIS TOOL:\n' +
471
+ '- Use elementInfo for detailed debugging\n' +
472
+ '- Combine with screenshot to understand visual context\n' +
473
+ '- Use for CSS debugging and layout analysis', {
474
+ selector: z
475
+ .string()
476
+ .describe('CSS selector or XPath of element to inspect (e.g., ".header", "#main-content", "//div[@class=\'container\']")'),
477
+ timeout: z
478
+ .number()
479
+ .min(1000)
480
+ .max(30000)
481
+ .optional()
482
+ .describe('Milliseconds to wait for element availability. Defaults to 5000.'),
483
+ includeStyles: z
484
+ .boolean()
485
+ .optional()
486
+ .describe('Include computed CSS styles. Defaults to true.'),
487
+ includeAttributes: z
488
+ .boolean()
489
+ .optional()
490
+ .describe('Include element attributes. Defaults to true.'),
491
+ includeChildren: z
492
+ .boolean()
493
+ .optional()
494
+ .describe('Include child elements. Defaults to false.'),
495
+ maxDepth: z
496
+ .number()
497
+ .min(0)
498
+ .max(5)
499
+ .optional()
500
+ .describe('Maximum depth for children traversal. Defaults to 2.'),
501
+ }, async (args) => {
502
+ return await handleInspect(args);
503
+ });
504
+ // ============================================================
290
505
  // Server startup
291
506
  // ============================================================
292
507
  export async function main() {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,8BAA8B,EAAE,MAAM,qCAAqC,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B;IACE,IAAI,EAAE,kBAAkB;IACxB,OAAO,EAAE,OAAO;CACjB,EACD;IACE,YAAY,EAAE;QACZ,KAAK,EAAE,EAAE;KACV;CACF,CACF,CAAC;AAEF,+DAA+D;AAC/D,yBAAyB;AACzB,+DAA+D;AAC/D,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,6DAA6D;IAC3D,kFAAkF;IAClF,6EAA6E;IAC7E,+DAA+D;IAC/D,gBAAgB;IAChB,oEAAoE;IACpE,uEAAuE;IACvE,oBAAoB;IACpB,yEAAyE;IACzE,wEAAwE;IACxE,oBAAoB;IACpB,+EAA+E;IAC/E,iEAAiE,EACnE;IACE,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,yFAAyF,CAC1F;CACJ,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,OAAO,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC,CACF,CAAC;AAEF,+DAA+D;AAC/D,yBAAyB;AACzB,+DAA+D;AAC/D,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,kEAAkE;IAChE,sEAAsE;IACtE,wDAAwD;IACxD,sDAAsD;IACtD,gBAAgB;IAChB,oEAAoE;IACpE,kDAAkD;IAClD,oBAAoB;IACpB,6EAA6E;IAC7E,4DAA4D;IAC5D,oBAAoB;IACpB,8DAA8D;IAC9D,yDAAyD;IACzD,qDAAqD,EACvD;IACE,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,kDAAkD,CAAC;IAC/D,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,yCAAyC,CAAC;IACtD,aAAa,EAAE,CAAC;SACb,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,gEAAgE,CACjE;CACJ,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,OAAO,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC,CACF,CAAC;AAEF,+DAA+D;AAC/D,wBAAwB;AACxB,+DAA+D;AAC/D,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,oEAAoE;IAClE,mDAAmD;IACnD,gDAAgD;IAChD,gBAAgB;IAChB,gEAAgE;IAChE,oBAAoB;IACpB,gFAAgF;IAChF,0CAA0C,EAC5C,EAAE,EACF,KAAK,IAAI,EAAE;IACT,OAAO,MAAM,mBAAmB,EAAE,CAAC;AACrC,CAAC,CACF,CAAC;AAEF,+DAA+D;AAC/D,sBAAsB;AACtB,+DAA+D;AAC/D,MAAM,CAAC,IAAI,CACT,eAAe,EACf,0DAA0D;IACxD,qEAAqE;IACrE,oDAAoD;IACpD,kEAAkE;IAClE,4BAA4B;IAC5B,+DAA+D;IAC/D,2DAA2D;IAC3D,oDAAoD;IACpD,oDAAoD;IACpD,oBAAoB;IACpB,8DAA8D;IAC9D,0DAA0D;IAC1D,qFAAqF;IACrF,sEAAsE;IACtE,qEAAqE;IACrE,wEAAwE;IACxE,2EAA2E;IAC3E,oCAAoC;IACpC,gFAAgF;IAChF,mFAAmF;IACnF,qEAAqE;IACrE,gEAAgE,EAClE;IACE,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,yFAAyF,CAAC;IACtG,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,0FAA0F,CAAC;CACxG,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,OAAO,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;AACxC,CAAC,CACF,CAAC;AAEF,+DAA+D;AAC/D,0BAA0B;AAC1B,+DAA+D;AAC/D,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,+DAA+D;IAC7D,yEAAyE;IACzE,iEAAiE;IACjE,4DAA4D;IAC5D,8EAA8E;IAC9E,2CAA2C;IAC3C,oHAAoH;IACpH,gBAAgB;IAChB,2DAA2D;IAC3D,4DAA4D;IAC5D,sCAAsC;IACtC,iBAAiB;IACjB,8DAA8D;IAC9D,2FAA2F;IAC3F,oBAAoB;IACpB,4DAA4D;IAC5D,8CAA8C;IAC9C,gEAAgE;IAChE,6EAA6E,EAC/E;IACE,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,yFAAyF,CAAC;IACtG,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,oDAAoD,CAAC;IACjE,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,kDAAkD,CAAC;IAC/D,aAAa,EAAE,CAAC;SACb,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,+EAA+E,CAAC;CAC7F,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,OAAO,MAAM,qBAAqB,CAAC,IAAI,CAAC,CAAC;AAC3C,CAAC,CACF,CAAC;AAEF,+DAA+D;AAC/D,mCAAmC;AACnC,+DAA+D;AAC/D,MAAM,CAAC,IAAI,CACT,4BAA4B,EAC5B,6EAA6E;IAC3E,4EAA4E;IAC5E,2GAA2G;IAC3G,gBAAgB;IAChB,oDAAoD;IACpD,iDAAiD;IACjD,kCAAkC;IAClC,4CAA4C;IAC5C,iBAAiB;IACjB,6CAA6C;IAC7C,uDAAuD;IACvD,oBAAoB;IACpB,kDAAkD;IAClD,4BAA4B;IAC5B,0DAA0D,EAC5D;IACE,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,yFAAyF,CAAC;IACtG,YAAY,EAAE,CAAC;SACZ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,8EAA8E,CAAC;IAC3F,KAAK,EAAE,CAAC;SACL,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CAAC,gGAAgG,CAAC;IAC7G,eAAe,EAAE,CAAC;SACf,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,qDAAqD,CAAC;CACnE,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,OAAO,MAAM,8BAA8B,CAAC,IAAI,CAAC,CAAC;AACpD,CAAC,CACF,CAAC;AAIF,+DAA+D;AAC/D,sBAAsB;AACtB,+DAA+D;AAC/D,MAAM,CAAC,IAAI,CACT,eAAe,EACf,qEAAqE;IACnE,uEAAuE;IACvE,+EAA+E;IAC/E,+CAA+C;IAC/C,oGAAoG;IACpG,gBAAgB;IAChB,yDAAyD;IACzD,2DAA2D;IAC3D,+CAA+C;IAC/C,qCAAqC;IACrC,iBAAiB;IACjB,4FAA4F;IAC5F,kEAAkE;IAClE,2FAA2F;IAC3F,oBAAoB;IACpB,yDAAyD;IACzD,2DAA2D;IAC3D,gEAAgE;IAChE,2EAA2E;IAC3E,kDAAkD,EACpD;IACE,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,yFAAyF,CAAC;IACtG,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,oDAAoD,CAAC;IACjE,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,kDAAkD,CAAC;IAC/D,aAAa,EAAE,CAAC;SACb,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,EAAE,CAAC;SACP,QAAQ,EAAE;SACV,QAAQ,CAAC,kDAAkD,CAAC;IAC/D,mBAAmB,EAAE,CAAC;SACnB,MAAM,EAAE;SACR,GAAG,CAAC,IAAI,CAAC;SACT,GAAG,CAAC,MAAM,CAAC;SACX,QAAQ,EAAE;SACV,QAAQ,CAAC,2DAA2D,CAAC;IACxE,aAAa,EAAE,CAAC;SACb,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,+CAA+C,CAAC;IAC5D,YAAY,EAAE,CAAC;SACZ,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CAAC,4EAA4E,CAAC;IACzF,SAAS,EAAE,CAAC;SACT,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;SACjC,QAAQ,EAAE;SACV,QAAQ,CAAC,gIAAgI,CAAC;CAC9I,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG;QACd;YACE,IAAI,EAAE,MAAe;YACrB,IAAI,EAAE,4BAA4B;gBAC5B,eAAe,MAAM,CAAC,UAAU,IAAI;gBACpC,iBAAiB,MAAM,CAAC,WAAW,IAAI;gBACvC,qBAAqB,MAAM,CAAC,eAAe,IAAI;gBAC/C,YAAY,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM;gBAC5C,cAAc,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;SACjD;KACF,CAAC;IAEF,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,MAAe;YACrB,IAAI,EAAE,cAAc,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;SAC/C,CAAC,CAAC;IACL,CAAC;IAED,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,MAAe;YACrB,IAAI,EAAE,qBAAqB,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;SAC/G,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,CAAC;AACrB,CAAC,CACF,CAAC;AAEF,+DAA+D;AAC/D,cAAc;AACd,+DAA+D;AAC/D,MAAM,CAAC,IAAI,CACT,OAAO,EACP,uDAAuD;IACrD,qEAAqE;IACrE,mFAAmF;IACnF,uFAAuF;IACvF,gBAAgB;IAChB,+CAA+C;IAC/C,4CAA4C;IAC5C,oCAAoC;IACpC,iBAAiB;IACjB,8DAA8D;IAC9D,oDAAoD;IACpD,oBAAoB;IACpB,mDAAmD;IACnD,sDAAsD,EACxD;IACE,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,CAAC,kHAAkH,CAAC;IAC/H,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,GAAG,CAAC,IAAI,CAAC;SACT,GAAG,CAAC,KAAK,CAAC;SACV,QAAQ,EAAE;SACV,QAAQ,CAAC,kEAAkE,CAAC;IAC/E,MAAM,EAAE,CAAC;SACN,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;SACjC,QAAQ,EAAE;SACV,QAAQ,CAAC,0CAA0C,CAAC;IACvD,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,EAAE;SACV,QAAQ,CAAC,0CAA0C,CAAC;CACxD,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,OAAO,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC,CACF,CAAC;AAEF,+DAA+D;AAC/D,aAAa;AACb,+DAA+D;AAC/D,MAAM,CAAC,IAAI,CACT,MAAM,EACN,gDAAgD;IAC9C,yDAAyD;IACzD,qEAAqE;IACrE,sFAAsF;IACtF,gBAAgB;IAChB,gDAAgD;IAChD,8BAA8B;IAC9B,uCAAuC;IACvC,iBAAiB;IACjB,8DAA8D;IAC9D,oDAAoD;IACpD,oBAAoB;IACpB,0DAA0D;IAC1D,yCAAyC,EAC3C;IACE,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,CAAC,sFAAsF,CAAC;IACnG,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,QAAQ,CAAC,iCAAiC,CAAC;IAC9C,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,GAAG,CAAC,IAAI,CAAC;SACT,GAAG,CAAC,KAAK,CAAC;SACV,QAAQ,EAAE;SACV,QAAQ,CAAC,kEAAkE,CAAC;IAC/E,UAAU,EAAE,CAAC;SACV,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,mDAAmD,CAAC;IAChE,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,IAAI,CAAC;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,qFAAqF,CAAC;CACnG,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,OAAO,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC,CACF,CAAC;AAEF,+DAA+D;AAC/D,iBAAiB;AACjB,+DAA+D;AAC/D,MAAM,CAAC,IAAI,CACT,UAAU,EACV,qDAAqD;IACnD,uEAAuE;IACvE,4GAA4G;IAC5G,gBAAgB;IAChB,8CAA8C;IAC9C,qCAAqC;IACrC,kDAAkD;IAClD,iBAAiB;IACjB,gEAAgE;IAChE,oBAAoB;IACpB,uDAAuD;IACvD,4CAA4C;IAC5C,oDAAoD,EACtD;IACE,GAAG,EAAE,CAAC;SACH,MAAM,EAAE;SACR,QAAQ,CAAC,gEAAgE,CAAC;IAC7E,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,GAAG,CAAC,IAAI,CAAC;SACT,GAAG,CAAC,KAAK,CAAC;SACV,QAAQ,EAAE;SACV,QAAQ,CAAC,yDAAyD,CAAC;IACtE,SAAS,EAAE,CAAC;SACT,IAAI,CAAC,CAAC,MAAM,EAAE,kBAAkB,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;SAC3D,QAAQ,EAAE;SACV,QAAQ,CAAC,2DAA2D,CAAC;IACxE,eAAe,EAAE,CAAC;SACf,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,qDAAqD,CAAC;CACnE,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,OAAO,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC,CACF,CAAC;AAEF,+DAA+D;AAC/D,mBAAmB;AACnB,+DAA+D;AAC/D,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,wDAAwD;IACtD,kEAAkE;IAClE,qDAAqD;IACrD,iFAAiF;IACjF,gBAAgB;IAChB,mDAAmD;IACnD,CAAE,uCAAuC;IACzC,oCAAoC;IACpC,iBAAiB;IACjB,8DAA8D;IAC9D,oDAAoD;IACpD,oBAAoB;IACpB,uDAAuD;IACvD,0CAA0C;IAC1C,4DAA4D,EAC9D;IACE,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,6FAA6F,CAAC;IAC1G,MAAM,EAAE,CAAC;SACN,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;SAC7B,QAAQ,EAAE;SACV,QAAQ,CAAC,kCAAkC,CAAC;IAC/C,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,mEAAmE,CAAC;IAChF,QAAQ,EAAE,CAAC;SACR,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,2DAA2D,CAAC;IACxE,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,GAAG,CAAC,IAAI,CAAC;SACT,GAAG,CAAC,KAAK,CAAC;SACV,QAAQ,EAAE;SACV,QAAQ,CAAC,4FAA4F,CAAC;CAC1G,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,OAAO,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC,CACF,CAAC;AAEF,+DAA+D;AAC/D,gBAAgB;AAChB,+DAA+D;AAC/D,MAAM,CAAC,IAAI,CACT,SAAS,EACT,iDAAiD;IAC/C,mEAAmE;IACnE,wDAAwD;IACxD,uDAAuD;IACvD,gBAAgB;IAChB,2DAA2D;IAC3D,yDAAyD;IACzD,+CAA+C;IAC/C,iBAAiB;IACjB,8DAA8D;IAC9D,oDAAoD;IACpD,oBAAoB;IACpB,4CAA4C;IAC5C,0DAA0D;IAC1D,6CAA6C,EAC/C;IACE,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,CAAC,+GAA+G,CAAC;IAC5H,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,GAAG,CAAC,IAAI,CAAC;SACT,GAAG,CAAC,KAAK,CAAC;SACV,QAAQ,EAAE;SACV,QAAQ,CAAC,kEAAkE,CAAC;IAC/E,aAAa,EAAE,CAAC;SACb,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,gDAAgD,CAAC;IAC7D,iBAAiB,EAAE,CAAC;SACjB,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,+CAA+C,CAAC;IAC5D,eAAe,EAAE,CAAC;SACf,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,4CAA4C,CAAC;IACzD,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,EAAE;SACV,QAAQ,CAAC,sDAAsD,CAAC;CACpE,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,OAAO,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC,CACF,CAAC;AAEF,+DAA+D;AAC/D,iBAAiB;AACjB,+DAA+D;AAC/D,MAAM,CAAC,KAAK,UAAU,IAAI;IACxB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,yEAAyE;AACzE,MAAM,YAAY,GAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACf,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAEjF,IAAI,YAAY,EAAE,CAAC;IACjB,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACnB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { MCPToolResponse } from './types.js';
2
+ interface NavigateArgs {
3
+ url: string;
4
+ timeout?: number;
5
+ waitUntil?: 'load' | 'domcontentloaded' | 'networkidle' | 'commit';
6
+ waitForSelector?: string;
7
+ }
8
+ export declare function handleNavigate(args: NavigateArgs): Promise<MCPToolResponse>;
9
+ export {};
@@ -0,0 +1,78 @@
1
+ import { CDPConnectionManager } from './cdp/connectionManager.js';
2
+ import { createMCPError, createMCPSuccess } from './types.js';
3
+ export async function handleNavigate(args) {
4
+ const { url, timeout = 10000, waitUntil = 'load', waitForSelector } = args;
5
+ const cdpManager = CDPConnectionManager.getInstance();
6
+ try {
7
+ // Connect to CDP if not already connected
8
+ const connection = await cdpManager.getConnection(9222);
9
+ const startTime = Date.now();
10
+ // Navigate to the URL
11
+ await connection.send('Page.navigate', {
12
+ url: url
13
+ });
14
+ // Wait for page load based on waitUntil parameter
15
+ let pageLoaded = false;
16
+ const loadTimeout = timeout;
17
+ const loadStartTime = Date.now();
18
+ while (Date.now() - loadStartTime < loadTimeout) {
19
+ const result = await connection.send('Page.getNavigationHistory');
20
+ if (result.entries && result.entries.length > 0) {
21
+ const currentEntry = result.entries[result.currentIndex];
22
+ if (currentEntry.url === url) {
23
+ pageLoaded = true;
24
+ break;
25
+ }
26
+ }
27
+ await new Promise(resolve => setTimeout(resolve, 100, undefined));
28
+ }
29
+ if (!pageLoaded) {
30
+ return createMCPError('TIMEOUT', `Navigation to ${url} timed out after ${timeout}ms`, undefined, 'Check if the page is loading properly');
31
+ }
32
+ // Wait for additional conditions if specified
33
+ let waitForSelectorFound = false;
34
+ if (waitForSelector) {
35
+ const selectorTimeout = Math.min(5000, timeout - (Date.now() - loadStartTime));
36
+ const selectorStartTime = Date.now();
37
+ while (Date.now() - selectorStartTime < selectorTimeout) {
38
+ const result = await connection.send('Runtime.evaluate', {
39
+ expression: `document.querySelector('${waitForSelector}') !== null`
40
+ });
41
+ if (result.result && result.result.value === true) {
42
+ waitForSelectorFound = true;
43
+ break;
44
+ }
45
+ await new Promise(resolve => setTimeout(resolve, 100, undefined));
46
+ }
47
+ }
48
+ // Get final page info
49
+ const pageInfo = await connection.send('Runtime.evaluate', {
50
+ expression: `
51
+ {
52
+ url: window.location.href,
53
+ title: document.title,
54
+ readyState: document.readyState,
55
+ loadTime: Date.now() - ${startTime}
56
+ }
57
+ `,
58
+ returnByValue: true
59
+ });
60
+ const pageInfoData = pageInfo.result.value;
61
+ const loadTime = Date.now() - startTime;
62
+ const result = {
63
+ navigationSuccess: true,
64
+ pageLoaded: pageLoaded,
65
+ loadTime: loadTime,
66
+ finalUrl: pageInfoData.url,
67
+ title: pageInfoData.title,
68
+ waitForSelectorFound: waitForSelectorFound,
69
+ timestamp: new Date().toISOString()
70
+ };
71
+ return createMCPSuccess({ message: 'Navigation completed successfully', ...result });
72
+ }
73
+ catch (error) {
74
+ console.error('Navigation error:', error);
75
+ return createMCPError('PAGE_NAVIGATION_FAILED', `Failed to navigate to ${url}: ${error instanceof Error ? error.message : String(error)}`, undefined, 'Check if Chrome is running with --remote-debugging-port=9222');
76
+ }
77
+ }
78
+ //# sourceMappingURL=navigate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigate.js","sourceRoot":"","sources":["../src/navigate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { Project, SourceFile } from 'ts-morph';
2
+ import { DiagnosticInfo } from '../handlers/typescriptDiagnostics.js';
3
+ import { ConsoleError } from '../handlers/autoFixLoop.js';
4
+ export interface FixContext {
5
+ projectDir: string;
6
+ project: Project;
7
+ tsConfigPath: string;
8
+ }
9
+ export interface FixResult {
10
+ success: boolean;
11
+ message: string;
12
+ changes: Array<{
13
+ file: string;
14
+ description: string;
15
+ diff?: string;
16
+ }>;
17
+ }
18
+ export interface FixStrategy {
19
+ errorType: 'typescript' | 'console' | 'network';
20
+ pattern: RegExp;
21
+ canFix(error: DiagnosticInfo | ConsoleError): boolean;
22
+ fix(context: FixContext, error: DiagnosticInfo | ConsoleError): Promise<FixResult>;
23
+ }
24
+ export declare function createFixContext(projectDir: string, tsConfigPath: string): FixContext;
25
+ export declare function saveChanges(context: FixContext): void;
26
+ export declare function getSourceFile(context: FixContext, filePath: string): SourceFile | undefined;
27
+ export declare function getRelativePath(context: FixContext, filePath: string): string;
@@ -0,0 +1,23 @@
1
+ import { Project } from 'ts-morph';
2
+ export function createFixContext(projectDir, tsConfigPath) {
3
+ const project = new Project({
4
+ tsConfigFilePath: tsConfigPath,
5
+ skipAddingFilesFromTsConfig: false,
6
+ skipFileDependencyResolution: true,
7
+ skipLoadingLibFiles: true,
8
+ });
9
+ return { projectDir, project, tsConfigPath };
10
+ }
11
+ export function saveChanges(context) {
12
+ context.project.saveSync();
13
+ }
14
+ export function getSourceFile(context, filePath) {
15
+ const fullPath = filePath.startsWith('/') ? filePath : `${context.projectDir}/${filePath}`;
16
+ return context.project.getSourceFile(fullPath);
17
+ }
18
+ export function getRelativePath(context, filePath) {
19
+ const fullPath = filePath.startsWith('/') ? filePath : `${context.projectDir}/${filePath}`;
20
+ const relative = fullPath.replace(context.projectDir + '/', '');
21
+ return relative;
22
+ }
23
+ //# sourceMappingURL=baseStrategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baseStrategy.js","sourceRoot":"","sources":["../../src/strategies/baseStrategy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA2N,MAAM,UAAU,CAAC;AAuB5P,MAAM,UAAU,gBAAgB,CAAC,UAAkB,EAAE,YAAoB;IACvE,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC;QAC1B,gBAAgB,EAAE,YAAY;QAC9B,2BAA2B,EAAE,KAAK;QAClC,4BAA4B,EAAE,IAAI;QAClC,mBAAmB,EAAE,IAAI;KAC1B,CAAC,CAAC;IACH,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAmB;IAC7C,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAmB,EAAE,QAAgB;IACjE,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,UAAU,IAAI,QAAQ,EAAE,CAAC;IAC3F,OAAO,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAmB,EAAE,QAAgB;IACnE,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,UAAU,IAAI,QAAQ,EAAE,CAAC;IAC3F,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,GAAG,GAAG,EAAE,EAAE,CAAC,CAAC;IAChE,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,9 @@
1
+ export * from './baseStrategy.js';
2
+ export { unusedImportRemovalStrategy } from './unusedImportRemoval.js';
3
+ export { missingPropertyStrategy } from './missingProperty.js';
4
+ export { typeAssignmentStrategy } from './typeAssignment.js';
5
+ export { nullCheckInsertionStrategy } from './nullCheckInsertion.js';
6
+ export { missingImportStrategy } from './missingImport.js';
7
+ export { networkErrorStrategy } from './networkError.js';
8
+ import { FixStrategy } from './baseStrategy.js';
9
+ export declare const defaultFixStrategies: FixStrategy[];
@@ -0,0 +1,22 @@
1
+ export * from './baseStrategy.js';
2
+ export { unusedImportRemovalStrategy } from './unusedImportRemoval.js';
3
+ export { missingPropertyStrategy } from './missingProperty.js';
4
+ export { typeAssignmentStrategy } from './typeAssignment.js';
5
+ export { nullCheckInsertionStrategy } from './nullCheckInsertion.js';
6
+ export { missingImportStrategy } from './missingImport.js';
7
+ export { networkErrorStrategy } from './networkError.js';
8
+ import { unusedImportRemovalStrategy } from './unusedImportRemoval.js';
9
+ import { missingPropertyStrategy } from './missingProperty.js';
10
+ import { typeAssignmentStrategy } from './typeAssignment.js';
11
+ import { nullCheckInsertionStrategy } from './nullCheckInsertion.js';
12
+ import { missingImportStrategy } from './missingImport.js';
13
+ import { networkErrorStrategy } from './networkError.js';
14
+ export const defaultFixStrategies = [
15
+ unusedImportRemovalStrategy,
16
+ missingPropertyStrategy,
17
+ typeAssignmentStrategy,
18
+ nullCheckInsertionStrategy,
19
+ missingImportStrategy,
20
+ networkErrorStrategy,
21
+ ];
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/strategies/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,CAAC,MAAM,oBAAoB,GAAkB;IACjD,2BAA2B;IAC3B,uBAAuB;IACvB,sBAAsB;IACtB,0BAA0B;IAC1B,qBAAqB;IACrB,oBAAoB;CACrB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { FixStrategy, FixContext, FixResult } from './baseStrategy.js';
2
+ import { DiagnosticInfo } from '../handlers/typescriptDiagnostics.js';
3
+ import { ConsoleError } from '../handlers/autoFixLoop.js';
4
+ export declare class MissingImportStrategy implements FixStrategy {
5
+ errorType: "typescript";
6
+ pattern: RegExp;
7
+ canFix(error: DiagnosticInfo | ConsoleError): boolean;
8
+ fix(context: FixContext, error: DiagnosticInfo | ConsoleError): Promise<FixResult>;
9
+ private addImportFromModule;
10
+ private findAndAddImport;
11
+ private getExportedSymbols;
12
+ private getModuleSpecifier;
13
+ private getRelativeImportPath;
14
+ private generateDiff;
15
+ }
16
+ export declare const missingImportStrategy: MissingImportStrategy;