chrome-ai-bridge 1.0.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 (443) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +252 -0
  3. package/build/node_modules/chrome-devtools-frontend/LICENSE +27 -0
  4. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/App.js +4 -0
  5. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/AppProvider.js +17 -0
  6. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Base64.js +43 -0
  7. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/CharacterIdMap.js +27 -0
  8. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Color.js +2033 -0
  9. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ColorConverter.js +332 -0
  10. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ColorUtils.js +221 -0
  11. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Console.js +79 -0
  12. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Debouncer.js +14 -0
  13. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/EventTarget.js +14 -0
  14. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Gzip.js +66 -0
  15. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/JavaScriptMetaData.js +4 -0
  16. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Lazy.js +29 -0
  17. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/MapWithDefault.js +22 -0
  18. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Mutex.js +49 -0
  19. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Object.js +86 -0
  20. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ParsedURL.js +449 -0
  21. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Progress.js +144 -0
  22. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ResolverBase.js +69 -0
  23. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ResourceType.js +495 -0
  24. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ReturnToPanel.js +15 -0
  25. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Revealer.js +164 -0
  26. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Runnable.js +24 -0
  27. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/SegmentedRange.js +78 -0
  28. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/SettingRegistration.js +164 -0
  29. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Settings.js +1263 -0
  30. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/SimpleHistoryManager.js +97 -0
  31. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/StringOutputStream.js +14 -0
  32. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/TextDictionary.js +40 -0
  33. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Throttler.js +71 -0
  34. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Trie.js +127 -0
  35. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/common.js +41 -0
  36. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/AidaClient.js +434 -0
  37. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/DispatchHttpRequestClient.js +66 -0
  38. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/GdpClient.js +202 -0
  39. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHost.js +92 -0
  40. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHostAPI.js +69 -0
  41. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHostStub.js +430 -0
  42. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/Platform.js +61 -0
  43. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/ResourceLoader.js +220 -0
  44. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/UserMetrics.js +968 -0
  45. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/host.js +13 -0
  46. package/build/node_modules/chrome-devtools-frontend/front_end/core/i18n/i18n.js +60 -0
  47. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/ArrayUtilities.js +199 -0
  48. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/Brand.js +4 -0
  49. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/Constructor.js +4 -0
  50. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/DateUtilities.js +13 -0
  51. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/DevToolsPath.js +27 -0
  52. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/HostRuntime.js +19 -0
  53. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/KeyboardUtilities.js +21 -0
  54. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/MapUtilities.js +79 -0
  55. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/MimeType.js +143 -0
  56. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/NumberUtilities.js +72 -0
  57. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/StringUtilities.js +538 -0
  58. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/Timing.js +9 -0
  59. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/TypedArrayUtilities.js +157 -0
  60. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/TypescriptUtilities.js +24 -0
  61. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/UIString.js +4 -0
  62. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/UserVisibleError.js +22 -0
  63. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/api/HostRuntime.js +4 -0
  64. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/api/api.js +5 -0
  65. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/browser/HostRuntime.js +63 -0
  66. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/browser/browser.js +5 -0
  67. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/node/HostRuntime.js +72 -0
  68. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/node/node.js +5 -0
  69. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/platform.js +26 -0
  70. package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/CDPConnection.js +17 -0
  71. package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/ConnectionTransport.js +12 -0
  72. package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/DevToolsCDPConnection.js +138 -0
  73. package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/InspectorBackend.js +539 -0
  74. package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/protocol_client.js +8 -0
  75. package/build/node_modules/chrome-devtools-frontend/front_end/core/root/DevToolsContext.js +54 -0
  76. package/build/node_modules/chrome-devtools-frontend/front_end/core/root/Runtime.js +4 -0
  77. package/build/node_modules/chrome-devtools-frontend/front_end/core/root/root.js +6 -0
  78. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/AccessibilityModel.js +281 -0
  79. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/AnimationModel.js +845 -0
  80. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/AutofillModel.js +155 -0
  81. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CPUProfilerModel.js +99 -0
  82. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CPUThrottlingManager.js +217 -0
  83. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSContainerQuery.js +98 -0
  84. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSFontFace.js +31 -0
  85. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSLayer.js +22 -0
  86. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSMatchedStyles.js +1318 -0
  87. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSMedia.js +100 -0
  88. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSMetadata.js +1532 -0
  89. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSModel.js +908 -0
  90. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSProperty.js +312 -0
  91. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSPropertyParser.js +574 -0
  92. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSPropertyParserMatchers.js +1346 -0
  93. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSQuery.js +53 -0
  94. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSRule.js +403 -0
  95. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSScope.js +22 -0
  96. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSStartingStyle.js +21 -0
  97. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSStyleDeclaration.js +275 -0
  98. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSStyleSheetHeader.js +166 -0
  99. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSSupports.js +24 -0
  100. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CategorizedBreakpoint.js +29 -0
  101. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ChildTargetManager.js +236 -0
  102. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CompilerSourceMappingContentProvider.js +47 -0
  103. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Connections.js +205 -0
  104. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ConsoleModel.js +629 -0
  105. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ConsoleModelTypes.js +14 -0
  106. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Cookie.js +241 -0
  107. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CookieModel.js +198 -0
  108. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CookieParser.js +163 -0
  109. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/DOMDebuggerModel.js +597 -0
  110. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/DOMModel.js +1635 -0
  111. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/DebuggerModel.js +1216 -0
  112. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/EmulationModel.js +527 -0
  113. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/EnhancedTracesParser.js +364 -0
  114. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/EventBreakpointsModel.js +127 -0
  115. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/FrameAssociated.js +4 -0
  116. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/FrameManager.js +199 -0
  117. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/HeapProfilerModel.js +130 -0
  118. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/HttpReasonPhraseStrings.js +75 -0
  119. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/IOModel.js +80 -0
  120. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/IsolateManager.js +208 -0
  121. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/IssuesModel.js +41 -0
  122. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/LayerTreeBase.js +95 -0
  123. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/LogModel.js +34 -0
  124. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/NetworkManager.js +2223 -0
  125. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/NetworkRequest.js +1654 -0
  126. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/OverlayColorGenerator.js +48 -0
  127. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/OverlayModel.js +765 -0
  128. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/OverlayPersistentHighlighter.js +384 -0
  129. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PageLoad.js +25 -0
  130. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PageResourceLoader.js +310 -0
  131. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PaintProfiler.js +67 -0
  132. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PerformanceMetricsModel.js +62 -0
  133. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PreloadingModel.js +608 -0
  134. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RehydratingConnection.js +413 -0
  135. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RehydratingObject.js +4 -0
  136. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RemoteObject.js +908 -0
  137. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Resource.js +163 -0
  138. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ResourceTreeModel.js +923 -0
  139. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RuntimeModel.js +535 -0
  140. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SDKModel.js +45 -0
  141. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ScopeTreeCache.js +36 -0
  142. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ScreenCaptureModel.js +176 -0
  143. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Script.js +420 -0
  144. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SecurityOriginManager.js +54 -0
  145. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServerSentEvents.js +67 -0
  146. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServerSentEventsProtocol.js +113 -0
  147. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServerTiming.js +216 -0
  148. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServiceWorkerCacheModel.js +271 -0
  149. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServiceWorkerManager.js +511 -0
  150. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMap.js +691 -0
  151. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapCache.js +57 -0
  152. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapFunctionRanges.js +132 -0
  153. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapManager.js +201 -0
  154. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapScopeChainEntry.js +156 -0
  155. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapScopesInfo.js +508 -0
  156. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/StorageBucketsModel.js +143 -0
  157. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/StorageKeyManager.js +53 -0
  158. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Target.js +257 -0
  159. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/TargetManager.js +395 -0
  160. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/TraceObject.js +55 -0
  161. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/WebAuthnModel.js +66 -0
  162. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/sdk-meta.js +1166 -0
  163. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/sdk.js +91 -0
  164. package/build/node_modules/chrome-devtools-frontend/front_end/generated/ARIAProperties.js +2640 -0
  165. package/build/node_modules/chrome-devtools-frontend/front_end/generated/Deprecation.js +384 -0
  166. package/build/node_modules/chrome-devtools-frontend/front_end/generated/InspectorBackendCommands.js +1532 -0
  167. package/build/node_modules/chrome-devtools-frontend/front_end/generated/SupportedCSSProperties.js +7602 -0
  168. package/build/node_modules/chrome-devtools-frontend/front_end/generated/protocol.js +4 -0
  169. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/NetworkRequestFormatter.js +289 -0
  170. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.js +995 -0
  171. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.js +664 -0
  172. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/UnitFormatters.js +139 -0
  173. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AICallTree.js +377 -0
  174. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AIContext.js +131 -0
  175. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AIQueries.js +149 -0
  176. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/CSSWorkspaceBinding.js +245 -0
  177. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/CompilerScriptMapping.js +486 -0
  178. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/ContentProviderBasedProject.js +130 -0
  179. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/DebuggerLanguagePlugins.js +992 -0
  180. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/DebuggerWorkspaceBinding.js +592 -0
  181. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/DefaultScriptMapping.js +112 -0
  182. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/FileUtils.js +186 -0
  183. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/LiveLocation.js +60 -0
  184. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/NetworkProject.js +107 -0
  185. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/PresentationConsoleMessageHelper.js +244 -0
  186. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/ResourceMapping.js +564 -0
  187. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/ResourceScriptMapping.js +437 -0
  188. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/ResourceUtils.js +87 -0
  189. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/SASSSourceMapping.js +182 -0
  190. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/StylesSourceMapping.js +268 -0
  191. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/TempFile.js +55 -0
  192. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/bindings.js +20 -0
  193. package/build/node_modules/chrome-devtools-frontend/front_end/models/cpu_profile/CPUProfileDataModel.js +516 -0
  194. package/build/node_modules/chrome-devtools-frontend/front_end/models/cpu_profile/ProfileTreeModel.js +89 -0
  195. package/build/node_modules/chrome-devtools-frontend/front_end/models/cpu_profile/cpu_profile.js +6 -0
  196. package/build/node_modules/chrome-devtools-frontend/front_end/models/crux-manager/CrUXManager.js +285 -0
  197. package/build/node_modules/chrome-devtools-frontend/front_end/models/crux-manager/crux-manager.js +4 -0
  198. package/build/node_modules/chrome-devtools-frontend/front_end/models/emulation/DeviceModeModel.js +775 -0
  199. package/build/node_modules/chrome-devtools-frontend/front_end/models/emulation/EmulatedDevices.js +1706 -0
  200. package/build/node_modules/chrome-devtools-frontend/front_end/models/emulation/emulation.js +6 -0
  201. package/build/node_modules/chrome-devtools-frontend/front_end/models/formatter/FormatterWorkerPool.js +145 -0
  202. package/build/node_modules/chrome-devtools-frontend/front_end/models/formatter/ScriptFormatter.js +77 -0
  203. package/build/node_modules/chrome-devtools-frontend/front_end/models/formatter/formatter.js +6 -0
  204. package/build/node_modules/chrome-devtools-frontend/front_end/models/geometry/GeometryImpl.js +347 -0
  205. package/build/node_modules/chrome-devtools-frontend/front_end/models/geometry/geometry.js +4 -0
  206. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/LogManager.js +67 -0
  207. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/NetworkLog.js +494 -0
  208. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/RequestResolver.js +49 -0
  209. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/logs-meta.js +73 -0
  210. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/logs.js +7 -0
  211. package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/Calculator.js +4 -0
  212. package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/NetworkTimeCalculator.js +256 -0
  213. package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/RequestTimeRanges.js +122 -0
  214. package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/network_time_calculator.js +6 -0
  215. package/build/node_modules/chrome-devtools-frontend/front_end/models/source_map_scopes/FunctionCodeResolver.js +192 -0
  216. package/build/node_modules/chrome-devtools-frontend/front_end/models/source_map_scopes/NamesResolver.js +622 -0
  217. package/build/node_modules/chrome-devtools-frontend/front_end/models/source_map_scopes/ScopeChainModel.js +59 -0
  218. package/build/node_modules/chrome-devtools-frontend/front_end/models/source_map_scopes/source_map_scopes.js +7 -0
  219. package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/StackTrace.js +4 -0
  220. package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/StackTraceImpl.js +67 -0
  221. package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/StackTraceModel.js +97 -0
  222. package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/Trie.js +121 -0
  223. package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/stack_trace.js +5 -0
  224. package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/stack_trace_impl.js +7 -0
  225. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/CodeMirrorUtils.js +32 -0
  226. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/ContentData.js +173 -0
  227. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/ContentProvider.js +30 -0
  228. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/StaticContentProvider.js +32 -0
  229. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/StreamingContentData.js +79 -0
  230. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/Text.js +69 -0
  231. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/TextCursor.js +35 -0
  232. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/TextRange.js +231 -0
  233. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/TextUtils.js +355 -0
  234. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/WasmDisassembly.js +68 -0
  235. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/text_utils.js +14 -0
  236. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/EntityMapper.js +122 -0
  237. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/EventsSerializer.js +81 -0
  238. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/LanternComputationData.js +371 -0
  239. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/ModelImpl.js +169 -0
  240. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/Name.js +114 -0
  241. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/Processor.js +555 -0
  242. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/Styles.js +815 -0
  243. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/FilmStrip.js +44 -0
  244. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/MainThreadActivity.js +76 -0
  245. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/ScriptDuplication.js +162 -0
  246. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/StackTraceForEvent.js +191 -0
  247. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/ThirdParties.js +118 -0
  248. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/TraceFilter.js +50 -0
  249. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/TraceTree.js +599 -0
  250. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/extras.js +10 -0
  251. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AnimationFramesHandler.js +109 -0
  252. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AnimationHandler.js +26 -0
  253. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AsyncJSCallsHandler.js +187 -0
  254. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AuctionWorkletsHandler.js +162 -0
  255. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/DOMStatsHandler.js +21 -0
  256. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ExtensionTraceDataHandler.js +263 -0
  257. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/FlowsHandler.js +148 -0
  258. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/FramesHandler.js +485 -0
  259. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/GPUHandler.js +35 -0
  260. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ImagePaintingHandler.js +147 -0
  261. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/InitiatorsHandler.js +180 -0
  262. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/InvalidationsHandler.js +126 -0
  263. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LargestImagePaintHandler.js +85 -0
  264. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LargestTextPaintHandler.js +27 -0
  265. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LayerTreeHandler.js +103 -0
  266. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LayoutShiftsHandler.js +449 -0
  267. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/MemoryHandler.js +21 -0
  268. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/MetaHandler.js +404 -0
  269. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ModelHandlers.js +33 -0
  270. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/NetworkRequestsHandler.js +566 -0
  271. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/PageFramesHandler.js +42 -0
  272. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/PageLoadMetricsHandler.js +349 -0
  273. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/RendererHandler.js +346 -0
  274. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/SamplesHandler.js +260 -0
  275. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ScreenshotsHandler.js +97 -0
  276. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ScriptsHandler.js +276 -0
  277. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/SelectorStatsHandler.js +71 -0
  278. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/Threads.js +101 -0
  279. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/UserInteractionsHandler.js +317 -0
  280. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/UserTimingsHandler.js +183 -0
  281. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/WarningsHandler.js +134 -0
  282. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/WorkersHandler.js +33 -0
  283. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/handlers.js +7 -0
  284. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/helpers.js +163 -0
  285. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/types.js +1 -0
  286. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Extensions.js +41 -0
  287. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Network.js +102 -0
  288. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/SamplesIntegrator.js +495 -0
  289. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/SyntheticEvents.js +74 -0
  290. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Timing.js +186 -0
  291. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Trace.js +820 -0
  292. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/TreeHelpers.js +254 -0
  293. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/helpers.js +10 -0
  294. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/CLSCulprits.js +489 -0
  295. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Cache.js +209 -0
  296. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Common.js +340 -0
  297. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DOMSize.js +181 -0
  298. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DocumentLatency.js +258 -0
  299. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DuplicatedJavaScript.js +90 -0
  300. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/FontDisplay.js +82 -0
  301. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ForcedReflow.js +161 -0
  302. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/INPBreakdown.js +129 -0
  303. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ImageDelivery.js +263 -0
  304. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LCPBreakdown.js +199 -0
  305. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LCPDiscovery.js +183 -0
  306. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LegacyJavaScript.js +90 -0
  307. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Models.js +21 -0
  308. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ModernHTTP.js +200 -0
  309. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/NetworkDependencyTree.js +545 -0
  310. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/RenderBlocking.js +192 -0
  311. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/SlowCSSSelector.js +136 -0
  312. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Statistics.js +92 -0
  313. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ThirdParties.js +98 -0
  314. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Viewport.js +102 -0
  315. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/insights.js +9 -0
  316. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/types.js +18 -0
  317. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/core/LanternError.js +6 -0
  318. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/core/NetworkAnalyzer.js +488 -0
  319. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/core/core.js +5 -0
  320. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/BaseNode.js +276 -0
  321. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/CPUNode.js +63 -0
  322. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/NetworkNode.js +82 -0
  323. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/PageDependencyGraph.js +551 -0
  324. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/graph.js +7 -0
  325. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/lantern.js +9 -0
  326. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/FirstContentfulPaint.js +136 -0
  327. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/Interactive.js +67 -0
  328. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/LargestContentfulPaint.js +68 -0
  329. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/MaxPotentialFID.js +48 -0
  330. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/Metric.js +68 -0
  331. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/SpeedIndex.js +101 -0
  332. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/TBTUtils.js +64 -0
  333. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/TotalBlockingTime.js +78 -0
  334. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/metrics.js +11 -0
  335. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/ConnectionPool.js +115 -0
  336. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/Constants.js +42 -0
  337. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/DNSCache.js +47 -0
  338. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/SimulationTimingMap.js +134 -0
  339. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/Simulator.js +450 -0
  340. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/TCPConnection.js +154 -0
  341. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/simulation.js +9 -0
  342. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/types/Lantern.js +24 -0
  343. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/types/types.js +4 -0
  344. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/trace.js +17 -0
  345. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Configuration.js +18 -0
  346. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Extensions.js +37 -0
  347. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/File.js +57 -0
  348. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Overlays.js +4 -0
  349. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Timing.js +15 -0
  350. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/TraceEvents.js +580 -0
  351. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/types.js +9 -0
  352. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace_source_maps_resolver/SourceMapsResolver.js +224 -0
  353. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace_source_maps_resolver/trace_source_maps_resolver.js +4 -0
  354. package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/FileManager.js +64 -0
  355. package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/IgnoreListManager.js +504 -0
  356. package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/SearchConfig.js +113 -0
  357. package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/UISourceCode.js +601 -0
  358. package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/WorkspaceImpl.js +201 -0
  359. package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/workspace-meta.js +34 -0
  360. package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/workspace.js +9 -0
  361. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/codemirror.next/codemirror.next.js +1 -0
  362. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/legacy-javascript/LICENSE +202 -0
  363. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/legacy-javascript/legacy-javascript.js +2 -0
  364. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/legacy-javascript/lib/legacy-javascript.js +940 -0
  365. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/LICENSE +26 -0
  366. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/builder/builder.js +196 -0
  367. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/builder/safe_builder.js +226 -0
  368. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/codec.js +4 -0
  369. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/decode/decode.js +394 -0
  370. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/encode/encode.js +24 -0
  371. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/encode/encoder.js +283 -0
  372. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/mod.js +7 -0
  373. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/util.js +9 -0
  374. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/vlq.js +84 -0
  375. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/source-map-scopes-codec.js +4 -0
  376. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/LICENSE +20 -0
  377. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/lib/nostats-subset.js +146 -0
  378. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/httparchive-nostats-subset.js +2 -0
  379. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/httparchive-subset.js +2 -0
  380. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/create-entity-finder-api.js +118 -0
  381. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/create-entity-finder-api.test.js +40 -0
  382. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/entities.test.js +26 -0
  383. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/index.js +4 -0
  384. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/index.test.js +215 -0
  385. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/subsets/httparchive-nostats.js +4 -0
  386. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/subsets/httparchive.js +4 -0
  387. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/subsets/nostats.js +4 -0
  388. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/nostats-subset.js +2 -0
  389. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/third-party-web.js +2 -0
  390. package/build/src/McpContext.js +400 -0
  391. package/build/src/McpResponse.js +237 -0
  392. package/build/src/Mutex.js +40 -0
  393. package/build/src/PageCollector.js +68 -0
  394. package/build/src/WaitForHelper.js +134 -0
  395. package/build/src/browser-connection-manager.js +373 -0
  396. package/build/src/browser.js +719 -0
  397. package/build/src/cli.js +120 -0
  398. package/build/src/client-detector.js +93 -0
  399. package/build/src/config.js +38 -0
  400. package/build/src/formatters/consoleFormatter.js +73 -0
  401. package/build/src/formatters/extensionsPageFormatter.js +184 -0
  402. package/build/src/formatters/networkFormatter.js +34 -0
  403. package/build/src/formatters/snapshotFormatter.js +80 -0
  404. package/build/src/graceful.js +125 -0
  405. package/build/src/index.js +13 -0
  406. package/build/src/logger.js +27 -0
  407. package/build/src/login-helper.js +431 -0
  408. package/build/src/main.js +268 -0
  409. package/build/src/plugin-api.js +189 -0
  410. package/build/src/profile-migration.js +82 -0
  411. package/build/src/profile-resolver.js +555 -0
  412. package/build/src/project-detector.js +71 -0
  413. package/build/src/project-root-state.js +18 -0
  414. package/build/src/roots-manager.js +253 -0
  415. package/build/src/selectors/chatgpt.json +61 -0
  416. package/build/src/selectors/gemini.json +24 -0
  417. package/build/src/selectors/loader.js +128 -0
  418. package/build/src/stable-identity.js +193 -0
  419. package/build/src/startup-check.js +147 -0
  420. package/build/src/system-profile.js +181 -0
  421. package/build/src/tools/ToolDefinition.js +9 -0
  422. package/build/src/tools/bookmarks.js +170 -0
  423. package/build/src/tools/categories.js +15 -0
  424. package/build/src/tools/chatgpt-web.js +507 -0
  425. package/build/src/tools/console.js +19 -0
  426. package/build/src/tools/core-tools.js +65 -0
  427. package/build/src/tools/diagnose-ui.js +328 -0
  428. package/build/src/tools/emulation.js +67 -0
  429. package/build/src/tools/extensions.js +185 -0
  430. package/build/src/tools/gemini-web.js +491 -0
  431. package/build/src/tools/iframe-popup-tools.js +204 -0
  432. package/build/src/tools/input.js +185 -0
  433. package/build/src/tools/network.js +68 -0
  434. package/build/src/tools/optional-tools.js +69 -0
  435. package/build/src/tools/pages.js +172 -0
  436. package/build/src/tools/performance.js +127 -0
  437. package/build/src/tools/screenshot.js +48 -0
  438. package/build/src/tools/script.js +39 -0
  439. package/build/src/tools/snapshot.js +45 -0
  440. package/build/src/trace-processing/parse.js +93 -0
  441. package/build/src/utils/pagination.js +49 -0
  442. package/package.json +90 -0
  443. package/scripts/cli.mjs +49 -0
