chrome-devtools-mcp 0.0.1 → 0.1.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 (354) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +196 -0
  3. package/build/node_modules/chrome-devtools-frontend/LICENSE +27 -0
  4. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/App.js +4 -0
  5. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/AppProvider.js +17 -0
  6. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Base64.js +43 -0
  7. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/CharacterIdMap.js +27 -0
  8. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Color.js +2029 -0
  9. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ColorConverter.js +330 -0
  10. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ColorUtils.js +221 -0
  11. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Console.js +86 -0
  12. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Debouncer.js +14 -0
  13. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/EventTarget.js +14 -0
  14. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Gzip.js +64 -0
  15. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/JavaScriptMetaData.js +4 -0
  16. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Lazy.js +29 -0
  17. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Linkifier.js +34 -0
  18. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/MapWithDefault.js +20 -0
  19. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Mutex.js +49 -0
  20. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Object.js +86 -0
  21. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ParsedURL.js +459 -0
  22. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Progress.js +137 -0
  23. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/QueryParamHandler.js +4 -0
  24. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ResolverBase.js +69 -0
  25. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ResourceType.js +506 -0
  26. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ReturnToPanel.js +13 -0
  27. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Revealer.js +159 -0
  28. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Runnable.js +24 -0
  29. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/SegmentedRange.js +79 -0
  30. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/SettingRegistration.js +164 -0
  31. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Settings.js +1281 -0
  32. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/SimpleHistoryManager.js +97 -0
  33. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/StringOutputStream.js +17 -0
  34. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/TextDictionary.js +40 -0
  35. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Throttler.js +71 -0
  36. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Trie.js +127 -0
  37. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Worker.js +44 -0
  38. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/common.js +44 -0
  39. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/AidaClient.js +415 -0
  40. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/GdpClient.js +161 -0
  41. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHost.js +510 -0
  42. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHostAPI.js +66 -0
  43. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/Platform.js +59 -0
  44. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/ResourceLoader.js +232 -0
  45. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/UserMetrics.js +953 -0
  46. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/host.js +12 -0
  47. package/build/node_modules/chrome-devtools-frontend/front_end/core/i18n/i18n.js +9 -0
  48. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/ArrayUtilities.js +199 -0
  49. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/Brand.js +4 -0
  50. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/Constructor.js +4 -0
  51. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/DOMUtilities.js +122 -0
  52. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/DateUtilities.js +13 -0
  53. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/DevToolsPath.js +27 -0
  54. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/KeyboardUtilities.js +21 -0
  55. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/MapUtilities.js +79 -0
  56. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/MimeType.js +143 -0
  57. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/NumberUtilities.js +72 -0
  58. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/StringUtilities.js +536 -0
  59. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/Timing.js +9 -0
  60. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/TypedArrayUtilities.js +157 -0
  61. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/TypescriptUtilities.js +24 -0
  62. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/UIString.js +4 -0
  63. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/UserVisibleError.js +22 -0
  64. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/platform.js +26 -0
  65. package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/InspectorBackend.js +800 -0
  66. package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/NodeURL.js +31 -0
  67. package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/protocol_client.js +13 -0
  68. package/build/node_modules/chrome-devtools-frontend/front_end/core/root/Runtime.js +1 -0
  69. package/build/node_modules/chrome-devtools-frontend/front_end/core/root/root.js +5 -0
  70. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/AccessibilityModel.js +281 -0
  71. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/AnimationModel.js +846 -0
  72. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/AutofillModel.js +155 -0
  73. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CPUProfilerModel.js +99 -0
  74. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CPUThrottlingManager.js +220 -0
  75. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSContainerQuery.js +98 -0
  76. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSFontFace.js +31 -0
  77. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSLayer.js +22 -0
  78. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSMatchedStyles.js +1279 -0
  79. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSMedia.js +100 -0
  80. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSMetadata.js +1518 -0
  81. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSModel.js +902 -0
  82. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSProperty.js +315 -0
  83. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSPropertyParser.js +572 -0
  84. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSPropertyParserMatchers.js +1316 -0
  85. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSQuery.js +53 -0
  86. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSRule.js +361 -0
  87. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSScope.js +22 -0
  88. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSStyleDeclaration.js +275 -0
  89. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSStyleSheetHeader.js +166 -0
  90. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSSupports.js +24 -0
  91. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CategorizedBreakpoint.js +29 -0
  92. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ChildTargetManager.js +232 -0
  93. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CompilerSourceMappingContentProvider.js +47 -0
  94. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Connections.js +242 -0
  95. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ConsoleModel.js +629 -0
  96. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ConsoleModelTypes.js +14 -0
  97. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Cookie.js +241 -0
  98. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CookieModel.js +198 -0
  99. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CookieParser.js +163 -0
  100. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/DOMDebuggerModel.js +597 -0
  101. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/DOMModel.js +1610 -0
  102. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/DebuggerModel.js +1231 -0
  103. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/EmulationModel.js +527 -0
  104. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/EnhancedTracesParser.js +346 -0
  105. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/EventBreakpointsModel.js +125 -0
  106. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/FrameAssociated.js +4 -0
  107. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/FrameManager.js +199 -0
  108. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/HeapProfilerModel.js +130 -0
  109. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/HttpReasonPhraseStrings.js +73 -0
  110. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/IOModel.js +83 -0
  111. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/IsolateManager.js +208 -0
  112. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/IssuesModel.js +41 -0
  113. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/LayerTreeBase.js +95 -0
  114. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/LogModel.js +34 -0
  115. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/NetworkManager.js +1915 -0
  116. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/NetworkRequest.js +1660 -0
  117. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/OverlayColorGenerator.js +48 -0
  118. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/OverlayModel.js +765 -0
  119. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/OverlayPersistentHighlighter.js +384 -0
  120. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PageLoad.js +25 -0
  121. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PageResourceLoader.js +300 -0
  122. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PaintProfiler.js +67 -0
  123. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PerformanceMetricsModel.js +62 -0
  124. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PreloadingModel.js +563 -0
  125. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RehydratingConnection.js +292 -0
  126. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RehydratingObject.js +4 -0
  127. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RemoteObject.js +905 -0
  128. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Resource.js +163 -0
  129. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ResourceTreeModel.js +922 -0
  130. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RuntimeModel.js +535 -0
  131. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SDKModel.js +45 -0
  132. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ScreenCaptureModel.js +174 -0
  133. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Script.js +395 -0
  134. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SecurityOriginManager.js +54 -0
  135. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServerSentEvents.js +67 -0
  136. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServerSentEventsProtocol.js +110 -0
  137. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServerTiming.js +216 -0
  138. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServiceWorkerCacheModel.js +271 -0
  139. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServiceWorkerManager.js +511 -0
  140. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMap.js +678 -0
  141. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapCache.js +41 -0
  142. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapFunctionRanges.js +132 -0
  143. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapManager.js +189 -0
  144. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapScopeChainEntry.js +156 -0
  145. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapScopesInfo.js +276 -0
  146. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/StorageBucketsModel.js +143 -0
  147. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/StorageKeyManager.js +53 -0
  148. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Target.js +262 -0
  149. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/TargetManager.js +382 -0
  150. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/TraceObject.js +49 -0
  151. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/WebAuthnModel.js +66 -0
  152. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/sdk-meta.js +1117 -0
  153. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/sdk.js +89 -0
  154. package/build/node_modules/chrome-devtools-frontend/front_end/generated/ARIAProperties.js +1513 -0
  155. package/build/node_modules/chrome-devtools-frontend/front_end/generated/Deprecation.js +339 -0
  156. package/build/node_modules/chrome-devtools-frontend/front_end/generated/InspectorBackendCommands.js +1558 -0
  157. package/build/node_modules/chrome-devtools-frontend/front_end/generated/SupportedCSSProperties.js +7473 -0
  158. package/build/node_modules/chrome-devtools-frontend/front_end/generated/protocol.js +4 -0
  159. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/NetworkRequestFormatter.js +260 -0
  160. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.js +1096 -0
  161. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/UnitFormatters.js +130 -0
  162. package/build/node_modules/chrome-devtools-frontend/front_end/models/cpu_profile/CPUProfileDataModel.js +514 -0
  163. package/build/node_modules/chrome-devtools-frontend/front_end/models/cpu_profile/ProfileTreeModel.js +90 -0
  164. package/build/node_modules/chrome-devtools-frontend/front_end/models/cpu_profile/cpu_profile.js +6 -0
  165. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/LogManager.js +67 -0
  166. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/NetworkLog.js +494 -0
  167. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/RequestResolver.js +49 -0
  168. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/logs-meta.js +73 -0
  169. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/logs.js +7 -0
  170. package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/Calculator.js +4 -0
  171. package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/NetworkTimeCalculator.js +256 -0
  172. package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/RequestTimeRanges.js +120 -0
  173. package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/network_time_calculator.js +6 -0
  174. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/CodeMirrorUtils.js +32 -0
  175. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/ContentData.js +173 -0
  176. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/ContentProvider.js +30 -0
  177. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/StaticContentProvider.js +32 -0
  178. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/StreamingContentData.js +79 -0
  179. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/Text.js +69 -0
  180. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/TextCursor.js +35 -0
  181. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/TextRange.js +231 -0
  182. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/TextUtils.js +332 -0
  183. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/WasmDisassembly.js +68 -0
  184. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/text_utils.js +14 -0
  185. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/EntityMapper.js +122 -0
  186. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/EventsSerializer.js +81 -0
  187. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/LanternComputationData.js +370 -0
  188. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/ModelImpl.js +171 -0
  189. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/Name.js +114 -0
  190. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/Processor.js +547 -0
  191. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/Styles.js +815 -0
  192. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/FilmStrip.js +44 -0
  193. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/MainThreadActivity.js +76 -0
  194. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/ScriptDuplication.js +162 -0
  195. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/StackTraceForEvent.js +191 -0
  196. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/ThirdParties.js +118 -0
  197. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/TraceFilter.js +50 -0
  198. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/TraceTree.js +592 -0
  199. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/extras.js +10 -0
  200. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AnimationFramesHandler.js +109 -0
  201. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AnimationHandler.js +26 -0
  202. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AsyncJSCallsHandler.js +187 -0
  203. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AuctionWorkletsHandler.js +162 -0
  204. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/DOMStatsHandler.js +21 -0
  205. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ExtensionTraceDataHandler.js +263 -0
  206. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/FlowsHandler.js +148 -0
  207. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/FramesHandler.js +483 -0
  208. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/GPUHandler.js +35 -0
  209. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ImagePaintingHandler.js +147 -0
  210. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/InitiatorsHandler.js +180 -0
  211. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/InvalidationsHandler.js +126 -0
  212. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LargestImagePaintHandler.js +85 -0
  213. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LargestTextPaintHandler.js +27 -0
  214. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LayerTreeHandler.js +103 -0
  215. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LayoutShiftsHandler.js +446 -0
  216. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/MemoryHandler.js +21 -0
  217. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/MetaHandler.js +400 -0
  218. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ModelHandlers.js +33 -0
  219. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/NetworkRequestsHandler.js +540 -0
  220. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/PageFramesHandler.js +42 -0
  221. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/PageLoadMetricsHandler.js +349 -0
  222. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/RendererHandler.js +346 -0
  223. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/SamplesHandler.js +207 -0
  224. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ScreenshotsHandler.js +98 -0
  225. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ScriptsHandler.js +251 -0
  226. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/SelectorStatsHandler.js +71 -0
  227. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/Threads.js +101 -0
  228. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/UserInteractionsHandler.js +297 -0
  229. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/UserTimingsHandler.js +184 -0
  230. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/WarningsHandler.js +134 -0
  231. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/WorkersHandler.js +33 -0
  232. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/handlers.js +7 -0
  233. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/helpers.js +163 -0
  234. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/types.js +1 -0
  235. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Extensions.js +41 -0
  236. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Network.js +102 -0
  237. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/SamplesIntegrator.js +493 -0
  238. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/SyntheticEvents.js +74 -0
  239. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Timing.js +184 -0
  240. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Trace.js +744 -0
  241. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/TreeHelpers.js +254 -0
  242. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/helpers.js +10 -0
  243. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/CLSCulprits.js +488 -0
  244. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Cache.js +208 -0
  245. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Common.js +340 -0
  246. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DOMSize.js +180 -0
  247. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DocumentLatency.js +256 -0
  248. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DuplicatedJavaScript.js +89 -0
  249. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/FontDisplay.js +81 -0
  250. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ForcedReflow.js +160 -0
  251. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/INPBreakdown.js +117 -0
  252. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ImageDelivery.js +262 -0
  253. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LCPBreakdown.js +188 -0
  254. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LCPDiscovery.js +182 -0
  255. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LegacyJavaScript.js +88 -0
  256. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Models.js +21 -0
  257. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ModernHTTP.js +199 -0
  258. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/NetworkDependencyTree.js +544 -0
  259. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/RenderBlocking.js +191 -0
  260. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/SlowCSSSelector.js +135 -0
  261. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Statistics.js +92 -0
  262. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ThirdParties.js +97 -0
  263. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Viewport.js +101 -0
  264. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/insights.js +9 -0
  265. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/types.js +18 -0
  266. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/core/LanternError.js +6 -0
  267. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/core/NetworkAnalyzer.js +488 -0
  268. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/core/core.js +5 -0
  269. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/BaseNode.js +276 -0
  270. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/CPUNode.js +63 -0
  271. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/NetworkNode.js +82 -0
  272. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/PageDependencyGraph.js +551 -0
  273. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/graph.js +7 -0
  274. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/lantern.js +9 -0
  275. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/FirstContentfulPaint.js +136 -0
  276. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/Interactive.js +67 -0
  277. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/LargestContentfulPaint.js +68 -0
  278. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/MaxPotentialFID.js +48 -0
  279. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/Metric.js +68 -0
  280. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/SpeedIndex.js +101 -0
  281. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/TBTUtils.js +64 -0
  282. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/TotalBlockingTime.js +78 -0
  283. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/metrics.js +11 -0
  284. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/ConnectionPool.js +115 -0
  285. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/Constants.js +42 -0
  286. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/DNSCache.js +47 -0
  287. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/SimulationTimingMap.js +134 -0
  288. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/Simulator.js +450 -0
  289. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/TCPConnection.js +154 -0
  290. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/simulation.js +9 -0
  291. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/types/Lantern.js +24 -0
  292. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/types/types.js +4 -0
  293. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/trace.js +17 -0
  294. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Configuration.js +18 -0
  295. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Extensions.js +37 -0
  296. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/File.js +57 -0
  297. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Overlays.js +4 -0
  298. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Timing.js +15 -0
  299. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/TraceEvents.js +565 -0
  300. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/types.js +9 -0
  301. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/codemirror.next/codemirror.next.js +1 -0
  302. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/legacy-javascript/LICENSE +202 -0
  303. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/legacy-javascript/legacy-javascript.js +38 -0
  304. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/legacy-javascript/lib/legacy-javascript.js +944 -0
  305. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/LICENSE +26 -0
  306. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/builder/builder.js +196 -0
  307. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/builder/safe_builder.js +226 -0
  308. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/codec.js +4 -0
  309. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/decode/decode.js +394 -0
  310. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/encode/encode.js +24 -0
  311. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/encode/encoder.js +283 -0
  312. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/mod.js +7 -0
  313. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/util.js +9 -0
  314. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/vlq.js +84 -0
  315. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/source-map-scopes-codec.js +4 -0
  316. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/LICENSE +20 -0
  317. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/lib/nostats-subset.js +148 -0
  318. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/httparchive-nostats-subset.js +2 -0
  319. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/httparchive-subset.js +2 -0
  320. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/create-entity-finder-api.js +118 -0
  321. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/create-entity-finder-api.test.js +40 -0
  322. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/entities.test.js +26 -0
  323. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/index.js +4 -0
  324. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/index.test.js +215 -0
  325. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/subsets/httparchive-nostats.js +4 -0
  326. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/subsets/httparchive.js +4 -0
  327. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/subsets/nostats.js +4 -0
  328. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/nostats-subset.js +2 -0
  329. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/third-party-web.js +8 -0
  330. package/build/src/McpContext.js +204 -0
  331. package/build/src/McpResponse.js +178 -0
  332. package/build/src/Mutex.js +40 -0
  333. package/build/src/PageCollector.js +68 -0
  334. package/build/src/browser.js +105 -0
  335. package/build/src/formatters/consoleFormatter.js +71 -0
  336. package/build/src/formatters/networkFormatter.js +34 -0
  337. package/build/src/formatters/snapshotFormatter.js +75 -0
  338. package/build/src/index.js +206 -0
  339. package/build/src/logger.js +26 -0
  340. package/build/src/tools/ToolDefinition.js +8 -0
  341. package/build/src/tools/categories.js +14 -0
  342. package/build/src/tools/console.js +19 -0
  343. package/build/src/tools/emulation.js +61 -0
  344. package/build/src/tools/input.js +202 -0
  345. package/build/src/tools/network.js +35 -0
  346. package/build/src/tools/pages.js +181 -0
  347. package/build/src/tools/performance.js +116 -0
  348. package/build/src/tools/screenshot.js +65 -0
  349. package/build/src/tools/script.js +35 -0
  350. package/build/src/tools/snapshot.js +42 -0
  351. package/build/src/trace-processing/parse.js +73 -0
  352. package/build/src/waitForHelpers.js +109 -0
  353. package/package.json +53 -6
  354. package/README +0 -1
