@mcp-b/chrome-devtools-mcp 2.0.13 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (759) hide show
  1. package/README.md +178 -436
  2. package/build/src/DevtoolsUtils.js +185 -97
  3. package/build/src/McpContext.js +392 -834
  4. package/build/src/McpPage.js +95 -0
  5. package/build/src/McpResponse.js +399 -197
  6. package/build/src/PageCollector.js +28 -12
  7. package/build/src/SlimMcpResponse.js +18 -0
  8. package/build/src/WaitForHelper.js +2 -2
  9. package/build/src/bin/chrome-devtools-cli-options.js +700 -0
  10. package/build/src/{cli.js → bin/chrome-devtools-mcp-cli-options.js} +94 -15
  11. package/build/src/bin/chrome-devtools-mcp-main.js +35 -0
  12. package/build/src/bin/chrome-devtools-mcp.js +21 -0
  13. package/build/src/bin/chrome-devtools.js +207 -0
  14. package/build/src/browser.js +63 -218
  15. package/build/src/daemon/client.js +176 -0
  16. package/build/src/daemon/daemon.js +206 -0
  17. package/build/src/daemon/types.js +6 -0
  18. package/build/src/daemon/utils.js +108 -0
  19. package/build/src/formatters/IssueFormatter.js +50 -48
  20. package/build/src/formatters/consoleFormatter.js +217 -97
  21. package/build/src/formatters/networkFormatter.js +195 -54
  22. package/build/src/formatters/snapshotFormatter.js +113 -52
  23. package/build/src/index.js +207 -16
  24. package/build/src/issue-descriptions.js +1 -1
  25. package/build/src/logger.js +9 -0
  26. package/build/src/telemetry/{clearcut-logger.js → ClearcutLogger.js} +1 -1
  27. package/build/src/telemetry/watchdog/{clearcut-sender.js → ClearcutSender.js} +2 -0
  28. package/build/src/telemetry/watchdog/main.js +1 -1
  29. package/build/src/third_party/devtools-formatter-worker.js +1 -1
  30. package/build/src/third_party/index.js +12 -2
  31. package/build/src/third_party/issue-descriptions/connectionAllowlistInvalidAllowlistItemType.md +12 -0
  32. package/build/src/third_party/issue-descriptions/connectionAllowlistInvalidHeader.md +12 -0
  33. package/build/src/third_party/issue-descriptions/connectionAllowlistInvalidUrlPattern.md +8 -0
  34. package/build/src/third_party/issue-descriptions/connectionAllowlistItemNotInnerList.md +12 -0
  35. package/build/src/third_party/issue-descriptions/connectionAllowlistMoreThanOneList.md +7 -0
  36. package/build/src/third_party/issue-descriptions/connectionAllowlistReportingEndpointNotToken.md +10 -0
  37. package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/corsLocalNetworkAccessPermissionDenied.md +2 -2
  38. package/build/src/third_party/issue-descriptions/selectivePermissionsIntervention.md +7 -0
  39. package/build/src/third_party/lighthouse-devtools-mcp-bundle.js +54183 -0
  40. package/build/src/tools/ToolDefinition.js +52 -0
  41. package/build/src/tools/categories.js +2 -2
  42. package/build/src/tools/console.js +3 -3
  43. package/build/src/tools/emulation.js +23 -55
  44. package/build/src/tools/extensions.js +17 -0
  45. package/build/src/tools/input.js +138 -37
  46. package/build/src/tools/lighthouse.js +123 -0
  47. package/build/src/tools/memory.js +28 -0
  48. package/build/src/tools/network.js +24 -10
  49. package/build/src/tools/pages.js +169 -88
  50. package/build/src/tools/performance.js +81 -38
  51. package/build/src/tools/screencast.js +79 -0
  52. package/build/src/tools/screenshot.js +6 -6
  53. package/build/src/tools/script.js +100 -77
  54. package/build/src/tools/slim/tools.js +81 -0
  55. package/build/src/tools/snapshot.js +12 -9
  56. package/build/src/tools/tools.js +38 -20
  57. package/build/src/tools/webmcp.js +365 -804
  58. package/build/src/trace-processing/parse.js +7 -7
  59. package/build/src/types.js +6 -0
  60. package/build/src/utils/files.js +19 -0
  61. package/build/src/version.js +9 -0
  62. package/package.json +37 -68
  63. package/build/src/main.js +0 -372
  64. package/build/src/polyfillLoader.js +0 -44
  65. package/build/src/prompts/index.js +0 -156
  66. package/build/src/tools/WebMCPToolHub.js +0 -329
  67. package/build/src/tools/browser.js +0 -92
  68. package/build/src/tools/extension.js +0 -31
  69. package/build/src/transports/CDPClientTransport.js +0 -184
  70. package/build/src/transports/WebMCPBridgeScript.js +0 -229
  71. package/build/src/transports/WebMCPClientTransport.js +0 -449
  72. package/build/src/transports/bridgeConstants.js +0 -22
  73. package/build/src/transports/index.js +0 -7
  74. package/build/vendor/chrome-devtools-frontend/LICENSE +0 -27
  75. package/build/vendor/chrome-devtools-frontend/front_end/core/common/App.js +0 -4
  76. package/build/vendor/chrome-devtools-frontend/front_end/core/common/AppProvider.js +0 -17
  77. package/build/vendor/chrome-devtools-frontend/front_end/core/common/Base64.js +0 -61
  78. package/build/vendor/chrome-devtools-frontend/front_end/core/common/CharacterIdMap.js +0 -27
  79. package/build/vendor/chrome-devtools-frontend/front_end/core/common/Color.js +0 -2033
  80. package/build/vendor/chrome-devtools-frontend/front_end/core/common/ColorConverter.js +0 -332
  81. package/build/vendor/chrome-devtools-frontend/front_end/core/common/ColorUtils.js +0 -221
  82. package/build/vendor/chrome-devtools-frontend/front_end/core/common/Console.js +0 -79
  83. package/build/vendor/chrome-devtools-frontend/front_end/core/common/Debouncer.js +0 -21
  84. package/build/vendor/chrome-devtools-frontend/front_end/core/common/EventTarget.js +0 -14
  85. package/build/vendor/chrome-devtools-frontend/front_end/core/common/Gzip.js +0 -77
  86. package/build/vendor/chrome-devtools-frontend/front_end/core/common/JavaScriptMetaData.js +0 -4
  87. package/build/vendor/chrome-devtools-frontend/front_end/core/common/Lazy.js +0 -29
  88. package/build/vendor/chrome-devtools-frontend/front_end/core/common/MapWithDefault.js +0 -22
  89. package/build/vendor/chrome-devtools-frontend/front_end/core/common/Mutex.js +0 -49
  90. package/build/vendor/chrome-devtools-frontend/front_end/core/common/Object.js +0 -91
  91. package/build/vendor/chrome-devtools-frontend/front_end/core/common/ParsedURL.js +0 -452
  92. package/build/vendor/chrome-devtools-frontend/front_end/core/common/Progress.js +0 -144
  93. package/build/vendor/chrome-devtools-frontend/front_end/core/common/ResolverBase.js +0 -69
  94. package/build/vendor/chrome-devtools-frontend/front_end/core/common/ResourceType.js +0 -501
  95. package/build/vendor/chrome-devtools-frontend/front_end/core/common/ReturnToPanel.js +0 -15
  96. package/build/vendor/chrome-devtools-frontend/front_end/core/common/Revealer.js +0 -159
  97. package/build/vendor/chrome-devtools-frontend/front_end/core/common/Runnable.js +0 -24
  98. package/build/vendor/chrome-devtools-frontend/front_end/core/common/SegmentedRange.js +0 -78
  99. package/build/vendor/chrome-devtools-frontend/front_end/core/common/SettingRegistration.js +0 -164
  100. package/build/vendor/chrome-devtools-frontend/front_end/core/common/Settings.js +0 -1273
  101. package/build/vendor/chrome-devtools-frontend/front_end/core/common/SimpleHistoryManager.js +0 -97
  102. package/build/vendor/chrome-devtools-frontend/front_end/core/common/StringOutputStream.js +0 -14
  103. package/build/vendor/chrome-devtools-frontend/front_end/core/common/TextDictionary.js +0 -40
  104. package/build/vendor/chrome-devtools-frontend/front_end/core/common/Throttler.js +0 -71
  105. package/build/vendor/chrome-devtools-frontend/front_end/core/common/Trie.js +0 -127
  106. package/build/vendor/chrome-devtools-frontend/front_end/core/common/common.js +0 -41
  107. package/build/vendor/chrome-devtools-frontend/front_end/core/host/AidaClient.js +0 -458
  108. package/build/vendor/chrome-devtools-frontend/front_end/core/host/DispatchHttpRequestClient.js +0 -66
  109. package/build/vendor/chrome-devtools-frontend/front_end/core/host/GdpClient.js +0 -202
  110. package/build/vendor/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHost.js +0 -92
  111. package/build/vendor/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHostAPI.js +0 -69
  112. package/build/vendor/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHostStub.js +0 -438
  113. package/build/vendor/chrome-devtools-frontend/front_end/core/host/Platform.js +0 -61
  114. package/build/vendor/chrome-devtools-frontend/front_end/core/host/ResourceLoader.js +0 -220
  115. package/build/vendor/chrome-devtools-frontend/front_end/core/host/UserMetrics.js +0 -975
  116. package/build/vendor/chrome-devtools-frontend/front_end/core/host/host.js +0 -13
  117. package/build/vendor/chrome-devtools-frontend/front_end/core/i18n/ByteUtilities.js +0 -72
  118. package/build/vendor/chrome-devtools-frontend/front_end/core/i18n/DevToolsLocale.js +0 -64
  119. package/build/vendor/chrome-devtools-frontend/front_end/core/i18n/NumberFormatter.js +0 -67
  120. package/build/vendor/chrome-devtools-frontend/front_end/core/i18n/collect-ui-strings.js +0 -72
  121. package/build/vendor/chrome-devtools-frontend/front_end/core/i18n/generate-locales-js.js +0 -50
  122. package/build/vendor/chrome-devtools-frontend/front_end/core/i18n/i18n.js +0 -9
  123. package/build/vendor/chrome-devtools-frontend/front_end/core/i18n/i18nImpl.js +0 -135
  124. package/build/vendor/chrome-devtools-frontend/front_end/core/i18n/i18nTypes.js +0 -4
  125. package/build/vendor/chrome-devtools-frontend/front_end/core/i18n/locales.js +0 -14
  126. package/build/vendor/chrome-devtools-frontend/front_end/core/i18n/time-utilities.js +0 -148
  127. package/build/vendor/chrome-devtools-frontend/front_end/core/platform/ArrayUtilities.js +0 -209
  128. package/build/vendor/chrome-devtools-frontend/front_end/core/platform/Brand.js +0 -4
  129. package/build/vendor/chrome-devtools-frontend/front_end/core/platform/Constructor.js +0 -4
  130. package/build/vendor/chrome-devtools-frontend/front_end/core/platform/DateUtilities.js +0 -13
  131. package/build/vendor/chrome-devtools-frontend/front_end/core/platform/DevToolsPath.js +0 -27
  132. package/build/vendor/chrome-devtools-frontend/front_end/core/platform/HostRuntime.js +0 -19
  133. package/build/vendor/chrome-devtools-frontend/front_end/core/platform/KeyboardUtilities.js +0 -21
  134. package/build/vendor/chrome-devtools-frontend/front_end/core/platform/MapUtilities.js +0 -79
  135. package/build/vendor/chrome-devtools-frontend/front_end/core/platform/MimeType.js +0 -143
  136. package/build/vendor/chrome-devtools-frontend/front_end/core/platform/NumberUtilities.js +0 -72
  137. package/build/vendor/chrome-devtools-frontend/front_end/core/platform/StringUtilities.js +0 -589
  138. package/build/vendor/chrome-devtools-frontend/front_end/core/platform/Timing.js +0 -9
  139. package/build/vendor/chrome-devtools-frontend/front_end/core/platform/TypedArrayUtilities.js +0 -157
  140. package/build/vendor/chrome-devtools-frontend/front_end/core/platform/TypescriptUtilities.js +0 -24
  141. package/build/vendor/chrome-devtools-frontend/front_end/core/platform/UIString.js +0 -4
  142. package/build/vendor/chrome-devtools-frontend/front_end/core/platform/UserVisibleError.js +0 -22
  143. package/build/vendor/chrome-devtools-frontend/front_end/core/platform/api/HostRuntime.js +0 -4
  144. package/build/vendor/chrome-devtools-frontend/front_end/core/platform/api/api.js +0 -5
  145. package/build/vendor/chrome-devtools-frontend/front_end/core/platform/browser/HostRuntime.js +0 -63
  146. package/build/vendor/chrome-devtools-frontend/front_end/core/platform/browser/browser.js +0 -5
  147. package/build/vendor/chrome-devtools-frontend/front_end/core/platform/node/HostRuntime.js +0 -72
  148. package/build/vendor/chrome-devtools-frontend/front_end/core/platform/node/node.js +0 -5
  149. package/build/vendor/chrome-devtools-frontend/front_end/core/platform/platform.js +0 -26
  150. package/build/vendor/chrome-devtools-frontend/front_end/core/protocol_client/CDPConnection.js +0 -18
  151. package/build/vendor/chrome-devtools-frontend/front_end/core/protocol_client/ConnectionTransport.js +0 -12
  152. package/build/vendor/chrome-devtools-frontend/front_end/core/protocol_client/DevToolsCDPConnection.js +0 -138
  153. package/build/vendor/chrome-devtools-frontend/front_end/core/protocol_client/InspectorBackend.js +0 -542
  154. package/build/vendor/chrome-devtools-frontend/front_end/core/protocol_client/protocol_client.js +0 -8
  155. package/build/vendor/chrome-devtools-frontend/front_end/core/root/DevToolsContext.js +0 -54
  156. package/build/vendor/chrome-devtools-frontend/front_end/core/root/ExperimentNames.js +0 -30
  157. package/build/vendor/chrome-devtools-frontend/front_end/core/root/Runtime.js +0 -11
  158. package/build/vendor/chrome-devtools-frontend/front_end/core/root/root.js +0 -7
  159. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/AccessibilityModel.js +0 -281
  160. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/AnimationModel.js +0 -841
  161. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/AutofillModel.js +0 -155
  162. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CPUProfilerModel.js +0 -99
  163. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CPUThrottlingManager.js +0 -217
  164. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSContainerQuery.js +0 -98
  165. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSFontFace.js +0 -31
  166. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSLayer.js +0 -22
  167. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSMatchedStyles.js +0 -1378
  168. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSMedia.js +0 -100
  169. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSMetadata.js +0 -1532
  170. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSModel.js +0 -923
  171. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSProperty.js +0 -312
  172. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSPropertyParser.js +0 -574
  173. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSPropertyParserMatchers.js +0 -1352
  174. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSQuery.js +0 -53
  175. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSRule.js +0 -403
  176. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSScope.js +0 -22
  177. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSStartingStyle.js +0 -21
  178. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSStyleDeclaration.js +0 -275
  179. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSStyleSheetHeader.js +0 -166
  180. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSSupports.js +0 -24
  181. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CategorizedBreakpoint.js +0 -29
  182. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/ChildTargetManager.js +0 -236
  183. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CompilerSourceMappingContentProvider.js +0 -47
  184. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/Connections.js +0 -205
  185. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/ConsoleModel.js +0 -627
  186. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/ConsoleModelTypes.js +0 -14
  187. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/Cookie.js +0 -241
  188. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CookieModel.js +0 -198
  189. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CookieParser.js +0 -163
  190. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/DOMDebuggerModel.js +0 -597
  191. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/DOMModel.js +0 -1792
  192. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/DebuggerModel.js +0 -1182
  193. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/EmulationModel.js +0 -527
  194. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/EnhancedTracesParser.js +0 -364
  195. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/EventBreakpointsModel.js +0 -127
  196. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/FrameAssociated.js +0 -4
  197. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/FrameManager.js +0 -199
  198. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/HeapProfilerModel.js +0 -137
  199. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/HttpReasonPhraseStrings.js +0 -75
  200. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/IOModel.js +0 -80
  201. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/IsolateManager.js +0 -208
  202. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/IssuesModel.js +0 -41
  203. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/LayerTreeBase.js +0 -95
  204. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/LogModel.js +0 -34
  205. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/NetworkManager.js +0 -2238
  206. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/NetworkRequest.js +0 -1645
  207. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/OverlayColorGenerator.js +0 -48
  208. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/OverlayModel.js +0 -778
  209. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/OverlayPersistentHighlighter.js +0 -384
  210. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/PageLoad.js +0 -25
  211. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/PageResourceLoader.js +0 -310
  212. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/PaintProfiler.js +0 -67
  213. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/PerformanceMetricsModel.js +0 -62
  214. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/PreloadingModel.js +0 -608
  215. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/RehydratingConnection.js +0 -417
  216. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/RehydratingObject.js +0 -4
  217. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/RemoteObject.js +0 -908
  218. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/Resource.js +0 -163
  219. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/ResourceTreeModel.js +0 -926
  220. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/RuntimeModel.js +0 -535
  221. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/SDKModel.js +0 -45
  222. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/ScopeTreeCache.js +0 -36
  223. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/ScreenCaptureModel.js +0 -176
  224. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/Script.js +0 -420
  225. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/SecurityOriginManager.js +0 -54
  226. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/ServerSentEvents.js +0 -67
  227. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/ServerSentEventsProtocol.js +0 -113
  228. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/ServerTiming.js +0 -216
  229. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/ServiceWorkerCacheModel.js +0 -271
  230. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/ServiceWorkerManager.js +0 -511
  231. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/SourceMap.js +0 -696
  232. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/SourceMapCache.js +0 -57
  233. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/SourceMapFunctionRanges.js +0 -132
  234. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/SourceMapManager.js +0 -201
  235. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/SourceMapScopeChainEntry.js +0 -156
  236. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/SourceMapScopesInfo.js +0 -494
  237. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/StorageBucketsModel.js +0 -143
  238. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/StorageKeyManager.js +0 -53
  239. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/Target.js +0 -259
  240. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/TargetManager.js +0 -395
  241. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/TraceObject.js +0 -55
  242. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/WebAuthnModel.js +0 -66
  243. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/sdk-meta.js +0 -1166
  244. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/sdk.js +0 -91
  245. package/build/vendor/chrome-devtools-frontend/front_end/foundation/Universe.js +0 -34
  246. package/build/vendor/chrome-devtools-frontend/front_end/foundation/foundation.js +0 -5
  247. package/build/vendor/chrome-devtools-frontend/front_end/generated/ARIAProperties.js +0 -2634
  248. package/build/vendor/chrome-devtools-frontend/front_end/generated/Deprecation.js +0 -369
  249. package/build/vendor/chrome-devtools-frontend/front_end/generated/InspectorBackendCommands.js +0 -1592
  250. package/build/vendor/chrome-devtools-frontend/front_end/generated/SupportedCSSProperties.js +0 -7744
  251. package/build/vendor/chrome-devtools-frontend/front_end/generated/protocol.js +0 -4
  252. package/build/vendor/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/NetworkRequestFormatter.js +0 -290
  253. package/build/vendor/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.js +0 -989
  254. package/build/vendor/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.js +0 -735
  255. package/build/vendor/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/UnitFormatters.js +0 -139
  256. package/build/vendor/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AICallTree.js +0 -412
  257. package/build/vendor/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AIContext.js +0 -131
  258. package/build/vendor/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AIQueries.js +0 -149
  259. package/build/vendor/chrome-devtools-frontend/front_end/models/annotations/AnnotationRepository.js +0 -163
  260. package/build/vendor/chrome-devtools-frontend/front_end/models/annotations/AnnotationType.js +0 -10
  261. package/build/vendor/chrome-devtools-frontend/front_end/models/annotations/annotations.js +0 -5
  262. package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/CSSWorkspaceBinding.js +0 -245
  263. package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/CompilerScriptMapping.js +0 -488
  264. package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/ContentProviderBasedProject.js +0 -130
  265. package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/DebuggerLanguagePlugins.js +0 -963
  266. package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/DebuggerWorkspaceBinding.js +0 -554
  267. package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/DefaultScriptMapping.js +0 -112
  268. package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/FileUtils.js +0 -186
  269. package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/LiveLocation.js +0 -60
  270. package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/NetworkProject.js +0 -107
  271. package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/PresentationConsoleMessageHelper.js +0 -244
  272. package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/ResourceMapping.js +0 -564
  273. package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/ResourceScriptMapping.js +0 -437
  274. package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/ResourceUtils.js +0 -87
  275. package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/SASSSourceMapping.js +0 -182
  276. package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/StylesSourceMapping.js +0 -268
  277. package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/TempFile.js +0 -55
  278. package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/bindings.js +0 -20
  279. package/build/vendor/chrome-devtools-frontend/front_end/models/cpu_profile/CPUProfileDataModel.js +0 -516
  280. package/build/vendor/chrome-devtools-frontend/front_end/models/cpu_profile/ProfileTreeModel.js +0 -89
  281. package/build/vendor/chrome-devtools-frontend/front_end/models/cpu_profile/cpu_profile.js +0 -6
  282. package/build/vendor/chrome-devtools-frontend/front_end/models/crux-manager/CrUXManager.js +0 -285
  283. package/build/vendor/chrome-devtools-frontend/front_end/models/crux-manager/crux-manager.js +0 -4
  284. package/build/vendor/chrome-devtools-frontend/front_end/models/emulation/DeviceModeModel.js +0 -775
  285. package/build/vendor/chrome-devtools-frontend/front_end/models/emulation/EmulatedDevices.js +0 -1720
  286. package/build/vendor/chrome-devtools-frontend/front_end/models/emulation/emulation.js +0 -6
  287. package/build/vendor/chrome-devtools-frontend/front_end/models/formatter/FormatterWorkerPool.js +0 -148
  288. package/build/vendor/chrome-devtools-frontend/front_end/models/formatter/ScriptFormatter.js +0 -77
  289. package/build/vendor/chrome-devtools-frontend/front_end/models/formatter/formatter.js +0 -6
  290. package/build/vendor/chrome-devtools-frontend/front_end/models/geometry/GeometryImpl.js +0 -347
  291. package/build/vendor/chrome-devtools-frontend/front_end/models/geometry/geometry.js +0 -4
  292. package/build/vendor/chrome-devtools-frontend/front_end/models/greendev/Prototypes.js +0 -33
  293. package/build/vendor/chrome-devtools-frontend/front_end/models/greendev/greendev.js +0 -4
  294. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/AttributionReportingIssue.js +0 -201
  295. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/BounceTrackingIssue.js +0 -49
  296. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/CheckFormsIssuesTrigger.js +0 -31
  297. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/ClientHintIssue.js +0 -71
  298. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/ContentSecurityPolicyIssue.js +0 -135
  299. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/ContrastCheckTrigger.js +0 -59
  300. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/CookieDeprecationMetadataIssue.js +0 -58
  301. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/CookieIssue.js +0 -493
  302. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/CorsIssue.js +0 -207
  303. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/CrossOriginEmbedderPolicyIssue.js +0 -110
  304. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/DeprecationIssue.js +0 -90
  305. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/ElementAccessibilityIssue.js +0 -95
  306. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/FederatedAuthRequestIssue.js +0 -231
  307. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/FederatedAuthUserInfoRequestIssue.js +0 -141
  308. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/GenericIssue.js +0 -212
  309. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/HeavyAdIssue.js +0 -52
  310. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/Issue.js +0 -152
  311. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/IssueAggregator.js +0 -322
  312. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/IssueResolver.js +0 -40
  313. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/IssuesManager.js +0 -410
  314. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/IssuesManagerEvents.js +0 -4
  315. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/LowTextContrastIssue.js +0 -48
  316. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/MarkdownIssueDescription.js +0 -104
  317. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/MixedContentIssue.js +0 -55
  318. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/PartitioningBlobURLIssue.js +0 -58
  319. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/PermissionElementIssue.js +0 -243
  320. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/PropertyRuleIssue.js +0 -58
  321. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/QuirksModeIssue.js +0 -48
  322. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/RelatedIssue.js +0 -70
  323. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/SRIMessageSignatureIssue.js +0 -87
  324. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/SharedArrayBufferIssue.js +0 -49
  325. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/SharedDictionaryIssue.js +0 -292
  326. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/SourceFrameIssuesManager.js +0 -81
  327. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/StylesheetLoadingIssue.js +0 -59
  328. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/UnencodedDigestIssue.js +0 -62
  329. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/corsInsecurePrivateNetwork.md +0 -10
  330. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/corsPreflightAllowPrivateNetworkError.md +0 -10
  331. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/corsPrivateNetworkPermissionDenied.md +0 -10
  332. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/federatedAuthRequestClientMetadataHttpNotFound.md +0 -1
  333. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/federatedAuthRequestClientMetadataInvalidResponse.md +0 -1
  334. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/federatedAuthRequestClientMetadataNoResponse.md +0 -1
  335. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/issues_manager.js +0 -36
  336. package/build/vendor/chrome-devtools-frontend/front_end/models/logs/LogManager.js +0 -67
  337. package/build/vendor/chrome-devtools-frontend/front_end/models/logs/NetworkLog.js +0 -486
  338. package/build/vendor/chrome-devtools-frontend/front_end/models/logs/RequestResolver.js +0 -49
  339. package/build/vendor/chrome-devtools-frontend/front_end/models/logs/logs-meta.js +0 -73
  340. package/build/vendor/chrome-devtools-frontend/front_end/models/logs/logs.js +0 -7
  341. package/build/vendor/chrome-devtools-frontend/front_end/models/network_time_calculator/Calculator.js +0 -4
  342. package/build/vendor/chrome-devtools-frontend/front_end/models/network_time_calculator/NetworkTimeCalculator.js +0 -256
  343. package/build/vendor/chrome-devtools-frontend/front_end/models/network_time_calculator/RequestTimeRanges.js +0 -122
  344. package/build/vendor/chrome-devtools-frontend/front_end/models/network_time_calculator/network_time_calculator.js +0 -6
  345. package/build/vendor/chrome-devtools-frontend/front_end/models/source_map_scopes/FunctionCodeResolver.js +0 -192
  346. package/build/vendor/chrome-devtools-frontend/front_end/models/source_map_scopes/NamesResolver.js +0 -618
  347. package/build/vendor/chrome-devtools-frontend/front_end/models/source_map_scopes/ScopeChainModel.js +0 -59
  348. package/build/vendor/chrome-devtools-frontend/front_end/models/source_map_scopes/source_map_scopes.js +0 -7
  349. package/build/vendor/chrome-devtools-frontend/front_end/models/stack_trace/StackTrace.js +0 -33
  350. package/build/vendor/chrome-devtools-frontend/front_end/models/stack_trace/StackTraceImpl.js +0 -136
  351. package/build/vendor/chrome-devtools-frontend/front_end/models/stack_trace/StackTraceModel.js +0 -149
  352. package/build/vendor/chrome-devtools-frontend/front_end/models/stack_trace/Trie.js +0 -121
  353. package/build/vendor/chrome-devtools-frontend/front_end/models/stack_trace/stack_trace.js +0 -5
  354. package/build/vendor/chrome-devtools-frontend/front_end/models/stack_trace/stack_trace_impl.js +0 -7
  355. package/build/vendor/chrome-devtools-frontend/front_end/models/text_utils/CodeMirrorUtils.js +0 -32
  356. package/build/vendor/chrome-devtools-frontend/front_end/models/text_utils/ContentData.js +0 -173
  357. package/build/vendor/chrome-devtools-frontend/front_end/models/text_utils/ContentProvider.js +0 -30
  358. package/build/vendor/chrome-devtools-frontend/front_end/models/text_utils/StaticContentProvider.js +0 -32
  359. package/build/vendor/chrome-devtools-frontend/front_end/models/text_utils/StreamingContentData.js +0 -79
  360. package/build/vendor/chrome-devtools-frontend/front_end/models/text_utils/Text.js +0 -69
  361. package/build/vendor/chrome-devtools-frontend/front_end/models/text_utils/TextCursor.js +0 -35
  362. package/build/vendor/chrome-devtools-frontend/front_end/models/text_utils/TextRange.js +0 -231
  363. package/build/vendor/chrome-devtools-frontend/front_end/models/text_utils/TextUtils.js +0 -355
  364. package/build/vendor/chrome-devtools-frontend/front_end/models/text_utils/WasmDisassembly.js +0 -68
  365. package/build/vendor/chrome-devtools-frontend/front_end/models/text_utils/text_utils.js +0 -14
  366. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/EntityMapper.js +0 -122
  367. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/EventsSerializer.js +0 -89
  368. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/LanternComputationData.js +0 -371
  369. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/ModelImpl.js +0 -166
  370. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/Name.js +0 -114
  371. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/Processor.js +0 -554
  372. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/Styles.js +0 -823
  373. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/extras/FilmStrip.js +0 -44
  374. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/extras/Initiators.js +0 -46
  375. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/extras/MainThreadActivity.js +0 -76
  376. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/extras/ScriptDuplication.js +0 -162
  377. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/extras/StackTraceForEvent.js +0 -191
  378. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/extras/ThirdParties.js +0 -118
  379. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/extras/TraceFilter.js +0 -50
  380. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/extras/TraceTree.js +0 -600
  381. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/extras/extras.js +0 -11
  382. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/AnimationFramesHandler.js +0 -109
  383. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/AnimationHandler.js +0 -26
  384. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/AsyncJSCallsHandler.js +0 -187
  385. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/AuctionWorkletsHandler.js +0 -162
  386. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/DOMStatsHandler.js +0 -21
  387. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/ExtensionTraceDataHandler.js +0 -263
  388. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/FlowsHandler.js +0 -148
  389. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/FramesHandler.js +0 -485
  390. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/GPUHandler.js +0 -35
  391. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/ImagePaintingHandler.js +0 -147
  392. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/InitiatorsHandler.js +0 -180
  393. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/InvalidationsHandler.js +0 -126
  394. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/LargestImagePaintHandler.js +0 -85
  395. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/LargestTextPaintHandler.js +0 -27
  396. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/LayerTreeHandler.js +0 -103
  397. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/LayoutShiftsHandler.js +0 -449
  398. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/MemoryHandler.js +0 -21
  399. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/MetaHandler.js +0 -410
  400. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/ModelHandlers.js +0 -33
  401. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/NetworkRequestsHandler.js +0 -575
  402. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/PageFramesHandler.js +0 -42
  403. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/PageLoadMetricsHandler.js +0 -366
  404. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/RendererHandler.js +0 -346
  405. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/SamplesHandler.js +0 -260
  406. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/ScreenshotsHandler.js +0 -97
  407. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/ScriptsHandler.js +0 -276
  408. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/SelectorStatsHandler.js +0 -71
  409. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/Threads.js +0 -101
  410. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/UserInteractionsHandler.js +0 -317
  411. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/UserTimingsHandler.js +0 -183
  412. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/WarningsHandler.js +0 -134
  413. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/WorkersHandler.js +0 -33
  414. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/handlers.js +0 -7
  415. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/helpers.js +0 -163
  416. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/types.js +0 -1
  417. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/helpers/Extensions.js +0 -41
  418. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/helpers/Network.js +0 -102
  419. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/helpers/SamplesIntegrator.js +0 -495
  420. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/helpers/SyntheticEvents.js +0 -74
  421. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/helpers/Timing.js +0 -193
  422. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/helpers/Trace.js +0 -820
  423. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/helpers/TreeHelpers.js +0 -254
  424. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/helpers/helpers.js +0 -10
  425. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/CLSCulprits.js +0 -489
  426. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/Cache.js +0 -209
  427. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/Common.js +0 -335
  428. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/DOMSize.js +0 -181
  429. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/DocumentLatency.js +0 -258
  430. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/DuplicatedJavaScript.js +0 -90
  431. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/FontDisplay.js +0 -82
  432. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/ForcedReflow.js +0 -161
  433. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/INPBreakdown.js +0 -129
  434. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/ImageDelivery.js +0 -263
  435. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/LCPBreakdown.js +0 -199
  436. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/LCPDiscovery.js +0 -181
  437. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/LegacyJavaScript.js +0 -90
  438. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/Models.js +0 -21
  439. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/ModernHTTP.js +0 -200
  440. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/NetworkDependencyTree.js +0 -546
  441. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/RenderBlocking.js +0 -192
  442. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/SlowCSSSelector.js +0 -136
  443. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/Statistics.js +0 -92
  444. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/ThirdParties.js +0 -98
  445. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/Viewport.js +0 -102
  446. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/insights.js +0 -9
  447. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/types.js +0 -18
  448. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/core/LanternError.js +0 -6
  449. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/core/NetworkAnalyzer.js +0 -488
  450. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/core/core.js +0 -5
  451. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/graph/BaseNode.js +0 -276
  452. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/graph/CPUNode.js +0 -63
  453. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/graph/NetworkNode.js +0 -82
  454. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/graph/PageDependencyGraph.js +0 -551
  455. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/graph/graph.js +0 -7
  456. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/lantern.js +0 -9
  457. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/FirstContentfulPaint.js +0 -136
  458. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/Interactive.js +0 -67
  459. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/LargestContentfulPaint.js +0 -68
  460. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/MaxPotentialFID.js +0 -48
  461. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/Metric.js +0 -68
  462. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/SpeedIndex.js +0 -101
  463. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/TBTUtils.js +0 -64
  464. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/TotalBlockingTime.js +0 -78
  465. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/metrics.js +0 -11
  466. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/ConnectionPool.js +0 -115
  467. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/Constants.js +0 -42
  468. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/DNSCache.js +0 -47
  469. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/SimulationTimingMap.js +0 -134
  470. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/Simulator.js +0 -450
  471. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/TCPConnection.js +0 -154
  472. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/simulation.js +0 -9
  473. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/types/Lantern.js +0 -24
  474. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/types/types.js +0 -4
  475. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/trace.js +0 -17
  476. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/types/Configuration.js +0 -18
  477. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/types/Extensions.js +0 -37
  478. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/types/File.js +0 -57
  479. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/types/Overlays.js +0 -4
  480. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/types/Timing.js +0 -15
  481. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/types/TraceEvents.js +0 -602
  482. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/types/types.js +0 -9
  483. package/build/vendor/chrome-devtools-frontend/front_end/models/trace_source_maps_resolver/SourceMapsResolver.js +0 -224
  484. package/build/vendor/chrome-devtools-frontend/front_end/models/trace_source_maps_resolver/trace_source_maps_resolver.js +0 -4
  485. package/build/vendor/chrome-devtools-frontend/front_end/models/workspace/FileManager.js +0 -64
  486. package/build/vendor/chrome-devtools-frontend/front_end/models/workspace/IgnoreListManager.js +0 -504
  487. package/build/vendor/chrome-devtools-frontend/front_end/models/workspace/SearchConfig.js +0 -113
  488. package/build/vendor/chrome-devtools-frontend/front_end/models/workspace/UISourceCode.js +0 -601
  489. package/build/vendor/chrome-devtools-frontend/front_end/models/workspace/WorkspaceImpl.js +0 -201
  490. package/build/vendor/chrome-devtools-frontend/front_end/models/workspace/workspace-meta.js +0 -34
  491. package/build/vendor/chrome-devtools-frontend/front_end/models/workspace/workspace.js +0 -9
  492. package/build/vendor/chrome-devtools-frontend/front_end/third_party/codemirror.next/codemirror.next.js +0 -1
  493. package/build/vendor/chrome-devtools-frontend/front_end/third_party/i18n/LICENSE +0 -202
  494. package/build/vendor/chrome-devtools-frontend/front_end/third_party/i18n/i18n-impl.js +0 -46
  495. package/build/vendor/chrome-devtools-frontend/front_end/third_party/i18n/i18n.js +0 -6
  496. package/build/vendor/chrome-devtools-frontend/front_end/third_party/i18n/localized-string-set.js +0 -122
  497. package/build/vendor/chrome-devtools-frontend/front_end/third_party/intl-messageformat/LICENSE +0 -33
  498. package/build/vendor/chrome-devtools-frontend/front_end/third_party/intl-messageformat/intl-messageformat.js +0 -5
  499. package/build/vendor/chrome-devtools-frontend/front_end/third_party/intl-messageformat/package/index.js +0 -13
  500. package/build/vendor/chrome-devtools-frontend/front_end/third_party/intl-messageformat/package/intl-messageformat.esm.js +0 -1725
  501. package/build/vendor/chrome-devtools-frontend/front_end/third_party/intl-messageformat/package/intl-messageformat.iife.js +0 -1840
  502. package/build/vendor/chrome-devtools-frontend/front_end/third_party/intl-messageformat/package/lib/index.js +0 -10
  503. package/build/vendor/chrome-devtools-frontend/front_end/third_party/intl-messageformat/package/lib/src/core.js +0 -233
  504. package/build/vendor/chrome-devtools-frontend/front_end/third_party/intl-messageformat/package/lib/src/error.js +0 -48
  505. package/build/vendor/chrome-devtools-frontend/front_end/third_party/intl-messageformat/package/lib/src/formatters.js +0 -177
  506. package/build/vendor/chrome-devtools-frontend/front_end/third_party/intl-messageformat/package/src/core.js +0 -236
  507. package/build/vendor/chrome-devtools-frontend/front_end/third_party/intl-messageformat/package/src/error.js +0 -51
  508. package/build/vendor/chrome-devtools-frontend/front_end/third_party/intl-messageformat/package/src/formatters.js +0 -182
  509. package/build/vendor/chrome-devtools-frontend/front_end/third_party/legacy-javascript/LICENSE +0 -202
  510. package/build/vendor/chrome-devtools-frontend/front_end/third_party/legacy-javascript/legacy-javascript.js +0 -2
  511. package/build/vendor/chrome-devtools-frontend/front_end/third_party/legacy-javascript/lib/legacy-javascript.js +0 -940
  512. package/build/vendor/chrome-devtools-frontend/front_end/third_party/marked/LICENSE +0 -39
  513. package/build/vendor/chrome-devtools-frontend/front_end/third_party/marked/marked.js +0 -2
  514. package/build/vendor/chrome-devtools-frontend/front_end/third_party/marked/package/bin/main.js +0 -255
  515. package/build/vendor/chrome-devtools-frontend/front_end/third_party/marked/package/bin/marked.js +0 -11
  516. package/build/vendor/chrome-devtools-frontend/front_end/third_party/marked/package/lib/marked.esm.js +0 -2695
  517. package/build/vendor/chrome-devtools-frontend/front_end/third_party/marked/package/lib/marked.js +0 -2233
  518. package/build/vendor/chrome-devtools-frontend/front_end/third_party/marked/package/lib/marked.umd.js +0 -2719
  519. package/build/vendor/chrome-devtools-frontend/front_end/third_party/marked/package/src/Lexer.js +0 -453
  520. package/build/vendor/chrome-devtools-frontend/front_end/third_party/marked/package/src/Parser.js +0 -233
  521. package/build/vendor/chrome-devtools-frontend/front_end/third_party/marked/package/src/Renderer.js +0 -137
  522. package/build/vendor/chrome-devtools-frontend/front_end/third_party/marked/package/src/Slugger.js +0 -46
  523. package/build/vendor/chrome-devtools-frontend/front_end/third_party/marked/package/src/TextRenderer.js +0 -34
  524. package/build/vendor/chrome-devtools-frontend/front_end/third_party/marked/package/src/Tokenizer.js +0 -683
  525. package/build/vendor/chrome-devtools-frontend/front_end/third_party/marked/package/src/defaults.js +0 -27
  526. package/build/vendor/chrome-devtools-frontend/front_end/third_party/marked/package/src/helpers.js +0 -240
  527. package/build/vendor/chrome-devtools-frontend/front_end/third_party/marked/package/src/marked.js +0 -318
  528. package/build/vendor/chrome-devtools-frontend/front_end/third_party/marked/package/src/rules.js +0 -243
  529. package/build/vendor/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/LICENSE +0 -26
  530. package/build/vendor/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/builder/builder.js +0 -196
  531. package/build/vendor/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/builder/safe_builder.js +0 -226
  532. package/build/vendor/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/codec.js +0 -4
  533. package/build/vendor/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/decode/decode.js +0 -427
  534. package/build/vendor/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/encode/encode.js +0 -24
  535. package/build/vendor/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/encode/encoder.js +0 -283
  536. package/build/vendor/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/mod.js +0 -7
  537. package/build/vendor/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/scopes.js +0 -4
  538. package/build/vendor/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/util.js +0 -9
  539. package/build/vendor/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/vlq.js +0 -84
  540. package/build/vendor/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/source-map-scopes-codec.js +0 -4
  541. package/build/vendor/chrome-devtools-frontend/front_end/third_party/third-party-web/LICENSE +0 -20
  542. package/build/vendor/chrome-devtools-frontend/front_end/third_party/third-party-web/lib/nostats-subset.js +0 -146
  543. package/build/vendor/chrome-devtools-frontend/front_end/third_party/third-party-web/package/httparchive-nostats-subset.js +0 -2
  544. package/build/vendor/chrome-devtools-frontend/front_end/third_party/third-party-web/package/httparchive-subset.js +0 -2
  545. package/build/vendor/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/create-entity-finder-api.js +0 -118
  546. package/build/vendor/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/create-entity-finder-api.test.js +0 -40
  547. package/build/vendor/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/entities.test.js +0 -26
  548. package/build/vendor/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/index.js +0 -4
  549. package/build/vendor/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/index.test.js +0 -215
  550. package/build/vendor/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/subsets/httparchive-nostats.js +0 -4
  551. package/build/vendor/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/subsets/httparchive.js +0 -4
  552. package/build/vendor/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/subsets/nostats.js +0 -4
  553. package/build/vendor/chrome-devtools-frontend/front_end/third_party/third-party-web/package/nostats-subset.js +0 -2
  554. package/build/vendor/chrome-devtools-frontend/front_end/third_party/third-party-web/third-party-web.js +0 -2
  555. package/build/vendor/chrome-devtools-frontend/mcp/HostBindings.js +0 -226
  556. package/build/vendor/chrome-devtools-frontend/mcp/mcp.js +0 -39
  557. /package/build/src/telemetry/{watchdog-client.js → WatchdogClient.js} +0 -0
  558. /package/build/src/telemetry/{flag-utils.js → flagUtils.js} +0 -0
  559. /package/build/src/telemetry/{metric-utils.js → metricUtils.js} +0 -0
  560. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/CoepCoopSandboxedIframeCannotNavigateToCoopPage.md +0 -0
  561. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/CoepCorpNotSameOrigin.md +0 -0
  562. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/CoepCorpNotSameOriginAfterDefaultedToSameOriginByCoep.md +0 -0
  563. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/CoepCorpNotSameSite.md +0 -0
  564. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/CoepFrameResourceNeedsCoepHeader.md +0 -0
  565. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/CompatibilityModeQuirks.md +0 -0
  566. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/CookieAttributeValueExceedsMaxSize.md +0 -0
  567. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/LowTextContrast.md +0 -0
  568. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/SameSiteExcludeContextDowngradeRead.md +0 -0
  569. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/SameSiteExcludeContextDowngradeSet.md +0 -0
  570. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/SameSiteExcludeNavigationContextDowngrade.md +0 -0
  571. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/SameSiteNoneInsecureErrorRead.md +0 -0
  572. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/SameSiteNoneInsecureErrorSet.md +0 -0
  573. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/SameSiteNoneInsecureWarnRead.md +0 -0
  574. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/SameSiteNoneInsecureWarnSet.md +0 -0
  575. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/SameSiteUnspecifiedLaxAllowUnsafeRead.md +0 -0
  576. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/SameSiteUnspecifiedLaxAllowUnsafeSet.md +0 -0
  577. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/SameSiteWarnCrossDowngradeRead.md +0 -0
  578. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/SameSiteWarnCrossDowngradeSet.md +0 -0
  579. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/SameSiteWarnStrictLaxDowngradeStrict.md +0 -0
  580. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arInsecureContext.md +0 -0
  581. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arInvalidInfoHeader.md +0 -0
  582. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arInvalidRegisterOsSourceHeader.md +0 -0
  583. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arInvalidRegisterOsTriggerHeader.md +0 -0
  584. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arInvalidRegisterSourceHeader.md +0 -0
  585. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arInvalidRegisterTriggerHeader.md +0 -0
  586. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arNavigationRegistrationUniqueScopeAlreadySet.md +0 -0
  587. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arNavigationRegistrationWithoutTransientUserActivation.md +0 -0
  588. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arNoRegisterOsSourceHeader.md +0 -0
  589. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arNoRegisterOsTriggerHeader.md +0 -0
  590. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arNoRegisterSourceHeader.md +0 -0
  591. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arNoRegisterTriggerHeader.md +0 -0
  592. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arNoWebOrOsSupport.md +0 -0
  593. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arOsSourceIgnored.md +0 -0
  594. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arOsTriggerIgnored.md +0 -0
  595. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arPermissionPolicyDisabled.md +0 -0
  596. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arSourceAndTriggerHeaders.md +0 -0
  597. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arSourceIgnored.md +0 -0
  598. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arTriggerIgnored.md +0 -0
  599. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arUntrustworthyReportingOrigin.md +0 -0
  600. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arWebAndOsHeaders.md +0 -0
  601. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/bounceTrackingMitigations.md +0 -0
  602. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/clientHintMetaTagAllowListInvalidOrigin.md +0 -0
  603. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/clientHintMetaTagModifiedHTML.md +0 -0
  604. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/cookieCrossSiteRedirectDowngrade.md +0 -0
  605. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/cookieExcludeBlockedWithinRelatedWebsiteSet.md +0 -0
  606. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/cookieExcludeDomainNonAscii.md +0 -0
  607. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/cookieExcludePortMismatch.md +0 -0
  608. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/cookieExcludeSchemeMismatch.md +0 -0
  609. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/cookieExcludeThirdPartyPhaseoutRead.md +0 -0
  610. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/cookieExcludeThirdPartyPhaseoutSet.md +0 -0
  611. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/cookieWarnDomainNonAscii.md +0 -0
  612. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/cookieWarnMetadataGrantRead.md +0 -0
  613. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/cookieWarnMetadataGrantSet.md +0 -0
  614. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/cookieWarnThirdPartyPhaseoutRead.md +0 -0
  615. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/cookieWarnThirdPartyPhaseoutSet.md +0 -0
  616. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/corsAllowCredentialsRequired.md +0 -0
  617. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/corsDisabledScheme.md +0 -0
  618. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/corsDisallowedByMode.md +0 -0
  619. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/corsHeaderDisallowedByPreflightResponse.md +0 -0
  620. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/corsInvalidHeaderValues.md +0 -0
  621. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/corsMethodDisallowedByPreflightResponse.md +0 -0
  622. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/corsNoCorsRedirectModeNotFollow.md +0 -0
  623. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/corsOriginMismatch.md +0 -0
  624. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/corsPreflightResponseInvalid.md +0 -0
  625. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/corsRedirectContainsCredentials.md +0 -0
  626. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/corsWildcardOriginNotAllowed.md +0 -0
  627. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/cspEvalViolation.md +0 -0
  628. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/cspInlineViolation.md +0 -0
  629. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/cspTrustedTypesPolicyViolation.md +0 -0
  630. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/cspTrustedTypesSinkViolation.md +0 -0
  631. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/cspURLViolation.md +0 -0
  632. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/deprecation.md +0 -0
  633. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthRequestAccountsHttpNotFound.md +0 -0
  634. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthRequestAccountsInvalidResponse.md +0 -0
  635. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthRequestAccountsNoResponse.md +0 -0
  636. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthRequestApprovalDeclined.md +0 -0
  637. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthRequestCanceled.md +0 -0
  638. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthRequestErrorFetchingSignin.md +0 -0
  639. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthRequestErrorIdToken.md +0 -0
  640. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthRequestIdTokenHttpNotFound.md +0 -0
  641. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthRequestIdTokenInvalidRequest.md +0 -0
  642. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthRequestIdTokenInvalidResponse.md +0 -0
  643. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthRequestIdTokenNoResponse.md +0 -0
  644. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthRequestInvalidSigninResponse.md +0 -0
  645. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthRequestManifestHttpNotFound.md +0 -0
  646. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthRequestManifestInvalidResponse.md +0 -0
  647. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthRequestManifestNoResponse.md +0 -0
  648. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthRequestTooManyRequests.md +0 -0
  649. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthUserInfoRequestInvalidAccountsResponse.md +0 -0
  650. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthUserInfoRequestInvalidConfigOrWellKnown.md +0 -0
  651. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthUserInfoRequestNoAccountSharingPermission.md +0 -0
  652. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthUserInfoRequestNoApiPermission.md +0 -0
  653. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthUserInfoRequestNoReturningUserFromFetchedAccounts.md +0 -0
  654. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthUserInfoRequestNotIframe.md +0 -0
  655. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthUserInfoRequestNotPotentiallyTrustworthy.md +0 -0
  656. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthUserInfoRequestNotSameOrigin.md +0 -0
  657. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthUserInfoRequestNotSignedInWithIdp.md +0 -0
  658. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/fetchingPartitionedBlobURL.md +0 -0
  659. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/genericFormAriaLabelledByToNonExistingIdError.md +0 -0
  660. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/genericFormAutocompleteAttributeEmptyError.md +0 -0
  661. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/genericFormDuplicateIdForInputError.md +0 -0
  662. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/genericFormEmptyIdAndNameAttributesForInputError.md +0 -0
  663. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/genericFormInputAssignedAutocompleteValueToIdOrNameAttributeError.md +0 -0
  664. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/genericFormInputHasWrongButWellIntendedAutocompleteValueError.md +0 -0
  665. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/genericFormInputWithNoLabelError.md +0 -0
  666. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/genericFormLabelForMatchesNonExistingIdError.md +0 -0
  667. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/genericFormLabelForNameError.md +0 -0
  668. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/genericFormLabelHasNeitherForNorNestedInputError.md +0 -0
  669. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/genericNavigationEntryMarkedSkippable.md +0 -0
  670. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/genericResponseWasBlockedByORB.md +0 -0
  671. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/heavyAd.md +0 -0
  672. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/mixedContent.md +0 -0
  673. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/navigatingPartitionedBlobURL.md +0 -0
  674. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementActivationDisabled.md +0 -0
  675. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementActivationDisabledWithOccluder.md +0 -0
  676. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementActivationDisabledWithOccluderParent.md +0 -0
  677. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementCspFrameAncestorsMissing.md +0 -0
  678. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementFencedFrameDisallowed.md +0 -0
  679. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementFontSizeTooLarge.md +0 -0
  680. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementFontSizeTooSmall.md +0 -0
  681. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementGeolocationDeprecated.md +0 -0
  682. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementInsetBoxShadowUnsupported.md +0 -0
  683. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementInvalidDisplayStyle.md +0 -0
  684. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementInvalidSizeValue.md +0 -0
  685. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementInvalidType.md +0 -0
  686. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementInvalidTypeActivation.md +0 -0
  687. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementLowContrast.md +0 -0
  688. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementNonOpaqueColor.md +0 -0
  689. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementPaddingBottomUnsupported.md +0 -0
  690. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementPaddingRightUnsupported.md +0 -0
  691. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementPermissionsPolicyBlocked.md +0 -0
  692. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementRegistrationFailed.md +0 -0
  693. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementRequestInProgress.md +0 -0
  694. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementSecurityChecksFailed.md +0 -0
  695. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementTypeNotSupported.md +0 -0
  696. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementUntrustedEvent.md +0 -0
  697. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/placeholderDescriptionForInvisibleIssues.md +0 -0
  698. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/propertyRuleInvalidNameIssue.md +0 -0
  699. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/propertyRuleIssue.md +0 -0
  700. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/selectElementAccessibilityDisallowedOptGroupChild.md +0 -0
  701. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/selectElementAccessibilityDisallowedSelectChild.md +0 -0
  702. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/selectElementAccessibilityInteractiveContentAttributesSelectDescendant.md +0 -0
  703. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/selectElementAccessibilityInteractiveContentLegendChild.md +0 -0
  704. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/selectElementAccessibilityInteractiveContentOptionChild.md +0 -0
  705. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/selectElementAccessibilityNonPhrasingContentOptionChild.md +0 -0
  706. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedArrayBuffer.md +0 -0
  707. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryUseErrorCrossOriginNoCorsRequest.md +0 -0
  708. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryUseErrorDictionaryLoadFailure.md +0 -0
  709. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryUseErrorMatchingDictionaryNotUsed.md +0 -0
  710. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryUseErrorUnexpectedContentDictionaryHeader.md +0 -0
  711. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorCossOriginNoCorsRequest.md +0 -0
  712. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorDisallowedBySettings.md +0 -0
  713. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorExpiredResponse.md +0 -0
  714. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorFeatureDisabled.md +0 -0
  715. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorInsufficientResources.md +0 -0
  716. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorInvalidMatchField.md +0 -0
  717. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorInvalidStructuredHeader.md +0 -0
  718. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorInvalidTTLField.md +0 -0
  719. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorNavigationRequest.md +0 -0
  720. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorNoMatchField.md +0 -0
  721. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorNonIntegerTTLField.md +0 -0
  722. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorNonListMatchDestField.md +0 -0
  723. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorNonSecureContext.md +0 -0
  724. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorNonStringIdField.md +0 -0
  725. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorNonStringInMatchDestList.md +0 -0
  726. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorNonStringMatchField.md +0 -0
  727. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorNonTokenTypeField.md +0 -0
  728. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorRequestAborted.md +0 -0
  729. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorShuttingDown.md +0 -0
  730. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorTooLongIdField.md +0 -0
  731. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorUnsupportedType.md +0 -0
  732. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriInvalidSignatureHeader.md +0 -0
  733. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriInvalidSignatureInputHeader.md +0 -0
  734. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriMissingSignatureHeader.md +0 -0
  735. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriMissingSignatureInputHeader.md +0 -0
  736. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriSignatureHeaderValueIsIncorrectLength.md +0 -0
  737. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriSignatureHeaderValueIsNotByteSequence.md +0 -0
  738. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriSignatureHeaderValueIsParameterized.md +0 -0
  739. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriSignatureInputHeaderInvalidComponentName.md +0 -0
  740. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriSignatureInputHeaderInvalidComponentType.md +0 -0
  741. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriSignatureInputHeaderInvalidDerivedComponentParameter.md +0 -0
  742. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriSignatureInputHeaderInvalidHeaderComponentParameter.md +0 -0
  743. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriSignatureInputHeaderInvalidParameter.md +0 -0
  744. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriSignatureInputHeaderKeyIdLength.md +0 -0
  745. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriSignatureInputHeaderMissingLabel.md +0 -0
  746. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriSignatureInputHeaderMissingRequiredParameters.md +0 -0
  747. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriSignatureInputHeaderValueMissingComponents.md +0 -0
  748. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriSignatureInputHeaderValueNotInnerList.md +0 -0
  749. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriValidationFailedIntegrityMismatch.md +0 -0
  750. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriValidationFailedInvalidLength.md +0 -0
  751. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriValidationFailedSignatureExpired.md +0 -0
  752. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriValidationFailedSignatureMismatch.md +0 -0
  753. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/stylesheetLateImport.md +0 -0
  754. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/stylesheetRequestFailed.md +0 -0
  755. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/summaryElementAccessibilityInteractiveContentSummaryDescendant.md +0 -0
  756. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/unencodedDigestIncorrectDigestLength.md +0 -0
  757. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/unencodedDigestIncorrectDigestType.md +0 -0
  758. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/unencodedDigestMalformedDictionary.md +0 -0
  759. /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/unencodedDigestUnknownAlgorithm.md +0 -0
