chrome-devtools-mcp 0.23.0 → 0.25.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.
- package/README.md +22 -5
- package/build/src/DevToolsConnectionAdapter.js +1 -0
- package/build/src/DevtoolsUtils.js +1 -0
- package/build/src/HeapSnapshotManager.js +16 -0
- package/build/src/McpContext.js +57 -4
- package/build/src/McpPage.js +10 -4
- package/build/src/McpResponse.js +55 -19
- package/build/src/Mutex.js +1 -0
- package/build/src/PageCollector.js +1 -0
- package/build/src/SlimMcpResponse.js +1 -0
- package/build/src/TextSnapshot.js +13 -7
- package/build/src/WaitForHelper.js +6 -0
- package/build/src/bin/check-latest-version.js +1 -0
- package/build/src/bin/chrome-devtools-cli-options.js +229 -46
- package/build/src/bin/chrome-devtools-mcp-cli-options.js +10 -5
- package/build/src/bin/chrome-devtools-mcp-main.js +1 -5
- package/build/src/bin/chrome-devtools-mcp.js +1 -0
- package/build/src/bin/chrome-devtools.js +5 -13
- package/build/src/browser.js +1 -0
- package/build/src/daemon/client.js +4 -2
- package/build/src/daemon/daemon.js +1 -0
- package/build/src/daemon/types.js +1 -0
- package/build/src/daemon/utils.js +1 -0
- package/build/src/formatters/ConsoleFormatter.js +48 -1
- package/build/src/formatters/HeapSnapshotFormatter.js +18 -2
- package/build/src/formatters/IssueFormatter.js +1 -0
- package/build/src/formatters/NetworkFormatter.js +1 -0
- package/build/src/formatters/SnapshotFormatter.js +2 -1
- package/build/src/index.js +114 -51
- package/build/src/issue-descriptions.js +1 -0
- package/build/src/logger.js +1 -0
- package/build/src/polyfill.js +1 -0
- package/build/src/telemetry/ClearcutLogger.js +13 -1
- package/build/src/telemetry/WatchdogClient.js +1 -0
- package/build/src/telemetry/flagUtils.js +1 -0
- package/build/src/telemetry/metricUtils.js +1 -0
- package/build/src/telemetry/persistence.js +1 -0
- package/build/src/telemetry/toolMetricsUtils.js +2 -1
- package/build/src/telemetry/types.js +1 -0
- package/build/src/telemetry/watchdog/ClearcutSender.js +1 -0
- package/build/src/telemetry/watchdog/main.js +1 -0
- package/build/src/third_party/THIRD_PARTY_NOTICES +8 -8
- package/build/src/third_party/bundled-packages.json +3 -3
- package/build/src/third_party/devtools-formatter-worker.js +2469 -2933
- package/build/src/third_party/devtools-heap-snapshot-worker.js +50 -26
- package/build/src/third_party/index.js +1107 -407
- package/build/src/third_party/issue-descriptions/genericFormModelContextMissingToolDescription.md +5 -0
- package/build/src/third_party/issue-descriptions/genericFormModelContextMissingToolName.md +5 -0
- package/build/src/third_party/issue-descriptions/genericFormModelContextParameterMissingName.md +5 -0
- package/build/src/third_party/issue-descriptions/genericFormModelContextParameterMissingTitleAndDescription.md +5 -0
- package/build/src/third_party/issue-descriptions/genericFormModelContextRequiredParameterMissingName.md +5 -0
- package/build/src/third_party/lighthouse-devtools-mcp-bundle.js +21717 -20261
- package/build/src/tools/ToolDefinition.js +1 -0
- package/build/src/tools/categories.js +10 -3
- package/build/src/tools/console.js +3 -0
- package/build/src/tools/emulation.js +2 -0
- package/build/src/tools/extensions.js +6 -0
- package/build/src/tools/input.js +57 -2
- package/build/src/tools/lighthouse.js +17 -9
- package/build/src/tools/memory.js +34 -1
- package/build/src/tools/network.js +5 -0
- package/build/src/tools/pages.js +14 -5
- package/build/src/tools/performance.js +6 -0
- package/build/src/tools/screencast.js +6 -2
- package/build/src/tools/screenshot.js +3 -0
- package/build/src/tools/script.js +2 -0
- package/build/src/tools/slim/tools.js +4 -0
- package/build/src/tools/snapshot.js +5 -1
- package/build/src/tools/{inPage.js → thirdPartyDeveloper.js} +17 -16
- package/build/src/tools/tools.js +3 -2
- package/build/src/tools/webmcp.js +5 -4
- package/build/src/trace-processing/parse.js +1 -0
- package/build/src/types.js +1 -0
- package/build/src/utils/check-for-updates.js +1 -0
- package/build/src/utils/files.js +5 -10
- package/build/src/utils/id.js +1 -0
- package/build/src/utils/keyboard.js +1 -0
- package/build/src/utils/pagination.js +1 -0
- package/build/src/utils/string.js +1 -0
- package/build/src/utils/types.js +1 -0
- package/build/src/version.js +2 -1
- package/package.json +10 -11
- 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);
|
|
@@ -125,6 +125,15 @@ const HOST_RUNTIME$2 = {
|
|
|
125
125
|
return new WebWorker(url);
|
|
126
126
|
},
|
|
127
127
|
workerScope: new WebWorkerScope(),
|
|
128
|
+
getOnLine() {
|
|
129
|
+
return navigator.onLine;
|
|
130
|
+
},
|
|
131
|
+
getUserAgent() {
|
|
132
|
+
return navigator.userAgent;
|
|
133
|
+
},
|
|
134
|
+
getLocalStorage() {
|
|
135
|
+
return 'localStorage' in globalThis ? globalThis.localStorage : undefined;
|
|
136
|
+
},
|
|
128
137
|
};
|
|
129
138
|
|
|
130
139
|
var HostRuntime$1 = /*#__PURE__*/Object.freeze({
|
|
@@ -141,8 +150,8 @@ var browser = /*#__PURE__*/Object.freeze({
|
|
|
141
150
|
|
|
142
151
|
// Copyright 2025 The Chromium Authors
|
|
143
152
|
class NodeWorkerScope {
|
|
144
|
-
postMessage(message) {
|
|
145
|
-
WorkerThreads.parentPort?.postMessage(message);
|
|
153
|
+
postMessage(message, transfer) {
|
|
154
|
+
WorkerThreads.parentPort?.postMessage(message, transfer);
|
|
146
155
|
}
|
|
147
156
|
set onmessage(listener) {
|
|
148
157
|
WorkerThreads.parentPort?.addEventListener('message', msg => {
|
|
@@ -207,6 +216,15 @@ const HOST_RUNTIME$1 = {
|
|
|
207
216
|
return new NodeWorker(url);
|
|
208
217
|
},
|
|
209
218
|
workerScope: new NodeWorkerScope(),
|
|
219
|
+
getOnLine() {
|
|
220
|
+
return true;
|
|
221
|
+
},
|
|
222
|
+
getUserAgent() {
|
|
223
|
+
return 'Node.js';
|
|
224
|
+
},
|
|
225
|
+
getLocalStorage() {
|
|
226
|
+
return undefined;
|
|
227
|
+
},
|
|
210
228
|
};
|
|
211
229
|
|
|
212
230
|
var HostRuntime = /*#__PURE__*/Object.freeze({
|
|
@@ -778,9 +796,7 @@ var ExperimentName;
|
|
|
778
796
|
ExperimentName["CAPTURE_NODE_CREATION_STACKS"] = "capture-node-creation-stacks";
|
|
779
797
|
ExperimentName["LIVE_HEAP_PROFILE"] = "live-heap-profile";
|
|
780
798
|
ExperimentName["PROTOCOL_MONITOR"] = "protocol-monitor";
|
|
781
|
-
ExperimentName["SAMPLING_HEAP_PROFILER_TIMELINE"] = "sampling-heap-profiler-timeline";
|
|
782
799
|
ExperimentName["TIMELINE_INVALIDATION_TRACKING"] = "timeline-invalidation-tracking";
|
|
783
|
-
ExperimentName["APCA"] = "apca";
|
|
784
800
|
ExperimentName["FONT_EDITOR"] = "font-editor";
|
|
785
801
|
ExperimentName["INSTRUMENTATION_BREAKPOINTS"] = "instrumentation-breakpoints";
|
|
786
802
|
ExperimentName["USE_SOURCE_MAP_SCOPES"] = "use-source-map-scopes";
|
|
@@ -6803,7 +6819,7 @@ class SecondaryInitManager {
|
|
|
6803
6819
|
this.argsStep2 = argsStep2;
|
|
6804
6820
|
const { promise: argsStep3, resolve: resolveArgsStep3 } = Promise.withResolvers();
|
|
6805
6821
|
this.argsStep3 = argsStep3;
|
|
6806
|
-
|
|
6822
|
+
const listener = (e) => {
|
|
6807
6823
|
const data = e.data;
|
|
6808
6824
|
switch (data.step) {
|
|
6809
6825
|
case 1:
|
|
@@ -6814,9 +6830,12 @@ class SecondaryInitManager {
|
|
|
6814
6830
|
break;
|
|
6815
6831
|
case 3:
|
|
6816
6832
|
resolveArgsStep3(data.args);
|
|
6833
|
+
port.removeEventListener('message', listener);
|
|
6817
6834
|
break;
|
|
6818
6835
|
}
|
|
6819
6836
|
};
|
|
6837
|
+
port.addEventListener('message', listener);
|
|
6838
|
+
port.start();
|
|
6820
6839
|
void this.initialize(port);
|
|
6821
6840
|
}
|
|
6822
6841
|
async getNodeSelfSizes() {
|
|
@@ -6837,22 +6856,20 @@ class SecondaryInitManager {
|
|
|
6837
6856
|
};
|
|
6838
6857
|
const dominatorsAndRetainedSizes = await HeapSnapshot.calculateDominatorsAndRetainedSizes(args);
|
|
6839
6858
|
const dominatedNodesOutputs = HeapSnapshot.buildDominatedNodes({ ...args, ...dominatorsAndRetainedSizes });
|
|
6840
|
-
const
|
|
6859
|
+
const resultsFromSecondWorker = {
|
|
6841
6860
|
...retainers,
|
|
6842
6861
|
...dominatorsAndRetainedSizes,
|
|
6843
6862
|
...dominatedNodesOutputs,
|
|
6844
6863
|
};
|
|
6845
|
-
port.postMessage({ resultsFromSecondWorker
|
|
6846
|
-
|
|
6847
|
-
|
|
6848
|
-
|
|
6849
|
-
|
|
6850
|
-
|
|
6851
|
-
|
|
6852
|
-
|
|
6853
|
-
|
|
6854
|
-
]
|
|
6855
|
-
});
|
|
6864
|
+
port.postMessage({ resultsFromSecondWorker }, [
|
|
6865
|
+
resultsFromSecondWorker.dominatorsTree.buffer,
|
|
6866
|
+
resultsFromSecondWorker.retainedSizes.buffer,
|
|
6867
|
+
resultsFromSecondWorker.firstRetainerIndex.buffer,
|
|
6868
|
+
resultsFromSecondWorker.retainingNodes.buffer,
|
|
6869
|
+
resultsFromSecondWorker.retainingEdges.buffer,
|
|
6870
|
+
resultsFromSecondWorker.firstDominatedNodeIndex.buffer,
|
|
6871
|
+
resultsFromSecondWorker.dominatedNodes.buffer,
|
|
6872
|
+
]);
|
|
6856
6873
|
}
|
|
6857
6874
|
catch (e) {
|
|
6858
6875
|
port.postMessage({ error: e + '\n' + e?.stack });
|
|
@@ -7048,20 +7065,23 @@ class HeapSnapshot {
|
|
|
7048
7065
|
}
|
|
7049
7066
|
startInitStep1InSecondThread(secondWorker) {
|
|
7050
7067
|
const resultsFromSecondWorker = new Promise((resolve, reject) => {
|
|
7051
|
-
|
|
7052
|
-
const data =
|
|
7068
|
+
const listener = (e) => {
|
|
7069
|
+
const data = e.data;
|
|
7053
7070
|
if (data?.problemReport) {
|
|
7054
7071
|
const problemReport = data.problemReport;
|
|
7055
7072
|
console.warn(formatProblemReport(this, problemReport));
|
|
7056
7073
|
}
|
|
7057
7074
|
else if (data?.resultsFromSecondWorker) {
|
|
7058
|
-
|
|
7059
|
-
resolve(resultsFromSecondWorker);
|
|
7075
|
+
secondWorker.removeEventListener('message', listener);
|
|
7076
|
+
resolve(data.resultsFromSecondWorker);
|
|
7060
7077
|
}
|
|
7061
7078
|
else if (data?.error) {
|
|
7079
|
+
secondWorker.removeEventListener('message', listener);
|
|
7062
7080
|
reject(data.error);
|
|
7063
7081
|
}
|
|
7064
7082
|
};
|
|
7083
|
+
secondWorker.addEventListener('message', listener);
|
|
7084
|
+
secondWorker.start();
|
|
7065
7085
|
});
|
|
7066
7086
|
const edgeCount = this.#edgeCount;
|
|
7067
7087
|
const { containmentEdges, edgeToNodeOffset, edgeFieldsCount, nodeFieldCount } = this;
|
|
@@ -9332,6 +9352,11 @@ var HeapSnapshot$1 = /*#__PURE__*/Object.freeze({
|
|
|
9332
9352
|
createJSHeapSnapshotForTesting: createJSHeapSnapshotForTesting
|
|
9333
9353
|
});
|
|
9334
9354
|
|
|
9355
|
+
// Copyright 2023 The Chromium Authors
|
|
9356
|
+
new FinalizationRegistry(url => {
|
|
9357
|
+
URL.revokeObjectURL(url);
|
|
9358
|
+
});
|
|
9359
|
+
|
|
9335
9360
|
// Copyright 2013 The Chromium Authors
|
|
9336
9361
|
class BalancedJSONTokenizer {
|
|
9337
9362
|
callback;
|
|
@@ -9608,16 +9633,15 @@ var HeapSnapshotLoader$1 = /*#__PURE__*/Object.freeze({
|
|
|
9608
9633
|
|
|
9609
9634
|
// Copyright 2011 The Chromium Authors
|
|
9610
9635
|
class HeapSnapshotWorkerDispatcher {
|
|
9611
|
-
#objects;
|
|
9636
|
+
#objects = [];
|
|
9612
9637
|
#postMessage;
|
|
9613
9638
|
constructor(postMessage) {
|
|
9614
|
-
this.#objects = [];
|
|
9615
9639
|
this.#postMessage = postMessage;
|
|
9616
9640
|
}
|
|
9617
9641
|
sendEvent(name, data) {
|
|
9618
9642
|
this.#postMessage({ eventName: name, data });
|
|
9619
9643
|
}
|
|
9620
|
-
async dispatchMessage({ data, ports }) {
|
|
9644
|
+
async dispatchMessage({ data, ports, }) {
|
|
9621
9645
|
const response = {
|
|
9622
9646
|
callId: data.callId,
|
|
9623
9647
|
result: null,
|