chrome-devtools-mcp 0.2.0 → 0.2.2

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 (62) hide show
  1. package/README.md +27 -8
  2. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Progress.js +60 -53
  3. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/GdpClient.js +1 -1
  4. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/UserMetrics.js +5 -2
  5. package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/InspectorBackend.js +2 -0
  6. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSMatchedStyles.js +11 -10
  7. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSModel.js +1 -1
  8. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSPropertyParserMatchers.js +24 -4
  9. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/DebuggerModel.js +1 -1
  10. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/EnhancedTracesParser.js +29 -24
  11. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/NetworkManager.js +1 -1
  12. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/NetworkRequest.js +1 -1
  13. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RehydratingConnection.js +9 -15
  14. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RemoteObject.js +1 -1
  15. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ResourceTreeModel.js +1 -1
  16. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RuntimeModel.js +1 -1
  17. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServiceWorkerManager.js +1 -1
  18. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMap.js +4 -31
  19. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/TraceObject.js +5 -2
  20. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/NetworkRequestFormatter.js +6 -4
  21. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.js +259 -179
  22. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/UnitFormatters.js +10 -1
  23. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AIContext.js +14 -3
  24. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/ContentProviderBasedProject.js +6 -4
  25. package/build/node_modules/chrome-devtools-frontend/front_end/models/formatter/FormatterWorkerPool.js +2 -2
  26. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/ModelImpl.js +4 -9
  27. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/Processor.js +17 -9
  28. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AuctionWorkletsHandler.js +1 -1
  29. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/FramesHandler.js +2 -2
  30. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LayoutShiftsHandler.js +3 -4
  31. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/MetaHandler.js +10 -9
  32. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ScreenshotsHandler.js +0 -1
  33. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ScriptsHandler.js +4 -4
  34. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/UserInteractionsHandler.js +2 -10
  35. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/UserTimingsHandler.js +3 -4
  36. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/SamplesIntegrator.js +8 -6
  37. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/CLSCulprits.js +1 -1
  38. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DocumentLatency.js +3 -3
  39. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DuplicatedJavaScript.js +1 -1
  40. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/INPBreakdown.js +1 -1
  41. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ImageDelivery.js +1 -1
  42. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LCPBreakdown.js +1 -1
  43. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LCPDiscovery.js +1 -1
  44. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ModernHTTP.js +1 -1
  45. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/NetworkDependencyTree.js +1 -1
  46. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/RenderBlocking.js +1 -1
  47. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/TraceEvents.js +21 -21
  48. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace_source_maps_resolver/SourceMapsResolver.js +5 -3
  49. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace_source_maps_resolver/trace_source_maps_resolver.js +1 -1
  50. package/build/src/McpContext.js +60 -10
  51. package/build/src/McpResponse.js +5 -4
  52. package/build/src/WaitForHelper.js +127 -0
  53. package/build/src/browser.js +12 -9
  54. package/build/src/index.js +20 -21
  55. package/build/src/logger.js +1 -0
  56. package/build/src/tools/input.js +5 -6
  57. package/build/src/tools/pages.js +2 -3
  58. package/build/src/tools/performance.js +16 -14
  59. package/build/src/tools/script.js +1 -2
  60. package/build/src/trace-processing/parse.js +23 -14
  61. package/package.json +15 -16
  62. package/build/src/waitForHelpers.js +0 -109
