chrome-devtools-mcp 0.23.0 → 0.24.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 (77) hide show
  1. package/build/src/DevToolsConnectionAdapter.js +1 -0
  2. package/build/src/DevtoolsUtils.js +1 -0
  3. package/build/src/HeapSnapshotManager.js +16 -0
  4. package/build/src/McpContext.js +57 -4
  5. package/build/src/McpPage.js +6 -0
  6. package/build/src/McpResponse.js +38 -4
  7. package/build/src/Mutex.js +1 -0
  8. package/build/src/PageCollector.js +1 -0
  9. package/build/src/SlimMcpResponse.js +1 -0
  10. package/build/src/TextSnapshot.js +11 -5
  11. package/build/src/WaitForHelper.js +6 -0
  12. package/build/src/bin/check-latest-version.js +1 -0
  13. package/build/src/bin/chrome-devtools-cli-options.js +206 -46
  14. package/build/src/bin/chrome-devtools-mcp-cli-options.js +3 -1
  15. package/build/src/bin/chrome-devtools-mcp-main.js +1 -0
  16. package/build/src/bin/chrome-devtools-mcp.js +1 -0
  17. package/build/src/bin/chrome-devtools.js +5 -13
  18. package/build/src/browser.js +1 -0
  19. package/build/src/daemon/client.js +4 -2
  20. package/build/src/daemon/daemon.js +1 -0
  21. package/build/src/daemon/types.js +1 -0
  22. package/build/src/daemon/utils.js +1 -0
  23. package/build/src/formatters/ConsoleFormatter.js +48 -1
  24. package/build/src/formatters/HeapSnapshotFormatter.js +18 -2
  25. package/build/src/formatters/IssueFormatter.js +1 -0
  26. package/build/src/formatters/NetworkFormatter.js +1 -0
  27. package/build/src/formatters/SnapshotFormatter.js +2 -1
  28. package/build/src/index.js +114 -51
  29. package/build/src/issue-descriptions.js +1 -0
  30. package/build/src/logger.js +1 -0
  31. package/build/src/polyfill.js +1 -0
  32. package/build/src/telemetry/ClearcutLogger.js +13 -1
  33. package/build/src/telemetry/WatchdogClient.js +1 -0
  34. package/build/src/telemetry/flagUtils.js +1 -0
  35. package/build/src/telemetry/metricUtils.js +1 -0
  36. package/build/src/telemetry/persistence.js +1 -0
  37. package/build/src/telemetry/toolMetricsUtils.js +2 -1
  38. package/build/src/telemetry/types.js +1 -0
  39. package/build/src/telemetry/watchdog/ClearcutSender.js +1 -0
  40. package/build/src/telemetry/watchdog/main.js +1 -0
  41. package/build/src/third_party/THIRD_PARTY_NOTICES +5 -5
  42. package/build/src/third_party/bundled-packages.json +2 -2
  43. package/build/src/third_party/devtools-formatter-worker.js +2451 -2933
  44. package/build/src/third_party/devtools-heap-snapshot-worker.js +32 -26
  45. package/build/src/third_party/index.js +535 -135
  46. package/build/src/third_party/lighthouse-devtools-mcp-bundle.js +21717 -20261
  47. package/build/src/tools/ToolDefinition.js +1 -0
  48. package/build/src/tools/categories.js +6 -2
  49. package/build/src/tools/console.js +3 -0
  50. package/build/src/tools/emulation.js +2 -0
  51. package/build/src/tools/extensions.js +6 -0
  52. package/build/src/tools/inPage.js +3 -2
  53. package/build/src/tools/input.js +13 -2
  54. package/build/src/tools/lighthouse.js +17 -9
  55. package/build/src/tools/memory.js +34 -1
  56. package/build/src/tools/network.js +5 -0
  57. package/build/src/tools/pages.js +9 -0
  58. package/build/src/tools/performance.js +6 -0
  59. package/build/src/tools/screencast.js +6 -2
  60. package/build/src/tools/screenshot.js +3 -0
  61. package/build/src/tools/script.js +2 -0
  62. package/build/src/tools/slim/tools.js +4 -0
  63. package/build/src/tools/snapshot.js +5 -1
  64. package/build/src/tools/tools.js +1 -0
  65. package/build/src/tools/webmcp.js +3 -0
  66. package/build/src/trace-processing/parse.js +1 -0
  67. package/build/src/types.js +1 -0
  68. package/build/src/utils/check-for-updates.js +1 -0
  69. package/build/src/utils/files.js +5 -10
  70. package/build/src/utils/id.js +1 -0
  71. package/build/src/utils/keyboard.js +1 -0
  72. package/build/src/utils/pagination.js +1 -0
  73. package/build/src/utils/string.js +1 -0
  74. package/build/src/utils/types.js +1 -0
  75. package/build/src/version.js +2 -1
  76. package/package.json +9 -9
  77. package/build/src/bin/cliDefinitions.js +0 -621