@@ -4,29 +4,19 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import fs from 'node:fs/promises';
7
- import os from 'node:os';
8
7
  import path from 'node:path';
9
- import { Client } from '@modelcontextprotocol/sdk/client/index.js';
10
- import { extractUrlLikeFromDevToolsTitle, urlsEqual } from './DevtoolsUtils.js';
11
- import { ToolListChangedNotificationSchema } from './third_party/index.js';
8
+ import { UniverseManager } from './DevtoolsUtils.js';
9
+ import { McpPage } from './McpPage.js';
12
10
  import { NetworkCollector, ConsoleCollector } from './PageCollector.js';
13
- import { WEB_MCP_BRIDGE_SCRIPT } from './transports/WebMCPBridgeScript.js';
14
- import { WebMCPClientTransport } from './transports/WebMCPClientTransport.js';
15
11
  import { Locator } from './third_party/index.js';
12
+ import { PredefinedNetworkConditions } from './third_party/index.js';
16
13
  import { listPages } from './tools/pages.js';
17
- import { takeSnapshot } from './tools/snapshot.js';
18
14
  import { CLOSE_PAGE_ERROR } from './tools/ToolDefinition.js';
15
+ import { ExtensionRegistry, } from './utils/ExtensionRegistry.js';
16
+ import { saveTemporaryFile } from './utils/files.js';
19
17
  import { WaitForHelper } from './WaitForHelper.js';