@@ -0,0 +1,181 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import z from 'zod';
7
+ import { defineTool } from './ToolDefinition.js';
8
+ import { ToolCategories } from './categories.js';
9
+ import { waitForEventsAfterAction } from '../waitForHelpers.js';
10
+ export const listPages = defineTool({
11
+ name: 'list_pages',
12
+ description: `Get a list of pages open in the browser.`,
13
+ annotations: {
14
+ category: ToolCategories.NAVIGATION_AUTOMATION,
15
+ readOnlyHint: true,
16
+ },
17
+ schema: {},
18
+ handler: async (_request, response) => {
19
+ response.setIncludePages(true);
20
+ },
21
+ });
22
+ export const selectPage = defineTool({
23
+ name: 'select_page',
24
+ description: `Select a page as a context for future tool calls.`,
25
+ annotations: {
26
+ category: ToolCategories.NAVIGATION_AUTOMATION,
27
+ readOnlyHint: true,
28
+ },
29
+ schema: {
30
+ pageIdx: z
31
+ .number()
32
+ .describe('The index of the page to select. Call list_pages to list pages.'),
33
+ },
34
+ handler: async (request, response, context) => {
35
+ const page = context.getPageByIdx(request.params.pageIdx);
36
+ await page.bringToFront();
37
+ context.setSelectedPageIdx(request.params.pageIdx);
38
+ response.setIncludePages(true);
39
+ },
40
+ });
41
+ export const closePage = defineTool({
42
+ name: 'close_page',
43
+ description: `Closes the page by its index.`,
44
+ annotations: {
45
+ category: ToolCategories.NAVIGATION_AUTOMATION,
46
+ readOnlyHint: false,
47
+ },
48
+ schema: {
49
+ pageIdx: z
50
+ .number()
51
+ .describe('The index of the page to close. Call list_pages to list pages.'),
52
+ },
53
+ handler: async (request, response, context) => {
54
+ const page = context.getPageByIdx(request.params.pageIdx);
55
+ context.setSelectedPageIdx(0);
56
+ await page.close({ runBeforeUnload: false });
57
+ response.setIncludePages(true);
58
+ },
59
+ });
60
+ export const newPage = defineTool({
61
+ name: 'new_page',
62
+ description: `Creates a new page`,
63
+ annotations: {
64
+ category: ToolCategories.NAVIGATION_AUTOMATION,
65
+ readOnlyHint: false,
66
+ },
67
+ schema: {
68
+ url: z.string().describe('URL to load in a new page.'),
69
+ },
70
+ handler: async (request, response, context) => {
71
+ const page = await context.newPage();
72
+ await waitForEventsAfterAction(page, async () => {
73
+ await page.goto(request.params.url);
74
+ });
75
+ response.setIncludePages(true);
76
+ },
77
+ });
78
+ export const navigatePage = defineTool({
79
+ name: 'navigate_page',
80
+ description: `Navigates the currently selected page to a URL.`,
81
+ annotations: {
82
+ category: ToolCategories.NAVIGATION_AUTOMATION,
83
+ readOnlyHint: false,
84
+ },
85
+ schema: {
86
+ url: z.string().describe('URL to navigate the page to'),
87
+ },
88
+ handler: async (request, response, context) => {
89
+ const page = context.getSelectedPage();
90
+ await waitForEventsAfterAction(page, async () => {
91
+ await page.goto(request.params.url);
92
+ });
93
+ response.setIncludePages(true);
94
+ },
95
+ });
96
+ export const navigatePageHistory = defineTool({
97
+ name: 'navigate_page_history',
98
+ description: `Navigates the currently selected page.`,
99
+ annotations: {
100
+ category: ToolCategories.NAVIGATION_AUTOMATION,
101
+ readOnlyHint: false,
102
+ },
103
+ schema: {
104
+ navigate: z
105
+ .enum(['back', 'forward'])
106
+ .describe('Whether to navigate back or navigate forward in the selected pages history'),
107
+ },
108
+ handler: async (request, response, context) => {
109
+ const page = context.getSelectedPage();
110
+ try {
111
+ if (request.params.navigate === 'back') {
112
+ await page.goBack();
113
+ }
114
+ else {
115
+ await page.goForward();
116
+ }
117
+ }
118
+ catch {
119
+ response.appendResponseLine(`Unable to navigate ${request.params.navigate} in currently selected page.`);
120
+ }
121
+ response.setIncludePages(true);
122
+ },
123
+ });
124
+ export const resizePage = defineTool({
125
+ name: 'resize_page',
126
+ description: `Resizes the selected page's window so that the page has specified dimension`,
127
+ annotations: {
128
+ category: ToolCategories.EMULATION,
129
+ readOnlyHint: false,
130
+ },
131
+ schema: {
132
+ width: z.number().describe('Page width'),
133
+ height: z.number().describe('Page height'),
134
+ },
135
+ handler: async (request, response, context) => {
136
+ const page = context.getSelectedPage();
137
+ // @ts-expect-error internal API for now.
138
+ await page.resize({
139
+ contentWidth: request.params.width,
140
+ contentHeight: request.params.height,
141
+ });
142
+ response.setIncludePages(true);
143
+ },
144
+ });
145
+ export const handleDialog = defineTool({
146
+ name: 'handle_dialog',
147
+ description: `If a browser dialog was opened, use this command to handle it`,
148
+ annotations: {
149
+ category: ToolCategories.INPUT_AUTOMATION,
150
+ readOnlyHint: false,
151
+ },
152
+ schema: {
153
+ action: z
154
+ .enum(['accept', 'dismiss'])
155
+ .describe('Whether to dismiss or accept the dialog'),
156
+ promptText: z
157
+ .string()
158
+ .optional()
159
+ .describe('Optional prompt text to enter into the dialog.'),
160
+ },
161
+ handler: async (request, response, context) => {
162
+ const dialog = context.getDialog();
163
+ if (!dialog) {
164
+ throw new Error('No open dialog found');
165
+ }
166
+ switch (request.params.action) {
167
+ case 'accept': {
168
+ await dialog.accept(request.params.promptText);
169
+ response.appendResponseLine('Successfully accepted the dialog');
170
+ break;
171
+ }
172
+ case 'dismiss': {
173
+ await dialog.dismiss();
174
+ response.appendResponseLine('Successfully dismissed the dialog');
175
+ break;
176
+ }
177
+ }
178
+ context.clearDialog();
179
+ response.setIncludePages(true);
180
+ },
181
+ });
@@ -0,0 +1,116 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import z from 'zod';
7
+ import { defineTool } from './ToolDefinition.js';
8
+ import { insightOutput, parseRawTraceBuffer } from '../trace-processing/parse.js';
9
+ import { logger } from '../logger.js';
10
+ import { ToolCategories } from './categories.js';
11
+ export const startTrace = defineTool({
12
+ name: 'performance_start_trace',
13
+ description: 'Starts a performance trace recording',
14
+ annotations: {
15
+ category: ToolCategories.PERFORMANCE,
16
+ readOnlyHint: true,
17
+ },
18
+ schema: {
19
+ reload: z
20
+ .boolean()
21
+ .describe('Determines if, once tracing has started, the page should be automatically reloaded'),
22
+ autoStop: z
23
+ .boolean()
24
+ .describe('Determines if the trace recording should be automatically stopped.'),
25
+ },
26
+ handler: async (request, response, context) => {
27
+ if (context.isRunningPerformanceTrace()) {
28
+ response.appendResponseLine('Error: a performance trace is already running. Use performance_stop_trace to stop it. Only one trace can be running at any given time.');
29
+ return;
30
+ }
31
+ context.setIsRunningPerformanceTrace(true);
32
+ const page = context.getSelectedPage();
33
+ const pageUrlForTracing = page.url();
34
+ if (request.params.reload) {
35
+ // Before starting the recording, navigate to about:blank to clear out any state.
36
+ await page.goto('about:blank', {
37
+ waitUntil: ['networkidle0'],
38
+ });
39
+ }
40
+ // Keep in sync with the categories arrays in:
41
+ // https://source.chromium.org/chromium/chromium/src/+/main:third_party/devtools-frontend/src/front_end/panels/timeline/TimelineController.ts
42
+ // https://github.com/GoogleChrome/lighthouse/blob/master/lighthouse-core/gather/gatherers/trace.js
43
+ const categories = [
44
+ '-*',
45
+ 'blink.console',
46
+ 'blink.user_timing',
47
+ 'devtools.timeline',
48
+ 'disabled-by-default-devtools.screenshot',
49
+ 'disabled-by-default-devtools.timeline',
50
+ 'disabled-by-default-devtools.timeline.invalidationTracking',
51
+ 'disabled-by-default-devtools.timeline.frame',
52
+ 'disabled-by-default-devtools.timeline.stack',
53
+ 'disabled-by-default-v8.cpu_profiler',
54
+ 'disabled-by-default-v8.cpu_profiler.hires',
55
+ 'latencyInfo',
56
+ 'loading',
57
+ 'disabled-by-default-lighthouse',
58
+ 'v8.execute',
59
+ 'v8',
60
+ ];
61
+ await page.tracing.start({
62
+ categories,
63
+ });
64
+ if (request.params.reload) {
65
+ await page.goto(pageUrlForTracing, {
66
+ waitUntil: ['load'],
67
+ });
68
+ }
69
+ if (request.params.autoStop) {
70
+ await new Promise(resolve => setTimeout(resolve, 5_000));
71
+ await stopTracingAndAppendOutput(page, response, context);
72
+ }
73
+ else {
74
+ response.appendResponseLine(`The performance trace is being recorded. Use performance_stop_trace to stop it.`);
75
+ }
76
+ },
77
+ });
78
+ export const stopTrace = defineTool({
79
+ name: 'performance_stop_trace',
80
+ description: 'Stops the active performance trace recording',
81
+ annotations: {
82
+ category: ToolCategories.PERFORMANCE,
83
+ readOnlyHint: true,
84
+ },
85
+ schema: {},
86
+ handler: async (_request, response, context) => {
87
+ if (!context.isRunningPerformanceTrace) {
88
+ return;
89
+ }
90
+ const page = context.getSelectedPage();
91
+ await stopTracingAndAppendOutput(page, response, context);
92
+ },
93
+ });
94
+ async function stopTracingAndAppendOutput(page, response, context) {
95
+ try {
96
+ const traceEventsBuffer = await page.tracing.stop();
97
+ const result = await parseRawTraceBuffer(traceEventsBuffer);
98
+ response.appendResponseLine('The performance trace has been stopped.');
99
+ if (result) {
100
+ const insightText = insightOutput(result);
101
+ if (insightText) {
102
+ response.appendResponseLine('Insights with performance opportunities:');
103
+ response.appendResponseLine(insightText);
104
+ }
105
+ else {
106
+ response.appendResponseLine('No insights have been found. The performance looks good!');
107
+ }
108
+ }
109
+ }
110
+ catch (e) {
111
+ logger(`Error stopping performance trace: ${e instanceof Error ? e.message : JSON.stringify(e)}`);
112
+ }
113
+ finally {
114
+ context.setIsRunningPerformanceTrace(false);
115
+ }
116
+ }
@@ -0,0 +1,65 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import z from 'zod';
7
+ import { defineTool } from './ToolDefinition.js';
8
+ import { ToolCategories } from './categories.js';
9
+ export const screenshot = defineTool({
10
+ name: 'take_screenshot',
11
+ description: `Take a screenshot of the page or element.`,
12
+ annotations: {
13
+ category: ToolCategories.DEBUGGING,
14
+ readOnlyHint: true,
15
+ },
16
+ schema: {
17
+ format: z
18
+ .enum(['png', 'jpeg'])
19
+ .default('png')
20
+ .describe('Type of format to save the screenshot as. Default is "png"'),
21
+ uid: z
22
+ .number()
23
+ .optional()
24
+ .describe('The uid of an element on the page from the page content snapshot. If omitted takes a pages screenshot.'),
25
+ fullPage: z
26
+ .boolean()
27
+ .optional()
28
+ .describe('If set to true takes a screenshot of the full page instead of the currently visible viewport. Incompatible with uid.'),
29
+ },
30
+ handler: async (request, response, context) => {
31
+ if (request.params.uid && request.params.fullPage) {
32
+ throw new Error('Providing both "uid" and "fullPage" is not allowed.');
33
+ }
34
+ let pageOrHandle;
35
+ if (request.params.uid) {
36
+ pageOrHandle = await context.getElementByUid(request.params.uid);
37
+ }
38
+ else {
39
+ pageOrHandle = context.getSelectedPage();
40
+ }
41
+ const screenshot = await pageOrHandle.screenshot({
42
+ type: request.params.format,
43
+ fullPage: request.params.fullPage,
44
+ });
45
+ if (request.params.uid) {
46
+ response.appendResponseLine(`Took a screenshot of node with uid "${request.params.uid}".`);
47
+ }
48
+ else if (request.params.fullPage) {
49
+ response.appendResponseLine('Took a screenshot of the full current page.');
50
+ }
51
+ else {
52
+ response.appendResponseLine("Took a screenshot of the current page's viewport.");
53
+ }
54
+ if (screenshot.length >= 2_000_000) {
55
+ const { filename } = await context.saveTemporaryFile(screenshot, `image/${request.params.format}`);
56
+ response.appendResponseLine(`Saved screenshot to ${filename}.`);
57
+ }
58
+ else {
59
+ response.attachImage({
60
+ mimeType: `image/${request.params.format}`,
61
+ data: Buffer.from(screenshot).toString('base64'),
62
+ });
63
+ }
64
+ },
65
+ });
@@ -0,0 +1,35 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import z from 'zod';
7
+ import { defineTool } from './ToolDefinition.js';
8
+ import { ToolCategories } from './categories.js';
9
+ import { waitForEventsAfterAction } from '../waitForHelpers.js';
10
+ export const evaluateScript = defineTool({
11
+ name: 'evaluate_script',
12
+ description: `Evaluate a JavaScript function inside the currently selected page. Returns the response as JSON.`,
13
+ annotations: {
14
+ category: ToolCategories.DEBUGGING,
15
+ readOnlyHint: false,
16
+ },
17
+ schema: {
18
+ function: z
19
+ .string()
20
+ .describe('A JavaScript function to run in the currently selected page. Example: `() => {return document.title}` or `async () => {return await fetch("example.com")}`'),
21
+ },
22
+ handler: async (request, response, context) => {
23
+ const page = context.getSelectedPage();
24
+ const script = `(async () => {
25
+ return JSON.stringify(await (${request.params.function})());
26
+ })()`;
27
+ await waitForEventsAfterAction(page, async () => {
28
+ const result = await page.evaluate(script);
29
+ response.appendResponseLine('Script ran on page and returned:');
30
+ response.appendResponseLine('```json');
31
+ response.appendResponseLine(`${result}`);
32
+ response.appendResponseLine('```');
33
+ });
34
+ },
35
+ });
@@ -0,0 +1,42 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import z from 'zod';
7
+ import { defineTool } from './ToolDefinition.js';
8
+ import { Locator } from 'puppeteer-core';
9
+ import { ToolCategories } from './categories.js';
10
+ export const takeSnapshot = defineTool({
11
+ name: 'take_snapshot',
12
+ description: `Take a text snapshot of the currently selected page. The snapshot lists page elements along with a unique
13
+ identifier (uid). Always use the latest snapshot. Prefer taking a snapshot over taking a screenshot.`,
14
+ annotations: {
15
+ category: ToolCategories.DEBUGGING,
16
+ readOnlyHint: true,
17
+ },
18
+ schema: {},
19
+ handler: async (_request, response) => {
20
+ response.setIncludeSnapshot(true);
21
+ },
22
+ });
23
+ export const waitFor = defineTool({
24
+ name: 'wait_for',
25
+ description: `Wait for the specified text to appear on the selected page.`,
26
+ annotations: {
27
+ category: ToolCategories.NAVIGATION_AUTOMATION,
28
+ readOnlyHint: true,
29
+ },
30
+ schema: {
31
+ text: z.string().describe('Text to appear on the page'),
32
+ },
33
+ handler: async (request, response, context) => {
34
+ const page = context.getSelectedPage();
35
+ await Locator.race([
36
+ page.locator(`aria/${request.params.text}`),
37
+ page.locator(`text/${request.params.text}`),
38
+ ]).wait();
39
+ response.appendResponseLine(`Element with text "${request.params.text}" found.`);
40
+ response.setIncludeSnapshot(true);
41
+ },
42
+ });
@@ -0,0 +1,73 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { PerformanceInsightFormatter } from '../../node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.js';
7
+ import * as TraceEngine from '../../node_modules/chrome-devtools-frontend/front_end/models/trace/trace.js';
8
+ import { logger } from '../logger.js';
9
+ const engine = TraceEngine.TraceModel.Model.createWithAllHandlers();
10
+ export async function parseRawTraceBuffer(buffer) {
11
+ engine.resetProcessor();
12
+ if (!buffer) {
13
+ return null;
14
+ }
15
+ const asString = new TextDecoder().decode(buffer);
16
+ if (!asString) {
17
+ return null;
18
+ }
19
+ try {
20
+ const data = JSON.parse(asString);
21
+ const events = Array.isArray(data) ? data : data.traceEvents;
22
+ await engine.parse(events);
23
+ const parsedTrace = engine.parsedTrace();
24
+ if (!parsedTrace) {
25
+ return null;
26
+ }
27
+ const insights = parsedTrace?.insights;
28
+ if (!insights) {
29
+ return null;
30
+ }
31
+ return {
32
+ parsedTrace,
33
+ insights,
34
+ };
35
+ }
36
+ catch (e) {
37
+ if (e instanceof Error) {
38
+ logger(`Error parsing trace: ${e.message}`);
39
+ }
40
+ else {
41
+ logger(`Error parsing trace: ${JSON.stringify(e)}`);
42
+ }
43
+ return null;
44
+ }
45
+ }
46
+ // TODO(jactkfranklin): move the formatters from DevTools to use here.
47
+ // This is a very temporary helper to output some text from the tool call to aid development.
48
+ export function insightOutput(result) {
49
+ const mainNavigationId = result.parsedTrace.data.Meta.mainFrameNavigations.at(0)?.args.data
50
+ ?.navigationId;
51
+ if (!mainNavigationId) {
52
+ return '';
53
+ }
54
+ let text = '';
55
+ const insightsForNav = result.insights.get(mainNavigationId);
56
+ if (!insightsForNav) {
57
+ text += 'No Performance insights were found for this trace.';
58
+ return text;
59
+ }
60
+ const failingInsightKeys = Object.keys(insightsForNav.model).filter(insightKey => {
61
+ const key = insightKey;
62
+ const data = insightsForNav.model[key] ?? null;
63
+ return data?.state === 'fail';
64
+ });
65
+ logger(`Found failing Insight keys: ${failingInsightKeys.join(', ')}`);
66
+ for (const failingKey of failingInsightKeys) {
67
+ const modelData = insightsForNav.model[failingKey];
68
+ const formatter = new PerformanceInsightFormatter(result.parsedTrace, modelData);
69
+ const output = formatter.formatInsight();
70
+ text += `${output}\n`;
71
+ }
72
+ return text;
73
+ }
@@ -0,0 +1,109 @@
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
+ }
package/package.json CHANGED
@@ -1,12 +1,59 @@
1
1
  {
2
2
  "name": "chrome-devtools-mcp",
3
- "version": "0.0.1",
3
+ "version": "0.1.0",
4
+ "description": "MCP server for Chrome DevTools",
5
+ "type": "module",
6
+ "bin": {
7
+ "chrome-devtools-mcp": "./build/src/index.js"
8
+ },
4
9
  "main": "index.js",
5
10
  "scripts": {
6
- "test": "echo \"Error: no test specified\" && exit 1"
11
+ "build": "tsc && node --experimental-strip-types scripts/post-build.ts",
12
+ "format": "eslint --cache --fix . ;prettier --write --cache .",
13
+ "check-format": "eslint --cache .; prettier --check --cache .;",
14
+ "generate-docs": "npm run build && node --experimental-strip-types scripts/generate-docs.ts",
15
+ "start": "npm run build && node build/src/index.js",
16
+ "start-debug": "DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js",
17
+ "test": "npm run build && node --test-reporter spec --test-force-exit --test 'build/tests/**/*.test.js'",
18
+ "test:only": "npm run build && node --test-reporter spec --test-force-exit --test --test-only 'build/tests/**/*.test.js'",
19
+ "test:only:no-build": "node --test-reporter spec --test-force-exit --test --test-only 'build/tests/**/*.test.js'",
20
+ "prepare": "node --experimental-strip-types scripts/prepare.ts"
21
+ },
22
+ "files": [
23
+ "build/src",
24
+ "build/node_modules",
25
+ "LICENSE",
26
+ "!*.tsbuildinfo"
27
+ ],
28
+ "repository": "ChromeDevTools/chrome-devtools-mcp",
29
+ "author": "Google LLC",
30
+ "license": "Apache-2.0",
31
+ "bugs": {
32
+ "url": "https://github.com/ChromeDevTools/chrome-devtools-mcp/issues"
33
+ },
34
+ "homepage": "https://github.com/ChromeDevTools/chrome-devtools-mcp#readme",
35
+ "dependencies": {
36
+ "@modelcontextprotocol/sdk": "1.18.0",
37
+ "debug": "4.4.3",
38
+ "puppeteer-core": "24.21.0",
39
+ "yargs": "18.0.0"
7
40
  },
8
- "keywords": [],
9
- "author": "",
10
- "license": "ISC",
11
- "description": ""
41
+ "devDependencies": {
42
+ "@eslint/js": "^9.35.0",
43
+ "@types/debug": "^4.1.12",
44
+ "@types/filesystem": "^0.0.36",
45
+ "@types/node": "^24.3.3",
46
+ "@types/sinon": "^17.0.4",
47
+ "@types/yargs": "^17.0.33",
48
+ "@typescript-eslint/eslint-plugin": "^8.43.0",
49
+ "@typescript-eslint/parser": "^8.43.0",
50
+ "chrome-devtools-frontend": "1.0.1514545",
51
+ "eslint": "^9.35.0",
52
+ "globals": "^16.4.0",
53
+ "prettier": "^3.6.2",
54
+ "puppeteer": "24.21.0",
55
+ "sinon": "^21.0.0",
56
+ "typescript": "^5.9.2",
57
+ "typescript-eslint": "^8.43.0"
58
+ }
12
59
  }