@@ -67,8 +67,8 @@ const EmptyUrlString = '';
67
67
 
68
68
  // Copyright 2025 The Chromium Authors
69
69
  class WebWorkerScope {
70
- postMessage(message) {
71
- self.postMessage(message);
70
+ postMessage(message, transfer) {
71
+ self.postMessage(message, transfer);
72
72
  }
73
73
  set onmessage(listener) {
74
74
  self.addEventListener('message', listener);
@@ -141,8 +141,8 @@ var browser = /*#__PURE__*/Object.freeze({
141
141
 
142
142
  // Copyright 2025 The Chromium Authors
143
143
  class NodeWorkerScope {
144
- postMessage(message) {
145
- WorkerThreads.parentPort?.postMessage(message);
144
+ postMessage(message, transfer) {
145
+ WorkerThreads.parentPort?.postMessage(message, transfer);
146
146
  }
147
147
  set onmessage(listener) {
148
148
  WorkerThreads.parentPort?.addEventListener('message', msg => {
@@ -778,9 +778,7 @@ var ExperimentName;
778
778
  ExperimentName["CAPTURE_NODE_CREATION_STACKS"] = "capture-node-creation-stacks";
779
779
  ExperimentName["LIVE_HEAP_PROFILE"] = "live-heap-profile";
780
780
  ExperimentName["PROTOCOL_MONITOR"] = "protocol-monitor";
781
- ExperimentName["SAMPLING_HEAP_PROFILER_TIMELINE"] = "sampling-heap-profiler-timeline";
782
781
  ExperimentName["TIMELINE_INVALIDATION_TRACKING"] = "timeline-invalidation-tracking";
783
- ExperimentName["APCA"] = "apca";
784
782
  ExperimentName["FONT_EDITOR"] = "font-editor";
785
783
  ExperimentName["INSTRUMENTATION_BREAKPOINTS"] = "instrumentation-breakpoints";
786
784
  ExperimentName["USE_SOURCE_MAP_SCOPES"] = "use-source-map-scopes";
@@ -6803,7 +6801,7 @@ class SecondaryInitManager {
6803
6801
  this.argsStep2 = argsStep2;
6804
6802
  const { promise: argsStep3, resolve: resolveArgsStep3 } = Promise.withResolvers();
6805
6803
  this.argsStep3 = argsStep3;
6806
- port.onmessage = e => {
6804
+ const listener = (e) => {
6807
6805
  const data = e.data;
6808
6806
  switch (data.step) {
6809
6807
  case 1:
@@ -6814,9 +6812,12 @@ class SecondaryInitManager {
6814
6812
  break;
6815
6813
  case 3:
6816
6814
  resolveArgsStep3(data.args);
6815
+ port.removeEventListener('message', listener);
6817
6816
  break;
6818
6817
  }
6819
6818
  };
6819
+ port.addEventListener('message', listener);
6820
+ port.start();
6820
6821
  void this.initialize(port);
6821
6822
  }
6822
6823
  async getNodeSelfSizes() {
@@ -6837,22 +6838,20 @@ class SecondaryInitManager {
6837
6838
  };
6838
6839
  const dominatorsAndRetainedSizes = await HeapSnapshot.calculateDominatorsAndRetainedSizes(args);
6839
6840
  const dominatedNodesOutputs = HeapSnapshot.buildDominatedNodes({ ...args, ...dominatorsAndRetainedSizes });
6840
- const results = {
6841
+ const resultsFromSecondWorker = {
6841
6842
  ...retainers,
6842
6843
  ...dominatorsAndRetainedSizes,
6843
6844
  ...dominatedNodesOutputs,
6844
6845
  };
6845
- port.postMessage({ resultsFromSecondWorker: results }, {
6846
- transfer: [
6847
- results.dominatorsTree.buffer,
6848
- results.firstRetainerIndex.buffer,
6849
- results.retainedSizes.buffer,
6850
- results.retainingEdges.buffer,
6851
- results.retainingNodes.buffer,
6852
- results.dominatedNodes.buffer,
6853
- results.firstDominatedNodeIndex.buffer,
6854
- ]
6855
- });
6846
+ port.postMessage({ resultsFromSecondWorker }, [
6847
+ resultsFromSecondWorker.dominatorsTree.buffer,
6848
+ resultsFromSecondWorker.retainedSizes.buffer,
6849
+ resultsFromSecondWorker.firstRetainerIndex.buffer,
6850
+ resultsFromSecondWorker.retainingNodes.buffer,
6851
+ resultsFromSecondWorker.retainingEdges.buffer,
6852
+ resultsFromSecondWorker.firstDominatedNodeIndex.buffer,
6853
+ resultsFromSecondWorker.dominatedNodes.buffer,
6854
+ ]);
6856
6855
  }
6857
6856
  catch (e) {
6858
6857
  port.postMessage({ error: e + '\n' + e?.stack });
@@ -7048,20 +7047,23 @@ class HeapSnapshot {
7048
7047
  }
7049
7048
  startInitStep1InSecondThread(secondWorker) {
7050
7049
  const resultsFromSecondWorker = new Promise((resolve, reject) => {
7051
- secondWorker.onmessage = (event) => {
7052
- const data = event.data;
7050
+ const listener = (e) => {
7051
+ const data = e.data;
7053
7052
  if (data?.problemReport) {
7054
7053
  const problemReport = data.problemReport;
7055
7054
  console.warn(formatProblemReport(this, problemReport));
7056
7055
  }
7057
7056
  else if (data?.resultsFromSecondWorker) {
7058
- const resultsFromSecondWorker = data.resultsFromSecondWorker;
7059
- resolve(resultsFromSecondWorker);
7057
+ secondWorker.removeEventListener('message', listener);
7058
+ resolve(data.resultsFromSecondWorker);
7060
7059
  }
7061
7060
  else if (data?.error) {
7061
+ secondWorker.removeEventListener('message', listener);
7062
7062
  reject(data.error);
7063
7063
  }
7064
7064
  };
7065
+ secondWorker.addEventListener('message', listener);
7066
+ secondWorker.start();
7065
7067
  });
7066
7068
  const edgeCount = this.#edgeCount;
7067
7069
  const { containmentEdges, edgeToNodeOffset, edgeFieldsCount, nodeFieldCount } = this;
@@ -9332,6 +9334,11 @@ var HeapSnapshot$1 = /*#__PURE__*/Object.freeze({
9332
9334
  createJSHeapSnapshotForTesting: createJSHeapSnapshotForTesting
9333
9335
  });
9334
9336
 
9337
+ // Copyright 2023 The Chromium Authors
9338
+ new FinalizationRegistry(url => {
9339
+ URL.revokeObjectURL(url);
9340
+ });
9341
+
9335
9342
  // Copyright 2013 The Chromium Authors
9336
9343
  class BalancedJSONTokenizer {
9337
9344
  callback;
@@ -9608,16 +9615,15 @@ var HeapSnapshotLoader$1 = /*#__PURE__*/Object.freeze({
9608
9615
 
9609
9616
  // Copyright 2011 The Chromium Authors
9610
9617
  class HeapSnapshotWorkerDispatcher {
9611
- #objects;
9618
+ #objects = [];
9612
9619
  #postMessage;
9613
9620
  constructor(postMessage) {
9614
- this.#objects = [];
9615
9621
  this.#postMessage = postMessage;
9616
9622
  }
9617
9623
  sendEvent(name, data) {
9618
9624
  this.#postMessage({ eventName: name, data });
9619
9625
  }
9620
- async dispatchMessage({ data, ports }) {
9626
+ async dispatchMessage({ data, ports, }) {
9621
9627
  const response = {
9622
9628
  callId: data.callId,
9623
9629
  result: null,