20
- /** Default timeout for page operations in milliseconds. */
21
18
  const DEFAULT_TIMEOUT = 5_000;
22
- /** Default timeout for navigation operations in milliseconds. */
23
19
  const NAVIGATION_TIMEOUT = 10_000;
24
- /**
25
- * Get the timeout multiplier for a given network condition.
26
- *
27
- * @param condition - The network condition name (e.g., "Fast 4G", "Slow 3G").
28
- * @returns Multiplier to apply to timeouts (1 = no slowdown, 10 = max slowdown).
29
- */
30
20
  function getNetworkMultiplierFromString(condition) {
31
21
  const puppeteerCondition = condition;
32
22
  switch (puppeteerCondition) {
@@ -41,71 +31,31 @@ function getNetworkMultiplierFromString(condition) {
41
31
  }
42
32
  return 1;
43
33
  }
44
- /**
45
- * Get the file extension for a given MIME type.
46
- *
47
- * @param mimeType - The MIME type (e.g., "image/png").
48
- * @returns The corresponding file extension without the dot.
49
- * @throws Error if the MIME type is not supported.
50
- */
51
- function getExtensionFromMimeType(mimeType) {
52
- switch (mimeType) {
53
- case 'image/png':
54
- return 'png';
55
- case 'image/jpeg':
56
- return 'jpeg';
57
- case 'image/webp':
58
- return 'webp';
59
- }
60
- throw new Error(`No mapping for Mime type ${mimeType}.`);
61
- }
62
- /**
63
- * Central context for MCP operations on a browser instance.
64
- *
65
- * Manages page state, accessibility snapshots, network/console collection,
66
- * WebMCP connections, and tool registration. This class serves as the primary
67
- * interface between MCP tools and the browser.
68
- */
69
34
  export class McpContext {
70
35
  browser;
71
36
  logger;
72
- /** Cached list of available pages (refreshed by createPagesSnapshot). */
37
+ // Maps LLM-provided isolatedContext name Puppeteer BrowserContext.
38
+ #isolatedContexts = new Map();
39
+ // Auto-generated name counter for when no name is provided.
40
+ #nextIsolatedContextId = 1;
73
41
  #pages = [];
74
- /** Mapping of content pages to their associated DevTools inspector pages. */
75
- #pageToDevToolsPage = new Map();
76
- /** Currently selected page for tool operations. */
42
+ #extensionServiceWorkers = [];
43
+ #mcpPages = new Map();
77
44
  #selectedPage;
78
- /**
79
- * Whether the selected page has been explicitly set for this session.
80
- * When true, createPagesSnapshot() won't auto-switch to pages[0].
81
- * This prevents MCP sessions from interfering with each other in shared browsers.
82
- */
83
- #pageExplicitlySelected = false;
84
- /** Most recent accessibility snapshot of the selected page. */
85
- #textSnapshot = null;
86
45
  #networkCollector;
87
46
  #consoleCollector;
47
+ #devtoolsUniverseManager;
48
+ #extensionRegistry = new ExtensionRegistry();
88
49
  #isRunningTrace = false;
89
- #networkConditionsMap = new WeakMap();
90
- #cpuThrottlingRateMap = new WeakMap();
91
- #geolocationMap = new WeakMap();
92
- #bypassCSPMap = new WeakMap();
93
- #dialog;
50
+ #screenRecorderData = null;
51
+ #nextPageId = 1;
52
+ #extensionPages = new WeakMap();
53
+ #extensionServiceWorkerMap = new WeakMap();
54
+ #nextExtensionServiceWorkerId = 1;
94
55
  #nextSnapshotId = 1;
95
56
  #traceResults = [];
96
57
  #locatorClass;
97
58
  #options;
98
- #webMCPConnections = new WeakMap();
99
- #toolHub;
100
- /** Tracks pages that have WebMCP auto-detection listeners installed. */
101
- #pagesWithWebMCPListeners = new WeakSet();
102
- /**
103
- * The windowId that this MCP session owns.
104
- * When set, page operations are scoped to only pages in this window.
105
- */
106
- #sessionWindowId;
107
- /** Cached browser-level CDP session for window operations. */
108
- #browserCdpSession;
109
59
  constructor(browser, logger, options, locatorClass) {
110
60
  this.browser = browser;
111
61
  this.logger = logger;
@@ -117,315 +67,49 @@ export class McpContext {
117
67
  console: event => {
118
68
  collect(event);
119
69
  },
120
- pageerror: event => {
121
- if (event instanceof Error) {
122
- collect(event);
123
- }
124
- else {
125
- const error = new Error(`${event}`);
126
- error.stack = undefined;
127
- collect(error);
128
- }
70
+ uncaughtError: event => {
71
+ collect(event);
129
72
  },
130
73
  issue: event => {
131
74
  collect(event);
132
75
  },
133
76
  };
134
77
  });
78
+ this.#devtoolsUniverseManager = new UniverseManager(this.browser);
135
79
  }
136
80
  async #init() {
137
81
  const pages = await this.createPagesSnapshot();
82
+ await this.createExtensionServiceWorkersSnapshot();
138
83
  await this.#networkCollector.init(pages);
139
84
  await this.#consoleCollector.init(pages);
140
- // Auto-inject WebMCP bridge into all pages
141
- await this.#setupWebMCPAutoInject();
142
- }
143
- /**
144
- * Set up automatic WebMCP bridge injection for all pages.
145
- * This injects the bridge script into existing pages and configures
146
- * the browser to inject it into all future pages.
147
- */
148
- async #setupWebMCPAutoInject() {
149
- try {
150
- // Get browser-level CDP session to inject into all new pages
151
- const browserTarget = this.browser.target();
152
- const cdpSession = await browserTarget.createCDPSession();
153
- // Inject bridge script into all future pages
154
- await cdpSession.send('Page.addScriptToEvaluateOnNewDocument', {
155
- source: WEB_MCP_BRIDGE_SCRIPT,
156
- });
157
- this.logger('WebMCP bridge auto-inject configured for new pages');
158
- // Inject into existing pages (they won't have the auto-inject yet)
159
- for (const page of this.#pages) {
160
- try {
161
- // Skip chrome:// and devtools:// pages
162
- const url = page.url();
163
- if (url.startsWith('chrome://') ||
164
- (!this.#options.includeExtensionPages && url.startsWith('chrome-extension://')) ||
165
- url.startsWith('devtools://') ||
166
- url === 'about:blank') {
167
- continue;
168
- }
169
- await page.evaluate(WEB_MCP_BRIDGE_SCRIPT);
170
- }
171
- catch (err) {
172
- // Page might not be ready or accessible - log for debugging
173
- const message = err instanceof Error ? err.message : String(err);
174
- this.logger(`Bridge injection skipped for ${page.url()}: ${message}`);
175
- }
176
- }
177
- this.logger('WebMCP bridge injected into existing pages');
178
- }
179
- catch (err) {
180
- // Non-fatal - auto-inject is a convenience feature
181
- this.logger('WebMCP auto-inject setup failed:', err);
182
- }
85
+ await this.#devtoolsUniverseManager.init(pages);
183
86
  }