package/package.json CHANGED
@@ -1,24 +1,23 @@
1
1
  {
2
2
  "name": "chrome-devtools-mcp",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "description": "MCP server for Chrome DevTools",
5
5
  "type": "module",
6
- "bin": {
7
- "chrome-devtools-mcp": "./build/src/index.js"
8
- },
6
+ "bin": "./build/src/index.js",
9
7
  "main": "index.js",
10
8
  "scripts": {
11
- "build": "tsc && node --experimental-strip-types scripts/post-build.ts",
9
+ "build": "tsc && node --experimental-strip-types --no-warnings=ExperimentalWarning scripts/post-build.ts",
12
10
  "typecheck": "tsc --noEmit",
13
- "format": "eslint --cache --fix . ;prettier --write --cache .",
14
- "check-format": "eslint --cache .; prettier --check --cache .;",
15
- "generate-docs": "npm run build && node --experimental-strip-types scripts/generate-docs.ts",
11
+ "format": "eslint --cache --fix . && prettier --write --cache .",
12
+ "check-format": "eslint --cache . && prettier --check --cache .;",
13
+ "docs": "npm run build && npm run docs:generate && npm run format",
14
+ "docs:generate": "node --experimental-strip-types scripts/generate-docs.ts",
16
15
  "start": "npm run build && node build/src/index.js",
17
16
  "start-debug": "DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js",
18
- "test": "npm run build && node --require ./build/tests/setup.js --test-reporter spec --test-force-exit --test 'build/tests/**/*.test.js'",
19
- "test:only": "npm run build && node --require ./build/tests/setup.js --test-reporter spec --test-force-exit --test --test-only 'build/tests/**/*.test.js'",
20
- "test:only:no-build": "node --require ./build/tests/setup.js --test-reporter spec --test-force-exit --test --test-only 'build/tests/**/*.test.js'",
21
- "test:update-snapshots": "npm run build && node --require ./build/tests/setup.js --test-force-exit --test --test-update-snapshots 'build/tests/**/*.test.js'",
17
+ "test": "npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test \"build/tests/**/*.test.js\"",
18
+ "test:only": "npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"",
19
+ "test:only:no-build": "node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"",
20
+ "test:update-snapshots": "npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-force-exit --test --test-update-snapshots \"build/tests/**/*.test.js\"",
22
21
  "prepare": "node --experimental-strip-types scripts/prepare.ts"
23
22
  },
24
23
  "files": [
@@ -35,9 +34,9 @@
35
34
  },
36
35
  "homepage": "https://github.com/ChromeDevTools/chrome-devtools-mcp#readme",
37
36
  "dependencies": {
38
- "@modelcontextprotocol/sdk": "1.18.0",
37
+ "@modelcontextprotocol/sdk": "1.18.1",
39
38
  "debug": "4.4.3",
40
- "puppeteer-core": "24.22.0",
39
+ "puppeteer-core": "24.22.2",
41
40
  "yargs": "18.0.0"
42
41
  },
43
42
  "devDependencies": {
@@ -49,11 +48,11 @@
49
48
  "@types/yargs": "^17.0.33",
50
49
  "@typescript-eslint/eslint-plugin": "^8.43.0",
51
50
  "@typescript-eslint/parser": "^8.43.0",
52
- "chrome-devtools-frontend": "1.0.1515796",
51
+ "chrome-devtools-frontend": "1.0.1516909",
53
52
  "eslint": "^9.35.0",
54
53
  "globals": "^16.4.0",
55
54
  "prettier": "^3.6.2",
56
- "puppeteer": "24.22.0",
55
+ "puppeteer": "24.22.2",
57
56
  "sinon": "^21.0.0",
58
57
  "typescript": "^5.9.2",
59
58
  "typescript-eslint": "^8.43.0"
@@ -1,109 +0,0 @@
1
- import { logger } from './logger.js';
2
- async function waitForStableDom(page, signal) {
3
- const stableDomObserver = await page.evaluateHandle(() => {
4
- let timeoutId;
5
- function callback() {
6
- clearTimeout(timeoutId);
7
- timeoutId = setTimeout(() => {
8
- domObserver.resolver.resolve();
9
- domObserver.observer.disconnect();
10
- }, 100);
11
- }
12
- const domObserver = {
13
- resolver: Promise.withResolvers(),
14
- observer: new MutationObserver(callback),
15
- };
16
- // It's possible that the DOM is not gonna change so we
17
- // need to start the timeout initially.
18
- callback();
19
- domObserver.observer.observe(document.body, {
20
- childList: true,
21
- subtree: true,
22
- attributes: true,
23
- });
24
- return domObserver;
25
- });
26
- signal.addEventListener('abort', async () => {
27
- try {
28
- await stableDomObserver.evaluate(observer => {
29
- observer.observer.disconnect();
30
- observer.resolver.resolve();
31
- });
32
- await stableDomObserver.dispose();
33
- }
34
- catch {
35
- // Ignored cleanup errors
36
- }
37
- });
38
- return Promise.race([
39
- stableDomObserver.evaluate(async (observer) => {
40
- return await observer.resolver.promise;
41
- }),
42
- timeout(3000, signal).then(() => {
43
- throw new Error('Timeout');
44
- }),
45
- ]);
46
- }
47
- async function waitForNavigationStarted(page, signal) {
48
- // Currently Puppeteer does not have API
49
- // For when a navigation is about to start
50
- const navigationStartedPromise = new Promise(resolve => {
51
- const listener = (event) => {
52
- if ([
53
- 'historySameDocument',
54
- 'historyDifferentDocument',
55
- 'sameDocument',
56
- ].includes(event.navigationType)) {
57
- resolve(false);
58
- return;
59
- }
60
- resolve(true);
61
- };
62
- page._client().on('Page.frameStartedNavigating', listener);
63
- signal.addEventListener('abort', () => {
64
- resolve(false);
65
- page._client().off('Page.frameStartedNavigating', listener);
66
- });
67
- });
68
- return await Promise.race([
69
- navigationStartedPromise,
70
- timeout(100).then(() => false),
71
- ]);
72
- }
73
- function timeout(time, signal) {
74
- return new Promise(res => {
75
- const id = setTimeout(res, time);
76
- signal?.addEventListener('abort', () => {
77
- res();
78
- clearTimeout(id);
79
- });
80
- });
81
- }
82
- /**
83
- * A wrapper that executes a action and waits for
84
- * a potential navigation, after which it waits
85
- * for the DOM to be stable before returning.
86
- */
87
- export async function waitForEventsAfterAction(page, callback) {
88
- const controller = new AbortController();
89
- const navigationStartedPromise = waitForNavigationStarted(page, controller.signal);
90
- await callback();
91
- try {
92
- const navigationStated = await navigationStartedPromise;
93
- if (navigationStated) {
94
- await page.waitForNavigation({
95
- timeout: 3000,
96
- signal: controller.signal,
97
- });
98
- }
99
- // Wait for stable dom after navigation so we execute in
100
- // the correct context
101
- await waitForStableDom(page, controller.signal);
102
- }
103
- catch (error) {
104
- logger(error);
105
- }
106
- finally {
107
- controller.abort();
108
- }
109
- }