safari-devtools-mcp 0.1.8 → 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.
@@ -5,5 +5,5 @@
5
5
  * structured metadata (level, timestamp, stack traces for errors).
6
6
  * Messages are stored in window.__safariDevToolsConsoleLogs.
7
7
  */
8
- export declare const CONSOLE_CAPTURE_SCRIPT = "\n(function() {\n if (window.__safariDevToolsConsoleInitialized) return;\n window.__safariDevToolsConsoleInitialized = true;\n window.__safariDevToolsConsoleLogs = [];\n window.__safariDevToolsConsoleMsgId = 0;\n\n const originalConsole = {};\n const methods = [\n 'log', 'debug', 'info', 'error', 'warn', 'trace',\n 'assert', 'dir', 'table', 'clear', 'count', 'timeEnd'\n ];\n\n methods.forEach(function(method) {\n originalConsole[method] = console[method];\n\n console[method] = function() {\n var args = Array.from(arguments);\n var entry = {\n msgid: window.__safariDevToolsConsoleMsgId++,\n level: method,\n message: args.map(function(arg) {\n try {\n if (typeof arg === 'object') {\n var s = JSON.stringify(arg, null, 2);\n return s && s.length > 1000 ? s.substring(0, 1000) + '... [truncated]' : s;\n }\n var str = String(arg);\n return str.length > 1000 ? str.substring(0, 1000) + '... [truncated]' : str;\n } catch(e) {\n return String(arg).substring(0, 1000);\n }\n }).join(' '),\n timestamp: Date.now(),\n args: args.map(function(arg) {\n try {\n var s = typeof arg === 'object' ? JSON.stringify(arg) : String(arg);\n return s && s.length > 2000 ? s.substring(0, 2000) + '... [truncated]' : s;\n } catch(e) {\n return String(arg).substring(0, 2000);\n }\n })\n };\n\n // Capture stack trace for errors and traces\n if (method === 'error' || method === 'warn' || method === 'trace' || method === 'assert') {\n try {\n var err = new Error();\n // Remove the first two lines (Error + this wrapper)\n var stack = err.stack || '';\n var lines = stack.split('\\n');\n entry.stackTrace = lines.slice(2).join('\\n');\n } catch(e) {}\n }\n\n // Special handling for assert - only log if assertion fails\n if (method === 'assert') {\n if (args[0]) return originalConsole[method].apply(console, args);\n entry.message = 'Assertion failed: ' + args.slice(1).map(function(a) {\n try {\n var s = typeof a === 'object' ? JSON.stringify(a) : String(a);\n return s && s.length > 1000 ? s.substring(0, 1000) + '... [truncated]' : s;\n } catch(e) { return String(a).substring(0, 1000); }\n }).join(' ');\n }\n\n // Special handling for clear\n if (method === 'clear') {\n entry.message = 'Console was cleared';\n }\n\n window.__safariDevToolsConsoleLogs.push(entry);\n\n // Call original method\n if (originalConsole[method]) {\n originalConsole[method].apply(console, args);\n }\n };\n });\n\n // Capture uncaught errors\n window.addEventListener('error', function(event) {\n window.__safariDevToolsConsoleLogs.push({\n msgid: window.__safariDevToolsConsoleMsgId++,\n level: 'error',\n message: event.message || String(event),\n timestamp: Date.now(),\n source: event.filename ? event.filename + ':' + event.lineno + ':' + event.colno : undefined,\n stackTrace: event.error ? event.error.stack : undefined\n });\n });\n\n // Capture unhandled promise rejections\n window.addEventListener('unhandledrejection', function(event) {\n var message = 'Unhandled Promise Rejection: ';\n try {\n var r = event.reason instanceof Error ? event.reason.message : JSON.stringify(event.reason);\n message += r && r.length > 1000 ? r.substring(0, 1000) + '... [truncated]' : r;\n } catch(e) {\n message += String(event.reason);\n }\n window.__safariDevToolsConsoleLogs.push({\n msgid: window.__safariDevToolsConsoleMsgId++,\n level: 'error',\n message: message,\n timestamp: Date.now(),\n stackTrace: event.reason instanceof Error ? event.reason.stack : undefined\n });\n });\n})();\n";
8
+ export declare const CONSOLE_CAPTURE_SCRIPT = "\n(function() {\n if (window.__safariDevToolsConsoleInitialized) return;\n window.__safariDevToolsConsoleInitialized = true;\n window.__safariDevToolsConsoleLogs = [];\n window.__safariDevToolsConsoleMsgId = 0;\n\n const originalConsole = {};\n const methods = [\n 'log', 'debug', 'info', 'error', 'warn', 'trace',\n 'assert', 'dir', 'table', 'clear', 'count', 'timeEnd'\n ];\n\n methods.forEach(function(method) {\n originalConsole[method] = console[method];\n\n console[method] = function() {\n var args = Array.from(arguments);\n var entry = {\n msgid: window.__safariDevToolsConsoleMsgId++,\n level: method,\n message: args.map(function(arg) {\n try {\n if (typeof arg === 'object') {\n var s = JSON.stringify(arg, null, 2);\n return s && s.length > 4000 ? s.substring(0, 4000) + '... [truncated]' : s;\n }\n var str = String(arg);\n return str.length > 4000 ? str.substring(0, 4000) + '... [truncated]' : str;\n } catch(e) {\n return String(arg).substring(0, 4000);\n }\n }).join(' '),\n timestamp: Date.now(),\n args: args.map(function(arg) {\n try {\n var s = typeof arg === 'object' ? JSON.stringify(arg) : String(arg);\n return s && s.length > 8000 ? s.substring(0, 8000) + '... [truncated]' : s;\n } catch(e) {\n return String(arg).substring(0, 8000);\n }\n })\n };\n\n // Capture stack trace for errors and traces\n if (method === 'error' || method === 'warn' || method === 'trace' || method === 'assert') {\n try {\n var err = new Error();\n // Remove the first two lines (Error + this wrapper)\n var stack = err.stack || '';\n var lines = stack.split('\\n');\n entry.stackTrace = lines.slice(2).join('\\n');\n } catch(e) {}\n }\n\n // Special handling for assert - only log if assertion fails\n if (method === 'assert') {\n if (args[0]) return originalConsole[method].apply(console, args);\n entry.message = 'Assertion failed: ' + args.slice(1).map(function(a) {\n try {\n var s = typeof a === 'object' ? JSON.stringify(a) : String(a);\n return s && s.length > 4000 ? s.substring(0, 4000) + '... [truncated]' : s;\n } catch(e) { return String(a).substring(0, 4000); }\n }).join(' ');\n }\n\n // Special handling for clear\n if (method === 'clear') {\n entry.message = 'Console was cleared';\n }\n\n window.__safariDevToolsConsoleLogs.push(entry);\n\n // Call original method\n if (originalConsole[method]) {\n originalConsole[method].apply(console, args);\n }\n };\n });\n\n // Capture uncaught errors\n window.addEventListener('error', function(event) {\n window.__safariDevToolsConsoleLogs.push({\n msgid: window.__safariDevToolsConsoleMsgId++,\n level: 'error',\n message: event.message || String(event),\n timestamp: Date.now(),\n source: event.filename ? event.filename + ':' + event.lineno + ':' + event.colno : undefined,\n stackTrace: event.error ? event.error.stack : undefined\n });\n });\n\n // Capture unhandled promise rejections\n window.addEventListener('unhandledrejection', function(event) {\n var message = 'Unhandled Promise Rejection: ';\n try {\n var r = event.reason instanceof Error ? event.reason.message : JSON.stringify(event.reason);\n message += r && r.length > 4000 ? r.substring(0, 4000) + '... [truncated]' : r;\n } catch(e) {\n message += String(event.reason);\n }\n window.__safariDevToolsConsoleLogs.push({\n msgid: window.__safariDevToolsConsoleMsgId++,\n level: 'error',\n message: message,\n timestamp: Date.now(),\n stackTrace: event.reason instanceof Error ? event.reason.stack : undefined\n });\n });\n})();\n";
9
9
  //# sourceMappingURL=console.d.ts.map
