chrome-devtools-mcp-for-extension 0.5.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 (410) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +268 -0
  3. package/build/node_modules/chrome-devtools-frontend/LICENSE +27 -0
  4. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/App.js +4 -0
  5. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/AppProvider.js +17 -0
  6. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Base64.js +43 -0
  7. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/CharacterIdMap.js +27 -0
  8. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Color.js +2029 -0
  9. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ColorConverter.js +330 -0
  10. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ColorUtils.js +221 -0
  11. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Console.js +86 -0
  12. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Debouncer.js +14 -0
  13. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/EventTarget.js +14 -0
  14. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Gzip.js +64 -0
  15. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/JavaScriptMetaData.js +4 -0
  16. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Lazy.js +29 -0
  17. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Linkifier.js +34 -0
  18. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/MapWithDefault.js +20 -0
  19. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Mutex.js +49 -0
  20. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Object.js +86 -0
  21. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ParsedURL.js +459 -0
  22. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Progress.js +144 -0
  23. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/QueryParamHandler.js +4 -0
  24. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ResolverBase.js +69 -0
  25. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ResourceType.js +506 -0
  26. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ReturnToPanel.js +13 -0
  27. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Revealer.js +159 -0
  28. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Runnable.js +24 -0
  29. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/SegmentedRange.js +79 -0
  30. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/SettingRegistration.js +164 -0
  31. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Settings.js +1252 -0
  32. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/SimpleHistoryManager.js +97 -0
  33. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/StringOutputStream.js +17 -0
  34. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/TextDictionary.js +40 -0
  35. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Throttler.js +71 -0
  36. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Trie.js +127 -0
  37. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Worker.js +44 -0
  38. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/common.js +44 -0
  39. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/AidaClient.js +415 -0
  40. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/GdpClient.js +186 -0
  41. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHost.js +510 -0
  42. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHostAPI.js +66 -0
  43. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/Platform.js +59 -0
  44. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/ResourceLoader.js +232 -0
  45. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/UserMetrics.js +957 -0
  46. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/host.js +12 -0
  47. package/build/node_modules/chrome-devtools-frontend/front_end/core/i18n/i18n.js +60 -0
  48. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/ArrayUtilities.js +199 -0
  49. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/Brand.js +4 -0
  50. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/Constructor.js +4 -0
  51. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/DOMUtilities.js +122 -0
  52. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/DateUtilities.js +13 -0
  53. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/DevToolsPath.js +27 -0
  54. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/KeyboardUtilities.js +21 -0
  55. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/MapUtilities.js +79 -0
  56. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/MimeType.js +143 -0
  57. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/NumberUtilities.js +72 -0
  58. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/StringUtilities.js +536 -0
  59. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/Timing.js +9 -0
  60. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/TypedArrayUtilities.js +157 -0
  61. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/TypescriptUtilities.js +24 -0
  62. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/UIString.js +4 -0
  63. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/UserVisibleError.js +22 -0
  64. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/platform.js +26 -0
  65. package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/InspectorBackend.js +802 -0
  66. package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/NodeURL.js +31 -0
  67. package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/protocol_client.js +13 -0
  68. package/build/node_modules/chrome-devtools-frontend/front_end/core/root/Runtime.js +4 -0
  69. package/build/node_modules/chrome-devtools-frontend/front_end/core/root/root.js +5 -0
  70. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/AccessibilityModel.js +281 -0
  71. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/AnimationModel.js +846 -0
  72. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/AutofillModel.js +155 -0
  73. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CPUProfilerModel.js +99 -0
  74. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CPUThrottlingManager.js +220 -0
  75. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSContainerQuery.js +98 -0
  76. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSFontFace.js +31 -0
  77. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSLayer.js +22 -0
  78. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSMatchedStyles.js +1284 -0
  79. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSMedia.js +100 -0
  80. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSMetadata.js +1518 -0
  81. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSModel.js +902 -0
  82. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSProperty.js +315 -0
  83. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSPropertyParser.js +572 -0
  84. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSPropertyParserMatchers.js +1336 -0
  85. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSQuery.js +53 -0
  86. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSRule.js +361 -0
  87. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSScope.js +22 -0
  88. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSStyleDeclaration.js +275 -0
  89. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSStyleSheetHeader.js +166 -0
  90. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSSupports.js +24 -0
  91. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CategorizedBreakpoint.js +29 -0
  92. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ChildTargetManager.js +232 -0
  93. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CompilerSourceMappingContentProvider.js +47 -0
  94. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Connections.js +242 -0
  95. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ConsoleModel.js +629 -0
  96. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ConsoleModelTypes.js +14 -0
  97. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Cookie.js +241 -0
  98. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CookieModel.js +198 -0
  99. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CookieParser.js +163 -0
  100. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/DOMDebuggerModel.js +597 -0
  101. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/DOMModel.js +1610 -0
  102. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/DebuggerModel.js +1231 -0
  103. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/EmulationModel.js +527 -0
  104. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/EnhancedTracesParser.js +350 -0
  105. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/EventBreakpointsModel.js +125 -0
  106. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/FrameAssociated.js +4 -0
  107. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/FrameManager.js +199 -0
  108. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/HeapProfilerModel.js +130 -0
  109. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/HttpReasonPhraseStrings.js +73 -0
  110. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/IOModel.js +83 -0
  111. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/IsolateManager.js +208 -0
  112. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/IssuesModel.js +41 -0
  113. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/LayerTreeBase.js +95 -0
  114. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/LogModel.js +34 -0
  115. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/NetworkManager.js +1916 -0
  116. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/NetworkRequest.js +1668 -0
  117. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/OverlayColorGenerator.js +48 -0
  118. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/OverlayModel.js +765 -0
  119. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/OverlayPersistentHighlighter.js +384 -0
  120. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PageLoad.js +25 -0
  121. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PageResourceLoader.js +300 -0
  122. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PaintProfiler.js +67 -0
  123. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PerformanceMetricsModel.js +62 -0
  124. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PreloadingModel.js +563 -0
  125. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RehydratingConnection.js +286 -0
  126. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RehydratingObject.js +4 -0
  127. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RemoteObject.js +905 -0
  128. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Resource.js +163 -0
  129. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ResourceTreeModel.js +922 -0
  130. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RuntimeModel.js +535 -0
  131. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SDKModel.js +45 -0
  132. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ScreenCaptureModel.js +174 -0
  133. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Script.js +395 -0
  134. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SecurityOriginManager.js +54 -0
  135. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServerSentEvents.js +67 -0
  136. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServerSentEventsProtocol.js +110 -0
  137. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServerTiming.js +216 -0
  138. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServiceWorkerCacheModel.js +271 -0
  139. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServiceWorkerManager.js +511 -0
  140. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMap.js +651 -0
  141. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapCache.js +41 -0
  142. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapFunctionRanges.js +132 -0
  143. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapManager.js +189 -0
  144. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapScopeChainEntry.js +156 -0
  145. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapScopesInfo.js +276 -0
  146. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/StorageBucketsModel.js +143 -0
  147. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/StorageKeyManager.js +53 -0
  148. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Target.js +262 -0
  149. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/TargetManager.js +386 -0
  150. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/TraceObject.js +52 -0
  151. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/WebAuthnModel.js +66 -0
  152. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/sdk-meta.js +1117 -0
  153. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/sdk.js +89 -0
  154. package/build/node_modules/chrome-devtools-frontend/front_end/generated/ARIAProperties.js +1513 -0
  155. package/build/node_modules/chrome-devtools-frontend/front_end/generated/Deprecation.js +339 -0
  156. package/build/node_modules/chrome-devtools-frontend/front_end/generated/InspectorBackendCommands.js +1561 -0
  157. package/build/node_modules/chrome-devtools-frontend/front_end/generated/SupportedCSSProperties.js +7514 -0
  158. package/build/node_modules/chrome-devtools-frontend/front_end/generated/protocol.js +4 -0
  159. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/NetworkRequestFormatter.js +262 -0
  160. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.js +979 -0
  161. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.js +613 -0
  162. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/UnitFormatters.js +139 -0
  163. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AICallTree.js +372 -0
  164. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AIContext.js +132 -0
  165. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AIQueries.js +105 -0
  166. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/CSSWorkspaceBinding.js +243 -0
  167. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/CompilerScriptMapping.js +407 -0
  168. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/ContentProviderBasedProject.js +130 -0
  169. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/DebuggerLanguagePlugins.js +992 -0
  170. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/DebuggerWorkspaceBinding.js +574 -0
  171. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/DefaultScriptMapping.js +112 -0
  172. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/FileUtils.js +186 -0
  173. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/LiveLocation.js +60 -0
  174. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/NetworkProject.js +107 -0
  175. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/PresentationConsoleMessageHelper.js +244 -0
  176. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/ResourceMapping.js +473 -0
  177. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/ResourceScriptMapping.js +399 -0
  178. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/ResourceUtils.js +87 -0
  179. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/SASSSourceMapping.js +181 -0
  180. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/StylesSourceMapping.js +268 -0
  181. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/TempFile.js +55 -0
  182. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/bindings.js +20 -0
  183. package/build/node_modules/chrome-devtools-frontend/front_end/models/cpu_profile/CPUProfileDataModel.js +514 -0
  184. package/build/node_modules/chrome-devtools-frontend/front_end/models/cpu_profile/ProfileTreeModel.js +90 -0
  185. package/build/node_modules/chrome-devtools-frontend/front_end/models/cpu_profile/cpu_profile.js +6 -0
  186. package/build/node_modules/chrome-devtools-frontend/front_end/models/crux-manager/CrUXManager.js +283 -0
  187. package/build/node_modules/chrome-devtools-frontend/front_end/models/crux-manager/crux-manager.js +4 -0
  188. package/build/node_modules/chrome-devtools-frontend/front_end/models/emulation/DeviceModeModel.js +775 -0
  189. package/build/node_modules/chrome-devtools-frontend/front_end/models/emulation/EmulatedDevices.js +1706 -0
  190. package/build/node_modules/chrome-devtools-frontend/front_end/models/emulation/emulation.js +6 -0
  191. package/build/node_modules/chrome-devtools-frontend/front_end/models/formatter/FormatterWorkerPool.js +131 -0
  192. package/build/node_modules/chrome-devtools-frontend/front_end/models/formatter/ScriptFormatter.js +77 -0
  193. package/build/node_modules/chrome-devtools-frontend/front_end/models/formatter/formatter.js +6 -0
  194. package/build/node_modules/chrome-devtools-frontend/front_end/models/geometry/GeometryImpl.js +347 -0
  195. package/build/node_modules/chrome-devtools-frontend/front_end/models/geometry/geometry.js +4 -0
  196. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/LogManager.js +67 -0
  197. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/NetworkLog.js +494 -0
  198. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/RequestResolver.js +49 -0
  199. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/logs-meta.js +73 -0
  200. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/logs.js +7 -0
  201. package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/Calculator.js +4 -0
  202. package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/NetworkTimeCalculator.js +256 -0
  203. package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/RequestTimeRanges.js +120 -0
  204. package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/network_time_calculator.js +6 -0
  205. package/build/node_modules/chrome-devtools-frontend/front_end/models/source_map_scopes/NamesResolver.js +626 -0
  206. package/build/node_modules/chrome-devtools-frontend/front_end/models/source_map_scopes/ScopeChainModel.js +59 -0
  207. package/build/node_modules/chrome-devtools-frontend/front_end/models/source_map_scopes/ScopeTreeCache.js +32 -0
  208. package/build/node_modules/chrome-devtools-frontend/front_end/models/source_map_scopes/source_map_scopes.js +7 -0
  209. package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/StackTrace.js +4 -0
  210. package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/StackTraceImpl.js +67 -0
  211. package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/StackTraceModel.js +97 -0
  212. package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/Trie.js +113 -0
  213. package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/stack_trace.js +5 -0
  214. package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/stack_trace_impl.js +7 -0
  215. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/CodeMirrorUtils.js +32 -0
  216. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/ContentData.js +173 -0
  217. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/ContentProvider.js +30 -0
  218. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/StaticContentProvider.js +32 -0
  219. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/StreamingContentData.js +79 -0
  220. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/Text.js +69 -0
  221. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/TextCursor.js +35 -0
  222. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/TextRange.js +231 -0
  223. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/TextUtils.js +355 -0
  224. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/WasmDisassembly.js +68 -0
  225. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/text_utils.js +14 -0
  226. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/EntityMapper.js +122 -0
  227. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/EventsSerializer.js +81 -0
  228. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/LanternComputationData.js +370 -0
  229. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/ModelImpl.js +166 -0
  230. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/Name.js +114 -0
  231. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/Processor.js +555 -0
  232. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/Styles.js +815 -0
  233. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/FilmStrip.js +44 -0
  234. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/MainThreadActivity.js +76 -0
  235. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/ScriptDuplication.js +162 -0
  236. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/StackTraceForEvent.js +191 -0
  237. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/ThirdParties.js +118 -0
  238. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/TraceFilter.js +50 -0
  239. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/TraceTree.js +592 -0
  240. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/extras.js +10 -0
  241. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AnimationFramesHandler.js +109 -0
  242. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AnimationHandler.js +26 -0
  243. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AsyncJSCallsHandler.js +187 -0
  244. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AuctionWorkletsHandler.js +162 -0
  245. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/DOMStatsHandler.js +21 -0
  246. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ExtensionTraceDataHandler.js +263 -0
  247. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/FlowsHandler.js +148 -0
  248. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/FramesHandler.js +483 -0
  249. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/GPUHandler.js +35 -0
  250. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ImagePaintingHandler.js +147 -0
  251. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/InitiatorsHandler.js +180 -0
  252. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/InvalidationsHandler.js +126 -0
  253. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LargestImagePaintHandler.js +85 -0
  254. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LargestTextPaintHandler.js +27 -0
  255. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LayerTreeHandler.js +103 -0
  256. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LayoutShiftsHandler.js +445 -0
  257. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/MemoryHandler.js +21 -0
  258. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/MetaHandler.js +401 -0
  259. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ModelHandlers.js +33 -0
  260. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/NetworkRequestsHandler.js +540 -0
  261. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/PageFramesHandler.js +42 -0
  262. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/PageLoadMetricsHandler.js +349 -0
  263. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/RendererHandler.js +346 -0
  264. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/SamplesHandler.js +207 -0
  265. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ScreenshotsHandler.js +97 -0
  266. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ScriptsHandler.js +251 -0
  267. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/SelectorStatsHandler.js +71 -0
  268. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/Threads.js +101 -0
  269. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/UserInteractionsHandler.js +317 -0
  270. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/UserTimingsHandler.js +183 -0
  271. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/WarningsHandler.js +134 -0
  272. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/WorkersHandler.js +33 -0
  273. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/handlers.js +7 -0
  274. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/helpers.js +163 -0
  275. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/types.js +1 -0
  276. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Extensions.js +41 -0
  277. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Network.js +102 -0
  278. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/SamplesIntegrator.js +495 -0
  279. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/SyntheticEvents.js +74 -0
  280. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Timing.js +184 -0
  281. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Trace.js +806 -0
  282. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/TreeHelpers.js +254 -0
  283. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/helpers.js +10 -0
  284. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/CLSCulprits.js +488 -0
  285. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Cache.js +208 -0
  286. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Common.js +340 -0
  287. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DOMSize.js +180 -0
  288. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DocumentLatency.js +257 -0
  289. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DuplicatedJavaScript.js +89 -0
  290. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/FontDisplay.js +81 -0
  291. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ForcedReflow.js +160 -0
  292. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/INPBreakdown.js +117 -0
  293. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ImageDelivery.js +262 -0
  294. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LCPBreakdown.js +188 -0
  295. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LCPDiscovery.js +182 -0
  296. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LegacyJavaScript.js +88 -0
  297. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Models.js +21 -0
  298. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ModernHTTP.js +199 -0
  299. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/NetworkDependencyTree.js +544 -0
  300. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/RenderBlocking.js +191 -0
  301. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/SlowCSSSelector.js +135 -0
  302. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Statistics.js +92 -0
  303. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ThirdParties.js +97 -0
  304. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Viewport.js +101 -0
  305. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/insights.js +9 -0
  306. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/types.js +18 -0
  307. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/core/LanternError.js +6 -0
  308. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/core/NetworkAnalyzer.js +488 -0
  309. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/core/core.js +5 -0
  310. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/BaseNode.js +276 -0
  311. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/CPUNode.js +63 -0
  312. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/NetworkNode.js +82 -0
  313. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/PageDependencyGraph.js +551 -0
  314. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/graph.js +7 -0
  315. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/lantern.js +9 -0
  316. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/FirstContentfulPaint.js +136 -0
  317. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/Interactive.js +67 -0
  318. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/LargestContentfulPaint.js +68 -0
  319. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/MaxPotentialFID.js +48 -0
  320. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/Metric.js +68 -0
  321. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/SpeedIndex.js +101 -0
  322. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/TBTUtils.js +64 -0
  323. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/TotalBlockingTime.js +78 -0
  324. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/metrics.js +11 -0
  325. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/ConnectionPool.js +115 -0
  326. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/Constants.js +42 -0
  327. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/DNSCache.js +47 -0
  328. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/SimulationTimingMap.js +134 -0
  329. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/Simulator.js +450 -0
  330. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/TCPConnection.js +154 -0
  331. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/simulation.js +9 -0
  332. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/types/Lantern.js +24 -0
  333. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/types/types.js +4 -0
  334. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/trace.js +17 -0
  335. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Configuration.js +18 -0
  336. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Extensions.js +37 -0
  337. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/File.js +57 -0
  338. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Overlays.js +4 -0
  339. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Timing.js +15 -0
  340. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/TraceEvents.js +574 -0
  341. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/types.js +9 -0
  342. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace_source_maps_resolver/SourceMapsResolver.js +201 -0
  343. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace_source_maps_resolver/trace_source_maps_resolver.js +4 -0
  344. package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/FileManager.js +64 -0
  345. package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/IgnoreListManager.js +511 -0
  346. package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/SearchConfig.js +113 -0
  347. package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/UISourceCode.js +563 -0
  348. package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/WorkspaceImpl.js +204 -0
  349. package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/workspace.js +9 -0
  350. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/codemirror.next/codemirror.next.js +1 -0
  351. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/legacy-javascript/LICENSE +202 -0
  352. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/legacy-javascript/legacy-javascript.js +2 -0
  353. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/legacy-javascript/lib/legacy-javascript.js +940 -0
  354. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/LICENSE +26 -0
  355. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/builder/builder.js +196 -0
  356. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/builder/safe_builder.js +226 -0
  357. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/codec.js +4 -0
  358. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/decode/decode.js +394 -0
  359. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/encode/encode.js +24 -0
  360. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/encode/encoder.js +283 -0
  361. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/mod.js +7 -0
  362. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/util.js +9 -0
  363. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/vlq.js +84 -0
  364. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/source-map-scopes-codec.js +4 -0
  365. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/LICENSE +20 -0
  366. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/lib/nostats-subset.js +146 -0
  367. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/httparchive-nostats-subset.js +2 -0
  368. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/httparchive-subset.js +2 -0
  369. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/create-entity-finder-api.js +118 -0
  370. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/create-entity-finder-api.test.js +40 -0
  371. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/entities.test.js +26 -0
  372. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/index.js +4 -0
  373. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/index.test.js +215 -0
  374. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/subsets/httparchive-nostats.js +4 -0
  375. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/subsets/httparchive.js +4 -0
  376. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/subsets/nostats.js +4 -0
  377. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/nostats-subset.js +2 -0
  378. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/third-party-web.js +2 -0
  379. package/build/src/McpContext.js +283 -0
  380. package/build/src/McpResponse.js +223 -0
  381. package/build/src/Mutex.js +40 -0
  382. package/build/src/PageCollector.js +68 -0
  383. package/build/src/WaitForHelper.js +134 -0
  384. package/build/src/browser.js +493 -0
  385. package/build/src/cli.js +156 -0
  386. package/build/src/formatters/consoleFormatter.js +73 -0
  387. package/build/src/formatters/networkFormatter.js +34 -0
  388. package/build/src/formatters/snapshotFormatter.js +75 -0
  389. package/build/src/index.js +13 -0
  390. package/build/src/logger.js +27 -0
  391. package/build/src/main.js +139 -0
  392. package/build/src/system-profile.js +181 -0
  393. package/build/src/tools/ToolDefinition.js +9 -0
  394. package/build/src/tools/bookmarks.js +310 -0
  395. package/build/src/tools/categories.js +15 -0
  396. package/build/src/tools/console.js +19 -0
  397. package/build/src/tools/emulation.js +61 -0
  398. package/build/src/tools/extensions.js +184 -0
  399. package/build/src/tools/input.js +201 -0
  400. package/build/src/tools/network.js +77 -0
  401. package/build/src/tools/pages.js +188 -0
  402. package/build/src/tools/performance.js +145 -0
  403. package/build/src/tools/screenshot.js +65 -0
  404. package/build/src/tools/script.js +57 -0
  405. package/build/src/tools/snapshot.js +42 -0
  406. package/build/src/tools/webstore-auto-screenshot.js +159 -0
  407. package/build/src/tools/webstore-submission.js +332 -0
  408. package/build/src/trace-processing/parse.js +93 -0
  409. package/build/src/utils/pagination.js +49 -0
  410. package/package.json +79 -0