184
87
  dispose() {
185
88
  this.#networkCollector.dispose();
186
89
  this.#consoleCollector.dispose();
187
- }
188
- /**
189
- * Set the WebMCPToolHub for dynamic tool registration.
190
- * This enables automatic registration of WebMCP tools as native MCP tools.
191
- * Also sets up auto-detection for all existing pages.
192
- */
193
- setToolHub(hub) {
194
- this.#toolHub = hub;
195
- // Trigger auto-detection for all existing pages asynchronously
196
- this.#setupWebMCPAutoDetectionForAllPages().catch(err => {
197
- const message = err instanceof Error ? err.message : String(err);
198
- this.logger(`WebMCP auto-detection setup failed: ${message}`);
199
- // Note: This is non-fatal - individual page connections may still work
200
- // when explicitly requested via getWebMCPClient()
201
- });
202
- }
203
- /**
204
- * Get the WebMCPToolHub instance (for testing purposes)
205
- */
206
- getToolHub() {
207
- return this.#toolHub;
208
- }
209
- /**
210
- * Get or create a browser-level CDP session for window operations.
211
- * Recreates the session if it has become invalid.
212
- */
213
- async #getBrowserCdpSession() {
214
- if (this.#browserCdpSession) {
215
- // Verify session is still valid by attempting a simple operation
216
- try {
217
- await this.#browserCdpSession.send('Browser.getVersion');
218
- return this.#browserCdpSession;
219
- }
220
- catch (err) {
221
- // Session is stale, recreate it
222
- const message = err instanceof Error ? err.message : String(err);
223
- this.logger(`Browser CDP session stale (${message}), recreating...`);
224
- this.#browserCdpSession = undefined;
225
- }
226
- }
227
- this.#browserCdpSession = await this.browser.target().createCDPSession();
228
- return this.#browserCdpSession;
229
- }
230
- /**
231
- * Get the windowId for a given page using CDP.
232
- */
233
- async getWindowIdForPage(page) {
234
- const cdpSession = await this.#getBrowserCdpSession();
235
- // @ts-expect-error _targetId is internal but stable
236
- const targetId = page.target()._targetId;
237
- const { windowId } = await cdpSession.send('Browser.getWindowForTarget', {
238
- targetId,
239
- });
240
- return windowId;
241
- }
242
- /**
243
- * Set the window that this session owns.
244
- * When set, page operations are scoped to only pages in this window.
245
- */
246
- setSessionWindowId(windowId) {
247
- this.#sessionWindowId = windowId;
248
- this.logger(`Session bound to windowId: ${windowId}`);
249
- }
250
- /**
251
- * Get the session's window ID, or undefined if not set.
252
- */
253
- getSessionWindowId() {
254
- return this.#sessionWindowId;
255
- }
256
- /**
257
- * Close all pages in the session's window.
258
- * Called during cleanup when the MCP server is shutting down.
259
- */
260
- async closeSessionWindow() {
261
- if (this.#sessionWindowId === undefined) {
262
- this.logger('No session window to close');
263
- return;
264
- }
265
- this.logger(`Closing session window ${this.#sessionWindowId}...`);
266
- // Get all pages in this session's window and close them
267
- const pagesToClose = [...this.#pages];
268
- for (const page of pagesToClose) {
269
- try {
270
- if (!page.isClosed()) {
271
- await page.close();
272
- }
273
- }
274
- catch (err) {
275
- // Ignore errors during cleanup - page might already be closed
276
- const message = err instanceof Error ? err.message : String(err);
277
- this.logger(`Error closing page during cleanup: ${message}`);
278
- }
279
- }
280
- // Clean up the CDP session
281
- if (this.#browserCdpSession) {
282
- try {
283
- await this.#browserCdpSession.detach();
284
- }
285
- catch (err) {
286
- // Detach errors during cleanup are expected - log for debugging
287
- const message = err instanceof Error ? err.message : String(err);
288
- this.logger(`CDP detach during cleanup: ${message}`);
289
- }
290
- this.#browserCdpSession = undefined;
291
- }
292
- this.logger('Session window closed');
293
- }
294
- /**
295
- * Set up automatic WebMCP detection for a page.
296
- * This installs listeners that detect WebMCP after navigation and sync tools.
297
- */
298
- #setupWebMCPAutoDetection(page) {
299
- // Skip if listeners already installed
300
- if (this.#pagesWithWebMCPListeners.has(page)) {
301
- return;
302
- }
303
- // Skip chrome:// and devtools:// pages
304
- const url = page.url();
305
- if (url.startsWith('chrome://') ||
306
- (!this.#options.includeExtensionPages && url.startsWith('chrome-extension://')) ||
307
- url.startsWith('devtools://')) {
308
- return;
309
- }
310
- this.#pagesWithWebMCPListeners.add(page);
311
- // Handler for frame navigation - detect WebMCP after main frame navigates
312
- const onFrameNavigated = async (frame) => {
313
- // Only handle main frame navigation
314
- // @ts-expect-error Frame type not exported
315
- if (frame.parentFrame?.() !== null) {
316
- return;
317
- }
318
- // Skip internal pages
319
- const newUrl = page.url();
320
- if (newUrl.startsWith('chrome://') ||
321
- (!this.#options.includeExtensionPages && newUrl.startsWith('chrome-extension://')) ||
322
- newUrl.startsWith('devtools://') ||
323
- newUrl === 'about:blank') {
324
- return;
325
- }
326
- // Immediately try to connect - no polling needed
327
- // If no WebMCP, connection will timeout gracefully
328
- this.#tryConnectWebMCP(page).catch(err => {
329
- const message = err instanceof Error ? err.message : String(err);
330
- // Differentiate expected timeouts from unexpected errors
331
- const isExpected = message.includes('timeout') ||
332
- message.includes('WebMCP not detected') ||
333
- message.includes('server did not respond');
334
- if (isExpected) {
335
- this.logger(`No WebMCP detected after navigation: ${page.url()}`);
336
- }
337
- else {
338
- this.logger(`Unexpected WebMCP connection error for ${page.url()}: ${message}`);
339
- }
340
- });
341
- };
342
- page.on('framenavigated', onFrameNavigated);
343
- // Clean up listener when page closes
344
- page.once('close', () => {
345
- page.off('framenavigated', onFrameNavigated);
346
- this.#pagesWithWebMCPListeners.delete(page);
347
- });
348
- this.logger(`WebMCP auto-detection listener installed for page: ${url}`);
349
- }
350
- /**
351
- * Attempt to connect to WebMCP on a page without pre-checking.
352
- * Uses the extension's approach: just try to connect, handle failure gracefully.
353
- *
354
- * This matches the WebMCP extension's behavior:
355
- * - No pre-flight detection polling
356
- * - Immediate connection attempt
357
- * - Graceful handling if no server exists
358
- * - Notification-based syncing when tools appear later
359
- *
360
- * Reference: /WebMCP/apps/extension/entrypoints/content/connection.ts lines 88-118
361
- */
362
- async #tryConnectWebMCP(page) {
363
- // Skip if tool hub is not enabled
364
- if (!this.#toolHub?.isEnabled()) {
365
- return;
366
- }
367
- try {
368
- // Immediately try to get/create WebMCP client
369
- // Transport is configured with requireWebMCP: false and 30s timeout in getWebMCPClient
370
- const result = await this.getWebMCPClient(page);
371
- if (result.connected) {
372
- this.logger(`WebMCP connected for page: ${page.url()}`);
373
- }
374
- else {
375
- // This is normal for pages without WebMCP
376
- this.logger(`No WebMCP on page: ${page.url()}`);
377
- }
378
- }
379
- catch (err) {
380
- // Connection timeout or error is expected on pages without WebMCP
381
- this.logger(`WebMCP connection failed for ${page.url()} (normal if page has no WebMCP):`, err);
382
- }
383
- }
384
- /**
385
- * Set up WebMCP auto-detection for all current pages.
386
- * Called during initialization and when tool hub is set.
387
- */
388
- async #setupWebMCPAutoDetectionForAllPages() {
389
- for (const page of this.#pages) {
390
- this.#setupWebMCPAutoDetection(page);
391
- // Try to connect immediately (don't await - run in parallel for all pages)
392
- this.#tryConnectWebMCP(page).catch(err => {
393
- const message = err instanceof Error ? err.message : String(err);
394
- // Differentiate expected timeouts from unexpected errors
395
- const isExpected = message.includes('timeout') ||
396
- message.includes('WebMCP not detected') ||
397
- message.includes('server did not respond');
398
- if (isExpected) {
399
- this.logger(`No WebMCP on page during initial scan: ${page.url()}`);
400
- }
401
- else {
402
- this.logger(`Unexpected error during initial WebMCP scan for ${page.url()}: ${message}`);
403
- }
404
- });
405
- }
406
- }
407
- /**
408
- * Create a new McpContext instance.
409
- *
410
- * @param browser - Puppeteer browser instance to operate on.
411
- * @param logger - Debug logger for internal operations.
412
- * @param opts - Configuration options.
413
- * @param locatorClass - Locator class to use (injectable for testing with
414
- * unbundled Puppeteer to avoid class instance mismatch errors).
415
- * @returns Initialized McpContext ready for use.
416
- */
417
- static async from(browser, logger, opts, locatorClass = Locator) {
90
+ this.#devtoolsUniverseManager.dispose();
91
+ for (const mcpPage of this.#mcpPages.values()) {
92
+ mcpPage.dispose();
93
+ }
94
+ this.#mcpPages.clear();
95
+ // Isolated contexts are intentionally not closed here.
96
+ // Either the entire browser will be closed or we disconnect
97
+ // without destroying browser state.
98
+ this.#isolatedContexts.clear();
99
+ }
100
+ static async from(browser, logger, opts,
101
+ /* Let tests use unbundled Locator class to avoid overly strict checks within puppeteer that fail when mixing bundled and unbundled class instances */
102
+ locatorClass = Locator) {
418
103
  const context = new McpContext(browser, logger, opts, locatorClass);
419
104
  await context.#init();
420
105
  return context;
421
106
  }