@@ -30,21 +30,21 @@ export const CONSOLE_CAPTURE_SCRIPT = `
30
30
  try {
31
31
  if (typeof arg === 'object') {
32
32
  var s = JSON.stringify(arg, null, 2);
33
- return s && s.length > 1000 ? s.substring(0, 1000) + '... [truncated]' : s;
33
+ return s && s.length > 4000 ? s.substring(0, 4000) + '... [truncated]' : s;
34
34
  }
35
35
  var str = String(arg);
36
- return str.length > 1000 ? str.substring(0, 1000) + '... [truncated]' : str;
36
+ return str.length > 4000 ? str.substring(0, 4000) + '... [truncated]' : str;
37
37
  } catch(e) {
38
- return String(arg).substring(0, 1000);
38
+ return String(arg).substring(0, 4000);
39
39
  }
40
40
  }).join(' '),
41
41
  timestamp: Date.now(),
42
42
  args: args.map(function(arg) {
43
43
  try {
44
44
  var s = typeof arg === 'object' ? JSON.stringify(arg) : String(arg);
45
- return s && s.length > 2000 ? s.substring(0, 2000) + '... [truncated]' : s;
45
+ return s && s.length > 8000 ? s.substring(0, 8000) + '... [truncated]' : s;
46
46
  } catch(e) {
47
- return String(arg).substring(0, 2000);
47
+ return String(arg).substring(0, 8000);
48
48
  }
49
49
  })
50
50
  };
@@ -66,8 +66,8 @@ export const CONSOLE_CAPTURE_SCRIPT = `
66
66
  entry.message = 'Assertion failed: ' + args.slice(1).map(function(a) {
67
67
  try {
68
68
  var s = typeof a === 'object' ? JSON.stringify(a) : String(a);
69
- return s && s.length > 1000 ? s.substring(0, 1000) + '... [truncated]' : s;
70
- } catch(e) { return String(a).substring(0, 1000); }
69
+ return s && s.length > 4000 ? s.substring(0, 4000) + '... [truncated]' : s;
70
+ } catch(e) { return String(a).substring(0, 4000); }
71
71
  }).join(' ');