@@ -0,0 +1,139 @@
1
+ // Copyright 2025 The Chromium Authors
2
+ // Use of this source code is governed by a BSD-style license that can be
3
+ // found in the LICENSE file.
4
+ /**
5
+ * This module contains unit formatters that are only to be used within
6
+ * the AI models because they do not account for locales other than en-US.
7
+ */
8
+ const defaultTimeFormatterOptions = {
9
+ style: 'unit',
10
+ unitDisplay: 'narrow',
11
+ minimumFractionDigits: 0,
12
+ maximumFractionDigits: 0,
13
+ };
14
+ const defaultByteFormatterOptions = {
15
+ style: 'unit',
16
+ unitDisplay: 'narrow',
17
+ minimumFractionDigits: 0,
18
+ maximumFractionDigits: 1,
19
+ };
20
+ const timeFormatters = {
21
+ milli: new Intl.NumberFormat('en-US', {
22
+ ...defaultTimeFormatterOptions,
23
+ unit: 'millisecond',
24
+ }),
25
+ milliWithPrecision: new Intl.NumberFormat('en-US', {
26
+ ...defaultTimeFormatterOptions,
27
+ maximumFractionDigits: 1,
28
+ unit: 'millisecond',
29
+ }),
30
+ second: new Intl.NumberFormat('en-US', {
31
+ ...defaultTimeFormatterOptions,
32
+ maximumFractionDigits: 1,
33
+ unit: 'second',
34
+ }),
35
+ micro: new Intl.NumberFormat('en-US', {
36
+ ...defaultTimeFormatterOptions,
37
+ unit: 'microsecond',
38
+ }),
39
+ };
40
+ const byteFormatters = {
41
+ bytes: new Intl.NumberFormat('en-US', {
42
+ ...defaultByteFormatterOptions,
43
+ // Don't need as much precision on bytes.
44
+ minimumFractionDigits: 0,
45
+ maximumFractionDigits: 0,
46
+ unit: 'byte',
47
+ }),
48
+ kilobytes: new Intl.NumberFormat('en-US', {
49
+ ...defaultByteFormatterOptions,
50
+ unit: 'kilobyte',
51
+ }),
52
+ megabytes: new Intl.NumberFormat('en-US', {
53
+ ...defaultByteFormatterOptions,
54
+ unit: 'megabyte',
55
+ }),
56
+ };
57
+ function numberIsTooLarge(x) {
58
+ return !Number.isFinite(x) || x === Number.MAX_VALUE;
59
+ }
60
+ export function seconds(x) {
61
+ if (numberIsTooLarge(x)) {
62
+ return '-';
63
+ }
64
+ if (x === 0) {
65
+ return formatAndEnsureSpace(timeFormatters.second, x);
66
+ }
67
+ const asMilli = x * 1_000;
68
+ if (asMilli < 1) {
69
+ return micros(x * 1_000_000);
70
+ }
71
+ if (asMilli < 1_000) {
72
+ return millis(asMilli);
73
+ }
74
+ return formatAndEnsureSpace(timeFormatters.second, x);
75
+ }
76
+ export function millis(x) {
77
+ if (numberIsTooLarge(x)) {
78
+ return '-';
79
+ }
80
+ if (x < 1) {
81
+ return formatAndEnsureSpace(timeFormatters.milliWithPrecision, x);
82
+ }
83
+ return formatAndEnsureSpace(timeFormatters.milli, x);
84
+ }
85
+ export function micros(x) {
86
+ if (numberIsTooLarge(x)) {
87
+ return '-';
88
+ }
89
+ if (x < 100) {
90
+ return formatAndEnsureSpace(timeFormatters.micro, x);
91
+ }
92
+ const asMilli = x / 1_000;
93
+ return millis(asMilli);
94
+ }
95
+ export function bytes(x) {
96
+ if (x < 1_000) {
97
+ return formatAndEnsureSpace(byteFormatters.bytes, x);
98
+ }
99
+ const kilobytes = x / 1_000;
100
+ if (kilobytes < 1_000) {
101
+ return formatAndEnsureSpace(byteFormatters.kilobytes, kilobytes);
102
+ }
103
+ const megabytes = kilobytes / 1_000;
104
+ return formatAndEnsureSpace(byteFormatters.megabytes, megabytes);
105
+ }
106
+ /**
107
+ * When using 'narrow' unitDisplay, many locales exclude the space between the literal and the unit.
108
+ * We don't like that, so when there is no space literal we inject the provided separator manually.
109
+ */
110
+ function formatAndEnsureSpace(formatter, value, separator = '\xA0') {
111
+ const parts = formatter.formatToParts(value);
112
+ let hasSpace = false;
113
+ for (const part of parts) {
114
+ if (part.type === 'literal') {
115
+ if (part.value === ' ') {
116
+ hasSpace = true;
117
+ part.value = separator;
118
+ }
119
+ else if (part.value === separator) {
120
+ hasSpace = true;
121
+ }
122
+ }
123
+ }
124
+ if (hasSpace) {
125
+ return parts.map(part => part.value).join('');
126
+ }
127
+ const unitIndex = parts.findIndex(part => part.type === 'unit');
128
+ // Unexpected for there to be no unit, but just in case, handle that.
129
+ if (unitIndex === -1) {
130
+ return parts.map(part => part.value).join('');
131
+ }
132
+ // For locales where the unit comes first (sw), the space has to come after the unit.
133
+ if (unitIndex === 0) {
134
+ return parts[0].value + separator + parts.slice(1).map(part => part.value).join('');
135
+ }
136
+ // Otherwise, it comes before.
137
+ return parts.slice(0, unitIndex).map(part => part.value).join('') + separator +
138
+ parts.slice(unitIndex).map(part => part.value).join('');
139
+ }
@@ -0,0 +1,372 @@
1
+ // Copyright 2024 The Chromium Authors
2
+ // Use of this source code is governed by a BSD-style license that can be
3
+ // found in the LICENSE file.
4
+ import * as Root from '../../../core/root/root.js';
5
+ import * as Trace from '../../../models/trace/trace.js';
6
+ import * as SourceMapsResolver from '../../../models/trace_source_maps_resolver/trace_source_maps_resolver.js';
7
+ /** Iterates from a node down through its descendents. If the callback returns true, the loop stops. */
8
+ function depthFirstWalk(nodes, callback) {
9
+ for (const node of nodes) {
10
+ if (callback?.(node)) {
11
+ break;
12
+ }
13
+ depthFirstWalk(node.children().values(), callback); // Go deeper.
14
+ }
15
+ }
16
+ export class AICallTree {
17
+ selectedNode;
18
+ rootNode;
19
+ parsedTrace;
20
+ // Note: ideally this is passed in (or lived on ParsedTrace), but this class is
21
+ // stateless (mostly, there's a cache for some stuff) so it doesn't match much.
22
+ #eventsSerializer = new Trace.EventsSerializer.EventsSerializer();
23
+ constructor(selectedNode, rootNode, parsedTrace) {
24
+ this.selectedNode = selectedNode;
25
+ this.rootNode = rootNode;
26
+ this.parsedTrace = parsedTrace;
27
+ }
28
+ static findEventsForThread({ thread, parsedTrace, bounds }) {
29
+ const threadEvents = parsedTrace.data.Renderer.processes.get(thread.pid)?.threads.get(thread.tid)?.entries;
30
+ if (!threadEvents) {
31
+ return null;
32
+ }
33
+ return threadEvents.filter(e => Trace.Helpers.Timing.eventIsInBounds(e, bounds));
34
+ }
35
+ static findMainThreadTasks({ thread, parsedTrace, bounds }) {
36
+ const threadEvents = parsedTrace.data.Renderer.processes.get(thread.pid)?.threads.get(thread.tid)?.entries;
37
+ if (!threadEvents) {
38
+ return null;
39
+ }
40
+ return threadEvents.filter(Trace.Types.Events.isRunTask)
41
+ .filter(e => Trace.Helpers.Timing.eventIsInBounds(e, bounds));
42
+ }
43
+ /**
44
+ * Builds a call tree representing all calls within the given timeframe for
45
+ * the provided thread.
46
+ * Events that are less than 0.05% of the range duration are removed.
47
+ */
48
+ static fromTimeOnThread({ thread, parsedTrace, bounds }) {
49
+ const overlappingEvents = this.findEventsForThread({ thread, parsedTrace, bounds });
50
+ if (!overlappingEvents) {
51
+ return null;
52
+ }
53
+ const visibleEventsFilter = new Trace.Extras.TraceFilter.VisibleEventsFilter(Trace.Styles.visibleTypes());
54
+ // By default, we remove events whose duration is less than 0.5% of the total
55
+ // range. So if the range is 10s, an event must be 0.05s+ to be included.
56
+ // This does risk eliminating useful data when we pass it to the LLM, but
57
+ // we are trying to balance context window sizes and not using it up too
58
+ // eagerly. We will experiment with this filter and likely make it smarter
59
+ // or tweak it based on range size rather than using a blanket value. Or we
60
+ // could consider limiting the depth when we serialize. Or some
61
+ // combination!
62
+ const minDuration = Trace.Types.Timing.Micro(bounds.range * 0.005);
63
+ const minDurationFilter = new MinDurationFilter(minDuration);
64
+ const compileCodeFilter = new ExcludeCompileCodeFilter();
65
+ // Build a tree bounded by the selected event's timestamps, and our other filters applied
66
+ const rootNode = new Trace.Extras.TraceTree.TopDownRootNode(overlappingEvents, {
67
+ filters: [minDurationFilter, compileCodeFilter, visibleEventsFilter],
68
+ startTime: Trace.Helpers.Timing.microToMilli(bounds.min),
69
+ endTime: Trace.Helpers.Timing.microToMilli(bounds.max),
70
+ doNotAggregate: true,
71
+ includeInstantEvents: true,
72
+ });
73
+ const instance = new AICallTree(null /* no selected node*/, rootNode, parsedTrace);
74
+ return instance;
75
+ }
76
+ /**
77
+ * Attempts to build an AICallTree from a given selected event. It also
78
+ * validates that this event is one that we support being used with the AI
79
+ * Assistance panel, which [as of January 2025] means:
80
+ * 1. It is on the main thread.
81
+ * 2. It exists in either the Renderer or Sample handler's entryToNode map.
82
+ * This filters out other events we make such as SyntheticLayoutShifts which are not valid
83
+ * If the event is not valid, or there is an unexpected error building the tree, `null` is returned.
84
+ */
85
+ static fromEvent(selectedEvent, parsedTrace) {
86
+ // Special case: performance.mark events are shown on the main thread
87
+ // technically, but because they are instant events they are shown with a
88
+ // tiny duration. Because they are instant, they also don't have any
89
+ // children or a call tree, and so if the user has selected a performance
90
+ // mark in the timings track, we do not want to attempt to build a call
91
+ // tree. Context: crbug.com/418223469
92
+ // Note that we do not have to repeat this check for performance.measure
93
+ // events because those are synthetic, and therefore the check
94
+ // further down about if this event is known to the RenderHandler
95
+ // deals with this.
96
+ if (Trace.Types.Events.isPerformanceMark(selectedEvent)) {
97
+ return null;
98
+ }
99
+ // First: check that the selected event is on the thread we have identified as the main thread.
100
+ const threads = Trace.Handlers.Threads.threadsInTrace(parsedTrace.data);
101
+ const thread = threads.find(t => t.pid === selectedEvent.pid && t.tid === selectedEvent.tid);
102
+ if (!thread) {
103
+ return null;
104
+ }
105
+ // We allow two thread types to deal with the NodeJS use case.
106
+ // MAIN_THREAD is used when a trace has been generated through Chrome
107
+ // tracing on a website (and we have a renderer)
108
+ // CPU_PROFILE is used only when we have received a CPUProfile - in this
109
+ // case all the threads are CPU_PROFILE so we allow those. If we only allow
110
+ // MAIN_THREAD then we wouldn't ever allow NodeJS users to use the AI
111
+ // integration.
112
+ if (thread.type !== "MAIN_THREAD" /* Trace.Handlers.Threads.ThreadType.MAIN_THREAD */ &&
113
+ thread.type !== "CPU_PROFILE" /* Trace.Handlers.Threads.ThreadType.CPU_PROFILE */) {
114
+ return null;
115
+ }
116
+ // Ensure that the event is known to either the Renderer or Samples
117
+ // handler. This helps exclude synthetic events we build up for other
118
+ // information such as Layout Shift clusters.
119
+ // We check Renderer + Samples to ensure we support CPU Profiles (which do
120
+ // not populate the Renderer Handler)
121
+ const data = parsedTrace.data;
122
+ if (!data.Renderer.entryToNode.has(selectedEvent) && !data.Samples.entryToNode.has(selectedEvent)) {
123
+ return null;
124
+ }
125
+ const allEventsEnabled = Root.Runtime.experiments.isEnabled('timeline-show-all-events');
126
+ const { startTime, endTime } = Trace.Helpers.Timing.eventTimingsMilliSeconds(selectedEvent);
127
+ const selectedEventBounds = Trace.Helpers.Timing.traceWindowFromMicroSeconds(Trace.Helpers.Timing.milliToMicro(startTime), Trace.Helpers.Timing.milliToMicro(endTime));
128
+ let threadEvents = data.Renderer.processes.get(selectedEvent.pid)?.threads.get(selectedEvent.tid)?.entries;
129
+ if (!threadEvents) {
130
+ // None from the renderer: try the samples handler, this might be a CPU trace.
131
+ threadEvents = data.Samples.profilesInProcess.get(selectedEvent.pid)?.get(selectedEvent.tid)?.profileCalls;
132
+ }
133
+ if (!threadEvents) {
134
+ console.warn(`AICallTree: could not find thread for selected entry: ${selectedEvent}`);
135
+ return null;
136
+ }
137
+ const overlappingEvents = threadEvents.filter(e => Trace.Helpers.Timing.eventIsInBounds(e, selectedEventBounds));
138
+ const filters = [new SelectedEventDurationFilter(selectedEvent), new ExcludeCompileCodeFilter(selectedEvent)];
139
+ // If the "Show all events" experiment is on, we don't filter out any
140
+ // events here, otherwise the generated call tree will not match what the
141
+ // user is seeing.
142
+ if (!allEventsEnabled) {
143
+ filters.push(new Trace.Extras.TraceFilter.VisibleEventsFilter(Trace.Styles.visibleTypes()));
144
+ }
145
+ // Build a tree bounded by the selected event's timestamps, and our other filters applied
146
+ const rootNode = new Trace.Extras.TraceTree.TopDownRootNode(overlappingEvents, {
147
+ filters,
148
+ startTime,
149
+ endTime,
150
+ includeInstantEvents: true,
151
+ });
152
+ // Walk the tree to find selectedNode
153
+ let selectedNode = null;
154
+ depthFirstWalk([rootNode].values(), node => {
155
+ if (node.event === selectedEvent) {
156
+ selectedNode = node;
157
+ return true;
158
+ }
159
+ return;
160
+ });
161
+ if (selectedNode === null) {
162
+ console.warn(`Selected event ${selectedEvent} not found within its own tree.`);
163
+ return null;
164
+ }
165
+ const instance = new AICallTree(selectedNode, rootNode, parsedTrace);
166
+ // instance.logDebug();
167
+ return instance;
168
+ }
169
+ /**
170
+ * Iterates through nodes level by level using a Breadth-First Search (BFS) algorithm.
171
+ * BFS is important here because the serialization process assumes that direct child nodes
172
+ * will have consecutive IDs (horizontally across each depth).
173
+ *
174
+ * Example tree with IDs:
175
+ *
176
+ * 1
177
+ * / \
178
+ * 2 3
179
+ * / / / \
180
+ * 4 5 6 7
181
+ *
182
+ * Here, node with an ID 2 has consecutive children in the 4-6 range.
183
+ *
184
+ * To optimize for space, the provided `callback` function is called to serialize
185
+ * each node as it's visited during the BFS traversal.
186
+ *
187
+ * When serializing a node, the callback receives:
188
+ * 1. The current node being visited.
189
+ * 2. The ID assigned to this current node (a simple incrementing index based on visit order).
190
+ * 3. The predicted starting ID for the children of this current node.
191
+ *
192
+ * A serialized node needs to know the ID range of its children. However,
193
+ * child node IDs are only assigned when those children are themselves visited.
194
+ * To handle this, we predict the starting ID for a node's children. This prediction
195
+ * is based on a running count of all nodes that have ever been added to the BFS queue.
196
+ * Since IDs are assigned consecutively as nodes are processed from the queue, and a
197
+ * node's children are added to the end of the queue when the parent is visited,
198
+ * their eventual IDs will follow this running count.
199
+ */
200
+ breadthFirstWalk(nodes, serializeNodeCallback) {
201
+ const queue = Array.from(nodes);
202
+ let nodeIndex = 1;
203
+ // To predict the visited children indexes
204
+ let nodesAddedToQueueCount = queue.length;
205
+ let currentNode = queue.shift();
206
+ while (currentNode) {
207
+ if (currentNode.children().size > 0) {
208
+ serializeNodeCallback(currentNode, nodeIndex, nodesAddedToQueueCount + 1);
209
+ }
210
+ else {
211
+ serializeNodeCallback(currentNode, nodeIndex);
212
+ }
213
+ queue.push(...Array.from(currentNode.children().values()));
214
+ nodesAddedToQueueCount += currentNode.children().size;
215
+ currentNode = queue.shift();
216
+ nodeIndex++;
217
+ }
218
+ }
219
+ serialize(headerLevel = 1) {
220
+ const header = '#'.repeat(headerLevel);
221
+ // Keep a map of URLs. We'll output a LUT to keep size down.
222
+ const allUrls = [];
223
+ let nodesStr = '';
224
+ this.breadthFirstWalk(this.rootNode.children().values(), (node, nodeId, childStartingNode) => {
225
+ nodesStr +=
226
+ '\n' + this.stringifyNode(node, nodeId, this.parsedTrace, this.selectedNode, allUrls, childStartingNode);
227
+ });
228
+ let output = '';
229
+ if (allUrls.length) {
230
+ // Output lookup table of URLs within this tree
231
+ output += `\n${header} All URLs:\n\n` + allUrls.map((url, index) => ` * ${index}: ${url}`).join('\n');
232
+ }
233
+ output += `\n\n${header} Call tree:\n${nodesStr}`;
234
+ return output;
235
+ }
236
+ /*
237
+ * Each node is serialized into a single line to minimize token usage in the context window.
238
+ * The format is a semicolon-separated string with the following fields:
239
+ * Format: `id;name;duration;selfTime;urlIndex;childRange;[S]
240
+ *
241
+ * 1. `id`: A unique numerical identifier for the node assigned by BFS.
242
+ * 2. `name`: The name of the event represented by the node.
243
+ * 3. `duration`: The total duration of the event in milliseconds, rounded to one decimal place.
244
+ * 4. `selfTime`: The self time of the event in milliseconds, rounded to one decimal place.
245
+ * 5. `urlIndex`: An index referencing a URL in the `allUrls` array. If no URL is present, this is an empty string.
246
+ * 6. `childRange`: A string indicating the range of IDs for the node's children. Children should always have consecutive IDs.
247
+ * If there is only one child, it's a single ID.
248
+ * 7. `[S]`: An optional marker indicating that this node is the selected node.
249
+ *
250
+ * Example:
251
+ * `1;Parse HTML;2.5;0.3;0;2-5;S`
252
+ * This represents:
253
+ * - Node ID 1
254
+ * - Name "Parse HTML"
255
+ * - Total duration of 2.5ms
256
+ * - Self time of 0.3ms
257
+ * - URL index 0 (meaning the URL is the first one in the `allUrls` array)
258
+ * - Child range of IDs 2 to 5
259
+ * - This node is the selected node (S marker)
260
+ */
261
+ stringifyNode(node, nodeId, parsedTrace, selectedNode, allUrls, childStartingNodeIndex) {
262
+ const event = node.event;
263
+ if (!event) {
264
+ throw new Error('Event required');
265
+ }
266
+ // 1. ID
267
+ const idStr = String(nodeId);
268
+ // 2. eventKey
269
+ const eventKey = this.#eventsSerializer.keyForEvent(node.event);
270
+ // 3. Name
271
+ const name = Trace.Name.forEntry(event, parsedTrace);
272
+ // Round milliseconds to one decimal place, return empty string if zero/undefined
273
+ const roundToTenths = (num) => {
274
+ if (!num) {
275
+ return '';
276
+ }
277
+ return String(Math.round(num * 10) / 10);
278
+ };
279
+ // 4. Duration
280
+ const durationStr = roundToTenths(node.totalTime);
281
+ // 5. Self Time
282
+ const selfTimeStr = roundToTenths(node.selfTime);
283
+ // 6. URL Index
284
+ const url = SourceMapsResolver.SourceMapsResolver.resolvedURLForEntry(parsedTrace, event);
285
+ let urlIndexStr = '';
286
+ if (url) {
287
+ const existingIndex = allUrls.indexOf(url);
288
+ if (existingIndex === -1) {
289
+ urlIndexStr = String(allUrls.push(url) - 1);
290
+ }
291
+ else {
292
+ urlIndexStr = String(existingIndex);
293
+ }
294
+ }
295
+ // 7. Child Range
296
+ const children = Array.from(node.children().values());
297
+ let childRangeStr = '';
298
+ if (childStartingNodeIndex) {
299
+ childRangeStr = (children.length === 1) ? String(childStartingNodeIndex) :
300
+ `${childStartingNodeIndex}-${childStartingNodeIndex + children.length}`;
301
+ }
302
+ // 8. Selected Marker
303
+ const selectedMarker = selectedNode?.event === node.event ? 'S' : '';
304
+ // Combine fields
305
+ let line = idStr;
306
+ line += ';' + eventKey;
307
+ line += ';' + name;
308
+ line += ';' + durationStr;
309
+ line += ';' + selfTimeStr;
310
+ line += ';' + urlIndexStr;
311
+ line += ';' + childRangeStr;
312
+ if (selectedMarker) {
313
+ line += ';' + selectedMarker;
314
+ }
315
+ return line;
316
+ }
317
+ // Only used for debugging.
318
+ logDebug() {
319
+ const str = this.serialize();
320
+ // eslint-disable-next-line no-console
321
+ console.log('🎆', str);
322
+ if (str.length > 45_000) {
323
+ // Manual testing shows 45k fits. 50k doesn't.
324
+ // Max is 32k _tokens_, but tokens to bytes is wishywashy, so... hard to know for sure.
325
+ console.warn('Output will likely not fit in the context window. Expect an AIDA error.');
326
+ }
327
+ }
328
+ }
329
+ /**
330
+ * These events are very noisy and take up room in the context window for no real benefit.
331
+ */
332
+ export class ExcludeCompileCodeFilter extends Trace.Extras.TraceFilter.TraceFilter {
333
+ #selectedEvent = null;
334
+ constructor(selectedEvent) {
335
+ super();
336
+ this.#selectedEvent = selectedEvent ?? null;
337
+ }
338
+ accept(event) {
339
+ if (this.#selectedEvent && event === this.#selectedEvent) {
340
+ // If the user selects this event, we should accept it, else the
341
+ // behaviour is confusing when the selected event is not used.
342
+ return true;
343
+ }
344
+ return event.name !== "V8.CompileCode" /* Trace.Types.Events.Name.COMPILE_CODE */;
345
+ }
346
+ }
347
+ export class SelectedEventDurationFilter extends Trace.Extras.TraceFilter.TraceFilter {
348
+ #minDuration;
349
+ #selectedEvent;
350
+ constructor(selectedEvent) {
351
+ super();
352
+ // The larger the selected event is, the less small ones matter. We'll exclude items under ½% of the selected event's size
353
+ this.#minDuration = Trace.Types.Timing.Micro((selectedEvent.dur ?? 1) * 0.005);
354
+ this.#selectedEvent = selectedEvent;
355
+ }
356
+ accept(event) {
357
+ if (event === this.#selectedEvent) {
358
+ return true;
359
+ }
360
+ return event.dur ? event.dur >= this.#minDuration : false;
361
+ }
362
+ }
363
+ export class MinDurationFilter extends Trace.Extras.TraceFilter.TraceFilter {
364
+ #minDuration;
365
+ constructor(minDuration) {
366
+ super();
367
+ this.#minDuration = minDuration;
368
+ }
369
+ accept(event) {
370
+ return event.dur ? event.dur >= this.#minDuration : false;
371
+ }
372
+ }
@@ -0,0 +1,132 @@
1
+ // Copyright 2025 The Chromium Authors
2
+ // Use of this source code is governed by a BSD-style license that can be
3
+ // found in the LICENSE file.
4
+ import * as Trace from '../../../models/trace/trace.js';
5
+ import { AICallTree } from './AICallTree.js';
6
+ function getFirstInsightSet(insights) {
7
+ // Currently only support a single insight set. Pick the first one with a navigation.
8
+ // TODO(cjamcl): we should just give the agent the entire insight set, and give
9
+ // summary detail about all of them + the ability to query each.
10
+ return [...insights.values()].filter(insightSet => insightSet.navigation).at(0) ?? null;
11
+ }
12
+ export class AgentFocus {
13
+ static fromParsedTrace(parsedTrace) {
14
+ if (!parsedTrace.insights) {
15
+ throw new Error('missing insights');
16
+ }
17
+ const insightSet = getFirstInsightSet(parsedTrace.insights);
18
+ return new AgentFocus({
19
+ parsedTrace,
20
+ insightSet,
21
+ event: null,
22
+ callTree: null,
23
+ insight: null,
24
+ });
25
+ }
26
+ static fromInsight(parsedTrace, insight) {
27
+ if (!parsedTrace.insights) {
28
+ throw new Error('missing insights');
29
+ }
30
+ const insightSet = getFirstInsightSet(parsedTrace.insights);
31
+ return new AgentFocus({
32
+ parsedTrace,
33
+ insightSet,
34
+ event: null,
35
+ callTree: null,
36
+ insight,
37
+ });
38
+ }
39
+ static fromEvent(parsedTrace, event) {
40
+ if (!parsedTrace.insights) {
41
+ throw new Error('missing insights');
42
+ }
43
+ const insightSet = getFirstInsightSet(parsedTrace.insights);
44
+ const result = AgentFocus.#getCallTreeOrEvent(parsedTrace, event);
45
+ return new AgentFocus({ parsedTrace, insightSet, event: result.event, callTree: result.callTree, insight: null });
46
+ }
47
+ static fromCallTree(callTree) {
48
+ const insights = callTree.parsedTrace.insights;
49
+ // Select the insight set containing the call tree.
50
+ // If for some reason that fails, fallback to the first one.
51
+ let insightSet = null;
52
+ if (insights) {
53
+ const callTreeTimeRange = Trace.Helpers.Timing.traceWindowFromEvent(callTree.rootNode.event);
54
+ insightSet = insights.values().find(set => Trace.Helpers.Timing.boundsIncludeTimeRange({
55
+ timeRange: callTreeTimeRange,
56
+ bounds: set.bounds,
57
+ })) ??
58
+ getFirstInsightSet(insights);
59
+ }
60
+ return new AgentFocus({ parsedTrace: callTree.parsedTrace, insightSet, event: null, callTree, insight: null });
61
+ }
62
+ #data;
63
+ eventsSerializer = new Trace.EventsSerializer.EventsSerializer();
64
+ constructor(data) {
65
+ this.#data = data;
66
+ }
67
+ get parsedTrace() {
68
+ return this.#data.parsedTrace;
69
+ }
70
+ get insightSet() {
71
+ return this.#data.insightSet;
72
+ }
73
+ /** Note: at most one of event or callTree is non-null. */
74
+ get event() {
75
+ return this.#data.event;
76
+ }
77
+ /** Note: at most one of event or callTree is non-null. */
78
+ get callTree() {
79
+ return this.#data.callTree;
80
+ }
81
+ get insight() {
82
+ return this.#data.insight;
83
+ }
84
+ withInsight(insight) {
85
+ const focus = new AgentFocus(this.#data);
86
+ focus.#data.insight = insight;
87
+ return focus;
88
+ }
89
+ withEvent(event) {
90
+ const focus = new AgentFocus(this.#data);
91
+ const result = AgentFocus.#getCallTreeOrEvent(this.#data.parsedTrace, event);
92
+ focus.#data.callTree = result.callTree;
93
+ focus.#data.event = result.event;
94
+ return focus;
95
+ }
96
+ lookupEvent(key) {
97
+ try {
98
+ return this.eventsSerializer.eventForKey(key, this.#data.parsedTrace);
99
+ }
100
+ catch (err) {
101
+ if (err.toString().includes('Unknown trace event') || err.toString().includes('Unknown profile call')) {
102
+ return null;
103
+ }
104
+ throw err;
105
+ }
106
+ }
107
+ /**
108
+ * If an event is a call tree, this returns that call tree and a null event.
109
+ * If not a call tree, this only returns a non-null event if the event is a network
110
+ * request.
111
+ * This is an arbitrary limitation – it should be removed, but first we need to
112
+ * improve the agent's knowledge of events that are not main-thread or network
113
+ * events.
114
+ */
115
+ static #getCallTreeOrEvent(parsedTrace, event) {
116
+ const callTree = event && AICallTree.fromEvent(event, parsedTrace);
117
+ if (callTree) {
118
+ return { callTree, event: null };
119
+ }
120
+ if (event && Trace.Types.Events.isSyntheticNetworkRequest(event)) {
121
+ return { callTree: null, event };
122
+ }
123
+ return { callTree: null, event: null };
124
+ }
125
+ }
126
+ export function getPerformanceAgentFocusFromModel(model) {
127
+ const parsedTrace = model.parsedTrace();
128
+ if (!parsedTrace) {
129
+ return null;
130
+ }
131
+ return AgentFocus.fromParsedTrace(parsedTrace);
132
+ }