422
- resolveCdpRequestId(cdpRequestId) {
423
- const selectedPage = this.getSelectedPage();
107
+ resolveCdpRequestId(page, cdpRequestId) {
424
108
  if (!cdpRequestId) {
425
109
  this.logger('no network request');
426
110
  return;
427
111
  }
428
- const request = this.#networkCollector.find(selectedPage, request => {
112
+ const request = this.#networkCollector.find(page.pptrPage, request => {
429
113
  // @ts-expect-error id is internal.
430
114
  return request.id === cdpRequestId;
431
115
  });
@@ -435,24 +119,18 @@ export class McpContext {
435
119
  }
436
120
  return this.#networkCollector.getIdForResource(request);
437
121
  }
438
- /**
439
- * Resolve a CDP backend node ID to a snapshot element UID.
440
- *
441
- * @param cdpBackendNodeId - The CDP backend node ID from DevTools.
442
- * @returns The corresponding snapshot UID, or undefined if not found.
443
- *
444
- * @todo Optimize with a backendNodeId index instead of tree traversal.
445
- */
446
- resolveCdpElementId(cdpBackendNodeId) {
122
+ resolveCdpElementId(page, cdpBackendNodeId) {
447
123
  if (!cdpBackendNodeId) {
448
124
  this.logger('no cdpBackendNodeId');
449
125
  return;
450
126
  }
451
- if (this.#textSnapshot === null) {
127
+ const snapshot = page.textSnapshot;
128
+ if (!snapshot) {
452
129
  this.logger('no text snapshot');
453
130
  return;
454
131
  }
455
- const queue = [this.#textSnapshot.root];
132
+ // TODO: index by backendNodeId instead.
133
+ const queue = [snapshot.root];
456
134
  while (queue.length) {
457
135
  const current = queue.pop();
458
136
  if (current.backendNodeId === cdpBackendNodeId) {
@@ -464,172 +142,135 @@ export class McpContext {
464
142
  }
465
143
  return;
466
144
  }
467
- getNetworkRequests(includePreservedRequests) {
468
- const page = this.getSelectedPage();
469
- return this.#networkCollector.getData(page, includePreservedRequests);
145
+ getNetworkRequests(page, includePreservedRequests) {
146
+ return this.#networkCollector.getData(page.pptrPage, includePreservedRequests);
147
+ }
148
+ getConsoleData(page, includePreservedMessages) {
149
+ return this.#consoleCollector.getData(page.pptrPage, includePreservedMessages);
470
150
  }
471
- getConsoleData(includePreservedMessages) {
472
- const page = this.getSelectedPage();
473
- return this.#consoleCollector.getData(page, includePreservedMessages);
151
+ getDevToolsUniverse(page) {
152
+ return this.#devtoolsUniverseManager.get(page.pptrPage);
474
153
  }
475
154
  getConsoleMessageStableId(message) {
476
155
  return this.#consoleCollector.getIdForResource(message);
477
156
  }
478
- getConsoleMessageById(id) {
479
- return this.#consoleCollector.getById(this.getSelectedPage(), id);
157
+ getConsoleMessageById(page, id) {
158
+ return this.#consoleCollector.getById(page.pptrPage, id);
480
159
  }
481
- async newPage() {
482
- // If we have a session window, ensure our window is focused first
483
- // This increases the chance that Chrome creates the new tab in our window
484
- if (this.#sessionWindowId !== undefined && this.#pages.length > 0) {
485
- try {
486
- const existingPage = this.#pages[0];
487
- if (existingPage) {
488
- await existingPage.bringToFront();
489
- }
490
- }
491
- catch (err) {
492
- // Best effort - focus might fail if page is closing
493
- const message = err instanceof Error ? err.message : String(err);
494
- this.logger(`Window focus failed (non-critical): ${message}`);
160
+ async newPage(background, isolatedContextName) {
161
+ let page;
162
+ if (isolatedContextName !== undefined) {
163
+ let ctx = this.#isolatedContexts.get(isolatedContextName);
164
+ if (!ctx) {
165
+ ctx = await this.browser.createBrowserContext();
166
+ this.#isolatedContexts.set(isolatedContextName, ctx);
495
167
  }
168
+ page = await ctx.newPage();
496
169
  }
497
- const page = await this.browser.newPage();
498
- // Verify the new page is in our window (if session scoping is active)
499
- if (this.#sessionWindowId !== undefined) {
500
- try {
501
- const newPageWindowId = await this.getWindowIdForPage(page);
502
- if (newPageWindowId !== this.#sessionWindowId) {
503
- // New tab went to wrong window - this is a known Chrome behavior issue
504
- this.logger(`Warning: new_page created tab in window ${newPageWindowId} instead of session window ${this.#sessionWindowId}. ` +
505
- `Tab may not be visible in list_pages.`);
506
- }
507
- }
508
- catch (err) {
509
- // Failed to get windowId - page might be in an unexpected state
510
- const message = err instanceof Error ? err.message : String(err);
511
- this.logger(`Window ID check failed (non-critical): ${message}`);
512
- }
170
+ else {
171
+ page = await this.browser.newPage({ background });
513
172
  }
514
173
  await this.createPagesSnapshot();
515
- // Mark as explicitly selected so this session sticks to this page
516
- this.selectPage(page, true);
174
+ this.selectPage(this.#getMcpPage(page));
517
175
  this.#networkCollector.addPage(page);
518
176
  this.#consoleCollector.addPage(page);
519
- // Set up WebMCP auto-detection for the new page
520
- this.#setupWebMCPAutoDetection(page);
521
- return page;
177
+ return this.#getMcpPage(page);
522
178
  }
523
- async newWindow() {
524
- // Use CDP to create a new browser window instead of just a tab
525
- const browserTarget = this.browser.target();
526
- const cdpSession = await browserTarget.createCDPSession();
527
- // Create a new target with newWindow: true
528
- const { targetId } = await cdpSession.send('Target.createTarget', {
529
- url: 'about:blank',
530
- newWindow: true,
531
- });
532
- // Wait for the new page to be available
533
- const target = await this.browser.waitForTarget(target => {
534
- // @ts-expect-error _targetId is internal but stable
535
- return target._targetId === targetId;
536
- }, { timeout: 5000 });
537
- const page = await target.page();
538
- if (!page) {
539
- throw new Error('Failed to get page from new window target');
179
+ async closePage(pageId) {
180
+ if (this.#pages.length === 1) {
181
+ throw new Error(CLOSE_PAGE_ERROR);
540
182
  }
541
- // Get window ID for this target (required for session scoping)
542
- const { windowId } = await cdpSession.send('Browser.getWindowForTarget', {
543
- targetId,
544
- });
545
- // Set window to nearly full screen (large size that fits most displays)
546
- try {
547
- // Set to large dimensions (works well on 1920x1080 and larger displays)
548
- // This is ~95% of common display sizes without being truly fullscreen
549
- await cdpSession.send('Browser.setWindowBounds', {
550
- windowId,
551
- bounds: {
552
- left: 20,
553
- top: 20,
554
- width: 1800,
555
- height: 1200,
556
- windowState: 'normal',
557
- },
183
+ const page = this.getPageById(pageId);
184
+ if (page) {
185
+ page.dispose();
186
+ this.#mcpPages.delete(page.pptrPage);
187
+ }
188
+ await page.pptrPage.close({ runBeforeUnload: false });
189
+ }
190
+ getNetworkRequestById(page, reqid) {
191
+ return this.#networkCollector.getById(page.pptrPage, reqid);
192
+ }
193
+ async restoreEmulation(page) {
194
+ const currentSetting = page.emulationSettings;
195
+ await this.emulate(currentSetting, page.pptrPage);
196
+ }
197
+ async emulate(options, targetPage) {
198
+ const page = targetPage ?? this.getSelectedPptrPage();
199
+ const mcpPage = this.#getMcpPage(page);
200
+ const newSettings = { ...mcpPage.emulationSettings };
201
+ if (!options.networkConditions) {
202
+ await page.emulateNetworkConditions(null);
203
+ delete newSettings.networkConditions;
204
+ }
205
+ else if (options.networkConditions === 'Offline') {
206
+ await page.emulateNetworkConditions({
207
+ offline: true,
208
+ download: 0,
209
+ upload: 0,
210
+ latency: 0,
558
211
  });
212
+ newSettings.networkConditions = 'Offline';
559
213
  }
560
- catch (err) {
561
- // Non-fatal: window sizing is best-effort
562
- this.logger('Failed to resize window:', err);
214
+ else if (options.networkConditions in PredefinedNetworkConditions) {
215
+ const networkCondition = PredefinedNetworkConditions[options.networkConditions];
216
+ await page.emulateNetworkConditions(networkCondition);
217
+ newSettings.networkConditions = options.networkConditions;
563
218
  }
564
- await cdpSession.detach();
565
- await this.createPagesSnapshot();
566
- // Mark as explicitly selected so this session sticks to this window
567
- this.selectPage(page, true);
568
- this.#networkCollector.addPage(page);
569
- this.#consoleCollector.addPage(page);
570
- // Set up WebMCP auto-detection for the new page
571
- this.#setupWebMCPAutoDetection(page);
572
- return { page, windowId };
573
- }
574
- async closePage(pageIdx) {
575
- if (this.#pages.length === 1) {
576
- throw new Error(CLOSE_PAGE_ERROR);
219
+ if (!options.cpuThrottlingRate) {
220
+ await page.emulateCPUThrottling(1);
221
+ delete newSettings.cpuThrottlingRate;
577
222
  }
578
- const page = this.getPageByIdx(pageIdx);
579
- await page.close({ runBeforeUnload: false });
580
- }
581
- getNetworkRequestById(reqid) {
582
- return this.#networkCollector.getById(this.getSelectedPage(), reqid);
583
- }
584
- setNetworkConditions(conditions) {
585
- const page = this.getSelectedPage();
586
- if (conditions === null) {
587
- this.#networkConditionsMap.delete(page);
223
+ else {
224
+ await page.emulateCPUThrottling(options.cpuThrottlingRate);
225
+ newSettings.cpuThrottlingRate = options.cpuThrottlingRate;
226
+ }
227
+ if (!options.geolocation) {
228
+ await page.setGeolocation({ latitude: 0, longitude: 0 });
229
+ delete newSettings.geolocation;
588
230
  }
589
231
  else {
590
- this.#networkConditionsMap.set(page, conditions);
232
+ await page.setGeolocation(options.geolocation);
233
+ newSettings.geolocation = options.geolocation;
591
234
  }
592
- this.#updateSelectedPageTimeouts();
593
- }
594
- getNetworkConditions() {
595
- const page = this.getSelectedPage();
596
- return this.#networkConditionsMap.get(page) ?? null;
597
- }
598
- setCpuThrottlingRate(rate) {
599
- const page = this.getSelectedPage();
600
- this.#cpuThrottlingRateMap.set(page, rate);
601
- this.#updateSelectedPageTimeouts();
602
- }
603
- getCpuThrottlingRate() {
604
- const page = this.getSelectedPage();
605
- return this.#cpuThrottlingRateMap.get(page) ?? 1;
606
- }
607
- setGeolocation(geolocation) {
608
- const page = this.getSelectedPage();
609
- if (geolocation === null) {
610
- this.#geolocationMap.delete(page);
235
+ if (!options.userAgent) {
236
+ await page.setUserAgent({ userAgent: undefined });
237
+ delete newSettings.userAgent;
611
238
  }
612
239
  else {
613
- this.#geolocationMap.set(page, geolocation);
240
+ await page.setUserAgent({ userAgent: options.userAgent });
241
+ newSettings.userAgent = options.userAgent;
614
242
  }
615
- }
616
- getGeolocation() {
617
- const page = this.getSelectedPage();
618
- return this.#geolocationMap.get(page) ?? null;
619
- }
620
- async setBypassCSP(enabled) {
621
- const page = this.getSelectedPage();
622
- await page.setBypassCSP(enabled);
623
- if (enabled) {
624
- this.#bypassCSPMap.set(page, true);
243
+ if (!options.colorScheme || options.colorScheme === 'auto') {
244
+ await page.emulateMediaFeatures([
245
+ { name: 'prefers-color-scheme', value: '' },
246
+ ]);
247
+ delete newSettings.colorScheme;
625
248
  }
626
249
  else {
627
- this.#bypassCSPMap.delete(page);
250
+ await page.emulateMediaFeatures([
251
+ { name: 'prefers-color-scheme', value: options.colorScheme },
252
+ ]);
253
+ newSettings.colorScheme = options.colorScheme;
628
254
  }
629
- }
630
- getBypassCSP() {
631
- const page = this.getSelectedPage();
632
- return this.#bypassCSPMap.get(page) ?? false;
255
+ if (!options.viewport) {
256
+ await page.setViewport(null);
257
+ delete newSettings.viewport;
258
+ }
259
+ else {
260
+ const defaults = {
261
+ deviceScaleFactor: 1,
262
+ isMobile: false,
263
+ hasTouch: false,
264
+ isLandscape: false,
265
+ };
266
+ const viewport = { ...defaults, ...options.viewport };
267
+ await page.setViewport(viewport);
268
+ newSettings.viewport = viewport;
269
+ }
270
+ mcpPage.emulationSettings = Object.keys(newSettings).length
271
+ ? newSettings
272
+ : {};
273
+ this.#updateSelectedPageTimeouts();
633
274
  }
634
275
  setIsRunningPerformanceTrace(x) {
635
276
  this.#isRunningTrace = x;
@@ -637,220 +278,227 @@ export class McpContext {
637
278
  isRunningPerformanceTrace() {
638
279
  return this.#isRunningTrace;
639
280
  }
640
- getDialog() {
641
- return this.#dialog;
281
+ getScreenRecorder() {
282
+ return this.#screenRecorderData;
642
283
  }
643
- clearDialog() {
644
- this.#dialog = undefined;
284
+ setScreenRecorder(data) {
285
+ this.#screenRecorderData = data;
645
286
  }
646
- getSelectedPage() {
287
+ isCruxEnabled() {
288
+ return this.#options.performanceCrux;
289
+ }
290
+ getSelectedPptrPage() {
647
291
  const page = this.#selectedPage;
648
292
  if (!page) {
649
293
  throw new Error('No page selected');
650
294
  }
651
- if (page.isClosed()) {
652
- throw new Error(`The selected page has been closed. Call ${listPages.name} to see open pages.`);
295
+ if (page.pptrPage.isClosed()) {
296
+ throw new Error(`The selected page has been closed. Call ${listPages().name} to see open pages.`);
653
297
  }
654
- return page;
298
+ return page.pptrPage;
655
299
  }
656
- getPageByIdx(idx) {
657
- const pages = this.#pages;
658
- const page = pages[idx];
300
+ getSelectedMcpPage() {
301
+ const page = this.getSelectedPptrPage();
302
+ return this.#getMcpPage(page);
303
+ }
304
+ getPageById(pageId) {
305
+ const page = this.#mcpPages.values().find(mcpPage => mcpPage.id === pageId);
659
306
  if (!page) {
660
307
  throw new Error('No page found');
661
308
  }
662
309
  return page;
663
310
  }
664
- #dialogHandler = (dialog) => {
665
- this.#dialog = dialog;
666
- };
667
- isPageSelected(page) {
668
- return this.#selectedPage === page;
311
+ getPageId(page) {
312
+ return this.#mcpPages.get(page)?.id;
669
313
  }
670
- selectPage(newPage, explicit = false) {
671
- const oldPage = this.#selectedPage;
672
- if (oldPage) {
673
- oldPage.off('dialog', this.#dialogHandler);
314
+ #getMcpPage(page) {
315
+ const mcpPage = this.#mcpPages.get(page);
316
+ if (!mcpPage) {
317
+ throw new Error('No McpPage found for the given page.');
674
318
  }
319
+ return mcpPage;
320
+ }
321
+ #getSelectedMcpPage() {
322
+ return this.#getMcpPage(this.getSelectedPptrPage());
323
+ }
324
+ isPageSelected(page) {
325
+ return this.#selectedPage?.pptrPage === page;
326
+ }
327
+ selectPage(newPage) {
675
328
  this.#selectedPage = newPage;
676
- if (explicit) {
677
- // Mark page as explicitly selected to prevent auto-switching
678
- this.#pageExplicitlySelected = true;
679
- }
680
- newPage.on('dialog', this.#dialogHandler);
681
329
  this.#updateSelectedPageTimeouts();
682
330
  }
683
331
  #updateSelectedPageTimeouts() {
684
- const page = this.getSelectedPage();
332
+ const page = this.#getSelectedMcpPage();
685
333
  // For waiters 5sec timeout should be sufficient.
686
334
  // Increased in case we throttle the CPU
687
- const cpuMultiplier = this.getCpuThrottlingRate();
688
- page.setDefaultTimeout(DEFAULT_TIMEOUT * cpuMultiplier);
335
+ const cpuMultiplier = page.cpuThrottlingRate;
336
+ page.pptrPage.setDefaultTimeout(DEFAULT_TIMEOUT * cpuMultiplier);
689
337
  // 10sec should be enough for the load event to be emitted during
690
338
  // navigations.
691
339
  // Increased in case we throttle the network requests
692
- const networkMultiplier = getNetworkMultiplierFromString(this.getNetworkConditions());
693
- page.setDefaultNavigationTimeout(NAVIGATION_TIMEOUT * networkMultiplier);
694
- }
695
- getNavigationTimeout() {
696
- const page = this.getSelectedPage();
697
- return page.getDefaultNavigationTimeout();
340
+ const networkMultiplier = getNetworkMultiplierFromString(page.networkConditions);
341
+ page.pptrPage.setDefaultNavigationTimeout(NAVIGATION_TIMEOUT * networkMultiplier);
698
342
  }
343
+ // Linear scan over per-page snapshots. The page count is small (typically
344
+ // 2-10) so a reverse index isn't worthwhile given the uid-reuse lifecycle
345
+ // complexity it would introduce.
699
346
  getAXNodeByUid(uid) {
700
- return this.#textSnapshot?.idToNode.get(uid);
701
- }
702
- async getElementByUid(uid) {
703
- if (!this.#textSnapshot?.idToNode.size) {
704
- throw new Error(`No snapshot found. Use ${takeSnapshot.name} to capture one.`);
705
- }
706
- const [snapshotId] = uid.split('_');
707
- if (this.#textSnapshot.snapshotId !== snapshotId) {
708
- throw new Error(`This uid (${uid}) is from an old snapshot. The page has changed since then. ` +
709
- 'Always call take_snapshot immediately before using UIDs from it. ' +
710
- 'Workflow: 1) take_snapshot, 2) use the UIDs from that response, 3) repeat for each action.');
711
- }
712
- const node = this.#textSnapshot?.idToNode.get(uid);
713
- if (!node) {
714
- throw new Error('No such element found in the snapshot');
715
- }
716
- const handle = await node.elementHandle();
717
- if (!handle) {
718
- throw new Error('No such element found in the snapshot');
347
+ for (const mcpPage of this.#mcpPages.values()) {
348
+ const node = mcpPage.textSnapshot?.idToNode.get(uid);
349
+ if (node) {
350
+ return node;
351
+ }
719
352
  }
720
- return handle;
353
+ return undefined;
721
354
  }
722
355
  /**
723
- * Creates a snapshot of the pages.
724
- * If a sessionWindowId is set, only pages from that window are included.
356
+ * Creates a snapshot of the extension service workers.
725
357
  */
358
+ async createExtensionServiceWorkersSnapshot() {
359
+ const allTargets = await this.browser.targets();
360
+ const serviceWorkers = allTargets.filter(target => {
361
+ return (target.type() === 'service_worker' &&
362
+ target.url().includes('chrome-extension://'));
363
+ });
364
+ for (const serviceWorker of serviceWorkers) {
365
+ if (!this.#extensionServiceWorkerMap.has(serviceWorker)) {
366
+ this.#extensionServiceWorkerMap.set(serviceWorker, 'sw-' + this.#nextExtensionServiceWorkerId++);
367
+ }
368
+ }
369
+ this.#extensionServiceWorkers = serviceWorkers.map(serviceWorker => {
370
+ return {
371
+ target: serviceWorker,
372
+ id: this.#extensionServiceWorkerMap.get(serviceWorker),
373
+ url: serviceWorker.url(),
374
+ };
375
+ });
376
+ return this.#extensionServiceWorkers;
377
+ }
726
378
  async createPagesSnapshot() {
727
- const allPages = await this.browser.pages(this.#options.experimentalIncludeAllPages);
728
- this.logger(`createPagesSnapshot: found ${allPages.length} total pages`);
379
+ const { pages: allPages, isolatedContextNames } = await this.#getAllPages();
729
380
  for (const page of allPages) {
730
- this.logger(` - ${page.url()}`);
381
+ let mcpPage = this.#mcpPages.get(page);
382
+ if (!mcpPage) {
383
+ mcpPage = new McpPage(page, this.#nextPageId++);
384
+ this.#mcpPages.set(page, mcpPage);
385
+ // We emulate a focused page for all pages to support multi-agent workflows.
386
+ void page.emulateFocusedPage(true).catch(error => {
387
+ this.logger('Error turning on focused page emulation', error);
388
+ });
389
+ }
390
+ mcpPage.isolatedContextName = isolatedContextNames.get(page);
391
+ }
392
+ // Prune orphaned #mcpPages entries (pages that no longer exist).
393
+ const currentPages = new Set(allPages);
394
+ for (const [page, mcpPage] of this.#mcpPages) {
395
+ if (!currentPages.has(page)) {
396
+ mcpPage.dispose();
397
+ this.#mcpPages.delete(page);
398
+ }
731
399
  }
732
- // First filter: DevTools pages (unless experimental mode is enabled)
733
- let filteredPages = allPages.filter(page => {
400
+ this.#pages = allPages.filter(page => {
734
401
  return (this.#options.experimentalDevToolsDebugging ||
735
402
  !page.url().startsWith('devtools://'));
736
403
  });
737
- // Second filter: Session window scoping
738
- // If we have a sessionWindowId, only include pages from that window
739
- if (this.#sessionWindowId !== undefined) {
740
- const windowFilteredPages = [];
741
- // Check window IDs in parallel for better performance
742
- const windowIdResults = await Promise.allSettled(filteredPages.map(async (page) => {
743
- // Try to get windowId with retry for pages that might be in transitional state
744
- let windowId = null;
745
- let lastError = null;
746
- for (let attempt = 0; attempt < 3; attempt++) {
404
+ if ((!this.#selectedPage ||
405
+ this.#pages.indexOf(this.#selectedPage.pptrPage) === -1) &&
406
+ this.#pages[0]) {
407
+ this.selectPage(this.#getMcpPage(this.#pages[0]));
408
+ }
409
+ await this.detectOpenDevToolsWindows();
410
+ return this.#pages;
411
+ }
412
+ async #getAllPages() {
413
+ const defaultCtx = this.browser.defaultBrowserContext();
414
+ const allPages = await this.browser.pages(this.#options.experimentalIncludeAllPages);
415
+ const allTargets = this.browser.targets();
416
+ const extensionTargets = allTargets.filter(target => {
417
+ return (target.url().startsWith('chrome-extension://') &&
418
+ target.type() === 'page');
419
+ });
420
+ for (const target of extensionTargets) {
421
+ // Right now target.page() returns null for popup and side panel pages.
422
+ let page = await target.page();
423
+ if (!page) {
424
+ // We need to cache pages instances for targets because target.asPage()
425
+ // returns a new page instance every time.
426
+ page = this.#extensionPages.get(target) ?? null;
427
+ if (!page) {
747
428
  try {
748
- windowId = await this.getWindowIdForPage(page);
749
- break; // Success, exit retry loop
750
- }
751
- catch (err) {
752
- lastError = err instanceof Error ? err.message : String(err);
753
- if (attempt < 2) {
754
- // Wait before retry (50ms, then 100ms)
755
- await new Promise(r => setTimeout(r, 50 * (attempt + 1)));
756
- }
757
- }
758
- }
759
- if (windowId !== null) {
760
- return { page, windowId, url: page.url() };
761
- }
762
- // All retries failed
763
- this.logger(`Failed to get windowId for page ${page.url()} after 3 attempts: ${lastError}`);
764
- return null;
765
- }));
766
- for (const result of windowIdResults) {
767
- if (result.status === 'fulfilled' && result.value) {
768
- if (result.value.windowId === this.#sessionWindowId) {
769
- windowFilteredPages.push(result.value.page);
429
+ page = await target.asPage();
430
+ this.#extensionPages.set(target, page);
770
431
  }
771
- else {
772
- this.logger(`Excluding page ${result.value.url} (windowId ${result.value.windowId} != session ${this.#sessionWindowId})`);
432
+ catch (e) {
433
+ this.logger('Failed to get page for extension target', e);
773
434
  }
774
435
  }
775
436
  }
776
- filteredPages = windowFilteredPages;
777
- this.logger(`Window filter: ${windowFilteredPages.length} pages in session window ${this.#sessionWindowId}`);
778
- // Always include the explicitly selected page even if window filtering excluded it
779
- // This handles edge cases where windowId lookup fails after cross-origin navigation
780
- if (this.#pageExplicitlySelected &&
781
- this.#selectedPage &&
782
- !this.#selectedPage.isClosed() &&
783
- !filteredPages.includes(this.#selectedPage)) {
784
- this.logger(`Re-adding explicitly selected page that was filtered out: ${this.#selectedPage.url()}`);
785
- filteredPages.unshift(this.#selectedPage);
437
+ if (page && !allPages.includes(page)) {
438
+ allPages.push(page);
786
439
  }
787
440
  }
788
- this.#pages = filteredPages;
789
- // Only auto-select pages[0] if:
790
- // 1. No page has been explicitly selected for this session AND
791
- // 2. Either there's no selected page OR the selected page is no longer valid
792
- if (!this.#pageExplicitlySelected &&
793
- (!this.#selectedPage || this.#pages.indexOf(this.#selectedPage) === -1) &&
794
- this.#pages[0]) {
795
- this.selectPage(this.#pages[0]);
441
+ // Build a reverse lookup from BrowserContext instance → name.
442
+ const contextToName = new Map();
443
+ for (const [name, ctx] of this.#isolatedContexts) {
444
+ contextToName.set(ctx, name);
445
+ }
446
+ // Auto-discover BrowserContexts not in our mapping (e.g., externally
447
+ // created incognito contexts) and assign generated names.
448
+ const knownContexts = new Set(this.#isolatedContexts.values());
449
+ for (const ctx of this.browser.browserContexts()) {
450
+ if (ctx !== defaultCtx && !ctx.closed && !knownContexts.has(ctx)) {
451
+ const name = `isolated-context-${this.#nextIsolatedContextId++}`;
452
+ this.#isolatedContexts.set(name, ctx);
453
+ contextToName.set(ctx, name);
454
+ }
796
455
  }
797
- await this.detectOpenDevToolsWindows();
798
- // Set up WebMCP auto-detection for any new pages
799
- // (safe to call for existing pages - it checks if listeners are already installed)
800
- for (const page of this.#pages) {
801
- this.#setupWebMCPAutoDetection(page);
456
+ // Map each page to its isolated context name (if any).
457
+ const isolatedContextNames = new Map();
458
+ for (const page of allPages) {
459
+ const ctx = page.browserContext();
460
+ const name = contextToName.get(ctx);
461
+ if (name) {
462
+ isolatedContextNames.set(page, name);
463
+ }
802
464
  }
803
- return this.#pages;
465
+ return { pages: allPages, isolatedContextNames };
804
466
  }
805
- /**
806
- * Detect and map open DevTools windows to their inspected pages.
807
- *
808
- * Iterates through all browser pages to find DevTools windows and
809
- * associates them with the pages they're inspecting.
810
- *
811
- * @todo Optimize page lookup with a URL-indexed map instead of nested loops.
812
- */
813
467
  async detectOpenDevToolsWindows() {
814
468
  this.logger('Detecting open DevTools windows');
815
- const pages = await this.browser.pages(this.#options.experimentalIncludeAllPages);
816
- this.#pageToDevToolsPage = new Map();
817
- for (const devToolsPage of pages) {
818
- if (devToolsPage.url().startsWith('devtools://')) {
819
- try {
820
- this.logger('Calling getTargetInfo for ' + devToolsPage.url());
821
- const data = await devToolsPage
822
- // @ts-expect-error no types for _client().
823
- ._client()
824
- .send('Target.getTargetInfo');
825
- const devtoolsPageTitle = data.targetInfo.title;
826
- const urlLike = extractUrlLikeFromDevToolsTitle(devtoolsPageTitle);
827
- if (!urlLike) {
828
- continue;
829
- }
830
- for (const page of this.#pages) {
831
- if (urlsEqual(page.url(), urlLike)) {
832
- this.#pageToDevToolsPage.set(page, devToolsPage);
833
- }
834
- }
835
- }
836
- catch (error) {
837
- const message = error instanceof Error ? error.message : String(error);
838
- this.logger(`DevTools detection failed for ${devToolsPage.url()}: ${message}`);
839
- }
469
+ const { pages } = await this.#getAllPages();
470
+ await Promise.all(pages.map(async (page) => {
471
+ const mcpPage = this.#mcpPages.get(page);
472
+ if (!mcpPage) {
473
+ return;
840
474
  }
841
- }
475
+ if (await page.hasDevTools()) {
476
+ mcpPage.devToolsPage = await page.openDevTools();
477
+ }
478
+ else {
479
+ mcpPage.devToolsPage = undefined;
480
+ }
481
+ }));
482
+ }
483
+ getExtensionServiceWorkers() {
484
+ return this.#extensionServiceWorkers;
485
+ }
486
+ getExtensionServiceWorkerId(extensionServiceWorker) {
487
+ return this.#extensionServiceWorkerMap.get(extensionServiceWorker.target);
842
488
  }
843
489
  getPages() {
844
- return [...this.#pages];
490
+ return this.#pages;
491
+ }
492
+ getIsolatedContextName(page) {
493
+ return this.#mcpPages.get(page)?.isolatedContextName;
845
494
  }
846
495
  getDevToolsPage(page) {
847
- return this.#pageToDevToolsPage.get(page);
496
+ return this.#mcpPages.get(page)?.devToolsPage;
848
497
  }
849
- async getDevToolsData() {
498
+ async getDevToolsData(page) {
850
499
  try {
851
500
  this.logger('Getting DevTools UI data');
852
- const selectedPage = this.getSelectedPage();
853
- const devtoolsPage = this.getDevToolsPage(selectedPage);
501
+ const devtoolsPage = this.getDevToolsPage(page.pptrPage);
854
502
  if (!devtoolsPage) {
855
503
  this.logger('No DevTools page detected');
856
504
  return {};
@@ -877,24 +525,38 @@ export class McpContext {
877
525
  /**
878
526
  * Creates a text snapshot of a page.
879
527
  */
880
- async createTextSnapshot(verbose = false, devtoolsData = undefined) {
881
- const page = this.getSelectedPage();
882
- const rootNode = await page.accessibility.snapshot({
528
+ async createTextSnapshot(page, verbose = false, devtoolsData = undefined) {
529
+ const rootNode = await page.pptrPage.accessibility.snapshot({
883
530
  includeIframes: true,
884
531
  interestingOnly: !verbose,
885
532
  });
886
533
  if (!rootNode) {
887
534
  return;
888
535
  }
536
+ const { uniqueBackendNodeIdToMcpId } = page;
889
537
  const snapshotId = this.#nextSnapshotId++;
890
538
  // Iterate through the whole accessibility node tree and assign node ids that
891
539
  // will be used for the tree serialization and mapping ids back to nodes.
892
540
  let idCounter = 0;
893
541
  const idToNode = new Map();
542
+ const seenUniqueIds = new Set();
894
543
  const assignIds = (node) => {
544
+ let id = '';
545
+ // @ts-expect-error untyped loaderId & backendNodeId.
546
+ const uniqueBackendId = `${node.loaderId}_${node.backendNodeId}`;
547
+ if (uniqueBackendNodeIdToMcpId.has(uniqueBackendId)) {
548
+ // Re-use MCP exposed ID if the uniqueId is the same.
549
+ id = uniqueBackendNodeIdToMcpId.get(uniqueBackendId);
550
+ }
551
+ else {
552
+ // Only generate a new ID if we have not seen the node before.
553
+ id = `${snapshotId}_${idCounter++}`;
554
+ uniqueBackendNodeIdToMcpId.set(uniqueBackendId, id);
555
+ }
556
+ seenUniqueIds.add(uniqueBackendId);
895
557
  const nodeWithId = {
896
558
  ...node,
897
- id: `${snapshotId}_${idCounter++}`,
559
+ id,
898
560
  children: node.children
899
561
  ? node.children.map(child => assignIds(child))
900
562
  : [],
@@ -911,48 +573,44 @@ export class McpContext {
911
573
  return nodeWithId;
912
574
  };
913
575
  const rootNodeWithId = assignIds(rootNode);
914
- this.#textSnapshot = {
576
+ const snapshot = {
915
577
  root: rootNodeWithId,
916
578
  snapshotId: String(snapshotId),
917
579
  idToNode,
918
580
  hasSelectedElement: false,
919
581
  verbose,
920
582
  };
921
- const data = devtoolsData ?? (await this.getDevToolsData());
583
+ page.textSnapshot = snapshot;
584
+ const data = devtoolsData ?? (await this.getDevToolsData(page));
922
585
  if (data?.cdpBackendNodeId) {
923
- this.#textSnapshot.hasSelectedElement = true;
924
- this.#textSnapshot.selectedElementUid = this.resolveCdpElementId(data?.cdpBackendNodeId);
925
- }
926
- }
927
- getTextSnapshot() {
928
- return this.#textSnapshot;
929
- }
930
- async saveTemporaryFile(data, mimeType) {
931
- try {
932
- const dir = await fs.mkdtemp(path.join(os.tmpdir(), 'chrome-devtools-mcp-'));
933
- const filename = path.join(dir, `screenshot.${getExtensionFromMimeType(mimeType)}`);
934
- // Use mode 0o600 (owner read/write only) for secure temp file creation
935
- await fs.writeFile(filename, data, { mode: 0o600 });
936
- return { filename };
586
+ snapshot.hasSelectedElement = true;
587
+ snapshot.selectedElementUid = this.resolveCdpElementId(page, data?.cdpBackendNodeId);
937
588
  }
938
- catch (err) {
939
- this.logger(err);
940
- throw new Error('Could not save a screenshot to a file', { cause: err });
589
+ // Clean up unique IDs that we did not see anymore.
590
+ for (const key of uniqueBackendNodeIdToMcpId.keys()) {
591
+ if (!seenUniqueIds.has(key)) {
592
+ uniqueBackendNodeIdToMcpId.delete(key);
593
+ }
941
594
  }
942
595
  }
596
+ async saveTemporaryFile(data, filename) {
597
+ return await saveTemporaryFile(data, filename);
598
+ }
943
599
  async saveFile(data, filename) {
944
600
  try {
945
601
  const filePath = path.resolve(filename);
946
- // Use mode 0o644 (owner read/write, others read) for user-specified paths
947
- await fs.writeFile(filePath, data, { mode: 0o644 });
948
- return { filename };
602
+ await fs.mkdir(path.dirname(filePath), { recursive: true });
603
+ await fs.writeFile(filePath, data);
604
+ return { filename: filePath };
949
605
  }
950
606
  catch (err) {
951
607
  this.logger(err);
952
- throw new Error('Could not save a screenshot to a file', { cause: err });
608
+ throw new Error('Could not save a file', { cause: err });
953
609
  }
954
610
  }
955
611
  storeTraceRecording(result) {
612
+ // Clear the trace results because we only consume the latest trace currently.
613
+ this.#traceResults = [];
956
614
  this.#traceResults.push(result);
957
615
  }
958
616
  recordedTraces() {
@@ -961,160 +619,28 @@ export class McpContext {
961
619
  getWaitForHelper(page, cpuMultiplier, networkMultiplier) {
962
620
  return new WaitForHelper(page, cpuMultiplier, networkMultiplier);
963
621
  }
964
- waitForEventsAfterAction(action) {
965
- const page = this.getSelectedPage();
966
- const cpuMultiplier = this.getCpuThrottlingRate();
967
- const networkMultiplier = getNetworkMultiplierFromString(this.getNetworkConditions());
968
- const waitForHelper = this.getWaitForHelper(page, cpuMultiplier, networkMultiplier);
969
- return waitForHelper.waitForEventsAfterAction(action);
622
+ waitForEventsAfterAction(action, options) {
623
+ const page = this.#getSelectedMcpPage();
624
+ const cpuMultiplier = page.cpuThrottlingRate;
625
+ const networkMultiplier = getNetworkMultiplierFromString(page.networkConditions);
626
+ const waitForHelper = this.getWaitForHelper(page.pptrPage, cpuMultiplier, networkMultiplier);
627
+ return waitForHelper.waitForEventsAfterAction(action, options);
970
628
  }
971
629
  getNetworkRequestStableId(request) {
972
630
  return this.#networkCollector.getIdForResource(request);
973
631
  }
974
- waitForTextOnPage(text, timeout) {
975
- const page = this.getSelectedPage();
632
+ waitForTextOnPage(text, timeout, targetPage) {
633
+ const page = targetPage ?? this.getSelectedPptrPage();
976
634
  const frames = page.frames();
977
- let locator = this.#locatorClass.race(frames.flatMap(frame => [
978
- frame.locator(`aria/${text}`),
979
- frame.locator(`text/${text}`),
980
- ]));
635
+ let locator = this.#locatorClass.race(frames.flatMap(frame => text.flatMap(value => [
636
+ frame.locator(`aria/${value}`),
637
+ frame.locator(`text/${value}`),
638
+ ])));
981
639
  if (timeout) {
982
640
  locator = locator.setTimeout(timeout);
983
641
  }
984
642
  return locator.wait();
985
643
  }
986
- /**
987
- * Get a WebMCP client for a page, auto-connecting if needed.
988
- *
989
- * This method handles the full lifecycle of WebMCP connections:
990
- * - Maintains separate connections per page (one-to-many relationship)
991
- * - Detects stale connections (page reload, navigation)
992
- * - Cleans up old connections before creating new ones
993
- * - Auto-connects when WebMCP is available on the page
994
- *
995
- * @param page - Optional page to get client for. Defaults to selected page.
996
- */
997
- async getWebMCPClient(page) {
998
- const targetPage = page ?? this.getSelectedPage();
999
- // Check if we have a valid, active connection for this page
1000
- // We must verify isClosed() to detect page reloads where URL stays the same but frames are invalidated
1001
- const conn = this.#webMCPConnections.get(targetPage);
1002
- if (conn && !conn.transport.isClosed()) {
1003
- return { connected: true, client: conn.client };
1004
- }
1005
- // If we have a stale connection, clean up first
1006
- if (conn) {
1007
- try {
1008
- await conn.client.close();
1009
- }
1010
- catch (err) {
1011
- // Close errors during reconnection are expected - log for debugging
1012
- const message = err instanceof Error ? err.message : String(err);
1013
- this.logger(`WebMCP client close during reconnection: ${message}`);
1014
- }
1015
- this.#webMCPConnections.delete(targetPage);
1016
- }
1017
- // Connect - no pre-checking needed (extension approach)
1018
- try {
1019
- const transport = new WebMCPClientTransport({
1020
- page: targetPage,
1021
- readyTimeout: 30000, // 30s to handle slow React apps (up from 10s)
1022
- requireWebMCP: false, // Don't pre-check, just try to connect
1023
- });
1024
- const client = new Client({ name: 'chrome-devtools-mcp', version: '1.0.0' }, { capabilities: {} });
1025
- // Set up onclose handler to clean up connection state
1026
- // This handles page navigations, reloads, and manual disconnections
1027
- transport.onclose = () => {
1028
- const currentConn = this.#webMCPConnections.get(targetPage);
1029
- if (currentConn?.client === client) {
1030
- this.#webMCPConnections.delete(targetPage);
1031
- }
1032
- // Remove tools for this page when transport closes
1033
- this.#toolHub?.removeToolsForPage(targetPage);
1034
- };
1035
- // Also listen for page close events to trigger cleanup
1036
- // This handles cases where the page is closed without navigation
1037
- const onPageClose = () => {
1038
- const currentConn = this.#webMCPConnections.get(targetPage);
1039
- if (currentConn?.client === client) {
1040
- this.#webMCPConnections.delete(targetPage);
1041
- }
1042
- this.#toolHub?.removeToolsForPage(targetPage);
1043
- // Clean up the listener
1044
- targetPage.off('close', onPageClose);
1045
- };
1046
- targetPage.on('close', onPageClose);
1047
- await client.connect(transport);
1048
- // Store connection for this page
1049
- this.#webMCPConnections.set(targetPage, { client, transport, page: targetPage });
1050
- // Subscribe to tool list changes if tool hub is enabled and server supports it
1051
- const serverCapabilities = client.getServerCapabilities();
1052
- if (serverCapabilities?.tools?.listChanged && this.#toolHub?.isEnabled()) {
1053
- client.setNotificationHandler(ToolListChangedNotificationSchema, async () => {
1054
- this.logger('WebMCP tools changed, re-syncing...');
1055
- await this.#toolHub?.syncToolsForPage(targetPage, client);
1056
- });
1057
- }
1058
- // Initial tool sync if tool hub is enabled
1059
- if (this.#toolHub?.isEnabled()) {
1060
- await this.#toolHub.syncToolsForPage(targetPage, client);
1061
- }
1062
- return { connected: true, client };
1063
- }
1064
- catch (err) {
1065
- return {
1066
- connected: false,
1067
- error: `Failed to connect: ${err instanceof Error ? err.message : String(err)}`,
1068
- };
1069
- }
1070
- }
1071
- /**
1072
- * Evaluate a JavaScript expression in a Chrome extension's background context.
1073
- *
1074
- * Supports both MV3 service workers (type "service_worker") and MV2/dev-mode
1075
- * background pages (type "background_page"). Uses waitForTarget to handle
1076
- * cases where the worker hasn't been discovered yet.
1077
- *
1078
- * @param expression - JavaScript expression to evaluate.
1079
- * @param extensionId - Optional extension ID. If omitted, uses the first found.
1080
- * @returns The result of the evaluation.
1081
- */
1082
- async evaluateInExtensionWorker(expression, extensionId) {
1083
- const isExtensionBackground = (t) => (t.type() === 'service_worker' || t.type() === 'background_page') &&
1084
- t.url().startsWith('chrome-extension://') &&
1085
- (!extensionId || t.url().includes(extensionId));
1086
- // First check already-known targets
1087
- let target = this.browser.targets().find(isExtensionBackground);
1088
- // If not found, wait briefly for the target to appear (handles startup timing)
1089
- if (!target) {
1090
- try {
1091
- target = await this.browser.waitForTarget(isExtensionBackground, { timeout: 5000 });
1092
- }
1093
- catch {
1094
- throw new Error('No extension background target found. Ensure the extension is loaded in the browser. ' +
1095
- 'If connecting to an existing browser, verify the extension is installed and active.');
1096
- }
1097
- }
1098
- if (target.type() === 'service_worker') {
1099
- const worker = await target.worker();
1100
- if (!worker) {
1101
- throw new Error('Could not attach to service worker');
1102
- }
1103
- return worker.evaluate(expression);
1104
- }
1105
- // background_page — get a Page handle instead
1106
- const page = await target.page();
1107
- if (!page) {
1108
- throw new Error('Could not attach to extension background page');
1109
- }
1110
- return page.evaluate(expression);
1111
- }
1112
- async reconnectBrowser(options) {
1113
- if (!this.#options.onReconnect) {
1114
- throw new Error('Browser reconnection is not supported in this configuration');
1115
- }
1116
- return this.#options.onReconnect(options);
1117
- }
1118
644
  /**
1119
645
  * We need to ignore favicon request as they make our test flaky
1120
646
  */
@@ -1129,6 +655,38 @@ export class McpContext {
1129
655
  },
1130
656
  };
1131
657
  });
1132
- await this.#networkCollector.init(await this.browser.pages());
658
+ const { pages } = await this.#getAllPages();
659
+ await this.#networkCollector.init(pages);
660
+ }
661
+ async installExtension(extensionPath) {
662
+ const id = await this.browser.installExtension(extensionPath);
663
+ await this.#extensionRegistry.registerExtension(id, extensionPath);
664
+ return id;
665
+ }
666
+ async uninstallExtension(id) {
667
+ await this.browser.uninstallExtension(id);
668
+ this.#extensionRegistry.remove(id);
669
+ }
670
+ async triggerExtensionAction(id) {
671
+ const page = this.getSelectedPptrPage();
672
+ // @ts-expect-error internal puppeteer api is needed since we don't have a way to get
673
+ // a tab id at the moment
674
+ const theTarget = page._tabId;
675
+ const session = await this.browser.target().createCDPSession();
676
+ try {
677
+ await session.send('Extensions.triggerAction', {
678
+ id,
679
+ targetId: theTarget,
680
+ });
681
+ }
682
+ finally {
683
+ await session.detach();
684
+ }
685
+ }
686
+ listExtensions() {
687
+ return this.#extensionRegistry.list();
688
+ }
689
+ getExtension(id) {
690
+ return this.#extensionRegistry.getById(id);
1133
691
  }
1134
692
  }