72
72
  }
73
73
 
@@ -102,7 +102,7 @@ export const CONSOLE_CAPTURE_SCRIPT = `
102
102
  var message = 'Unhandled Promise Rejection: ';
103
103
  try {
104
104
  var r = event.reason instanceof Error ? event.reason.message : JSON.stringify(event.reason);
105
- message += r && r.length > 1000 ? r.substring(0, 1000) + '... [truncated]' : r;
105
+ message += r && r.length > 4000 ? r.substring(0, 4000) + '... [truncated]' : r;
106
106
  } catch(e) {
107
107
  message += String(event.reason);
108
108
  }
@@ -1 +1 @@
1
- {"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../../src/tools/screenshot.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,YAAY,CAAC;AAE5C,eAAO,MAAM,oBAAoB;;;CAahC,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,WAoD5B,CAAC"}
1
+ {"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../../src/tools/screenshot.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,YAAY,CAAC;AAE5C,eAAO,MAAM,oBAAoB;;;CAahC,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,WAyD5B,CAAC"}
@@ -40,18 +40,23 @@ export const takeScreenshot = async (params, driver) => {
40
40
  ],
41
41
  };
42
42
  }
43
- // Check size — if too large, suggest saving to file
43
+ // Check size — if too large for inline base64, save to temp file
44
44
  if (base64Data.length >= 2_000_000) {
45
45
  const { tmpdir } = await import('os');
46
46
  const { join } = await import('path');
47
47
  const tempPath = join(tmpdir(), `safari-screenshot-${Date.now()}.png`);
48
48
  const buffer = Buffer.from(base64Data, 'base64');
49
49
  await writeFile(tempPath, buffer);
50
+ const sizeMB = (buffer.length / 1_048_576).toFixed(1);
50
51
  return {
51
52
  content: [
52
53
  {
53
54
  type: 'text',
54
- text: `${description}\nScreenshot was too large to embed. Saved to ${tempPath}.`,
55
+ text: [
56
+ description,
57
+ `\nScreenshot (${sizeMB} MB) exceeded the 1.5 MB inline limit and was saved to: ${tempPath}`,
58
+ 'Tip: Use the filePath parameter to save directly to a preferred location, or use resize_page to reduce viewport size before capturing.',
59
+ ].join('\n'),
55
60
  },
56
61
  ],
57
62
  };
@@ -1 +1 @@
1
- {"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../../src/tools/screenshot.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AACtB,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AAGtC,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,GAAG,EAAE,CAAC;SACH,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,uGAAuG,CACxG;IACH,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,4IAA4I,CAC7I;CACJ,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAgB,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;IAClE,IAAI,UAAkB,CAAC;IACvB,IAAI,WAAmB,CAAC;IAExB,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;QACf,UAAU,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,GAAa,CAAC,CAAC;QACtE,WAAW,GAAG,0CAA0C,MAAM,CAAC,GAAG,IAAI,CAAC;IACzE,CAAC;SAAM,CAAC;QACN,UAAU,GAAG,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC;QAC3C,WAAW,GAAG,mDAAmD,CAAC;IACpE,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACjD,MAAM,SAAS,CAAC,MAAM,CAAC,QAAkB,EAAE,MAAM,CAAC,CAAC;QACnD,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,GAAG,WAAW,yBAAyB,MAAM,CAAC,QAAQ,GAAG;iBAChE;aACF;SACF,CAAC;IACJ,CAAC;IAED,oDAAoD;IACpD,IAAI,UAAU,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;QACnC,MAAM,EAAC,MAAM,EAAC,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,EAAC,IAAI,EAAC,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,qBAAqB,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACvE,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACjD,MAAM,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAClC,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,GAAG,WAAW,iDAAiD,QAAQ,GAAG;iBACjF;aACF;SACF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE;YACP,EAAC,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,WAAW,EAAC;YAC1C;gBACE,IAAI,EAAE,OAAgB;gBACtB,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,WAAW;aACtB;SACF;KACF,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../../src/tools/screenshot.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AACtB,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AAGtC,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,GAAG,EAAE,CAAC;SACH,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,uGAAuG,CACxG;IACH,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,4IAA4I,CAC7I;CACJ,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAgB,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;IAClE,IAAI,UAAkB,CAAC;IACvB,IAAI,WAAmB,CAAC;IAExB,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;QACf,UAAU,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,GAAa,CAAC,CAAC;QACtE,WAAW,GAAG,0CAA0C,MAAM,CAAC,GAAG,IAAI,CAAC;IACzE,CAAC;SAAM,CAAC;QACN,UAAU,GAAG,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC;QAC3C,WAAW,GAAG,mDAAmD,CAAC;IACpE,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACjD,MAAM,SAAS,CAAC,MAAM,CAAC,QAAkB,EAAE,MAAM,CAAC,CAAC;QACnD,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,GAAG,WAAW,yBAAyB,MAAM,CAAC,QAAQ,GAAG;iBAChE;aACF;SACF,CAAC;IACJ,CAAC;IAED,iEAAiE;IACjE,IAAI,UAAU,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;QACnC,MAAM,EAAC,MAAM,EAAC,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,EAAC,IAAI,EAAC,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,qBAAqB,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACvE,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACjD,MAAM,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACtD,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE;wBACJ,WAAW;wBACX,iBAAiB,MAAM,2DAA2D,QAAQ,EAAE;wBAC5F,wIAAwI;qBACzI,CAAC,IAAI,CAAC,IAAI,CAAC;iBACb;aACF;SACF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE;YACP,EAAC,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,WAAW,EAAC;YAC1C;gBACE,IAAI,EAAE,OAAgB;gBACtB,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,WAAW;aACtB;SACF;KACF,CAAC;AACJ,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../../src/tools/snapshot.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAGtB,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,YAAY,CAAC;AAE5C,eAAO,MAAM,kBAAkB;;;CAa9B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,WAmB1B,CAAC;AAEF,eAAO,MAAM,aAAa;;;CAWzB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,WA6BrB,CAAC"}
1
+ {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../../src/tools/snapshot.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAGtB,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,YAAY,CAAC;AAE5C,eAAO,MAAM,kBAAkB;;;CAa9B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,WAoB1B,CAAC;AAEF,eAAO,MAAM,aAAa;;;CAWzB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,WA6BrB,CAAC"}
@@ -9,15 +9,16 @@ export const takeSnapshotSchema = {
9
9
  verbose: z
10
10
  .boolean()
11
11
  .optional()
12
- .describe('Whether to include all possible information (tag names, attributes). Default is false.'),
12
+ .describe('Whether to include all possible information (tag names, attributes). Default is true.'),
13
13
  filePath: z
14
14
  .string()
15
15
  .optional()
16
16
  .describe('The absolute path, or a path relative to the current working directory, to save the snapshot to instead of attaching it to the response.'),
17
17
  };
18
18
  export const takeSnapshot = async (params, driver) => {
19
- const tree = await driver.takeSnapshot(params.verbose);
20
- const text = formatSnapshot(tree, params.verbose);
19
+ const verbose = params.verbose !== false; // default true
20
+ const tree = await driver.takeSnapshot(verbose);
21
+ const text = formatSnapshot(tree, verbose);
21
22
  if (params.filePath) {
22
23
  await writeFile(params.filePath, text, 'utf-8');
23
24
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../../src/tools/snapshot.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AACtB,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AACtC,OAAO,EAAC,cAAc,EAAC,MAAM,oCAAoC,CAAC;AAGlE,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,OAAO,EAAE,CAAC;SACP,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,wFAAwF,CACzF;IACH,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,0IAA0I,CAC3I;CACJ,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAgB,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;IAChE,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,OAA8B,CAAC,CAAC;IAC9E,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,OAA8B,CAAC,CAAC;IAEzE,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,MAAM,SAAS,CAAC,MAAM,CAAC,QAAkB,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1D,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,qBAAqB,MAAM,CAAC,QAAQ,GAAG;iBAC9C;aACF;SACF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,CAAC,EAAC,IAAI,EAAE,MAAe,EAAE,IAAI,EAAC,CAAC;KACzC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,IAAI,EAAE,CAAC;SACJ,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CACP,uEAAuE,CACxE;IACH,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,4CAA4C,CAAC;CAC1D,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAgB,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;IAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,IAAgB,CAAC;IACtC,MAAM,OAAO,GAAG,MAAM,CAAC,OAA6B,CAAC;IAErD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACvD,gCAAgC;QAChC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC;QACzC,MAAM,YAAY,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QAE1C,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,qBAAqB,KAAK,eAAe,YAAY,EAAE;iBAC9D;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAC7D;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC,CAAC"}
1
+ {"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../../src/tools/snapshot.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AACtB,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AACtC,OAAO,EAAC,cAAc,EAAC,MAAM,oCAAoC,CAAC;AAGlE,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,OAAO,EAAE,CAAC;SACP,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,uFAAuF,CACxF;IACH,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,0IAA0I,CAC3I;CACJ,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAgB,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;IAChE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,eAAe;IACzD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAE3C,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,MAAM,SAAS,CAAC,MAAM,CAAC,QAAkB,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1D,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,qBAAqB,MAAM,CAAC,QAAQ,GAAG;iBAC9C;aACF;SACF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,CAAC,EAAC,IAAI,EAAE,MAAe,EAAE,IAAI,EAAC,CAAC;KACzC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,IAAI,EAAE,CAAC;SACJ,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CACP,uEAAuE,CACxE;IACH,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,4CAA4C,CAAC;CAC1D,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAgB,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;IAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,IAAgB,CAAC;IACtC,MAAM,OAAO,GAAG,MAAM,CAAC,OAA6B,CAAC;IAErD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACvD,gCAAgC;QAChC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC;QACzC,MAAM,YAAY,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QAE1C,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,qBAAqB,KAAK,eAAe,YAAY,EAAE;iBAC9D;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAC7D;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "safari-devtools-mcp",
3
3
  "mcpName": "io.github.HayoDev/safari-devtools-mcp",
4
- "version": "0.1.8",
4
+ "version": "0.2.0",
5
5
  "description": "MCP server for Safari DevTools — browser debugging and automation for AI coding agents",
6
6
  "type": "module",
7
7
  "main": "build/src/index.js",