@@ -0,0 +1,719 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import fs from 'node:fs';
7
+ import os from 'node:os';
8
+ import path from 'node:path';
9
+ import puppeteer from 'puppeteer-core';
10
+ import { resolveUserDataDir } from './profile-resolver.js';
11
+ import { isProjectRootInitialized, getProjectRoot, } from './project-root-state.js';
12
+ let browser;
13
+ const ignoredPrefixes = new Set([
14
+ 'chrome://',
15
+ 'chrome-extension://',
16
+ 'chrome-untrusted://',
17
+ 'devtools://',
18
+ ]);
19
+ function targetFilter(target) {
20
+ if (target.url() === 'chrome://newtab/') {
21
+ return true;
22
+ }
23
+ for (const prefix of ignoredPrefixes) {
24
+ if (target.url().startsWith(prefix)) {
25
+ return false;
26
+ }
27
+ }
28
+ return true;
29
+ }
30
+ const connectOptions = {
31
+ targetFilter,
32
+ // We do not expect any single CDP command to take more than 10sec.
33
+ protocolTimeout: 10_000,
34
+ };
35
+ async function ensureBrowserConnected(browserURL) {
36
+ if (browser?.connected) {
37
+ return browser;
38
+ }
39
+ browser = await puppeteer.connect({
40
+ ...connectOptions,
41
+ browserURL,
42
+ defaultViewport: null,
43
+ });
44
+ return browser;
45
+ }
46
+ function scanExtensionsDirectory(extensionsDir) {
47
+ const extensionPaths = [];
48
+ try {
49
+ if (!fs.existsSync(extensionsDir)) {
50
+ console.warn(`Extensions directory not found: ${extensionsDir}`);
51
+ return extensionPaths;
52
+ }
53
+ const entries = fs.readdirSync(extensionsDir, { withFileTypes: true });
54
+ for (const entry of entries) {
55
+ if (entry.isDirectory()) {
56
+ const extensionPath = path.join(extensionsDir, entry.name);
57
+ const manifestPath = path.join(extensionPath, 'manifest.json');
58
+ // First, check if manifest.json exists in the root directory
59
+ if (fs.existsSync(manifestPath)) {
60
+ try {
61
+ const manifestContent = fs.readFileSync(manifestPath, 'utf-8');
62
+ const manifest = JSON.parse(manifestContent);
63
+ if (manifest.manifest_version) {
64
+ extensionPaths.push(extensionPath);
65
+ console.error(`Found extension: ${entry.name} (v${manifest.version || 'unknown'})`);
66
+ }
67
+ }
68
+ catch (error) {
69
+ console.warn(`Invalid manifest.json in ${entry.name}: ${error instanceof Error ? error.message : String(error)}`);
70
+ }
71
+ }
72
+ else {
73
+ // If not found in root, check common subdirectories
74
+ const subDirs = ['extension', 'dist', 'dist-simple', 'build', 'src'];
75
+ for (const subDir of subDirs) {
76
+ const subPath = path.join(extensionPath, subDir);
77
+ const subManifestPath = path.join(subPath, 'manifest.json');
78
+ if (fs.existsSync(subManifestPath)) {
79
+ try {
80
+ const manifestContent = fs.readFileSync(subManifestPath, 'utf-8');
81
+ const manifest = JSON.parse(manifestContent);
82
+ if (manifest.manifest_version) {
83
+ extensionPaths.push(subPath);
84
+ console.error(`Found extension: ${entry.name}/${subDir} (v${manifest.version || 'unknown'})`);
85
+ break; // Use the first valid subdirectory found
86
+ }
87
+ }
88
+ catch (error) {
89
+ console.warn(`Invalid manifest.json in ${entry.name}/${subDir}: ${error instanceof Error ? error.message : String(error)}`);
90
+ }
91
+ }
92
+ }
93
+ }
94
+ }
95
+ }
96
+ console.error(`Scanned ${extensionsDir}: found ${extensionPaths.length} valid extensions`);
97
+ }
98
+ catch (error) {
99
+ console.error(`Error scanning extensions directory ${extensionsDir}: ${error instanceof Error ? error.message : String(error)}`);
100
+ }
101
+ return extensionPaths;
102
+ }
103
+ /**
104
+ * Get system Chrome executable path
105
+ */
106
+ function getSystemChromeExecutable(channel) {
107
+ const platform = os.platform();
108
+ if (platform === 'darwin') {
109
+ // macOS
110
+ if (channel === 'canary') {
111
+ return '/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary';
112
+ }
113
+ else if (channel === 'beta') {
114
+ return '/Applications/Google Chrome Beta.app/Contents/MacOS/Google Chrome Beta';
115
+ }
116
+ else if (channel === 'dev') {
117
+ return '/Applications/Google Chrome Dev.app/Contents/MacOS/Google Chrome Dev';
118
+ }
119
+ return '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome';
120
+ }
121
+ else if (platform === 'win32') {
122
+ // Windows
123
+ const programFiles = process.env['ProgramFiles'] || 'C:\\Program Files';
124
+ const programFilesX86 = process.env['ProgramFiles(x86)'] || 'C:\\Program Files (x86)';
125
+ if (channel === 'canary') {
126
+ return path.join(process.env.LOCALAPPDATA || '', 'Google', 'Chrome SxS', 'Application', 'chrome.exe');
127
+ }
128
+ else if (channel === 'beta') {
129
+ return path.join(programFiles, 'Google', 'Chrome Beta', 'Application', 'chrome.exe');
130
+ }
131
+ else if (channel === 'dev') {
132
+ return path.join(programFiles, 'Google', 'Chrome Dev', 'Application', 'chrome.exe');
133
+ }
134
+ // Try both Program Files locations
135
+ const path1 = path.join(programFiles, 'Google', 'Chrome', 'Application', 'chrome.exe');
136
+ const path2 = path.join(programFilesX86, 'Google', 'Chrome', 'Application', 'chrome.exe');
137
+ if (fs.existsSync(path1))
138
+ return path1;
139
+ if (fs.existsSync(path2))
140
+ return path2;
141
+ return path1; // Default fallback
142
+ }
143
+ else {
144
+ // Linux
145
+ if (channel === 'canary' || channel === 'dev') {
146
+ return '/usr/bin/google-chrome-unstable';
147
+ }
148
+ else if (channel === 'beta') {
149
+ return '/usr/bin/google-chrome-beta';
150
+ }
151
+ // Try google-chrome first, fallback to chromium
152
+ if (fs.existsSync('/usr/bin/google-chrome')) {
153
+ return '/usr/bin/google-chrome';
154
+ }
155
+ return '/usr/bin/chromium-browser';
156
+ }
157
+ }
158
+ /**
159
+ * Get System Chrome User Data directory (not Chrome for Testing)
160
+ */
161
+ function getSystemChromeUserDataDir(channel) {
162
+ const homeDir = os.homedir();
163
+ const platform = os.platform();
164
+ if (platform === 'darwin') {
165
+ // macOS
166
+ let chromeDataPath = path.join(homeDir, 'Library', 'Application Support', 'Google', 'Chrome');
167
+ if (channel === 'canary') {
168
+ chromeDataPath = path.join(homeDir, 'Library', 'Application Support', 'Google', 'Chrome Canary');
169
+ }
170
+ else if (channel === 'beta') {
171
+ chromeDataPath = path.join(homeDir, 'Library', 'Application Support', 'Google', 'Chrome Beta');
172
+ }
173
+ else if (channel === 'dev') {
174
+ chromeDataPath = path.join(homeDir, 'Library', 'Application Support', 'Google', 'Chrome Dev');
175
+ }
176
+ return chromeDataPath;
177
+ }
178
+ else if (platform === 'win32') {
179
+ // Windows
180
+ let chromeDataPath = path.join(homeDir, 'AppData', 'Local', 'Google', 'Chrome', 'User Data');
181
+ if (channel === 'canary') {
182
+ chromeDataPath = path.join(homeDir, 'AppData', 'Local', 'Google', 'Chrome SxS', 'User Data');
183
+ }
184
+ else if (channel === 'beta') {
185
+ chromeDataPath = path.join(homeDir, 'AppData', 'Local', 'Google', 'Chrome Beta', 'User Data');
186
+ }
187
+ else if (channel === 'dev') {
188
+ chromeDataPath = path.join(homeDir, 'AppData', 'Local', 'Google', 'Chrome Dev', 'User Data');
189
+ }
190
+ return chromeDataPath;
191
+ }
192
+ else {
193
+ // Linux
194
+ let chromeDataPath = path.join(homeDir, '.config', 'google-chrome');
195
+ if (channel === 'canary') {
196
+ chromeDataPath = path.join(homeDir, '.config', 'google-chrome-unstable');
197
+ }
198
+ else if (channel === 'beta') {
199
+ chromeDataPath = path.join(homeDir, '.config', 'google-chrome-beta');
200
+ }
201
+ else if (channel === 'dev') {
202
+ chromeDataPath = path.join(homeDir, '.config', 'google-chrome-unstable');
203
+ }
204
+ // Check if google-chrome exists, fallback to chromium
205
+ if (!fs.existsSync(chromeDataPath)) {
206
+ const chromiumPath = path.join(homeDir, '.config', 'chromium');
207
+ if (fs.existsSync(chromiumPath)) {
208
+ return chromiumPath;
209
+ }
210
+ }
211
+ return chromeDataPath;
212
+ }
213
+ }
214
+ /**
215
+ * Read Local State file to get last used profile
216
+ */
217
+ function readLocalState(userDataDir) {
218
+ const localStatePath = path.join(userDataDir, 'Local State');
219
+ try {
220
+ if (!fs.existsSync(localStatePath)) {
221
+ return {};
222
+ }
223
+ const content = fs.readFileSync(localStatePath, 'utf-8');
224
+ const json = JSON.parse(content);
225
+ const lastUsed = json?.profile?.last_used;
226
+ if (typeof lastUsed === 'string') {
227
+ return { lastUsed };
228
+ }
229
+ }
230
+ catch (error) {
231
+ console.warn(`Failed to read Local State: ${error instanceof Error ? error.message : String(error)}`);
232
+ }
233
+ return {};
234
+ }
235
+ /**
236
+ * Compare version strings (e.g., "2.3.2_0" vs "2.3.1_0")
237
+ */
238
+ function compareVersion(a, b) {
239
+ // Normalize: "2.3.2_0" → [2, 3, 2]
240
+ const normalize = (v) => v
241
+ .split('_')[0]
242
+ .split('.')
243
+ .map(x => parseInt(x, 10) || 0);
244
+ const aParts = normalize(a);
245
+ const bParts = normalize(b);
246
+ const maxLen = Math.max(aParts.length, bParts.length);
247
+ for (let i = 0; i < maxLen; i++) {
248
+ const diff = (aParts[i] || 0) - (bParts[i] || 0);
249
+ if (diff !== 0)
250
+ return diff;
251
+ }
252
+ return 0;
253
+ }
254
+ /**
255
+ * Scan one profile's Extensions directory and return extension paths
256
+ */
257
+ function scanExtensionsInProfile(profileDir) {
258
+ const extensionPaths = [];
259
+ const extensionsDir = path.join(profileDir, 'Extensions');
260
+ if (!fs.existsSync(extensionsDir)) {
261
+ return extensionPaths;
262
+ }
263
+ try {
264
+ const extensionIds = fs.readdirSync(extensionsDir, { withFileTypes: true });
265
+ for (const extensionEntry of extensionIds) {
266
+ if (!extensionEntry.isDirectory())
267
+ continue;
268
+ const extensionIdPath = path.join(extensionsDir, extensionEntry.name);
269
+ try {
270
+ const versions = fs
271
+ .readdirSync(extensionIdPath, { withFileTypes: true })
272
+ .filter(e => e.isDirectory())
273
+ .map(e => e.name);
274
+ if (versions.length === 0)
275
+ continue;
276
+ // Find the latest version
277
+ const latestVersion = versions.sort(compareVersion).pop();
278
+ const versionPath = path.join(extensionIdPath, latestVersion);
279
+ const manifestPath = path.join(versionPath, 'manifest.json');
280
+ const manifest = validateExtensionManifest(manifestPath);
281
+ if (manifest) {
282
+ extensionPaths.push(versionPath);
283
+ console.error(` ✅ ${manifest.name} v${manifest.version} (MV${manifest.manifest_version})`);
284
+ }
285
+ }
286
+ catch (error) {
287
+ console.warn(`Error processing extension ${extensionEntry.name}: ${error instanceof Error ? error.message : String(error)}`);
288
+ }
289
+ }
290
+ }
291
+ catch (error) {
292
+ console.error(`Error scanning extensions in ${extensionsDir}: ${error instanceof Error ? error.message : String(error)}`);
293
+ }
294
+ return extensionPaths;
295
+ }
296
+ /**
297
+ * Get the Chrome extensions directory path for the current platform
298
+ */
299
+ function getChromeExtensionsDirectory(channel) {
300
+ const homeDir = os.homedir();
301
+ const platform = os.platform();
302
+ let chromeDataPath;
303
+ const profileName = 'Default';
304
+ if (platform === 'darwin') {
305
+ // macOS
306
+ chromeDataPath = path.join(homeDir, 'Library', 'Application Support', 'Google', 'Chrome');
307
+ if (channel === 'canary') {
308
+ chromeDataPath = path.join(homeDir, 'Library', 'Application Support', 'Google', 'Chrome Canary');
309
+ }
310
+ else if (channel === 'beta') {
311
+ chromeDataPath = path.join(homeDir, 'Library', 'Application Support', 'Google', 'Chrome Beta');
312
+ }
313
+ else if (channel === 'dev') {
314
+ chromeDataPath = path.join(homeDir, 'Library', 'Application Support', 'Google', 'Chrome Dev');
315
+ }
316
+ }
317
+ else if (platform === 'win32') {
318
+ // Windows
319
+ chromeDataPath = path.join(homeDir, 'AppData', 'Local', 'Google', 'Chrome', 'User Data');
320
+ if (channel === 'canary') {
321
+ chromeDataPath = path.join(homeDir, 'AppData', 'Local', 'Google', 'Chrome SxS', 'User Data');
322
+ }
323
+ else if (channel === 'beta') {
324
+ chromeDataPath = path.join(homeDir, 'AppData', 'Local', 'Google', 'Chrome Beta', 'User Data');
325
+ }
326
+ else if (channel === 'dev') {
327
+ chromeDataPath = path.join(homeDir, 'AppData', 'Local', 'Google', 'Chrome Dev', 'User Data');
328
+ }
329
+ }
330
+ else {
331
+ // Linux
332
+ chromeDataPath = path.join(homeDir, '.config', 'google-chrome');
333
+ if (channel === 'canary') {
334
+ chromeDataPath = path.join(homeDir, '.config', 'google-chrome-unstable');
335
+ }
336
+ else if (channel === 'beta') {
337
+ chromeDataPath = path.join(homeDir, '.config', 'google-chrome-beta');
338
+ }
339
+ else if (channel === 'dev') {
340
+ chromeDataPath = path.join(homeDir, '.config', 'google-chrome-unstable');
341
+ }
342
+ }
343
+ return path.join(chromeDataPath, profileName, 'Extensions');
344
+ }
345
+ function validateExtensionManifest(manifestPath) {
346
+ try {
347
+ if (!fs.existsSync(manifestPath)) {
348
+ return null;
349
+ }
350
+ const manifestContent = fs.readFileSync(manifestPath, 'utf-8');
351
+ const manifest = JSON.parse(manifestContent);
352
+ // Basic validation
353
+ if (!manifest.manifest_version || !manifest.name || !manifest.version) {
354
+ return null;
355
+ }
356
+ // Ensure it's a valid manifest version (2 or 3)
357
+ if (manifest.manifest_version !== 2 && manifest.manifest_version !== 3) {
358
+ return null;
359
+ }
360
+ return manifest;
361
+ }
362
+ catch (error) {
363
+ console.warn(`Invalid manifest.json at ${manifestPath}: ${error instanceof Error ? error.message : String(error)}`);
364
+ return null;
365
+ }
366
+ }
367
+ /**
368
+ * Discover Chrome extensions installed in the system
369
+ * Uses Local State to determine the active profile, or uses specified profile
370
+ */
371
+ function discoverSystemExtensions(channel, chromeProfile) {
372
+ console.error(`🔍 Discovering system Chrome extensions...`);
373
+ const userDataDir = getSystemChromeUserDataDir(channel);
374
+ console.error(`📁 Chrome User Data: ${userDataDir}`);
375
+ // Determine target profile
376
+ let targetProfile;
377
+ if (chromeProfile) {
378
+ // CLI-specified profile takes priority
379
+ targetProfile = chromeProfile;
380
+ console.error(`🎯 Using CLI-specified profile: ${targetProfile}`);
381
+ }
382
+ else {
383
+ // Read Local State to get last used profile
384
+ const { lastUsed } = readLocalState(userDataDir);
385
+ targetProfile = lastUsed || 'Default';
386
+ if (lastUsed) {
387
+ console.error(`🎯 Using last-used profile from Local State: ${targetProfile}`);
388
+ }
389
+ else {
390
+ console.error(`🎯 Local State not found, using Default profile`);
391
+ }
392
+ }
393
+ // Check if target profile exists
394
+ const profileDir = path.join(userDataDir, targetProfile);
395
+ if (!fs.existsSync(profileDir)) {
396
+ console.warn(`⚠️ Profile directory not found: ${targetProfile}`);
397
+ // Fallback to Default
398
+ if (targetProfile !== 'Default') {
399
+ console.error(`📁 Falling back to Default profile`);
400
+ targetProfile = 'Default';
401
+ const defaultProfileDir = path.join(userDataDir, targetProfile);
402
+ if (!fs.existsSync(defaultProfileDir)) {
403
+ console.error(`❌ Default profile also not found. No extensions will be loaded.`);
404
+ return [];
405
+ }
406
+ }
407
+ else {
408
+ console.error(`❌ Default profile not found. No extensions will be loaded.`);
409
+ return [];
410
+ }
411
+ }
412
+ // Scan the target profile
413
+ console.error(`📂 Scanning profile: ${targetProfile}`);
414
+ const extensionPaths = scanExtensionsInProfile(path.join(userDataDir, targetProfile));
415
+ console.error(`📦 Total: ${extensionPaths.length} extension(s) found in profile "${targetProfile}"`);
416
+ return extensionPaths;
417
+ }
418
+ // Store development extension paths globally for later retrieval
419
+ let developmentExtensionPaths = [];
420
+ export function getDevelopmentExtensionPaths() {
421
+ return developmentExtensionPaths;
422
+ }
423
+ export async function launch(options) {
424
+ const { channel, executablePath, customDevTools, headless, isolated, loadExtension, loadExtensionsDir, loadSystemExtensions, chromeProfile, } = options;
425
+ // Reset development extension paths
426
+ developmentExtensionPaths = [];
427
+ // Resolve user data directory using new profile resolver (v0.15.0+)
428
+ const resolved = resolveUserDataDir({
429
+ cliUserDataDir: options.userDataDir,
430
+ env: process.env,
431
+ cwd: process.cwd(),
432
+ channel: channel || 'stable',
433
+ rootsInfo: options.rootsInfo, // v0.18.0: Pass Roots info
434
+ });
435
+ const userDataDir = resolved.path;
436
+ await fs.promises.mkdir(userDataDir, { recursive: true });
437
+ // Legacy profile warning (shown if legacy path exists)
438
+ try {
439
+ const legacy = path.join(os.homedir(), '.cache', 'chrome-ai-bridge', 'chrome-profile');
440
+ if (fs.existsSync(legacy)) {
441
+ console.error(`⚠️ Legacy profile detected: ${legacy}\n` +
442
+ `ℹ️ New profile location: ${path.join(os.homedir(), '.cache', 'chrome-ai-bridge', 'profiles', 'project-default', 'stable')}\n` +
443
+ `💡 To continue using the legacy profile, set: MCP_USER_DATA_DIR=${legacy}`);
444
+ }
445
+ }
446
+ catch {
447
+ /* ignore */
448
+ }
449
+ // Profile resolution logs
450
+ console.error(`[profiles] Using: ${userDataDir}`);
451
+ console.error(` Reason: ${resolved.reason}`);
452
+ console.error(` Project: ${resolved.projectName} (${resolved.hash})`);
453
+ console.error(` Client: ${resolved.clientId}`);
454
+ if (resolved.reason === 'AUTO') {
455
+ console.error(` Root: ${process.cwd()}`);
456
+ }
457
+ const usingSystemProfile = false;
458
+ const profileDirectory = 'Default';
459
+ const args = [
460
+ '--hide-crash-restore-bubble',
461
+ `--profile-directory=${profileDirectory}`,
462
+ ];
463
+ if (customDevTools) {
464
+ args.push(`--custom-devtools-frontend=file://${customDevTools}`);
465
+ }
466
+ // Collect all extension paths
467
+ const extensionPaths = [];
468
+ if (loadExtension) {
469
+ // Validate single extension path
470
+ if (fs.existsSync(loadExtension)) {
471
+ const manifestPath = path.join(loadExtension, 'manifest.json');
472
+ if (fs.existsSync(manifestPath)) {
473
+ try {
474
+ const manifestContent = fs.readFileSync(manifestPath, 'utf-8');
475
+ const manifest = JSON.parse(manifestContent);
476
+ if (manifest.manifest_version) {
477
+ extensionPaths.push(loadExtension);
478
+ developmentExtensionPaths.push(loadExtension); // Track as development extension
479
+ console.error(`✅ Single extension validated: ${loadExtension}`);
480
+ }
481
+ else {
482
+ console.error(`❌ Invalid manifest.json in ${loadExtension}: missing manifest_version`);
483
+ }
484
+ }
485
+ catch (error) {
486
+ console.error(`❌ Invalid manifest.json in ${loadExtension}: ${error instanceof Error ? error.message : String(error)}`);
487
+ }
488
+ }
489
+ else {
490
+ console.error(`❌ Extension path missing manifest.json: ${loadExtension}`);
491
+ }
492
+ }
493
+ else {
494
+ console.error(`❌ Extension path does not exist: ${loadExtension}`);
495
+ }
496
+ }
497
+ if (loadExtensionsDir) {
498
+ const scannedExtensions = scanExtensionsDirectory(loadExtensionsDir);
499
+ extensionPaths.push(...scannedExtensions);
500
+ developmentExtensionPaths.push(...scannedExtensions); // Track as development extensions
501
+ }
502
+ // System extension discovery (default: true unless isolated flag is set)
503
+ const shouldLoadSystemExtensions = loadSystemExtensions ?? !isolated;
504
+ if (shouldLoadSystemExtensions) {
505
+ const systemExtensions = discoverSystemExtensions(channel, chromeProfile);
506
+ if (systemExtensions.length > 0) {
507
+ extensionPaths.push(...systemExtensions);
508
+ console.error(`✅ Loaded ${systemExtensions.length} system Chrome extension(s)`);
509
+ }
510
+ else {
511
+ console.warn(`⚠️ No system extensions found or accessible`);
512
+ }
513
+ }
514
+ if (extensionPaths.length > 0) {
515
+ args.push(`--load-extension=${extensionPaths.join(',')}`);
516
+ args.push('--enable-experimental-extension-apis');
517
+ // Fix for Chrome 137+ where --load-extension is disabled by default
518
+ args.push('--disable-features=DisableLoadExtensionCommandLineSwitch');
519
+ console.error(`Loading ${extensionPaths.length} Chrome extension(s):`);
520
+ extensionPaths.forEach((path, index) => {
521
+ console.error(` ${index + 1}. ${path}`);
522
+ });
523
+ console.error(`Chrome args will include: --load-extension=${extensionPaths.join(',')}`);
524
+ console.error('Applied Chrome 137+ extension loading fix');
525
+ }
526
+ // Add Google login automation detection bypass
527
+ args.push('--disable-blink-features=AutomationControlled');
528
+ console.error('Added Google login bypass: --disable-blink-features=AutomationControlled');
529
+ // Use system Chrome instead of Chrome for Testing when loading extensions
530
+ let puppeterChannel;
531
+ let effectiveExecutablePath = executablePath;
532
+ if (!executablePath && extensionPaths.length > 0) {
533
+ // Auto-detect system Chrome executable for extension support
534
+ effectiveExecutablePath = getSystemChromeExecutable(channel);
535
+ console.error(`🔍 Auto-detected system Chrome: ${effectiveExecutablePath}`);
536
+ console.error(`💡 Using system Chrome binary with isolated MCP profile`);
537
+ console.error(`📝 Extensions will be loaded from: ${extensionPaths.join(', ')}`);
538
+ }
539
+ else if (!executablePath) {
540
+ // No extensions, use Chrome for Testing via channel
541
+ puppeterChannel =
542
+ channel && channel !== 'stable'
543
+ ? `chrome-${channel}`
544
+ : 'chrome';
545
+ }
546
+ // Log complete Chrome configuration before launch
547
+ console.error('Chrome Launch Configuration:');
548
+ console.error(` Channel: ${puppeterChannel || 'default'}`);
549
+ console.error(` Executable: ${effectiveExecutablePath || 'auto-detected'}`);
550
+ console.error(` User Data Dir: ${userDataDir || 'temporary'}`);
551
+ console.error(` Profile Directory: ${profileDirectory}`);
552
+ console.error(` Profile Type: ${usingSystemProfile ? 'System Profile (auto-detected)' : 'Custom Profile'}`);
553
+ console.error(` Headless: ${headless}`);
554
+ console.error(` Args: ${JSON.stringify(args, null, 2)}`);
555
+ console.error(` Ignored Default Args: ["--disable-extensions", "--enable-automation"]`);
556
+ // IMPORTANT: Chrome extensions (especially MV3 content scripts and service workers)
557
+ // DO NOT work in headless mode. Always use headless:false when loading extensions.
558
+ // Reference: https://groups.google.com/a/chromium.org/g/headless-dev/c/nEoeUkoNI0o/m/9KZ4Os46AQAJ
559
+ const effectiveHeadless = extensionPaths.length > 0 ? false : headless;
560
+ if (extensionPaths.length > 0 && headless) {
561
+ console.warn('⚠️ WARNING: Extensions require headful mode. Forcing headless:false');
562
+ }
563
+ let browser;
564
+ let finalUserDataDir = userDataDir;
565
+ try {
566
+ browser = await puppeteer.launch({
567
+ ...connectOptions,
568
+ channel: puppeterChannel,
569
+ executablePath: effectiveExecutablePath,
570
+ defaultViewport: null,
571
+ userDataDir,
572
+ pipe: true,
573
+ headless: effectiveHeadless,
574
+ args,
575
+ ignoreDefaultArgs: ['--disable-extensions', '--enable-automation'],
576
+ });
577
+ }
578
+ catch (e) {
579
+ // Profile lock collision fallback (v0.15.1)
580
+ const errorMsg = String(e.message || '').toLowerCase();
581
+ const isProfileLocked = errorMsg.includes('in use') ||
582
+ errorMsg.includes('lock') ||
583
+ errorMsg.includes('another chrome') ||
584
+ errorMsg.includes('profile appears to be');
585
+ if (isProfileLocked) {
586
+ // Fallback to ephemeral session
587
+ const sessionId = `${process.pid}-${Date.now()}`;
588
+ const tempPath = path.join(os.homedir(), '.cache', 'chrome-ai-bridge', 'sessions', sessionId, channel || 'stable');
589
+ await fs.promises.mkdir(tempPath, { recursive: true });
590
+ console.error(`⚠️ Profile locked: ${userDataDir}`);
591
+ console.error(`📁 Falling back to ephemeral session: ${tempPath}`);
592
+ console.error(`💡 To avoid this, set MCP_CLIENT_ID (e.g., "claude-code", "codex")`);
593
+ // Clean up on exit
594
+ process.on('exit', () => {
595
+ try {
596
+ fs.rmSync(tempPath, { recursive: true, force: true });
597
+ }
598
+ catch {
599
+ /* ignore */
600
+ }
601
+ });
602
+ finalUserDataDir = tempPath;
603
+ // Retry with ephemeral profile
604
+ browser = await puppeteer.launch({
605
+ ...connectOptions,
606
+ channel: puppeterChannel,
607
+ executablePath: effectiveExecutablePath,
608
+ defaultViewport: null,
609
+ userDataDir: tempPath,
610
+ pipe: true,
611
+ headless: effectiveHeadless,
612
+ args,
613
+ ignoreDefaultArgs: ['--disable-extensions', '--enable-automation'],
614
+ });
615
+ }
616
+ else {
617
+ throw e;
618
+ }
619
+ }
620
+ try {
621
+ // Log actual spawn args for debugging
622
+ const spawnArgs = browser.process()?.spawnargs;
623
+ if (spawnArgs) {
624
+ console.error(`Actual spawn args: ${spawnArgs.join(' ')}`);
625
+ }
626
+ if (options.logFile) {
627
+ // FIXME: we are probably subscribing too late to catch startup logs. We
628
+ // should expose the process earlier or expose the getRecentLogs() getter.
629
+ browser.process()?.stderr?.pipe(options.logFile);
630
+ browser.process()?.stdout?.pipe(options.logFile);
631
+ }
632
+ // Apply Google login automation detection bypass to all pages
633
+ browser.on('targetcreated', async (target) => {
634
+ if (target.type() === 'page') {
635
+ try {
636
+ const page = await target.page();
637
+ if (page) {
638
+ await page.evaluateOnNewDocument(() => {
639
+ Object.defineProperty(window.navigator, 'webdriver', {
640
+ get: () => undefined,
641
+ configurable: true,
642
+ });
643
+ });
644
+ console.error('Applied navigator.webdriver bypass to new page');
645
+ }
646
+ }
647
+ catch (error) {
648
+ console.error('Failed to apply webdriver bypass:', error);
649
+ }
650
+ }
651
+ });
652
+ // Apply bypass to existing pages
653
+ const initialPages = await browser.pages();
654
+ for (const page of initialPages) {
655
+ await page.evaluateOnNewDocument(() => {
656
+ Object.defineProperty(window.navigator, 'webdriver', {
657
+ get: () => undefined,
658
+ configurable: true,
659
+ });
660
+ });
661
+ console.error('Applied navigator.webdriver bypass to existing page');
662
+ }
663
+ return browser;
664
+ }
665
+ catch (error) {
666
+ // Fail fast with clear error message - no silent fallback
667
+ console.error(`❌ Failed to launch Chrome`);
668
+ console.error(` User Data Dir: ${userDataDir}`);
669
+ console.error(` Profile Directory: ${profileDirectory}`);
670
+ console.error(` Error: ${error instanceof Error ? error.message : String(error)}`);
671
+ if (usingSystemProfile) {
672
+ console.error('');
673
+ console.error('💡 Troubleshooting:');
674
+ console.error(' 1. Close all Chrome windows and try again');
675
+ console.error(' 2. Use --isolated flag to use temporary profile');
676
+ console.error(' 3. Use --userDataDir to specify custom profile location');
677
+ }
678
+ throw error;
679
+ }
680
+ }
681
+ async function ensureBrowserLaunched(options) {
682
+ console.error(`[ensureBrowserLaunched] browser exists: ${!!browser}, connected: ${browser?.connected}`);
683
+ if (browser?.connected) {
684
+ console.error(`[ensureBrowserLaunched] Reusing existing browser`);
685
+ return browser;
686
+ }
687
+ console.error(`[ensureBrowserLaunched] Launching new browser`);
688
+ browser = await launch(options);
689
+ return browser;
690
+ }
691
+ export async function resolveBrowser(options) {
692
+ // CRITICAL: Project root must be initialized before launching Chrome
693
+ // This ensures proper profile isolation for multi-project environments
694
+ if (!isProjectRootInitialized() &&
695
+ !options.browserUrl &&
696
+ !options.userDataDir) {
697
+ const errorMsg = [
698
+ '❌ CRITICAL ERROR: Project root not initialized',
699
+ '',
700
+ 'Chrome cannot be launched because the MCP client did not provide the project root directory.',
701
+ 'This is required for proper Chrome profile isolation when using multiple projects.',
702
+ '',
703
+ '📋 Required client behavior:',
704
+ '1. Client must call setProjectRoot() immediately after MCP server starts',
705
+ '2. Or set MCP_PROJECT_ROOT environment variable before launching MCP',
706
+ '3. Or use --project-root CLI flag',
707
+ '',
708
+ `Current state: projectRoot=${getProjectRoot() || 'undefined'}`,
709
+ `Process cwd: ${process.cwd()}`,
710
+ ].join('\n');
711
+ console.error(errorMsg);
712
+ throw new Error('Project root not initialized - cannot launch Chrome without profile isolation');
713
+ }
714
+ const resolvedBrowser = options.browserUrl
715
+ ? await ensureBrowserConnected(options.browserUrl)
716
+ : await ensureBrowserLaunched(options);
717
+ return resolvedBrowser;
718
+ }
719
+ export { scanExtensionsDirectory, discoverSystemExtensions, getChromeExtensionsDirectory, validateExtensionManifest, };