chrome-devtools-frontend 1.0.1473514 → 1.0.1506453

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 (1522) hide show
  1. package/.gemini/commands/migrate-e2e-non-hosted.toml +43 -0
  2. package/.gemini/commands/review.toml +85 -0
  3. package/.geminiignore +6 -0
  4. package/.github/workflows/auto-close-prs.yml +30 -0
  5. package/.stylelintignore +0 -1
  6. package/.vscode/devtools-workspace-settings.json +2 -1
  7. package/AUTHORS +3 -0
  8. package/WATCHLISTS +0 -4
  9. package/config/gni/devtools_grd_files.gni +92 -47
  10. package/config/gni/devtools_image_files.gni +8 -0
  11. package/config/gni/i18n.gni +3 -2
  12. package/config/owner/COMMON_OWNERS +2 -0
  13. package/docs/README.md +2 -2
  14. package/docs/architecture_of_devtools.md +8 -8
  15. package/docs/committers_policy.md +2 -0
  16. package/docs/contributing/README.md +29 -5
  17. package/docs/contributing/changes.md +1 -1
  18. package/docs/contributing/images/quickstart-vscode-tsversion.png +0 -0
  19. package/docs/contributing/infrastructure.md +89 -0
  20. package/docs/cookbook/localization.md +86 -79
  21. package/docs/get_the_code.md +9 -9
  22. package/docs/styleguide/ux/components.md +190 -2
  23. package/docs/styleguide/ux/glossary.md +16 -0
  24. package/docs/styleguide/ux/images/context-menu-example.png +0 -0
  25. package/docs/ui_engineering.md +80 -19
  26. package/eslint.config.mjs +64 -23
  27. package/extension-api/ExtensionAPI.d.ts +3 -0
  28. package/extensions/cxx_debugging/CMakeLists.txt +0 -6
  29. package/extensions/cxx_debugging/e2e/MochaRootHooks.ts +3 -1
  30. package/extensions/cxx_debugging/e2e/TestDriver.ts +1 -2
  31. package/extensions/cxx_debugging/src/GlobMatch.ts +1 -1
  32. package/extensions/cxx_debugging/src/ModuleConfiguration.ts +2 -2
  33. package/extensions/cxx_debugging/third_party/llvm/README.chromium +2 -0
  34. package/extensions/cxx_debugging/tools/bootstrap.py +7 -0
  35. package/front_end/Images/generate-css-vars.js +1 -1
  36. package/front_end/Images/readme.md +1 -2
  37. package/front_end/Images/rollup.config.mjs +12 -1
  38. package/front_end/Images/src/baseline-high-availability.svg +17 -0
  39. package/front_end/Images/src/baseline-limited-availability.svg +19 -0
  40. package/front_end/Images/src/baseline-low-availability.svg +31 -0
  41. package/front_end/Images/src/bucket.svg +4 -0
  42. package/front_end/Images/src/label-auto.svg +3 -0
  43. package/front_end/Images/src/shield.svg +3 -0
  44. package/front_end/Images/src/smart-assistant.svg +3 -1
  45. package/front_end/Images/src/speculative-loads.svg +1 -0
  46. package/front_end/Images/src/text-analysis.svg +3 -0
  47. package/front_end/Tests.js +78 -230
  48. package/front_end/application_tokens.css +7 -1
  49. package/front_end/core/common/Base64.test.ts +1 -1
  50. package/front_end/core/common/Base64.ts +3 -3
  51. package/front_end/core/common/Color.ts +38 -0
  52. package/front_end/core/common/Debouncer.ts +3 -3
  53. package/front_end/core/common/EventTarget.test.ts +1 -0
  54. package/front_end/core/common/Gzip.test.ts +63 -0
  55. package/front_end/core/common/Gzip.ts +72 -0
  56. package/front_end/core/common/ResourceType.ts +29 -29
  57. package/front_end/core/common/ReturnToPanel.ts +15 -0
  58. package/front_end/core/common/Revealer.ts +10 -10
  59. package/front_end/core/common/SettingRegistration.ts +22 -22
  60. package/front_end/core/common/Settings.test.ts +151 -18
  61. package/front_end/core/common/Settings.ts +99 -8
  62. package/front_end/core/common/SimpleHistoryManager.ts +0 -17
  63. package/front_end/core/common/common.ts +4 -0
  64. package/front_end/core/host/AidaClient.test.ts +103 -2
  65. package/front_end/core/host/AidaClient.ts +161 -31
  66. package/front_end/core/host/InspectorFrontendHost.ts +57 -48
  67. package/front_end/core/host/InspectorFrontendHostAPI.ts +11 -0
  68. package/front_end/core/host/ResourceLoader.ts +15 -15
  69. package/front_end/core/host/UserMetrics.ts +27 -13
  70. package/front_end/core/i18n/NumberFormatter.test.ts +92 -0
  71. package/front_end/core/i18n/NumberFormatter.ts +9 -9
  72. package/front_end/core/i18n/collect-ui-strings.js +3 -3
  73. package/front_end/core/i18n/time-utilities.ts +3 -14
  74. package/front_end/core/platform/Brand.ts +8 -1
  75. package/front_end/core/platform/DevToolsPath.ts +1 -1
  76. package/front_end/core/platform/StringUtilities.test.ts +54 -1
  77. package/front_end/core/platform/StringUtilities.ts +34 -8
  78. package/front_end/core/protocol_client/InspectorBackend.ts +9 -9
  79. package/front_end/core/root/Runtime.ts +52 -8
  80. package/front_end/core/sdk/AnimationModel.test.ts +0 -24
  81. package/front_end/core/sdk/AnimationModel.ts +1 -95
  82. package/front_end/core/sdk/AutofillModel.ts +8 -2
  83. package/front_end/core/sdk/CPUProfilerModel.ts +2 -2
  84. package/front_end/core/sdk/CSSContainerQuery.test.ts +15 -0
  85. package/front_end/core/sdk/CSSContainerQuery.ts +3 -1
  86. package/front_end/core/sdk/CSSMatchedStyles.test.ts +2 -1
  87. package/front_end/core/sdk/CSSMatchedStyles.ts +79 -50
  88. package/front_end/core/sdk/CSSModel.ts +20 -7
  89. package/front_end/core/sdk/CSSPropertyParser.test.ts +4 -3
  90. package/front_end/core/sdk/CSSPropertyParser.ts +12 -4
  91. package/front_end/core/sdk/CSSPropertyParserMatchers.test.ts +46 -15
  92. package/front_end/core/sdk/CSSPropertyParserMatchers.ts +131 -58
  93. package/front_end/core/sdk/CSSRule.ts +44 -44
  94. package/front_end/core/sdk/CSSStyleSheetHeader.ts +2 -6
  95. package/front_end/core/sdk/ChildTargetManager.ts +1 -1
  96. package/front_end/core/sdk/CompilerSourceMappingContentProvider.ts +3 -8
  97. package/front_end/core/sdk/Connections.ts +17 -30
  98. package/front_end/core/sdk/ConsoleModel.ts +9 -9
  99. package/front_end/core/sdk/DOMModel.ts +45 -16
  100. package/front_end/core/sdk/DebuggerModel.test.ts +7 -4
  101. package/front_end/core/sdk/DebuggerModel.ts +55 -11
  102. package/front_end/core/sdk/EmulationModel.ts +13 -0
  103. package/front_end/core/sdk/EventBreakpointsModel.ts +2 -2
  104. package/front_end/core/sdk/IOModel.ts +28 -2
  105. package/front_end/core/sdk/NetworkManager.test.ts +0 -27
  106. package/front_end/core/sdk/NetworkManager.ts +137 -105
  107. package/front_end/core/sdk/NetworkRequest.ts +747 -616
  108. package/front_end/core/sdk/OverlayModel.ts +4 -8
  109. package/front_end/core/sdk/PageResourceLoader.ts +32 -13
  110. package/front_end/core/sdk/PreloadingModel.ts +1 -0
  111. package/front_end/core/sdk/RehydratingConnection.ts +13 -14
  112. package/front_end/core/sdk/RemoteObject.test.ts +24 -2
  113. package/front_end/core/sdk/RemoteObject.ts +0 -3
  114. package/front_end/core/sdk/Resource.ts +0 -5
  115. package/front_end/core/sdk/RuntimeModel.ts +2 -1
  116. package/front_end/core/sdk/Script.ts +2 -7
  117. package/front_end/core/sdk/ServerTiming.ts +12 -12
  118. package/front_end/core/sdk/ServiceWorkerCacheModel.ts +7 -3
  119. package/front_end/core/sdk/ServiceWorkerManager.ts +14 -18
  120. package/front_end/core/sdk/SourceMap.test.ts +55 -73
  121. package/front_end/core/sdk/SourceMap.ts +14 -11
  122. package/front_end/core/sdk/SourceMapFunctionRanges.ts +15 -9
  123. package/front_end/core/sdk/SourceMapScopeChainEntry.test.ts +6 -5
  124. package/front_end/core/sdk/SourceMapScopeChainEntry.ts +14 -14
  125. package/front_end/core/sdk/SourceMapScopesInfo.test.ts +232 -317
  126. package/front_end/core/sdk/SourceMapScopesInfo.ts +26 -25
  127. package/front_end/core/sdk/StorageBucketsModel.ts +4 -0
  128. package/front_end/core/sdk/Target.ts +2 -2
  129. package/front_end/core/sdk/TargetManager.ts +1 -1
  130. package/front_end/core/sdk/sdk-meta.ts +86 -86
  131. package/front_end/core/sdk/sdk.ts +0 -2
  132. package/front_end/design_system_tokens.css +1 -1
  133. package/front_end/devtools_compatibility.js +201 -177
  134. package/front_end/entrypoints/inspector_main/InspectorMain.ts +12 -0
  135. package/front_end/entrypoints/inspector_main/OutermostTargetSelector.ts +3 -3
  136. package/front_end/entrypoints/inspector_main/RenderingOptions.ts +1 -1
  137. package/front_end/entrypoints/inspector_main/inspector_main-meta.ts +1 -1
  138. package/front_end/entrypoints/js_app/js_app.ts +3 -3
  139. package/front_end/entrypoints/lighthouse_worker/LighthouseWorkerService.ts +1 -1
  140. package/front_end/entrypoints/main/GlobalAiButton.test.ts +132 -0
  141. package/front_end/entrypoints/main/GlobalAiButton.ts +141 -0
  142. package/front_end/entrypoints/main/MainImpl.test.ts +27 -0
  143. package/front_end/entrypoints/main/MainImpl.ts +179 -47
  144. package/front_end/entrypoints/main/globalAiButton.css +72 -0
  145. package/front_end/entrypoints/main/main-meta.ts +82 -42
  146. package/front_end/entrypoints/main/main.ts +2 -0
  147. package/front_end/entrypoints/node_app/NodeConnectionsPanel.ts +6 -6
  148. package/front_end/entrypoints/node_app/NodeMain.ts +8 -7
  149. package/front_end/entrypoints/node_app/node_app.ts +5 -5
  150. package/front_end/entrypoints/wasmparser_worker/WasmParserWorker.ts +1 -1
  151. package/front_end/entrypoints/worker_app/WorkerMain.ts +1 -1
  152. package/front_end/generated/Deprecation.ts +7 -29
  153. package/front_end/generated/InspectorBackendCommands.js +183 -167
  154. package/front_end/generated/SupportedCSSProperties.js +252 -166
  155. package/front_end/generated/protocol-mapping.d.ts +687 -608
  156. package/front_end/generated/protocol-proxy-api.d.ts +782 -672
  157. package/front_end/generated/protocol.ts +11862 -11509
  158. package/front_end/global_typings/global_defs.d.ts +5 -0
  159. package/front_end/legacy_test_runner/accessibility_test_runner/accessibility_test_runner.js +1 -1
  160. package/front_end/legacy_test_runner/application_test_runner/CacheStorageTestRunner.js +1 -1
  161. package/front_end/legacy_test_runner/application_test_runner/IndexedDBTestRunner.js +1 -1
  162. package/front_end/legacy_test_runner/application_test_runner/ResourceTreeTestRunner.js +1 -1
  163. package/front_end/legacy_test_runner/application_test_runner/ResourcesTestRunner.js +1 -1
  164. package/front_end/legacy_test_runner/application_test_runner/ServiceWorkersTestRunner.js +1 -1
  165. package/front_end/legacy_test_runner/application_test_runner/StorageTestRunner.js +1 -1
  166. package/front_end/legacy_test_runner/axe_core_test_runner/axe_core_test_runner.js +1 -1
  167. package/front_end/legacy_test_runner/bindings_test_runner/AutomappingTestRunner.js +1 -1
  168. package/front_end/legacy_test_runner/bindings_test_runner/BindingsTestRunner.js +1 -1
  169. package/front_end/legacy_test_runner/bindings_test_runner/IsolatedFilesystemTestRunner.js +1 -1
  170. package/front_end/legacy_test_runner/bindings_test_runner/OverridesTestRunner.js +1 -1
  171. package/front_end/legacy_test_runner/bindings_test_runner/PersistenceTestRunner.js +1 -1
  172. package/front_end/legacy_test_runner/console_test_runner/console_test_runner.js +20 -20
  173. package/front_end/legacy_test_runner/coverage_test_runner/coverage_test_runner.js +11 -11
  174. package/front_end/legacy_test_runner/data_grid_test_runner/data_grid_test_runner.js +1 -1
  175. package/front_end/legacy_test_runner/device_mode_test_runner/device_mode_test_runner.js +1 -1
  176. package/front_end/legacy_test_runner/elements_test_runner/EditDOMTestRunner.js +1 -1
  177. package/front_end/legacy_test_runner/elements_test_runner/ElementsPanelShadowSelectionOnRefreshTestRunner.js +1 -1
  178. package/front_end/legacy_test_runner/elements_test_runner/ElementsTestRunner.js +6 -80
  179. package/front_end/legacy_test_runner/elements_test_runner/SetOuterHTMLTestRunner.js +1 -1
  180. package/front_end/legacy_test_runner/elements_test_runner/StylesUpdateLinksTestRunner.js +1 -1
  181. package/front_end/legacy_test_runner/extensions_test_runner/ExtensionsNetworkTestRunner.js +1 -1
  182. package/front_end/legacy_test_runner/extensions_test_runner/ExtensionsTestRunner.js +1 -1
  183. package/front_end/legacy_test_runner/heap_profiler_test_runner/heap_profiler_test_runner.js +2 -2
  184. package/front_end/legacy_test_runner/layers_test_runner/layers_test_runner.js +1 -1
  185. package/front_end/legacy_test_runner/network_test_runner/network_test_runner.js +1 -1
  186. package/front_end/legacy_test_runner/performance_test_runner/TimelineDataTestRunner.js +1 -1
  187. package/front_end/legacy_test_runner/performance_test_runner/TimelineTestRunner.js +1 -10
  188. package/front_end/legacy_test_runner/sdk_test_runner/sdk_test_runner.js +1 -1
  189. package/front_end/legacy_test_runner/security_test_runner/security_test_runner.js +1 -1
  190. package/front_end/legacy_test_runner/sources_test_runner/AutocompleteTestRunner.js +1 -1
  191. package/front_end/legacy_test_runner/sources_test_runner/DebuggerTestRunner.js +4 -4
  192. package/front_end/legacy_test_runner/sources_test_runner/EditorTestRunner.js +1 -1
  193. package/front_end/legacy_test_runner/sources_test_runner/LiveEditTestRunner.js +1 -1
  194. package/front_end/legacy_test_runner/sources_test_runner/SearchTestRunner.js +1 -1
  195. package/front_end/legacy_test_runner/sources_test_runner/SourcesTestRunner.js +2 -2
  196. package/front_end/legacy_test_runner/test_runner/TestRunner.js +45 -45
  197. package/front_end/legacy_test_runner/test_runner/test_runner.js +4 -4
  198. package/front_end/models/ai_assistance/AiHistoryStorage.snapshot.txt +66 -0
  199. package/front_end/models/ai_assistance/AiHistoryStorage.test.ts +82 -3
  200. package/front_end/models/ai_assistance/AiHistoryStorage.ts +95 -6
  201. package/front_end/models/ai_assistance/AiUtils.ts +1 -1
  202. package/front_end/models/ai_assistance/ConversationHandler.test.ts +355 -0
  203. package/front_end/models/ai_assistance/ConversationHandler.ts +380 -0
  204. package/front_end/models/ai_assistance/ExtensionScope.ts +1 -4
  205. package/front_end/models/ai_assistance/README.md +79 -0
  206. package/front_end/models/ai_assistance/agents/AiAgent.test.ts +22 -1
  207. package/front_end/models/ai_assistance/agents/AiAgent.ts +76 -95
  208. package/front_end/models/ai_assistance/agents/FileAgent.test.ts +3 -2
  209. package/front_end/models/ai_assistance/agents/FileAgent.ts +1 -1
  210. package/front_end/models/ai_assistance/agents/NetworkAgent.ts +7 -7
  211. package/front_end/models/ai_assistance/agents/PerformanceAgent.test.ts +591 -62
  212. package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +1111 -117
  213. package/front_end/models/ai_assistance/agents/PerformanceAnnotationsAgent.test.ts +4 -2
  214. package/front_end/models/ai_assistance/agents/PerformanceAnnotationsAgent.ts +75 -5
  215. package/front_end/models/ai_assistance/agents/StylingAgent.test.ts +166 -507
  216. package/front_end/models/ai_assistance/agents/StylingAgent.ts +125 -319
  217. package/front_end/models/ai_assistance/ai_assistance.ts +2 -1
  218. package/front_end/models/ai_assistance/data_formatters/FileFormatter.test.ts +3 -2
  219. package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.snapshot.txt +725 -0
  220. package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.test.ts +249 -274
  221. package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.ts +494 -83
  222. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +556 -0
  223. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.test.ts +92 -0
  224. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +359 -0
  225. package/front_end/models/ai_assistance/debug.ts +1 -1
  226. package/front_end/models/ai_assistance/injected.ts +1 -1
  227. package/front_end/models/ai_code_completion/AiCodeCompletion.test.ts +328 -0
  228. package/front_end/models/ai_code_completion/AiCodeCompletion.ts +289 -0
  229. package/front_end/models/ai_code_completion/ai_code_completion.ts +6 -0
  230. package/front_end/models/ai_code_completion/debug.ts +30 -0
  231. package/front_end/models/autofill_manager/AutofillManager.test.ts +0 -6
  232. package/front_end/models/autofill_manager/AutofillManager.ts +16 -9
  233. package/front_end/models/bindings/CSSWorkspaceBinding.ts +0 -4
  234. package/front_end/models/bindings/CompilerScriptMapping.test.ts +8 -4
  235. package/front_end/models/bindings/CompilerScriptMapping.ts +12 -5
  236. package/front_end/models/bindings/DebuggerLanguagePlugins.test.ts +7 -2
  237. package/front_end/models/bindings/DebuggerLanguagePlugins.ts +33 -24
  238. package/front_end/models/bindings/DebuggerWorkspaceBinding.test.ts +95 -3
  239. package/front_end/models/bindings/DebuggerWorkspaceBinding.ts +94 -21
  240. package/front_end/models/bindings/DefaultScriptMapping.test.ts +3 -2
  241. package/front_end/models/bindings/FileUtils.test.ts +1 -10
  242. package/front_end/models/bindings/FileUtils.ts +6 -22
  243. package/front_end/models/bindings/LiveLocation.ts +0 -5
  244. package/front_end/models/bindings/PresentationConsoleMessageHelper.test.ts +7 -2
  245. package/front_end/models/bindings/PresentationConsoleMessageHelper.ts +0 -4
  246. package/front_end/models/bindings/ResourceMapping.test.ts +7 -2
  247. package/front_end/models/bindings/ResourceMapping.ts +0 -4
  248. package/front_end/models/bindings/ResourceScriptMapping.test.ts +2 -1
  249. package/front_end/models/bindings/ResourceScriptMapping.ts +4 -4
  250. package/front_end/models/bindings/SASSSourceMapping.ts +1 -1
  251. package/front_end/models/bindings/StylesSourceMapping.ts +0 -5
  252. package/front_end/models/bindings/bindings.ts +0 -2
  253. package/front_end/models/breakpoints/BreakpointManager.test.ts +9 -2
  254. package/front_end/models/cpu_profile/CPUProfileDataModel.ts +4 -2
  255. package/front_end/models/elements/ElementUpdateRecord.ts +101 -0
  256. package/front_end/models/elements/elements.ts +9 -0
  257. package/front_end/models/emulation/DeviceModeModel.ts +6 -22
  258. package/front_end/models/emulation/EmulatedDevices.ts +12 -12
  259. package/front_end/models/extensions/ExtensionAPI.ts +9 -5
  260. package/front_end/models/extensions/ExtensionPanel.ts +5 -2
  261. package/front_end/models/extensions/ExtensionServer.test.ts +122 -16
  262. package/front_end/models/extensions/ExtensionServer.ts +114 -31
  263. package/front_end/models/extensions/ExtensionView.ts +1 -1
  264. package/front_end/models/extensions/LanguageExtensionEndpoint.ts +14 -7
  265. package/front_end/models/har/HARFormat.ts +1 -1
  266. package/front_end/models/har/Importer.test.ts +40 -0
  267. package/front_end/models/har/Importer.ts +35 -1
  268. package/front_end/models/har/Writer.test.ts +3 -2
  269. package/front_end/models/har/Writer.ts +2 -2
  270. package/front_end/models/issues_manager/BounceTrackingIssue.ts +1 -1
  271. package/front_end/models/issues_manager/ClientHintIssue.ts +1 -1
  272. package/front_end/models/issues_manager/ContentSecurityPolicyIssue.ts +5 -5
  273. package/front_end/models/issues_manager/CookieIssue.ts +2 -2
  274. package/front_end/models/issues_manager/CorsIssue.ts +3 -3
  275. package/front_end/models/issues_manager/CrossOriginEmbedderPolicyIssue.ts +2 -2
  276. package/front_end/models/issues_manager/{SelectElementAccessibilityIssue.test.ts → ElementAccessibilityIssue.test.ts} +22 -21
  277. package/front_end/models/issues_manager/{SelectElementAccessibilityIssue.ts → ElementAccessibilityIssue.ts} +29 -21
  278. package/front_end/models/issues_manager/FederatedAuthRequestIssue.ts +1 -1
  279. package/front_end/models/issues_manager/FederatedAuthUserInfoRequestIssue.ts +1 -1
  280. package/front_end/models/issues_manager/GenericIssue.ts +4 -4
  281. package/front_end/models/issues_manager/HeavyAdIssue.ts +1 -1
  282. package/front_end/models/issues_manager/Issue.ts +6 -6
  283. package/front_end/models/issues_manager/IssuesManager.ts +8 -3
  284. package/front_end/models/issues_manager/LowTextContrastIssue.ts +1 -1
  285. package/front_end/models/issues_manager/MarkdownIssueDescription.ts +1 -1
  286. package/front_end/models/issues_manager/MixedContentIssue.ts +1 -1
  287. package/front_end/models/issues_manager/PartitioningBlobURLIssue.ts +2 -2
  288. package/front_end/models/issues_manager/QuirksModeIssue.ts +1 -1
  289. package/front_end/models/issues_manager/SRIMessageSignatureIssue.ts +3 -3
  290. package/front_end/models/issues_manager/SharedArrayBufferIssue.ts +1 -1
  291. package/front_end/models/issues_manager/SharedDictionaryIssue.ts +1 -1
  292. package/front_end/models/issues_manager/UnencodedDigestIssue.test.ts +49 -0
  293. package/front_end/models/issues_manager/UnencodedDigestIssue.ts +88 -0
  294. package/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderValueNotInnerList.md +1 -1
  295. package/front_end/models/issues_manager/descriptions/sriValidationFailedIntegrityMismatch.md +1 -3
  296. package/front_end/models/issues_manager/descriptions/summaryElementAccessibilityInteractiveContentSummaryDescendant.md +3 -0
  297. package/front_end/models/issues_manager/descriptions/unencodedDigestIncorrectDigestLength.md +12 -0
  298. package/front_end/models/issues_manager/descriptions/unencodedDigestIncorrectDigestType.md +17 -0
  299. package/front_end/models/issues_manager/descriptions/unencodedDigestMalformedDictionary.md +14 -0
  300. package/front_end/models/issues_manager/descriptions/unencodedDigestUnknownAlgorithm.md +15 -0
  301. package/front_end/models/issues_manager/descriptions/userReidentificationBlocked.md +1 -1
  302. package/front_end/models/issues_manager/issues_manager.ts +4 -2
  303. package/front_end/models/javascript_metadata/NativeFunctions.js +201 -127
  304. package/front_end/models/live-metrics/web-vitals-injected/OnEachInteraction.ts +1 -1
  305. package/front_end/models/live-metrics/web-vitals-injected/rollup.config.mjs +1 -1
  306. package/front_end/models/logs/NetworkLog.ts +74 -83
  307. package/front_end/models/logs/logs-meta.ts +4 -4
  308. package/front_end/models/persistence/AutomaticFileSystemManager.test.ts +0 -39
  309. package/front_end/models/persistence/AutomaticFileSystemManager.ts +14 -21
  310. package/front_end/models/persistence/EditFileSystemView.ts +6 -6
  311. package/front_end/models/persistence/IsolatedFileSystem.ts +27 -9
  312. package/front_end/models/persistence/IsolatedFileSystemManager.ts +16 -3
  313. package/front_end/models/persistence/NetworkPersistenceManager.ts +7 -3
  314. package/front_end/models/persistence/PersistenceAction.test.ts +10 -7
  315. package/front_end/models/persistence/PersistenceActions.ts +26 -15
  316. package/front_end/models/persistence/PersistenceImpl.test.ts +2 -1
  317. package/front_end/models/persistence/PersistenceImpl.ts +7 -4
  318. package/front_end/models/persistence/PersistenceUtils.ts +10 -7
  319. package/front_end/models/persistence/PlatformFileSystem.ts +11 -2
  320. package/front_end/models/persistence/WorkspaceSettingsTab.ts +6 -6
  321. package/front_end/models/persistence/editFileSystemView.css +17 -15
  322. package/front_end/models/persistence/persistence-meta.ts +10 -10
  323. package/front_end/models/persistence/workspaceSettingsTab.css +29 -27
  324. package/front_end/models/project_settings/ProjectSettingsModel.ts +2 -2
  325. package/front_end/models/source_map_scopes/NamesResolver.test.ts +3 -2
  326. package/front_end/models/source_map_scopes/NamesResolver.ts +1 -1
  327. package/front_end/models/source_map_scopes/ScopeChainModel.test.ts +2 -1
  328. package/front_end/models/stack_trace/README.md +14 -0
  329. package/front_end/models/stack_trace/StackTrace.ts +35 -0
  330. package/front_end/models/stack_trace/StackTraceImpl.test.ts +74 -0
  331. package/front_end/models/stack_trace/StackTraceImpl.ts +82 -0
  332. package/front_end/models/stack_trace/StackTraceModel.test.ts +296 -0
  333. package/front_end/models/stack_trace/StackTraceModel.ts +127 -0
  334. package/front_end/models/stack_trace/Trie.test.ts +129 -0
  335. package/front_end/models/stack_trace/Trie.ts +154 -0
  336. package/front_end/models/stack_trace/stack_trace.ts +9 -0
  337. package/front_end/models/stack_trace/stack_trace_impl.ts +13 -0
  338. package/front_end/models/text_utils/ContentProvider.ts +1 -3
  339. package/front_end/models/text_utils/StaticContentProvider.test.ts +1 -1
  340. package/front_end/models/text_utils/StaticContentProvider.ts +1 -5
  341. package/front_end/models/text_utils/TextUtils.ts +2 -3
  342. package/front_end/models/trace/LanternComputationData.ts +1 -0
  343. package/front_end/models/trace/ModelImpl.ts +18 -7
  344. package/front_end/models/trace/Processor.test.ts +15 -14
  345. package/front_end/models/trace/Processor.ts +49 -32
  346. package/front_end/models/trace/extras/ScriptDuplication.test.ts +13 -10
  347. package/front_end/models/trace/extras/StackTraceForEvent.test.ts +10 -8
  348. package/front_end/models/trace/extras/ThirdParties.ts +2 -3
  349. package/front_end/models/trace/extras/TraceTree.ts +7 -6
  350. package/front_end/models/trace/extras/extras.ts +0 -2
  351. package/front_end/models/trace/handlers/AnimationFramesHandler.test.ts +5 -5
  352. package/front_end/models/trace/handlers/AnimationFramesHandler.ts +10 -0
  353. package/front_end/models/trace/handlers/ExtensionTraceDataHandler.test.ts +177 -85
  354. package/front_end/models/trace/handlers/ExtensionTraceDataHandler.ts +28 -27
  355. package/front_end/models/trace/handlers/FramesHandler.test.ts +2 -7
  356. package/front_end/models/trace/handlers/FramesHandler.ts +46 -37
  357. package/front_end/models/trace/handlers/ImagePaintingHandler.test.ts +41 -0
  358. package/front_end/models/trace/handlers/ImagePaintingHandler.ts +44 -1
  359. package/front_end/models/trace/handlers/InitiatorsHandler.test.ts +62 -15
  360. package/front_end/models/trace/handlers/InitiatorsHandler.ts +24 -0
  361. package/front_end/models/trace/handlers/LayoutShiftsHandler.test.ts +6 -18
  362. package/front_end/models/trace/handlers/LayoutShiftsHandler.ts +21 -17
  363. package/front_end/models/trace/handlers/MetaHandler.test.ts +12 -0
  364. package/front_end/models/trace/handlers/MetaHandler.ts +5 -4
  365. package/front_end/models/trace/handlers/NetworkRequestsHandler.test.ts +21 -21
  366. package/front_end/models/trace/handlers/NetworkRequestsHandler.ts +79 -32
  367. package/front_end/models/trace/handlers/PageLoadMetricsHandler.test.ts +6 -18
  368. package/front_end/models/trace/handlers/RendererHandler.test.ts +26 -39
  369. package/front_end/models/trace/handlers/RendererHandler.ts +10 -17
  370. package/front_end/models/trace/handlers/SamplesHandler.test.ts +3 -4
  371. package/front_end/models/trace/handlers/SamplesHandler.ts +13 -12
  372. package/front_end/models/trace/handlers/ScriptsHandler.test.ts +1 -1
  373. package/front_end/models/trace/handlers/ScriptsHandler.ts +8 -4
  374. package/front_end/models/trace/handlers/SelectorStatsHandler.test.ts +1 -3
  375. package/front_end/models/trace/handlers/SelectorStatsHandler.ts +65 -0
  376. package/front_end/models/trace/handlers/UserInteractionsHandler.test.ts +4 -2
  377. package/front_end/models/trace/handlers/UserInteractionsHandler.ts +4 -2
  378. package/front_end/models/trace/handlers/UserTimingsHandler.test.ts +326 -0
  379. package/front_end/models/trace/handlers/UserTimingsHandler.ts +61 -24
  380. package/front_end/models/trace/handlers/helpers.test.ts +7 -6
  381. package/front_end/models/trace/handlers/helpers.ts +19 -14
  382. package/front_end/models/trace/handlers/types.ts +5 -1
  383. package/front_end/models/trace/helpers/SamplesIntegrator.test.ts +3 -3
  384. package/front_end/models/trace/helpers/SamplesIntegrator.ts +24 -33
  385. package/front_end/models/trace/helpers/SyntheticEvents.ts +2 -2
  386. package/front_end/models/trace/helpers/Timing.ts +66 -3
  387. package/front_end/models/trace/helpers/Trace.test.ts +6 -7
  388. package/front_end/models/trace/helpers/Trace.ts +47 -19
  389. package/front_end/models/trace/helpers/TreeHelpers.test.ts +0 -8
  390. package/front_end/models/trace/helpers/TreeHelpers.ts +1 -1
  391. package/front_end/models/trace/insights/CLSCulprits.test.ts +10 -7
  392. package/front_end/models/trace/insights/CLSCulprits.ts +85 -23
  393. package/front_end/models/trace/insights/Cache.ts +12 -0
  394. package/front_end/models/trace/insights/Common.test.ts +3 -3
  395. package/front_end/models/trace/insights/Common.ts +56 -22
  396. package/front_end/models/trace/insights/DOMSize.test.ts +4 -1
  397. package/front_end/models/trace/insights/DOMSize.ts +48 -1
  398. package/front_end/models/trace/insights/DocumentLatency.test.ts +5 -1
  399. package/front_end/models/trace/insights/DocumentLatency.ts +59 -4
  400. package/front_end/models/trace/insights/DuplicatedJavaScript.test.ts +2 -3
  401. package/front_end/models/trace/insights/DuplicatedJavaScript.ts +15 -4
  402. package/front_end/models/trace/insights/FontDisplay.test.ts +1 -1
  403. package/front_end/models/trace/insights/FontDisplay.ts +8 -0
  404. package/front_end/models/trace/insights/ForcedReflow.ts +25 -4
  405. package/front_end/models/trace/insights/{InteractionToNextPaint.test.ts → INPBreakdown.test.ts} +2 -2
  406. package/front_end/models/trace/insights/{InteractionToNextPaint.ts → INPBreakdown.ts} +63 -16
  407. package/front_end/models/trace/insights/ImageDelivery.ts +39 -7
  408. package/front_end/models/trace/insights/LCPBreakdown.test.ts +100 -0
  409. package/front_end/models/trace/insights/LCPBreakdown.ts +255 -0
  410. package/front_end/models/trace/insights/LCPDiscovery.ts +84 -8
  411. package/front_end/models/trace/insights/LegacyJavaScript.ts +14 -4
  412. package/front_end/models/trace/insights/Models.ts +2 -2
  413. package/front_end/models/trace/insights/ModernHTTP.test.ts +3 -2
  414. package/front_end/models/trace/insights/ModernHTTP.ts +35 -18
  415. package/front_end/models/trace/insights/NetworkDependencyTree.test.ts +10 -1
  416. package/front_end/models/trace/insights/NetworkDependencyTree.ts +41 -13
  417. package/front_end/models/trace/insights/RenderBlocking.test.ts +8 -12
  418. package/front_end/models/trace/insights/RenderBlocking.ts +13 -1
  419. package/front_end/models/trace/insights/SlowCSSSelector.test.ts +12 -34
  420. package/front_end/models/trace/insights/SlowCSSSelector.ts +46 -27
  421. package/front_end/models/trace/insights/ThirdParties.test.ts +1 -1
  422. package/front_end/models/trace/insights/ThirdParties.ts +36 -0
  423. package/front_end/models/trace/insights/Viewport.test.ts +16 -1
  424. package/front_end/models/trace/insights/Viewport.ts +41 -3
  425. package/front_end/models/trace/insights/types.ts +5 -2
  426. package/front_end/models/trace/lantern/core/NetworkAnalyzer.test.ts +4 -0
  427. package/front_end/models/trace/lantern/graph/BaseNode.ts +1 -1
  428. package/front_end/models/trace/lantern/simulation/SimulationTimingMap.ts +1 -1
  429. package/front_end/models/trace/trace.ts +0 -2
  430. package/front_end/models/trace/types/Configuration.ts +8 -0
  431. package/front_end/models/trace/types/Extensions.ts +24 -3
  432. package/front_end/models/trace/types/File.ts +5 -2
  433. package/front_end/models/trace/types/Overlays.ts +140 -0
  434. package/front_end/models/trace/types/Timing.ts +1 -0
  435. package/front_end/models/trace/types/TraceEvents.test.ts +2 -1
  436. package/front_end/models/trace/types/TraceEvents.ts +98 -62
  437. package/front_end/models/trace/types/types.ts +1 -0
  438. package/front_end/models/workspace/FileManager.ts +5 -3
  439. package/front_end/models/{bindings → workspace}/IgnoreListManager.test.ts +11 -7
  440. package/front_end/models/{bindings → workspace}/IgnoreListManager.ts +36 -33
  441. package/front_end/models/workspace/UISourceCode.test.ts +18 -17
  442. package/front_end/models/workspace/UISourceCode.ts +17 -7
  443. package/front_end/models/workspace/WorkspaceImpl.ts +1 -1
  444. package/front_end/models/workspace/workspace.ts +2 -0
  445. package/front_end/models/workspace_diff/WorkspaceDiff.test.ts +2 -0
  446. package/front_end/models/workspace_diff/WorkspaceDiff.ts +7 -2
  447. package/front_end/panels/accessibility/ARIAAttributesView.test.ts +101 -0
  448. package/front_end/panels/accessibility/ARIAAttributesView.ts +16 -4
  449. package/front_end/panels/accessibility/AXBreadcrumbsPane.ts +12 -9
  450. package/front_end/panels/accessibility/AccessibilityNodeView.ts +31 -28
  451. package/front_end/panels/accessibility/AccessibilitySidebarView.ts +8 -12
  452. package/front_end/panels/accessibility/AccessibilityStrings.ts +87 -87
  453. package/front_end/panels/accessibility/AccessibilitySubPane.ts +6 -6
  454. package/front_end/panels/accessibility/SourceOrderView.ts +95 -61
  455. package/front_end/panels/accessibility/accessibilityProperties.css +5 -0
  456. package/front_end/panels/ai_assistance/AiAssistancePanel.snapshot.txt +32 -0
  457. package/front_end/panels/ai_assistance/AiAssistancePanel.test.ts +465 -377
  458. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +289 -339
  459. package/front_end/panels/ai_assistance/PatchWidget.ts +30 -29
  460. package/front_end/panels/ai_assistance/SelectWorkspaceDialog.test.ts +11 -1
  461. package/front_end/panels/ai_assistance/SelectWorkspaceDialog.ts +29 -19
  462. package/front_end/panels/ai_assistance/aiAssistancePanel.css +1 -0
  463. package/front_end/panels/ai_assistance/ai_assistance-meta.ts +40 -20
  464. package/front_end/panels/ai_assistance/components/ChatView.test.ts +1 -0
  465. package/front_end/panels/ai_assistance/components/ChatView.ts +55 -44
  466. package/front_end/panels/ai_assistance/components/ExploreWidget.ts +10 -24
  467. package/front_end/panels/ai_assistance/components/UserActionRow.test.ts +4 -0
  468. package/front_end/panels/ai_assistance/components/UserActionRow.ts +25 -3
  469. package/front_end/panels/ai_assistance/components/chatView.css +0 -9
  470. package/front_end/panels/ai_assistance/components/exploreWidget.css +104 -102
  471. package/front_end/panels/ai_assistance/components/userActionRow.css +95 -94
  472. package/front_end/panels/ai_assistance/selectWorkspaceDialog.css +70 -69
  473. package/front_end/panels/animation/AnimationGroupPreviewUI.ts +1 -10
  474. package/front_end/panels/animation/AnimationTimeline.test.ts +6 -13
  475. package/front_end/panels/animation/AnimationTimeline.ts +183 -169
  476. package/front_end/panels/animation/AnimationUI.ts +4 -4
  477. package/front_end/panels/animation/animation.ts +0 -2
  478. package/front_end/panels/animation/animationTimeline.css +0 -67
  479. package/front_end/panels/application/AppManifestView.test.ts +21 -0
  480. package/front_end/panels/application/AppManifestView.ts +158 -139
  481. package/front_end/panels/application/ApplicationPanelSidebar.test.ts +13 -8
  482. package/front_end/panels/application/ApplicationPanelSidebar.ts +53 -54
  483. package/front_end/panels/application/BackForwardCacheTreeElement.ts +1 -1
  484. package/front_end/panels/application/BackgroundServiceView.test.ts +4 -8
  485. package/front_end/panels/application/BackgroundServiceView.ts +46 -44
  486. package/front_end/panels/application/CookieItemsView.ts +13 -14
  487. package/front_end/panels/application/DOMStorageItemsView.ts +5 -5
  488. package/front_end/panels/application/ExtensionStorageItemsView.ts +3 -3
  489. package/front_end/panels/application/IndexedDBModel.test.ts +2 -2
  490. package/front_end/panels/application/IndexedDBModel.ts +3 -0
  491. package/front_end/panels/application/IndexedDBViews.ts +58 -32
  492. package/front_end/panels/application/InterestGroupStorageModel.ts +3 -0
  493. package/front_end/panels/application/InterestGroupStorageView.ts +4 -4
  494. package/front_end/panels/application/InterestGroupTreeElement.ts +1 -1
  495. package/front_end/panels/application/KeyValueStorageItemsView.ts +10 -10
  496. package/front_end/panels/application/OpenedWindowDetailsView.ts +18 -18
  497. package/front_end/panels/application/PreloadingTreeElement.ts +5 -5
  498. package/front_end/panels/application/ReportingApiTreeElement.ts +1 -1
  499. package/front_end/panels/application/ReportingApiView.test.ts +161 -30
  500. package/front_end/panels/application/ReportingApiView.ts +153 -50
  501. package/front_end/panels/application/ServiceWorkerCacheTreeElement.ts +5 -5
  502. package/front_end/panels/application/ServiceWorkerCacheViews.ts +20 -17
  503. package/front_end/panels/application/ServiceWorkerUpdateCycleView.ts +7 -7
  504. package/front_end/panels/application/ServiceWorkersView.ts +40 -76
  505. package/front_end/panels/application/SharedStorageEventsView.test.ts +2 -2
  506. package/front_end/panels/application/SharedStorageEventsView.ts +10 -20
  507. package/front_end/panels/application/SharedStorageItemsView.ts +11 -11
  508. package/front_end/panels/application/SharedStorageListTreeElement.ts +1 -1
  509. package/front_end/panels/application/SharedStorageModel.ts +3 -0
  510. package/front_end/panels/application/StorageBucketsTreeElement.test.ts +5 -4
  511. package/front_end/panels/application/StorageBucketsTreeElement.ts +4 -4
  512. package/front_end/panels/application/StorageItemsToolbar.ts +7 -7
  513. package/front_end/panels/application/StorageView.test.ts +5 -1
  514. package/front_end/panels/application/StorageView.ts +15 -13
  515. package/front_end/panels/application/application-meta.ts +7 -7
  516. package/front_end/panels/application/application.ts +0 -2
  517. package/front_end/panels/application/components/BackForwardCacheStrings.ts +5 -0
  518. package/front_end/panels/application/components/BackForwardCacheView.ts +11 -37
  519. package/front_end/panels/application/components/BounceTrackingMitigationsView.ts +1 -0
  520. package/front_end/panels/application/components/EndpointsGrid.ts +6 -2
  521. package/front_end/panels/application/components/FrameDetailsView.test.ts +4 -2
  522. package/front_end/panels/application/components/FrameDetailsView.ts +88 -57
  523. package/front_end/panels/application/components/InterestGroupAccessGrid.ts +9 -10
  524. package/front_end/panels/application/components/OriginTrialTreeView.ts +13 -22
  525. package/front_end/panels/application/components/PermissionsPolicySection.ts +11 -16
  526. package/front_end/panels/application/components/ProtocolHandlersView.ts +10 -10
  527. package/front_end/panels/application/components/ReportsGrid.ts +10 -11
  528. package/front_end/panels/application/components/SharedStorageAccessGrid.test.ts +4 -4
  529. package/front_end/panels/application/components/SharedStorageAccessGrid.ts +107 -101
  530. package/front_end/panels/application/components/SharedStorageMetadataView.ts +8 -8
  531. package/front_end/panels/application/components/StackTrace.ts +6 -12
  532. package/front_end/panels/application/components/StorageMetadataView.ts +22 -26
  533. package/front_end/panels/application/components/TrustTokensView.ts +3 -3
  534. package/front_end/panels/application/components/frameDetailsReportView.css +1 -1
  535. package/front_end/panels/application/components/sharedStorageAccessGrid.css +19 -17
  536. package/front_end/panels/application/preloading/PreloadingView.ts +29 -24
  537. package/front_end/panels/application/preloading/components/MismatchedPreloadingGrid.ts +9 -9
  538. package/front_end/panels/application/preloading/components/PreloadingDetailsReportView.ts +22 -22
  539. package/front_end/panels/application/preloading/components/PreloadingDisabledInfobar.ts +28 -29
  540. package/front_end/panels/application/preloading/components/PreloadingGrid.ts +5 -7
  541. package/front_end/panels/application/preloading/components/PreloadingMismatchedHeadersGrid.test.ts +2 -2
  542. package/front_end/panels/application/preloading/components/PreloadingMismatchedHeadersGrid.ts +4 -4
  543. package/front_end/panels/application/preloading/components/PreloadingString.ts +34 -34
  544. package/front_end/panels/application/preloading/components/RuleSetDetailsView.test.ts +28 -1
  545. package/front_end/panels/application/preloading/components/RuleSetDetailsView.ts +4 -10
  546. package/front_end/panels/application/preloading/components/RuleSetGrid.test.ts +21 -0
  547. package/front_end/panels/application/preloading/components/RuleSetGrid.ts +10 -10
  548. package/front_end/panels/application/preloading/components/UsedPreloadingView.ts +22 -23
  549. package/front_end/panels/application/resourcesSidebar.css +0 -4
  550. package/front_end/panels/autofill/AutofillView.test.ts +188 -259
  551. package/front_end/panels/autofill/AutofillView.ts +207 -217
  552. package/front_end/panels/autofill/autofill-meta.ts +3 -4
  553. package/front_end/panels/autofill/autofillView.css +85 -82
  554. package/front_end/panels/browser_debugger/CategorizedBreakpointsSidebarPane.test.ts +179 -0
  555. package/front_end/panels/browser_debugger/CategorizedBreakpointsSidebarPane.ts +146 -35
  556. package/front_end/panels/browser_debugger/DOMBreakpointsSidebarPane.ts +27 -27
  557. package/front_end/panels/browser_debugger/ObjectEventListenersSidebarPane.ts +3 -2
  558. package/front_end/panels/browser_debugger/XHRBreakpointsSidebarPane.ts +16 -14
  559. package/front_end/panels/browser_debugger/browser_debugger-meta.ts +17 -17
  560. package/front_end/panels/browser_debugger/browser_debugger.ts +2 -0
  561. package/front_end/panels/changes/ChangesSidebar.ts +7 -7
  562. package/front_end/panels/changes/ChangesView.ts +6 -5
  563. package/front_end/panels/changes/CombinedDiffView.test.ts +2 -0
  564. package/front_end/panels/changes/CombinedDiffView.ts +2 -2
  565. package/front_end/panels/common/AiCodeCompletionDisclaimer.test.ts +57 -0
  566. package/front_end/panels/common/AiCodeCompletionDisclaimer.ts +186 -0
  567. package/front_end/panels/common/AiCodeCompletionSummaryToolbar.test.ts +85 -0
  568. package/front_end/panels/common/AiCodeCompletionSummaryToolbar.ts +139 -0
  569. package/front_end/panels/common/AiCodeCompletionTeaser.test.ts +98 -0
  570. package/front_end/panels/common/AiCodeCompletionTeaser.ts +258 -0
  571. package/front_end/panels/common/FreDialog.ts +139 -0
  572. package/front_end/panels/common/aiCodeCompletionDisclaimer.css +57 -0
  573. package/front_end/panels/common/aiCodeCompletionSummaryToolbar.css +101 -0
  574. package/front_end/panels/common/aiCodeCompletionTeaser.css +42 -0
  575. package/front_end/panels/common/common.css +0 -83
  576. package/front_end/panels/common/common.ts +8 -107
  577. package/front_end/panels/common/freDialog.css +88 -0
  578. package/front_end/panels/console/ConsoleContextSelector.ts +5 -5
  579. package/front_end/panels/console/ConsoleFormat.test.ts +1 -1
  580. package/front_end/panels/console/ConsolePanel.ts +1 -2
  581. package/front_end/panels/console/ConsolePinPane.ts +9 -9
  582. package/front_end/panels/console/ConsolePrompt.test.ts +47 -1
  583. package/front_end/panels/console/ConsolePrompt.ts +188 -19
  584. package/front_end/panels/console/ConsoleSidebar.test.ts +130 -0
  585. package/front_end/panels/console/ConsoleSidebar.ts +170 -207
  586. package/front_end/panels/console/ConsoleView.test.ts +4 -4
  587. package/front_end/panels/console/ConsoleView.ts +146 -54
  588. package/front_end/panels/console/ConsoleViewMessage.test.ts +1 -1
  589. package/front_end/panels/console/ConsoleViewMessage.ts +66 -71
  590. package/front_end/panels/console/console-meta.ts +27 -27
  591. package/front_end/panels/console/consoleSidebar.css +2 -0
  592. package/front_end/panels/console/consoleView.css +22 -15
  593. package/front_end/panels/console_counters/WarningErrorCounter.ts +133 -100
  594. package/front_end/panels/coverage/CoverageDecorationManager.test.ts +2 -1
  595. package/front_end/panels/coverage/CoverageListView.ts +30 -30
  596. package/front_end/panels/coverage/CoverageView.test.ts +3 -2
  597. package/front_end/panels/coverage/CoverageView.ts +35 -34
  598. package/front_end/panels/coverage/coverage-meta.ts +7 -7
  599. package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +49 -49
  600. package/front_end/panels/css_overview/CSSOverviewPanel.test.ts +3 -3
  601. package/front_end/panels/css_overview/CSSOverviewPanel.ts +1 -1
  602. package/front_end/panels/css_overview/CSSOverviewProcessingView.ts +3 -3
  603. package/front_end/panels/css_overview/CSSOverviewSidebarPanel.ts +3 -3
  604. package/front_end/panels/css_overview/CSSOverviewStartView.ts +8 -8
  605. package/front_end/panels/css_overview/CSSOverviewUnusedDeclarations.ts +7 -7
  606. package/front_end/panels/css_overview/cssOverviewCompletedView.css +289 -287
  607. package/front_end/panels/css_overview/cssOverviewSidebarPanel.css +43 -42
  608. package/front_end/panels/css_overview/cssOverviewStartView.css +68 -66
  609. package/front_end/panels/css_overview/css_overview-meta.ts +2 -2
  610. package/front_end/panels/developer_resources/DeveloperResourcesListView.ts +14 -14
  611. package/front_end/panels/developer_resources/DeveloperResourcesView.ts +5 -5
  612. package/front_end/panels/developer_resources/developerResourcesListView.css +19 -18
  613. package/front_end/panels/developer_resources/developerResourcesView.css +32 -30
  614. package/front_end/panels/elements/AccessibilityTreeView.ts +2 -1
  615. package/front_end/panels/elements/CSSRuleValidator.test.ts +39 -0
  616. package/front_end/panels/elements/CSSRuleValidator.ts +41 -37
  617. package/front_end/panels/elements/CSSRuleValidatorHelper.ts +8 -0
  618. package/front_end/panels/elements/CSSValueTraceView.test.ts +2 -1
  619. package/front_end/panels/elements/CSSValueTraceView.ts +1 -2
  620. package/front_end/panels/elements/ClassesPaneWidget.ts +5 -3
  621. package/front_end/panels/elements/ColorSwatchPopoverIcon.ts +18 -9
  622. package/front_end/panels/elements/ComputedStyleWidget.ts +4 -3
  623. package/front_end/panels/elements/DOMLinkifier.ts +6 -4
  624. package/front_end/panels/elements/DOMTreeWidget.test.ts +58 -0
  625. package/front_end/panels/elements/ElementIssueUtils.ts +14 -9
  626. package/front_end/panels/elements/ElementStatePaneWidget.ts +3 -3
  627. package/front_end/panels/elements/ElementsPanel.test.ts +69 -2
  628. package/front_end/panels/elements/ElementsPanel.ts +105 -187
  629. package/front_end/panels/elements/ElementsSidebarPane.ts +1 -1
  630. package/front_end/panels/elements/ElementsTreeElement.test.ts +401 -0
  631. package/front_end/panels/elements/ElementsTreeElement.ts +434 -82
  632. package/front_end/panels/elements/ElementsTreeOutline.test.ts +9 -6
  633. package/front_end/panels/elements/ElementsTreeOutline.ts +425 -258
  634. package/front_end/panels/elements/ElementsTreeOutlineRenderer.ts +80 -0
  635. package/front_end/panels/elements/EventListenersWidget.test.ts +129 -0
  636. package/front_end/panels/elements/EventListenersWidget.ts +112 -78
  637. package/front_end/panels/elements/ImagePreviewPopover.ts +1 -1
  638. package/front_end/panels/elements/InspectElementModeController.test.ts +77 -2
  639. package/front_end/panels/elements/InspectElementModeController.ts +13 -2
  640. package/front_end/panels/elements/LayersWidget.ts +95 -63
  641. package/front_end/panels/elements/{components/LayoutPane.test.ts → LayoutPane.test.ts} +60 -49
  642. package/front_end/panels/elements/LayoutPane.ts +593 -0
  643. package/front_end/panels/elements/MarkerDecorator.ts +2 -2
  644. package/front_end/panels/elements/MetricsSidebarPane.ts +6 -6
  645. package/front_end/panels/elements/NodeStackTraceWidget.ts +16 -14
  646. package/front_end/panels/elements/PlatformFontsWidget.ts +8 -8
  647. package/front_end/panels/elements/PropertiesWidget.ts +2 -2
  648. package/front_end/panels/elements/PropertyRenderer.test.ts +1 -1
  649. package/front_end/panels/elements/PropertyRenderer.ts +8 -11
  650. package/front_end/panels/elements/ShortcutTreeElement.ts +157 -0
  651. package/front_end/panels/elements/StyleEditorWidget.ts +1 -1
  652. package/front_end/panels/elements/StylePropertiesSection.test.ts +10 -10
  653. package/front_end/panels/elements/StylePropertiesSection.ts +42 -44
  654. package/front_end/panels/elements/StylePropertyHighlighter.test.ts +32 -21
  655. package/front_end/panels/elements/StylePropertyHighlighter.ts +9 -11
  656. package/front_end/panels/elements/StylePropertyTreeElement.test.ts +111 -53
  657. package/front_end/panels/elements/StylePropertyTreeElement.ts +166 -100
  658. package/front_end/panels/elements/StylesSidebarPane.ts +47 -48
  659. package/front_end/panels/elements/TopLayerContainer.ts +8 -7
  660. package/front_end/panels/elements/WebCustomData.test.ts +2 -2
  661. package/front_end/panels/elements/components/AccessibilityTreeNode.ts +1 -1
  662. package/front_end/panels/elements/components/AdornerManager.ts +15 -0
  663. package/front_end/panels/elements/components/CSSHintDetailsView.ts +1 -1
  664. package/front_end/panels/elements/components/CSSPropertyDocsView.test.ts +101 -2
  665. package/front_end/panels/elements/components/CSSPropertyDocsView.ts +188 -5
  666. package/front_end/panels/elements/components/CSSPropertyIconResolver.test.ts +1 -1
  667. package/front_end/panels/elements/components/CSSPropertyIconResolver.ts +2 -2
  668. package/front_end/panels/elements/components/CSSVariableValueView.ts +5 -5
  669. package/front_end/panels/elements/components/ElementsBreadcrumbs.ts +2 -7
  670. package/front_end/panels/elements/components/ElementsTreeExpandButton.ts +1 -1
  671. package/front_end/panels/elements/components/QueryContainer.ts +1 -4
  672. package/front_end/panels/elements/components/components.ts +0 -4
  673. package/front_end/panels/elements/components/cssPropertyDocsView.css +12 -1
  674. package/front_end/panels/elements/components/cssVariableValueView.css +1 -0
  675. package/front_end/panels/elements/domLinkifier.css +36 -35
  676. package/front_end/panels/elements/elementStatePaneWidget.css +46 -45
  677. package/front_end/panels/elements/elements-meta.ts +4 -13
  678. package/front_end/panels/elements/elements.ts +4 -3
  679. package/front_end/panels/elements/elementsTreeOutline.css +2 -1
  680. package/front_end/panels/elements/layersWidget.css +2 -11
  681. package/front_end/panels/elements/layoutPane.css +145 -0
  682. package/front_end/panels/elements/metricsSidebarPane.css +1 -1
  683. package/front_end/panels/elements/nodeStackTraceWidget.css +5 -4
  684. package/front_end/panels/elements/platformFontsWidget.css +32 -31
  685. package/front_end/panels/elements/stylePropertiesTreeOutline.css +2 -2
  686. package/front_end/panels/elements/stylesSidebarPane.css +1 -0
  687. package/front_end/panels/emulation/DeviceModeToolbar.ts +13 -50
  688. package/front_end/panels/emulation/DeviceModeView.ts +3 -4
  689. package/front_end/panels/emulation/InspectedPagePlaceholder.ts +1 -1
  690. package/front_end/panels/emulation/MediaQueryInspector.ts +4 -2
  691. package/front_end/panels/emulation/emulation-meta.ts +7 -7
  692. package/front_end/panels/event_listeners/EventListenersView.test.ts +4 -4
  693. package/front_end/panels/event_listeners/EventListenersView.ts +34 -31
  694. package/front_end/panels/explain/PromptBuilder.test.ts +7 -2
  695. package/front_end/panels/explain/PromptBuilder.ts +3 -1
  696. package/front_end/panels/explain/components/ConsoleInsight.test.ts +14 -10
  697. package/front_end/panels/explain/components/ConsoleInsight.ts +13 -34
  698. package/front_end/panels/explain/explain-meta.ts +3 -3
  699. package/front_end/panels/issues/AffectedBlockedByResponseView.ts +4 -4
  700. package/front_end/panels/issues/AffectedCookiesView.ts +6 -6
  701. package/front_end/panels/issues/AffectedDescendantsWithinSelectElementView.ts +6 -6
  702. package/front_end/panels/issues/AffectedDirectivesView.ts +9 -9
  703. package/front_end/panels/issues/AffectedDocumentsInQuirksModeView.ts +4 -4
  704. package/front_end/panels/issues/AffectedElementsView.ts +1 -1
  705. package/front_end/panels/issues/AffectedElementsWithLowContrastView.ts +6 -6
  706. package/front_end/panels/issues/AffectedHeavyAdView.ts +7 -7
  707. package/front_end/panels/issues/AffectedMetadataAllowedSitesView.ts +1 -1
  708. package/front_end/panels/issues/AffectedResourcesView.ts +6 -6
  709. package/front_end/panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts +10 -10
  710. package/front_end/panels/issues/AffectedSourcesView.ts +1 -1
  711. package/front_end/panels/issues/AffectedTrackingSitesView.ts +1 -1
  712. package/front_end/panels/issues/CorsIssueDetailsView.ts +27 -27
  713. package/front_end/panels/issues/GenericIssueDetailsView.ts +3 -3
  714. package/front_end/panels/issues/HiddenIssuesRow.ts +55 -29
  715. package/front_end/panels/issues/IssueAggregator.ts +5 -11
  716. package/front_end/panels/issues/IssueKindView.ts +2 -2
  717. package/front_end/panels/issues/IssueView.ts +13 -13
  718. package/front_end/panels/issues/IssuesPane.ts +5 -4
  719. package/front_end/panels/issues/components/HideIssuesMenu.ts +1 -1
  720. package/front_end/panels/issues/issues-meta.ts +2 -2
  721. package/front_end/panels/js_timeline/js_timeline-meta.ts +6 -6
  722. package/front_end/panels/layer_viewer/LayerDetailsView.ts +43 -41
  723. package/front_end/panels/layer_viewer/LayerTreeOutline.ts +7 -7
  724. package/front_end/panels/layer_viewer/LayerViewHost.ts +1 -1
  725. package/front_end/panels/layer_viewer/Layers3DView.ts +19 -13
  726. package/front_end/panels/layer_viewer/PaintProfilerView.ts +9 -9
  727. package/front_end/panels/layer_viewer/TransformController.ts +14 -8
  728. package/front_end/panels/layer_viewer/layer_viewer-meta.ts +9 -9
  729. package/front_end/panels/layers/LayersPanel.ts +3 -3
  730. package/front_end/panels/layers/layers-meta.ts +2 -2
  731. package/front_end/panels/lighthouse/LighthouseController.ts +27 -27
  732. package/front_end/panels/lighthouse/LighthousePanel.ts +7 -7
  733. package/front_end/panels/lighthouse/LighthouseProtocolService.ts +31 -33
  734. package/front_end/panels/lighthouse/LighthouseReportRenderer.ts +4 -2
  735. package/front_end/panels/lighthouse/LighthouseReportSelector.ts +2 -4
  736. package/front_end/panels/lighthouse/LighthouseStartView.ts +4 -3
  737. package/front_end/panels/lighthouse/LighthouseStatusView.ts +31 -31
  738. package/front_end/panels/lighthouse/lighthouse-meta.ts +1 -1
  739. package/front_end/panels/lighthouse/lighthousePanel.css +9 -0
  740. package/front_end/panels/linear_memory_inspector/LinearMemoryInspectorController.ts +2 -2
  741. package/front_end/panels/linear_memory_inspector/LinearMemoryInspectorPane.ts +5 -6
  742. package/front_end/panels/linear_memory_inspector/components/LinearMemoryHighlightChipList.ts +6 -10
  743. package/front_end/panels/linear_memory_inspector/components/LinearMemoryInspector.ts +3 -3
  744. package/front_end/panels/linear_memory_inspector/components/LinearMemoryNavigator.ts +6 -6
  745. package/front_end/panels/linear_memory_inspector/components/LinearMemoryValueInterpreter.ts +2 -2
  746. package/front_end/panels/linear_memory_inspector/components/ValueInterpreterDisplay.ts +6 -7
  747. package/front_end/panels/linear_memory_inspector/components/ValueInterpreterDisplayUtils.ts +1 -1
  748. package/front_end/panels/linear_memory_inspector/components/ValueInterpreterSettings.ts +1 -1
  749. package/front_end/panels/linear_memory_inspector/linear_memory_inspector-meta.ts +2 -2
  750. package/front_end/panels/media/EventDisplayTable.ts +5 -7
  751. package/front_end/panels/media/EventTimelineView.ts +4 -4
  752. package/front_end/panels/media/MainView.test.ts +1 -1
  753. package/front_end/panels/media/MainView.ts +4 -4
  754. package/front_end/panels/media/MediaModel.ts +2 -2
  755. package/front_end/panels/media/PlayerDetailView.ts +8 -8
  756. package/front_end/panels/media/PlayerListView.ts +8 -8
  757. package/front_end/panels/media/PlayerMessagesView.ts +15 -17
  758. package/front_end/panels/media/PlayerPropertiesView.ts +66 -51
  759. package/front_end/panels/media/TickingFlameChart.ts +6 -5
  760. package/front_end/panels/media/media-meta.ts +3 -3
  761. package/front_end/panels/mobile_throttling/CalibrationController.ts +3 -4
  762. package/front_end/panels/mobile_throttling/MobileThrottlingSelector.ts +3 -3
  763. package/front_end/panels/mobile_throttling/NetworkPanelIndicator.ts +4 -4
  764. package/front_end/panels/mobile_throttling/NetworkThrottlingSelector.ts +189 -51
  765. package/front_end/panels/mobile_throttling/ThrottlingManager.test.ts +37 -1
  766. package/front_end/panels/mobile_throttling/ThrottlingManager.ts +114 -126
  767. package/front_end/panels/mobile_throttling/ThrottlingPresets.ts +8 -8
  768. package/front_end/panels/mobile_throttling/ThrottlingSettingsTab.test.ts +115 -0
  769. package/front_end/panels/mobile_throttling/ThrottlingSettingsTab.ts +178 -143
  770. package/front_end/panels/mobile_throttling/mobile_throttling-meta.ts +6 -6
  771. package/front_end/panels/mobile_throttling/throttlingSettingsTab.css +30 -36
  772. package/front_end/panels/network/BinaryResourceView.ts +7 -7
  773. package/front_end/panels/network/BlockedURLsPane.ts +18 -17
  774. package/front_end/panels/network/EventSourceMessagesView.ts +9 -10
  775. package/front_end/panels/network/NetworkConfigView.test.ts +35 -0
  776. package/front_end/panels/network/NetworkConfigView.ts +19 -17
  777. package/front_end/panels/network/NetworkDataGridNode.test.ts +19 -8
  778. package/front_end/panels/network/NetworkDataGridNode.ts +129 -90
  779. package/front_end/panels/network/NetworkItemView.test.ts +3 -3
  780. package/front_end/panels/network/NetworkItemView.ts +79 -79
  781. package/front_end/panels/network/NetworkLogView.test.ts +61 -23
  782. package/front_end/panels/network/NetworkLogView.ts +207 -130
  783. package/front_end/panels/network/NetworkLogViewColumns.ts +60 -63
  784. package/front_end/panels/network/NetworkManageCustomHeadersView.ts +5 -5
  785. package/front_end/panels/network/NetworkPanel.test.ts +3 -3
  786. package/front_end/panels/network/NetworkPanel.ts +69 -68
  787. package/front_end/panels/network/NetworkSearchScope.ts +1 -1
  788. package/front_end/panels/network/NetworkTimeCalculator.ts +35 -40
  789. package/front_end/panels/network/NetworkWaterfallColumn.ts +2 -12
  790. package/front_end/panels/network/RequestCookiesView.ts +10 -11
  791. package/front_end/panels/network/RequestHTMLView.ts +2 -2
  792. package/front_end/panels/network/RequestInitiatorView.ts +16 -16
  793. package/front_end/panels/network/RequestPayloadView.ts +12 -13
  794. package/front_end/panels/network/RequestPreviewView.ts +3 -4
  795. package/front_end/panels/network/RequestResponseView.test.ts +36 -0
  796. package/front_end/panels/network/RequestResponseView.ts +5 -5
  797. package/front_end/panels/network/RequestTimingView.ts +54 -54
  798. package/front_end/panels/network/ResourceChunkView.ts +13 -13
  799. package/front_end/panels/network/ResourceDirectSocketChunkView.ts +26 -17
  800. package/front_end/panels/network/ResourceWebSocketFrameView.ts +9 -9
  801. package/front_end/panels/network/SignedExchangeInfoView.ts +24 -24
  802. package/front_end/panels/network/binaryResourceView.css +1 -0
  803. package/front_end/panels/network/components/DirectSocketConnectionView.ts +18 -16
  804. package/front_end/panels/network/components/HeaderSectionRow.ts +17 -42
  805. package/front_end/panels/network/components/RequestHeaderSection.ts +6 -11
  806. package/front_end/panels/network/components/RequestHeadersView.css +2 -2
  807. package/front_end/panels/network/components/RequestHeadersView.test.ts +5 -2
  808. package/front_end/panels/network/components/RequestHeadersView.ts +24 -34
  809. package/front_end/panels/network/components/RequestTrustTokensView.ts +19 -23
  810. package/front_end/panels/network/components/ResponseHeaderSection.ts +16 -15
  811. package/front_end/panels/network/components/WebBundleInfoView.ts +4 -9
  812. package/front_end/panels/network/network-meta.ts +27 -27
  813. package/front_end/panels/network/networkConfigView.css +13 -6
  814. package/front_end/panels/network/networkLogView.css +1 -1
  815. package/front_end/panels/network/networkPanel.css +3 -2
  816. package/front_end/panels/network/requestHTMLView.css +9 -8
  817. package/front_end/panels/network/resourceChunkView.css +21 -28
  818. package/front_end/panels/performance_monitor/PerformanceMonitor.test.ts +121 -6
  819. package/front_end/panels/performance_monitor/PerformanceMonitor.ts +252 -168
  820. package/front_end/panels/performance_monitor/performanceMonitor.css +7 -9
  821. package/front_end/panels/performance_monitor/performance_monitor-meta.ts +7 -7
  822. package/front_end/panels/profiler/HeapDetachedElementsDataGrid.ts +19 -52
  823. package/front_end/panels/profiler/HeapDetachedElementsView.ts +9 -6
  824. package/front_end/panels/profiler/HeapProfileView.ts +24 -24
  825. package/front_end/panels/profiler/HeapProfilerPanel.ts +1 -1
  826. package/front_end/panels/profiler/HeapSnapshotDataGrids.ts +20 -20
  827. package/front_end/panels/profiler/HeapSnapshotGridNodes.ts +27 -27
  828. package/front_end/panels/profiler/HeapSnapshotProxy.ts +2 -6
  829. package/front_end/panels/profiler/HeapSnapshotView.ts +59 -56
  830. package/front_end/panels/profiler/HeapTimelineOverview.ts +1 -2
  831. package/front_end/panels/profiler/IsolateSelector.ts +16 -16
  832. package/front_end/panels/profiler/LiveHeapProfileView.ts +14 -14
  833. package/front_end/panels/profiler/ModuleUIStrings.ts +26 -26
  834. package/front_end/panels/profiler/ProfileDataGrid.ts +5 -5
  835. package/front_end/panels/profiler/ProfileHeader.ts +0 -9
  836. package/front_end/panels/profiler/ProfileLauncherView.ts +6 -6
  837. package/front_end/panels/profiler/ProfileSidebarTreeElement.ts +1 -1
  838. package/front_end/panels/profiler/ProfileView.ts +23 -20
  839. package/front_end/panels/profiler/ProfilesPanel.ts +9 -9
  840. package/front_end/panels/profiler/heapProfiler.css +8 -0
  841. package/front_end/panels/profiler/profiler-meta.ts +12 -12
  842. package/front_end/panels/protocol_monitor/JSONEditor.test.ts +2 -2
  843. package/front_end/panels/protocol_monitor/JSONEditor.ts +36 -19
  844. package/front_end/panels/protocol_monitor/ProtocolMonitor.test.ts +105 -103
  845. package/front_end/panels/protocol_monitor/ProtocolMonitor.ts +24 -25
  846. package/front_end/panels/protocol_monitor/protocolMonitor.css +15 -9
  847. package/front_end/panels/protocol_monitor/protocol_monitor-meta.ts +1 -1
  848. package/front_end/panels/recorder/RecorderController.test.ts +9 -2
  849. package/front_end/panels/recorder/RecorderController.ts +82 -85
  850. package/front_end/panels/recorder/components/CreateRecordingView.ts +2 -2
  851. package/front_end/panels/recorder/components/RecordingListView.test.ts +42 -53
  852. package/front_end/panels/recorder/components/RecordingListView.ts +141 -125
  853. package/front_end/panels/recorder/components/RecordingView.test.ts +73 -122
  854. package/front_end/panels/recorder/components/RecordingView.ts +912 -929
  855. package/front_end/panels/recorder/components/StepEditor.ts +13 -13
  856. package/front_end/panels/recorder/components/StepView.ts +23 -24
  857. package/front_end/panels/recorder/components/recordingListView.css +76 -75
  858. package/front_end/panels/recorder/components/recordingView.css +303 -308
  859. package/front_end/panels/recorder/components/stepView.css +197 -196
  860. package/front_end/panels/recorder/components/timelineSection.css +1 -1
  861. package/front_end/panels/recorder/injected/rollup.config.mjs +1 -1
  862. package/front_end/panels/recorder/injected/selectors/ARIASelector.ts +2 -2
  863. package/front_end/panels/recorder/injected/selectors/CSSSelector.ts +4 -4
  864. package/front_end/panels/recorder/injected/selectors/PierceSelector.ts +2 -2
  865. package/front_end/panels/recorder/injected/selectors/TextSelector.ts +2 -2
  866. package/front_end/panels/recorder/injected/selectors/XPath.ts +3 -3
  867. package/front_end/panels/recorder/models/RecorderSettings.ts +0 -1
  868. package/front_end/panels/recorder/models/RecordingPlayer.test.ts +48 -68
  869. package/front_end/panels/recorder/models/RecordingPlayer.ts +9 -9
  870. package/front_end/panels/recorder/models/RecordingSession.ts +3 -3
  871. package/front_end/panels/recorder/recorder-meta.ts +5 -5
  872. package/front_end/panels/recorder/recorderController.css +3 -3
  873. package/front_end/panels/screencast/ScreencastApp.ts +1 -1
  874. package/front_end/panels/screencast/ScreencastView.ts +13 -18
  875. package/front_end/panels/search/SearchResultsPane.ts +8 -8
  876. package/front_end/panels/search/SearchView.test.ts +2 -2
  877. package/front_end/panels/search/SearchView.ts +130 -127
  878. package/front_end/panels/search/searchResultsPane.css +2 -2
  879. package/front_end/panels/search/searchView.css +2 -2
  880. package/front_end/panels/security/CookieControlsView.ts +27 -27
  881. package/front_end/panels/security/CookieReportView.ts +40 -73
  882. package/front_end/panels/security/IPProtectionTreeElement.ts +21 -0
  883. package/front_end/panels/security/IPProtectionView.ts +179 -0
  884. package/front_end/panels/security/SecurityModel.ts +10 -10
  885. package/front_end/panels/security/SecurityPanel.test.ts +22 -0
  886. package/front_end/panels/security/SecurityPanel.ts +107 -107
  887. package/front_end/panels/security/SecurityPanelSidebar.ts +27 -11
  888. package/front_end/panels/security/ipProtectionView.css +109 -0
  889. package/front_end/panels/security/security-meta.ts +4 -4
  890. package/front_end/panels/security/security.ts +2 -0
  891. package/front_end/panels/sensors/LocationsSettingsTab.ts +32 -31
  892. package/front_end/panels/sensors/SensorsView.ts +50 -42
  893. package/front_end/panels/sensors/sensors-meta.ts +20 -20
  894. package/front_end/panels/settings/AISettingsTab.test.ts +19 -6
  895. package/front_end/panels/settings/AISettingsTab.ts +118 -72
  896. package/front_end/panels/settings/FrameworkIgnoreListSettingsTab.ts +22 -20
  897. package/front_end/panels/settings/KeybindsSettingsTab.ts +31 -30
  898. package/front_end/panels/settings/SettingsScreen.ts +19 -20
  899. package/front_end/panels/settings/components/SyncSection.test.ts +43 -9
  900. package/front_end/panels/settings/components/SyncSection.ts +63 -29
  901. package/front_end/panels/settings/components/syncSection.css +16 -7
  902. package/front_end/panels/settings/emulation/DevicesSettingsTab.ts +14 -16
  903. package/front_end/panels/settings/emulation/components/UserAgentClientHintsForm.test.ts +61 -0
  904. package/front_end/panels/settings/emulation/components/UserAgentClientHintsForm.ts +134 -28
  905. package/front_end/panels/settings/emulation/components/userAgentClientHintsForm.css +19 -0
  906. package/front_end/panels/settings/emulation/emulation-meta.ts +2 -2
  907. package/front_end/panels/settings/settings-meta.ts +12 -12
  908. package/front_end/panels/settings/settingsScreen.css +0 -1
  909. package/front_end/panels/snippets/ScriptSnippetFileSystem.ts +5 -5
  910. package/front_end/panels/snippets/SnippetsQuickOpen.ts +4 -4
  911. package/front_end/panels/sources/AddSourceMapURLDialog.ts +5 -5
  912. package/front_end/panels/sources/AiCodeCompletionPlugin.test.ts +119 -0
  913. package/front_end/panels/sources/AiCodeCompletionPlugin.ts +400 -0
  914. package/front_end/panels/sources/AiWarningInfobarPlugin.ts +3 -3
  915. package/front_end/panels/sources/BreakpointEditDialog.ts +13 -11
  916. package/front_end/panels/sources/{components/BreakpointsView.test.ts → BreakpointsView.test.ts} +237 -225
  917. package/front_end/panels/sources/{components/BreakpointsView.ts → BreakpointsView.ts} +336 -301
  918. package/front_end/panels/sources/{components/BreakpointsViewUtils.test.ts → BreakpointsViewUtils.test.ts} +29 -29
  919. package/front_end/panels/sources/{components/BreakpointsViewUtils.ts → BreakpointsViewUtils.ts} +3 -3
  920. package/front_end/panels/sources/CSSPlugin.ts +26 -17
  921. package/front_end/panels/sources/CallStackSidebarPane.ts +34 -58
  922. package/front_end/panels/sources/CategorizedBreakpointL10n.ts +18 -18
  923. package/front_end/panels/sources/CoveragePlugin.test.ts +2 -0
  924. package/front_end/panels/sources/CoveragePlugin.ts +5 -5
  925. package/front_end/panels/sources/DebuggerPausedMessage.test.ts +2 -0
  926. package/front_end/panels/sources/DebuggerPausedMessage.ts +33 -39
  927. package/front_end/panels/sources/DebuggerPlugin.test.ts +4 -3
  928. package/front_end/panels/sources/DebuggerPlugin.ts +68 -49
  929. package/front_end/panels/sources/FilteredUISourceCodeListProvider.test.ts +3 -4
  930. package/front_end/panels/sources/FilteredUISourceCodeListProvider.ts +7 -7
  931. package/front_end/panels/sources/GoToLineQuickOpen.ts +15 -15
  932. package/front_end/panels/sources/InplaceFormatterEditorAction.ts +9 -6
  933. package/front_end/panels/sources/NavigatorView.test.ts +2 -1
  934. package/front_end/panels/sources/NavigatorView.ts +39 -35
  935. package/front_end/panels/sources/OpenFileQuickOpen.ts +6 -6
  936. package/front_end/panels/sources/OutlineQuickOpen.ts +3 -3
  937. package/front_end/panels/sources/ProfilePlugin.ts +3 -3
  938. package/front_end/panels/sources/ResourceOriginPlugin.ts +1 -1
  939. package/front_end/panels/sources/ScopeChainSidebarPane.ts +11 -9
  940. package/front_end/panels/sources/SnippetsPlugin.ts +2 -2
  941. package/front_end/panels/sources/SourcesNavigator.test.ts +3 -2
  942. package/front_end/panels/sources/SourcesNavigator.ts +32 -20
  943. package/front_end/panels/sources/SourcesPanel.test.ts +90 -0
  944. package/front_end/panels/sources/SourcesPanel.ts +71 -28
  945. package/front_end/panels/sources/SourcesSearchScope.ts +1 -1
  946. package/front_end/panels/sources/SourcesView.test.ts +5 -2
  947. package/front_end/panels/sources/SourcesView.ts +7 -8
  948. package/front_end/panels/sources/TabbedEditorContainer.ts +11 -8
  949. package/front_end/panels/sources/ThreadsSidebarPane.ts +7 -10
  950. package/front_end/panels/sources/UISourceCodeFrame.test.ts +104 -0
  951. package/front_end/panels/sources/UISourceCodeFrame.ts +40 -17
  952. package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +14 -9
  953. package/front_end/panels/sources/breakpointsView.css +276 -0
  954. package/front_end/panels/sources/components/HeadersView.ts +17 -13
  955. package/front_end/panels/sources/components/components.ts +0 -4
  956. package/front_end/panels/sources/scopeChainSidebarPane.css +1 -1
  957. package/front_end/panels/sources/sources-meta.ts +103 -112
  958. package/front_end/panels/sources/sources.ts +6 -0
  959. package/front_end/panels/timeline/ActiveFilters.ts +2 -1
  960. package/front_end/panels/timeline/AnimationsTrackAppender.ts +1 -1
  961. package/front_end/panels/timeline/AnnotationHelpers.test.ts +14 -8
  962. package/front_end/panels/timeline/AnnotationHelpers.ts +28 -23
  963. package/front_end/panels/timeline/AppenderUtils.ts +2 -2
  964. package/front_end/panels/timeline/CompatibilityTracksAppender.ts +1 -14
  965. package/front_end/panels/timeline/CountersGraph.test.ts +80 -0
  966. package/front_end/panels/timeline/CountersGraph.ts +27 -18
  967. package/front_end/panels/timeline/EntriesFilter.test.ts +22 -15
  968. package/front_end/panels/timeline/EventsTimelineTreeView.ts +4 -25
  969. package/front_end/panels/timeline/ExtensionTrackAppender.ts +4 -9
  970. package/front_end/panels/timeline/GPUTrackAppender.ts +3 -3
  971. package/front_end/panels/timeline/Initiators.test.ts +22 -19
  972. package/front_end/panels/timeline/Initiators.ts +19 -6
  973. package/front_end/panels/timeline/InteractionsTrackAppender.ts +6 -6
  974. package/front_end/panels/timeline/IsolateSelector.ts +2 -2
  975. package/front_end/panels/timeline/LayoutShiftsTrackAppender.ts +6 -5
  976. package/front_end/panels/timeline/ModificationsManager.test.ts +98 -188
  977. package/front_end/panels/timeline/ModificationsManager.ts +51 -48
  978. package/front_end/panels/timeline/NetworkTrackAppender.ts +3 -3
  979. package/front_end/panels/timeline/README.md +5 -13
  980. package/front_end/{models/trace/extras/Metadata.test.ts → panels/timeline/RecordingMetadata.test.ts} +61 -29
  981. package/front_end/panels/timeline/RecordingMetadata.ts +79 -0
  982. package/front_end/panels/timeline/SaveFileFormatter.test.ts +1 -3
  983. package/front_end/panels/timeline/SaveFileFormatter.ts +0 -8
  984. package/front_end/panels/timeline/StatusDialog.ts +12 -8
  985. package/front_end/panels/timeline/ThirdPartyTreeView.ts +5 -5
  986. package/front_end/panels/timeline/ThreadAppender.ts +29 -29
  987. package/front_end/panels/timeline/TimelineController.ts +14 -18
  988. package/front_end/panels/timeline/TimelineDetailsView.test.ts +49 -15
  989. package/front_end/panels/timeline/TimelineDetailsView.ts +213 -105
  990. package/front_end/panels/timeline/TimelineEventOverview.ts +6 -6
  991. package/front_end/panels/timeline/TimelineFlameChartDataProvider.test.ts +56 -95
  992. package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +94 -65
  993. package/front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.test.ts +3 -62
  994. package/front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.ts +10 -30
  995. package/front_end/panels/timeline/TimelineFlameChartView.test.ts +105 -80
  996. package/front_end/panels/timeline/TimelineFlameChartView.ts +107 -102
  997. package/front_end/panels/timeline/TimelineHistoryManager.test.ts +0 -5
  998. package/front_end/panels/timeline/TimelineHistoryManager.ts +8 -8
  999. package/front_end/panels/timeline/TimelineLoader.test.ts +4 -7
  1000. package/front_end/panels/timeline/TimelineLoader.ts +22 -3
  1001. package/front_end/panels/timeline/TimelineMiniMap.ts +13 -5
  1002. package/front_end/panels/timeline/TimelinePaintProfilerView.ts +1 -1
  1003. package/front_end/panels/timeline/TimelinePanel.test.ts +381 -117
  1004. package/front_end/panels/timeline/TimelinePanel.ts +576 -345
  1005. package/front_end/panels/timeline/TimelineSelectorStatsView.ts +195 -80
  1006. package/front_end/panels/timeline/TimelineTreeView.test.ts +5 -5
  1007. package/front_end/panels/timeline/TimelineTreeView.ts +25 -25
  1008. package/front_end/panels/timeline/TimelineUIUtils.test.ts +58 -55
  1009. package/front_end/panels/timeline/TimelineUIUtils.ts +159 -345
  1010. package/front_end/panels/timeline/TimingsTrackAppender.ts +12 -7
  1011. package/front_end/panels/timeline/TrackConfigBanner.test.ts +68 -0
  1012. package/front_end/panels/timeline/TrackConfigBanner.ts +97 -0
  1013. package/front_end/panels/timeline/TrackConfiguration.test.ts +3 -3
  1014. package/front_end/panels/timeline/TrackConfiguration.ts +1 -0
  1015. package/front_end/panels/timeline/UIDevtoolsUtils.ts +15 -15
  1016. package/front_end/panels/timeline/components/BreadcrumbsUI.ts +4 -9
  1017. package/front_end/panels/timeline/components/DetailsView.ts +13 -13
  1018. package/front_end/panels/timeline/components/ExportTraceOptions.test.ts +281 -0
  1019. package/front_end/panels/timeline/components/ExportTraceOptions.ts +262 -0
  1020. package/front_end/panels/timeline/components/FieldSettingsDialog.test.ts +1 -1
  1021. package/front_end/panels/timeline/components/FieldSettingsDialog.ts +2 -1
  1022. package/front_end/panels/timeline/components/IgnoreListSetting.test.ts +5 -4
  1023. package/front_end/panels/timeline/components/IgnoreListSetting.ts +7 -7
  1024. package/front_end/panels/timeline/components/InteractionBreakdown.ts +3 -3
  1025. package/front_end/panels/timeline/components/Invalidations.test.ts +2 -1
  1026. package/front_end/panels/timeline/components/LayoutShiftDetails.test.ts +21 -11
  1027. package/front_end/panels/timeline/components/LayoutShiftDetails.ts +325 -307
  1028. package/front_end/panels/timeline/components/LiveMetricsView.test.ts +14 -22
  1029. package/front_end/panels/timeline/components/LiveMetricsView.ts +1 -1
  1030. package/front_end/panels/timeline/components/MetricCard.test.ts +2 -2
  1031. package/front_end/panels/timeline/components/NetworkRequestDetails.test.ts +38 -44
  1032. package/front_end/panels/timeline/components/NetworkRequestDetails.ts +318 -278
  1033. package/front_end/panels/timeline/components/NetworkRequestTooltip.ts +8 -8
  1034. package/front_end/panels/timeline/components/NetworkThrottlingSelector.test.ts +3 -0
  1035. package/front_end/panels/timeline/components/OriginMap.ts +1 -1
  1036. package/front_end/panels/timeline/components/RelatedInsightChips.test.ts +17 -31
  1037. package/front_end/panels/timeline/components/RelatedInsightChips.ts +87 -66
  1038. package/front_end/panels/timeline/components/Sidebar.test.ts +43 -4
  1039. package/front_end/panels/timeline/components/Sidebar.ts +47 -20
  1040. package/front_end/panels/timeline/components/SidebarAnnotationsTab.test.ts +47 -72
  1041. package/front_end/panels/timeline/components/SidebarAnnotationsTab.ts +228 -218
  1042. package/front_end/panels/timeline/components/SidebarInsightsTab.test.ts +1 -0
  1043. package/front_end/panels/timeline/components/SidebarInsightsTab.ts +18 -54
  1044. package/front_end/panels/timeline/components/SidebarSingleInsightSet.test.ts +7 -53
  1045. package/front_end/panels/timeline/components/SidebarSingleInsightSet.ts +61 -44
  1046. package/front_end/panels/timeline/components/TimelineSummary.ts +4 -4
  1047. package/front_end/panels/timeline/components/Utils.ts +9 -9
  1048. package/front_end/panels/timeline/components/components.ts +2 -0
  1049. package/front_end/panels/timeline/components/exportTraceOptions.css +26 -0
  1050. package/front_end/panels/timeline/components/insights/BaseInsightComponent.test.ts +40 -16
  1051. package/front_end/panels/timeline/components/insights/BaseInsightComponent.ts +28 -34
  1052. package/front_end/panels/timeline/components/insights/CLSCulprits.test.ts +5 -5
  1053. package/front_end/panels/timeline/components/insights/CLSCulprits.ts +32 -23
  1054. package/front_end/panels/timeline/components/insights/Cache.ts +4 -22
  1055. package/front_end/panels/timeline/components/insights/Checklist.ts +6 -7
  1056. package/front_end/panels/timeline/components/insights/DOMSize.ts +35 -15
  1057. package/front_end/panels/timeline/components/insights/DocumentLatency.ts +1 -61
  1058. package/front_end/panels/timeline/components/insights/DuplicatedJavaScript.ts +5 -17
  1059. package/front_end/panels/timeline/components/insights/EventRef.ts +7 -9
  1060. package/front_end/panels/timeline/components/insights/FontDisplay.ts +20 -21
  1061. package/front_end/panels/timeline/components/insights/ForcedReflow.ts +5 -28
  1062. package/front_end/panels/timeline/components/insights/{InteractionToNextPaint.test.ts → INPBreakdown.test.ts} +8 -5
  1063. package/front_end/panels/timeline/components/insights/INPBreakdown.ts +70 -0
  1064. package/front_end/panels/timeline/components/insights/ImageDelivery.ts +7 -21
  1065. package/front_end/panels/timeline/components/insights/LCPBreakdown.ts +146 -0
  1066. package/front_end/panels/timeline/components/insights/LCPDiscovery.ts +28 -80
  1067. package/front_end/panels/timeline/components/insights/LegacyJavaScript.ts +3 -15
  1068. package/front_end/panels/timeline/components/insights/ModernHTTP.ts +18 -23
  1069. package/front_end/panels/timeline/components/insights/NetworkDependencyTree.test.ts +76 -0
  1070. package/front_end/panels/timeline/components/insights/NetworkDependencyTree.ts +35 -29
  1071. package/front_end/panels/timeline/components/insights/NodeLink.test.ts +113 -0
  1072. package/front_end/panels/timeline/components/insights/NodeLink.ts +50 -10
  1073. package/front_end/panels/timeline/components/insights/README.md +1 -1
  1074. package/front_end/panels/timeline/components/insights/RenderBlocking.ts +4 -22
  1075. package/front_end/panels/timeline/components/insights/SidebarInsight.ts +1 -2
  1076. package/front_end/panels/timeline/components/insights/SlowCSSSelector.ts +16 -28
  1077. package/front_end/panels/timeline/components/insights/Table.ts +2 -3
  1078. package/front_end/panels/timeline/components/insights/ThirdParties.ts +7 -47
  1079. package/front_end/panels/timeline/components/insights/Viewport.ts +0 -6
  1080. package/front_end/panels/timeline/components/insights/insights.ts +4 -4
  1081. package/front_end/panels/timeline/components/insights/table.css +18 -0
  1082. package/front_end/panels/timeline/components/insights/types.ts +2 -2
  1083. package/front_end/panels/timeline/components/layoutShiftDetails.css +99 -92
  1084. package/front_end/panels/timeline/components/networkRequestDetails.css +110 -104
  1085. package/front_end/panels/timeline/components/networkRequestTooltip.css +88 -83
  1086. package/front_end/panels/timeline/components/relatedInsightChips.css +60 -58
  1087. package/front_end/panels/timeline/components/sidebarAnnotationsTab.css +80 -78
  1088. package/front_end/panels/timeline/components/sidebarInsightsTab.css +0 -25
  1089. package/front_end/panels/timeline/components/sidebarSingleInsightSet.css +1 -1
  1090. package/front_end/panels/timeline/docs/flame_chart_migration.md +2 -2
  1091. package/front_end/panels/timeline/overlays/OverlaysImpl.test.ts +149 -42
  1092. package/front_end/panels/timeline/overlays/OverlaysImpl.ts +218 -283
  1093. package/front_end/panels/timeline/overlays/components/EntriesLinkOverlay.ts +1 -1
  1094. package/front_end/panels/timeline/overlays/components/EntryLabelOverlay.ts +69 -104
  1095. package/front_end/panels/timeline/overlays/components/TimeRangeOverlay.ts +1 -1
  1096. package/front_end/panels/timeline/overlays/components/entryLabelOverlay.css +13 -0
  1097. package/front_end/panels/timeline/overlays/components/timeRangeOverlay.css +2 -1
  1098. package/front_end/panels/timeline/timeline-meta.ts +14 -14
  1099. package/front_end/panels/timeline/timeline.ts +4 -4
  1100. package/front_end/panels/timeline/timelineDetailsView.css +118 -0
  1101. package/front_end/panels/timeline/timelineFlameChartView.css +18 -117
  1102. package/front_end/panels/timeline/timelineMiniMap.css +5 -0
  1103. package/front_end/panels/timeline/timelinePanel.css +2 -10
  1104. package/front_end/panels/timeline/timelineTreeView.css +0 -4
  1105. package/front_end/panels/timeline/track_appenders/CompatibilityTracksAppender.test.ts +16 -15
  1106. package/front_end/panels/timeline/track_appenders/ExtensionTrackAppender.test.ts +6 -4
  1107. package/front_end/panels/timeline/track_appenders/InteractionsTrackAppender.test.ts +0 -1
  1108. package/front_end/panels/timeline/track_appenders/ThreadAppender.test.ts +34 -49
  1109. package/front_end/panels/timeline/utils/AICallTree.test.ts +54 -120
  1110. package/front_end/panels/timeline/utils/AICallTree.ts +31 -74
  1111. package/front_end/panels/timeline/utils/AIContext.ts +67 -0
  1112. package/front_end/panels/timeline/utils/EntityMapper.test.ts +5 -4
  1113. package/front_end/panels/timeline/utils/EntityMapper.ts +3 -3
  1114. package/front_end/panels/timeline/utils/EntryName.test.ts +3 -3
  1115. package/front_end/panels/timeline/utils/EntryName.ts +10 -10
  1116. package/front_end/panels/timeline/utils/EntryNodes.test.ts +137 -0
  1117. package/front_end/panels/timeline/utils/EntryNodes.ts +107 -0
  1118. package/front_end/panels/timeline/utils/EntryStyles.ts +110 -110
  1119. package/front_end/panels/timeline/{EventsSerializer.test.ts → utils/EventsSerializer.test.ts} +7 -7
  1120. package/front_end/panels/timeline/{EventsSerializer.ts → utils/EventsSerializer.ts} +1 -1
  1121. package/front_end/panels/timeline/{FreshRecording.test.ts → utils/FreshRecording.test.ts} +5 -5
  1122. package/front_end/panels/timeline/{FreshRecording.ts → utils/FreshRecording.ts} +1 -1
  1123. package/front_end/panels/timeline/utils/Helpers.ts +6 -0
  1124. package/front_end/panels/timeline/utils/IgnoreList.test.ts +7 -6
  1125. package/front_end/panels/timeline/utils/IgnoreList.ts +6 -6
  1126. package/front_end/panels/timeline/utils/InsightAIContext.test.ts +61 -25
  1127. package/front_end/panels/timeline/utils/InsightAIContext.ts +102 -81
  1128. package/front_end/panels/timeline/utils/SourceMapsResolver.test.ts +5 -4
  1129. package/front_end/panels/timeline/utils/Treemap.ts +5 -20
  1130. package/front_end/panels/timeline/utils/utils.ts +8 -0
  1131. package/front_end/panels/utils/utils.test.ts +1 -7
  1132. package/front_end/panels/utils/utils.ts +17 -21
  1133. package/front_end/panels/web_audio/WebAudioView.test.ts +224 -11
  1134. package/front_end/panels/web_audio/WebAudioView.ts +219 -267
  1135. package/front_end/panels/web_audio/web_audio-meta.ts +3 -3
  1136. package/front_end/panels/web_audio/web_audio.ts +0 -12
  1137. package/front_end/panels/webauthn/WebauthnPane.test.ts +75 -72
  1138. package/front_end/panels/webauthn/WebauthnPane.ts +517 -578
  1139. package/front_end/panels/webauthn/webauthn-meta.ts +2 -2
  1140. package/front_end/panels/webauthn/webauthnPane.css +157 -155
  1141. package/front_end/panels/whats_new/ReleaseNoteText.ts +11 -11
  1142. package/front_end/panels/whats_new/ReleaseNoteView.ts +2 -2
  1143. package/front_end/panels/whats_new/releaseNoteView.css +92 -91
  1144. package/front_end/panels/whats_new/resources/WNDT.md +6 -10
  1145. package/front_end/panels/whats_new/whats_new-meta.ts +7 -7
  1146. package/front_end/services/trace_bounds/TraceBounds.ts +1 -1
  1147. package/front_end/services/tracing/ExternalRequests.test.ts +39 -0
  1148. package/front_end/services/tracing/ExternalRequests.ts +74 -0
  1149. package/front_end/services/tracing/PerformanceTracing.ts +5 -4
  1150. package/front_end/{models/trace → services/tracing}/TracingManager.test.ts +9 -7
  1151. package/front_end/{models/trace → services/tracing}/TracingManager.ts +3 -4
  1152. package/front_end/services/tracing/tracing.ts +4 -0
  1153. package/front_end/testing/AiAssistanceHelpers.ts +10 -8
  1154. package/front_end/testing/DOMHelpers.ts +8 -6
  1155. package/front_end/testing/EnvironmentHelpers.ts +21 -6
  1156. package/front_end/testing/ExpectStubCall.ts +2 -1
  1157. package/front_end/testing/InsightHelpers.ts +11 -4
  1158. package/front_end/testing/MockConnection.ts +3 -2
  1159. package/front_end/testing/MockSettingStorage.ts +23 -0
  1160. package/front_end/testing/MutationHelpers.test.ts +1 -3
  1161. package/front_end/testing/OverridesHelpers.ts +9 -3
  1162. package/front_end/testing/PropertyParser.ts +1 -1
  1163. package/front_end/testing/README.md +34 -0
  1164. package/front_end/testing/SnapshotTester.snapshot.txt +9 -0
  1165. package/front_end/testing/SnapshotTester.test.ts +32 -0
  1166. package/front_end/testing/SnapshotTester.ts +150 -0
  1167. package/front_end/testing/SourceMapEncoder.ts +1 -237
  1168. package/front_end/testing/SourceMapHelpers.ts +3 -5
  1169. package/front_end/testing/StackTraceHelpers.ts +47 -0
  1170. package/front_end/testing/StyleHelpers.ts +43 -22
  1171. package/front_end/testing/TraceHelpers.ts +135 -122
  1172. package/front_end/testing/TraceLoader.ts +23 -65
  1173. package/front_end/testing/test_setup.ts +31 -4
  1174. package/front_end/ui/components/buttons/Button.ts +1 -1
  1175. package/front_end/ui/components/buttons/FloatingButton.ts +37 -6
  1176. package/front_end/ui/components/cards/Card.ts +2 -2
  1177. package/front_end/ui/components/copy_to_clipboard/copyToClipboard.ts +1 -1
  1178. package/front_end/ui/components/dialogs/ButtonDialog.test.ts +2 -6
  1179. package/front_end/ui/components/dialogs/ButtonDialog.ts +15 -0
  1180. package/front_end/ui/components/dialogs/Dialog.ts +68 -8
  1181. package/front_end/ui/components/dialogs/ShortcutDialog.test.ts +1 -3
  1182. package/front_end/ui/components/diff_view/DiffView.ts +6 -6
  1183. package/front_end/ui/components/docs/console_insight/basic.ts +1 -1
  1184. package/front_end/ui/components/docs/console_insight/error.ts +1 -1
  1185. package/front_end/ui/components/docs/console_insight/loading.ts +1 -1
  1186. package/front_end/ui/components/docs/context_menu/basic.html +45 -0
  1187. package/front_end/ui/components/docs/context_menu/basic.ts +102 -0
  1188. package/front_end/ui/components/docs/icon_component/basic.html +1 -3
  1189. package/front_end/ui/components/docs/icon_component/basic.ts +1 -1
  1190. package/front_end/ui/components/docs/recorder_recording_list_view/basic.ts +4 -1
  1191. package/front_end/ui/components/docs/select_menu/basic.html +1 -27
  1192. package/front_end/ui/components/docs/select_menu/basic.ts +86 -194
  1193. package/front_end/ui/components/icon_button/Icon.ts +16 -10
  1194. package/front_end/ui/components/icon_button/IconButton.ts +1 -3
  1195. package/front_end/ui/components/icon_button/icon.css +73 -0
  1196. package/front_end/ui/components/issue_counter/IssueCounter.ts +13 -14
  1197. package/front_end/ui/components/issue_counter/IssueLinkIcon.ts +3 -3
  1198. package/front_end/ui/components/markdown_view/MarkdownImagesMap.ts +4 -4
  1199. package/front_end/ui/components/markdown_view/MarkdownLinksMap.ts +9 -6
  1200. package/front_end/ui/components/markdown_view/MarkdownView.test.ts +73 -0
  1201. package/front_end/ui/components/panel_feedback/PanelFeedback.ts +5 -11
  1202. package/front_end/ui/components/panel_feedback/PreviewToggle.ts +4 -9
  1203. package/front_end/ui/components/settings/SettingCheckbox.ts +3 -3
  1204. package/front_end/ui/components/settings/SettingDeprecationWarning.ts +2 -4
  1205. package/front_end/ui/components/snackbars/Snackbar.ts +32 -17
  1206. package/front_end/ui/components/snackbars/snackbar.css +1 -1
  1207. package/front_end/ui/components/spinners/Spinner.ts +50 -2
  1208. package/front_end/ui/components/spinners/spinner.css +10 -1
  1209. package/front_end/ui/components/srgb_overlay/SrgbOverlay.ts +0 -1
  1210. package/front_end/ui/components/survey_link/SurveyLink.ts +4 -8
  1211. package/front_end/ui/components/text_editor/AiCodeCompletionTeaserPlaceholder.test.ts +84 -0
  1212. package/front_end/ui/components/text_editor/AiCodeCompletionTeaserPlaceholder.ts +83 -0
  1213. package/front_end/ui/components/text_editor/ExecutionPositionHighlighter.ts +0 -1
  1214. package/front_end/ui/components/text_editor/TextEditor.test.ts +72 -12
  1215. package/front_end/ui/components/text_editor/TextEditor.ts +2 -0
  1216. package/front_end/ui/components/text_editor/config.ts +120 -12
  1217. package/front_end/ui/{legacy/components/inline_editor/bezierSwatch.css → components/text_editor/textEditor.css} +2 -6
  1218. package/front_end/ui/components/text_editor/text_editor.ts +1 -0
  1219. package/front_end/ui/components/tooltips/Tooltip.test.ts +70 -40
  1220. package/front_end/ui/components/tooltips/Tooltip.ts +208 -33
  1221. package/front_end/ui/components/tooltips/tooltip.css +13 -77
  1222. package/front_end/ui/components/tree_outline/TreeOutline.ts +11 -0
  1223. package/front_end/ui/legacy/ARIAUtils.test.ts +101 -20
  1224. package/front_end/ui/legacy/ARIAUtils.ts +77 -49
  1225. package/front_end/ui/legacy/ActionRegistration.test.ts +0 -2
  1226. package/front_end/ui/legacy/ActionRegistration.ts +24 -24
  1227. package/front_end/ui/legacy/ContextMenu.test.ts +60 -1
  1228. package/front_end/ui/legacy/ContextMenu.ts +349 -29
  1229. package/front_end/ui/legacy/DockController.ts +13 -7
  1230. package/front_end/ui/legacy/EmptyWidget.ts +62 -32
  1231. package/front_end/ui/legacy/FilterBar.ts +14 -9
  1232. package/front_end/ui/legacy/GlassPane.ts +10 -4
  1233. package/front_end/ui/legacy/Infobar.ts +2 -2
  1234. package/front_end/ui/legacy/InspectorView.test.ts +99 -0
  1235. package/front_end/ui/legacy/InspectorView.ts +71 -25
  1236. package/front_end/ui/legacy/ListWidget.ts +9 -9
  1237. package/front_end/ui/legacy/Panel.ts +1 -1
  1238. package/front_end/ui/legacy/ProgressIndicator.ts +44 -41
  1239. package/front_end/ui/legacy/RemoteDebuggingTerminatedScreen.ts +4 -4
  1240. package/front_end/ui/legacy/ReportView.ts +1 -1
  1241. package/front_end/ui/legacy/SearchableView.ts +24 -24
  1242. package/front_end/ui/legacy/SettingsUI.ts +2 -2
  1243. package/front_end/ui/legacy/ShortcutRegistry.ts +2 -1
  1244. package/front_end/ui/legacy/SoftContextMenu.ts +23 -9
  1245. package/front_end/ui/legacy/SoftDropDown.ts +1 -1
  1246. package/front_end/ui/legacy/SplitWidget.test.ts +8 -0
  1247. package/front_end/ui/legacy/SplitWidget.ts +3 -3
  1248. package/front_end/ui/legacy/SuggestBox.ts +15 -15
  1249. package/front_end/ui/legacy/TabbedPane.ts +27 -31
  1250. package/front_end/ui/legacy/TargetCrashedScreen.ts +4 -4
  1251. package/front_end/ui/legacy/TextPrompt.ts +4 -2
  1252. package/front_end/ui/legacy/ThrottledWidget.ts +1 -1
  1253. package/front_end/ui/legacy/Toolbar.test.ts +13 -0
  1254. package/front_end/ui/legacy/Toolbar.ts +39 -19
  1255. package/front_end/ui/legacy/Treeoutline.test.ts +140 -0
  1256. package/front_end/ui/legacy/Treeoutline.ts +244 -8
  1257. package/front_end/ui/legacy/UIUtils.test.ts +59 -0
  1258. package/front_end/ui/legacy/UIUtils.ts +235 -25
  1259. package/front_end/ui/legacy/View.test.ts +14 -1
  1260. package/front_end/ui/legacy/View.ts +33 -9
  1261. package/front_end/ui/legacy/ViewManager.test.ts +235 -0
  1262. package/front_end/ui/legacy/ViewManager.ts +109 -15
  1263. package/front_end/ui/legacy/ViewRegistration.ts +17 -7
  1264. package/front_end/ui/legacy/Widget.test.ts +35 -3
  1265. package/front_end/ui/legacy/Widget.ts +127 -16
  1266. package/front_end/ui/legacy/XLink.ts +1 -1
  1267. package/front_end/ui/legacy/components/color_picker/ContrastDetails.ts +36 -26
  1268. package/front_end/ui/legacy/components/color_picker/FormatPickerContextMenu.ts +4 -8
  1269. package/front_end/ui/legacy/components/color_picker/Spectrum.test.ts +36 -1
  1270. package/front_end/ui/legacy/components/color_picker/Spectrum.ts +72 -49
  1271. package/front_end/ui/legacy/components/color_picker/spectrum.css +1 -1
  1272. package/front_end/ui/legacy/components/cookie_table/CookiesTable.ts +14 -19
  1273. package/front_end/ui/legacy/components/data_grid/DataGrid.ts +31 -30
  1274. package/front_end/ui/legacy/components/data_grid/DataGridElement.test.ts +19 -15
  1275. package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +15 -3
  1276. package/front_end/ui/legacy/components/data_grid/ShowMoreDataGridNode.ts +2 -2
  1277. package/front_end/ui/legacy/components/data_grid/ViewportDataGrid.ts +6 -3
  1278. package/front_end/ui/legacy/components/data_grid/dataGrid.css +9 -3
  1279. package/front_end/ui/legacy/components/inline_editor/BezierEditor.ts +1 -1
  1280. package/front_end/ui/legacy/components/inline_editor/BezierUI.ts +1 -1
  1281. package/front_end/ui/legacy/components/inline_editor/CSSAngle.test.ts +25 -25
  1282. package/front_end/ui/legacy/components/inline_editor/CSSAngle.ts +11 -5
  1283. package/front_end/ui/legacy/components/inline_editor/CSSShadowEditor.ts +5 -5
  1284. package/front_end/ui/legacy/components/inline_editor/ColorSwatch.test.ts +1 -9
  1285. package/front_end/ui/legacy/components/inline_editor/ColorSwatch.ts +35 -20
  1286. package/front_end/ui/legacy/components/inline_editor/FontEditor.ts +32 -31
  1287. package/front_end/ui/legacy/components/inline_editor/FontEditorUnitConverter.ts +1 -1
  1288. package/front_end/ui/legacy/components/inline_editor/Swatches.ts +3 -47
  1289. package/front_end/ui/legacy/components/inline_editor/cssAngle.css +4 -5
  1290. package/front_end/ui/legacy/components/object_ui/CustomPreviewComponent.ts +2 -2
  1291. package/front_end/ui/legacy/components/object_ui/ObjectPopoverHelper.ts +1 -1
  1292. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.test.ts +19 -1
  1293. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +31 -28
  1294. package/front_end/ui/legacy/components/object_ui/objectPropertiesSection.css +2 -0
  1295. package/front_end/ui/legacy/components/perf_ui/BrickBreaker.ts +2 -2
  1296. package/front_end/ui/legacy/components/perf_ui/ChartViewport.ts +7 -3
  1297. package/front_end/ui/legacy/components/perf_ui/FilmStripView.ts +7 -7
  1298. package/front_end/ui/legacy/components/perf_ui/FlameChart.test.ts +162 -1
  1299. package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +153 -99
  1300. package/front_end/ui/legacy/components/perf_ui/NetworkPriorities.ts +5 -5
  1301. package/front_end/ui/legacy/components/perf_ui/OverviewGrid.ts +3 -3
  1302. package/front_end/ui/legacy/components/perf_ui/PieChart.ts +1 -1
  1303. package/front_end/ui/legacy/components/perf_ui/TimelineGrid.ts +0 -4
  1304. package/front_end/ui/legacy/components/perf_ui/TimelineOverviewPane.ts +54 -6
  1305. package/front_end/ui/legacy/components/perf_ui/perf_ui-meta.ts +6 -6
  1306. package/front_end/ui/legacy/components/quick_open/CommandMenu.ts +29 -3
  1307. package/front_end/ui/legacy/components/quick_open/FilteredListWidget.ts +14 -5
  1308. package/front_end/ui/legacy/components/quick_open/HelpQuickOpen.ts +2 -5
  1309. package/front_end/ui/legacy/components/quick_open/filteredListWidget.css +2 -0
  1310. package/front_end/ui/legacy/components/quick_open/quick_open-meta.ts +2 -2
  1311. package/front_end/ui/legacy/components/source_frame/FontView.ts +8 -5
  1312. package/front_end/ui/legacy/components/source_frame/ImageView.ts +17 -29
  1313. package/front_end/ui/legacy/components/source_frame/JSONView.ts +3 -3
  1314. package/front_end/ui/legacy/components/source_frame/PreviewFactory.ts +2 -2
  1315. package/front_end/ui/legacy/components/source_frame/ResourceSourceFrame.test.ts +0 -4
  1316. package/front_end/ui/legacy/components/source_frame/ResourceSourceFrame.ts +2 -2
  1317. package/front_end/ui/legacy/components/source_frame/SourceFrame.ts +41 -31
  1318. package/front_end/ui/legacy/components/source_frame/StreamingContentHexView.ts +1 -1
  1319. package/front_end/ui/legacy/components/source_frame/XMLView.ts +2 -2
  1320. package/front_end/ui/legacy/components/source_frame/fontView.css +1 -1
  1321. package/front_end/ui/legacy/components/source_frame/source_frame-meta.ts +9 -9
  1322. package/front_end/ui/legacy/components/utils/ImagePreview.ts +4 -4
  1323. package/front_end/ui/legacy/components/utils/JSPresentationUtils.test.ts +6 -5
  1324. package/front_end/ui/legacy/components/utils/JSPresentationUtils.ts +76 -34
  1325. package/front_end/ui/legacy/components/utils/Linkifier.test.ts +154 -2
  1326. package/front_end/ui/legacy/components/utils/Linkifier.ts +108 -50
  1327. package/front_end/ui/legacy/components/utils/TargetDetachedDialog.ts +2 -1
  1328. package/front_end/ui/legacy/confirmDialog.css +1 -1
  1329. package/front_end/ui/legacy/filter.css +12 -4
  1330. package/front_end/ui/legacy/inspectorCommon.css +25 -20
  1331. package/front_end/ui/legacy/remoteDebuggingTerminatedScreen.css +18 -17
  1332. package/front_end/ui/legacy/softContextMenu.css +4 -0
  1333. package/front_end/ui/legacy/tabbedPane.css +5 -1
  1334. package/front_end/ui/legacy/targetCrashedScreen.css +9 -8
  1335. package/front_end/ui/legacy/viewContainers.css +8 -0
  1336. package/front_end/ui/visual_logging/Debugging.ts +122 -26
  1337. package/front_end/ui/visual_logging/KnownContextValues.ts +139 -1
  1338. package/front_end/ui/visual_logging/LoggingConfig.ts +1 -1
  1339. package/front_end/ui/visual_logging/LoggingDriver.test.ts +74 -44
  1340. package/front_end/ui/visual_logging/LoggingDriver.ts +3 -2
  1341. package/front_end/ui/visual_logging/LoggingState.ts +6 -4
  1342. package/front_end/ui/visual_logging/README.md +1 -3
  1343. package/front_end/ui/visual_logging/visual_logging.ts +9 -0
  1344. package/front_end/ui/visual_logging/visual_logging_debugging.png +0 -0
  1345. package/inspector_overlay/css_grid_label_helpers.ts +4 -4
  1346. package/inspector_overlay/highlight_flex_common.ts +2 -2
  1347. package/inspector_overlay/loadCSS.rollup.js +2 -2
  1348. package/inspector_overlay/main.ts +0 -4
  1349. package/inspector_overlay/tool_highlight.css +1 -1
  1350. package/inspector_overlay/tool_highlight.ts +7 -7
  1351. package/package.json +32 -36
  1352. package/scripts/add_icon_paths.py +1 -1
  1353. package/scripts/ai_assistance/README.md +1 -0
  1354. package/scripts/ai_assistance/auto-run/auto-run.ts +46 -6
  1355. package/scripts/ai_assistance/auto-run/shared/comment-parsers.test.ts +2 -2
  1356. package/scripts/ai_assistance/auto-run/shared/comment-parsers.ts +2 -2
  1357. package/scripts/ai_assistance/auto-run/shared/puppeteer-helpers.ts +18 -15
  1358. package/scripts/ai_assistance/auto-run/targets/elements-executor.ts +2 -0
  1359. package/scripts/ai_assistance/auto-run/targets/elements-multimodal-executor.ts +2 -0
  1360. package/scripts/ai_assistance/auto-run/targets/interface.ts +1 -0
  1361. package/scripts/ai_assistance/auto-run/targets/patching-executor.ts +1 -0
  1362. package/scripts/ai_assistance/auto-run/targets/performance-insights-executor.ts +2 -0
  1363. package/scripts/ai_assistance/auto-run/targets/performance-main-thread-executor.ts +2 -0
  1364. package/scripts/ai_assistance/eval/index.js +5 -1
  1365. package/scripts/ai_assistance/package.json +2 -1
  1366. package/scripts/ai_assistance/suite/README.md +57 -0
  1367. package/scripts/ai_assistance/suite/helpers/evaluators.ts +183 -0
  1368. package/scripts/ai_assistance/suite/helpers/gemini.ts +122 -0
  1369. package/scripts/ai_assistance/suite/helpers/outputs.ts +112 -0
  1370. package/scripts/ai_assistance/suite/instructions/lcp-breakdown.md +12 -0
  1371. package/scripts/ai_assistance/suite/instructions/load.ts +13 -0
  1372. package/scripts/ai_assistance/suite/instructions/scoring.md +27 -0
  1373. package/scripts/ai_assistance/suite/performance.eval.ts +18 -0
  1374. package/scripts/ai_assistance/suite/to_eval_output.ts +166 -0
  1375. package/scripts/ai_assistance/suite/types.d.ts +40 -0
  1376. package/scripts/ai_assistance/suite/upload_to_gcp.ts +104 -0
  1377. package/scripts/ai_assistance/tsconfig.json +1 -1
  1378. package/scripts/ai_assistance/types.d.ts +8 -3
  1379. package/scripts/build/assert_grd.py +1 -1
  1380. package/scripts/build/compress_files.js +9 -4
  1381. package/scripts/build/cross_reference_ninja_and_tsc.js +5 -5
  1382. package/scripts/build/devtools_plugin.js +9 -2
  1383. package/scripts/build/esbuild.js +4 -1
  1384. package/scripts/build/generate_html_entrypoint.js +5 -4
  1385. package/scripts/build/ninja/README.md +2 -3
  1386. package/scripts/build/ninja/bundle.gni +7 -30
  1387. package/scripts/build/ninja/devtools_entrypoint.gni +4 -4
  1388. package/scripts/build/ninja/devtools_pre_built.gni +2 -1
  1389. package/scripts/build/ninja/generate_css.gni +4 -2
  1390. package/scripts/build/ninja/vars.gni +5 -1
  1391. package/scripts/build/ninja/write-if-changed.js +2 -2
  1392. package/scripts/build/typescript/ts_library.py +7 -1
  1393. package/scripts/build/typescript/typescript.gni +2 -1
  1394. package/scripts/component_server/server.js +8 -7
  1395. package/scripts/devtools_build.mjs +93 -26
  1396. package/scripts/devtools_build.test.mjs +48 -48
  1397. package/scripts/devtools_paths.py +0 -5
  1398. package/scripts/eslint_rules/README.md +4 -2
  1399. package/scripts/eslint_rules/lib/canvas-context-tracking.ts +1 -1
  1400. package/scripts/eslint_rules/lib/check-css-import.ts +2 -2
  1401. package/scripts/eslint_rules/lib/check-license-header.ts +3 -3
  1402. package/scripts/eslint_rules/lib/check-test-definitions.ts +2 -2
  1403. package/scripts/eslint_rules/lib/enforce-custom-element-definitions-location.ts +1 -1
  1404. package/scripts/eslint_rules/lib/enforce-optional-properties-last.ts +1 -1
  1405. package/scripts/eslint_rules/lib/enforce-ui-strings-as-const.ts +1 -1
  1406. package/scripts/eslint_rules/lib/es-modules-import.ts +3 -2
  1407. package/scripts/eslint_rules/lib/html-tagged-template.ts +2 -2
  1408. package/scripts/eslint_rules/lib/inject-checkbox-styles.ts +36 -24
  1409. package/scripts/eslint_rules/lib/inline-type-imports.ts +1 -1
  1410. package/scripts/eslint_rules/lib/jslog-context-list.ts +32 -7
  1411. package/scripts/eslint_rules/lib/no-adopted-style-sheets.ts +2 -2
  1412. package/scripts/eslint_rules/lib/no-assert-deep-strict-equal.ts +17 -16
  1413. package/scripts/eslint_rules/lib/no-assert-equal-boolean-null-undefined.ts +1 -1
  1414. package/scripts/eslint_rules/lib/no-assert-equal.ts +1 -1
  1415. package/scripts/eslint_rules/lib/no-assert-strict-equal-for-arrays-and-objects.ts +1 -1
  1416. package/scripts/eslint_rules/lib/no-commented-out-console.ts +4 -2
  1417. package/scripts/eslint_rules/lib/no-customized-builtin-elements.ts +1 -4
  1418. package/scripts/eslint_rules/lib/no-imperative-dom-api/adorner.ts +5 -9
  1419. package/scripts/eslint_rules/lib/no-imperative-dom-api/aria-utils.ts +5 -8
  1420. package/scripts/eslint_rules/lib/no-imperative-dom-api/ast.ts +24 -1
  1421. package/scripts/eslint_rules/lib/no-imperative-dom-api/button.ts +5 -4
  1422. package/scripts/eslint_rules/lib/no-imperative-dom-api/class-member.ts +1 -1
  1423. package/scripts/eslint_rules/lib/no-imperative-dom-api/data-grid.ts +23 -25
  1424. package/scripts/eslint_rules/lib/no-imperative-dom-api/dom-api-devtools-extensions.ts +5 -9
  1425. package/scripts/eslint_rules/lib/no-imperative-dom-api/dom-api.ts +11 -16
  1426. package/scripts/eslint_rules/lib/no-imperative-dom-api/dom-fragment.ts +2 -2
  1427. package/scripts/eslint_rules/lib/no-imperative-dom-api/split-widget.ts +14 -18
  1428. package/scripts/eslint_rules/lib/no-imperative-dom-api/toolbar.ts +17 -18
  1429. package/scripts/eslint_rules/lib/no-imperative-dom-api/ui-fragment.ts +7 -12
  1430. package/scripts/eslint_rules/lib/no-imperative-dom-api/ui-utils.ts +7 -7
  1431. package/scripts/eslint_rules/lib/no-imperative-dom-api/widget.ts +8 -13
  1432. package/scripts/eslint_rules/lib/no-imperative-dom-api.ts +3 -22
  1433. package/scripts/eslint_rules/lib/no-importing-images-from-src.ts +1 -1
  1434. package/scripts/eslint_rules/lib/no-imports-in-directory.ts +18 -7
  1435. package/scripts/eslint_rules/lib/no-lit-render-outside-of-view.ts +48 -37
  1436. package/scripts/eslint_rules/lib/no-new-lit-element-components.ts +5 -2
  1437. package/scripts/eslint_rules/lib/no-underscored-properties.ts +36 -28
  1438. package/scripts/eslint_rules/lib/prefer-assert-instance-of.ts +24 -20
  1439. package/scripts/eslint_rules/lib/prefer-assert-is-ok.ts +54 -45
  1440. package/scripts/eslint_rules/lib/prefer-assert-length-of.ts +24 -17
  1441. package/scripts/eslint_rules/lib/prefer-assert-strict-equal.ts +22 -16
  1442. package/scripts/eslint_rules/lib/prefer-private-class-members.ts +11 -4
  1443. package/scripts/eslint_rules/lib/prefer-sinon-assert.ts +37 -29
  1444. package/scripts/eslint_rules/lib/prefer-url-string.ts +1 -1
  1445. package/scripts/eslint_rules/lib/utils/lit.ts +26 -9
  1446. package/scripts/eslint_rules/lib/validate-timing-types.ts +330 -0
  1447. package/scripts/eslint_rules/rules-dir.mjs +4 -1
  1448. package/scripts/eslint_rules/tests/check-license-header.test.ts +8 -8
  1449. package/scripts/eslint_rules/tests/check-test-definitions.test.ts +0 -10
  1450. package/scripts/eslint_rules/tests/enforce-optional-properties-last.test.ts +1 -1
  1451. package/scripts/eslint_rules/tests/inject-checkbox-styles.test.ts +49 -0
  1452. package/scripts/eslint_rules/tests/no-imports-in-directory.test.ts +20 -5
  1453. package/scripts/eslint_rules/tests/no-lit-render-outside-of-view.test.ts +60 -10
  1454. package/scripts/eslint_rules/tests/no-new-lit-element-components.test.ts +4 -0
  1455. package/scripts/eslint_rules/tests/prefer-private-class-members.test.ts +2 -2
  1456. package/scripts/eslint_rules/tests/utils/RuleTester.ts +19 -1
  1457. package/scripts/eslint_rules/tests/utils.test.ts +1 -1
  1458. package/scripts/eslint_rules/tests/validate-timing-types.test.ts +289 -0
  1459. package/scripts/eslint_rules/tsconfig.json +3 -2
  1460. package/scripts/extract_bugs.ts +2 -3
  1461. package/scripts/javascript_natives/helpers.js +9 -9
  1462. package/scripts/migration/e2e_non_hosted_gemini.mjs +102 -0
  1463. package/scripts/migration/web-tests-esm/rename-legacy-global.mjs +1 -1
  1464. package/scripts/npm_test.js +1 -1
  1465. package/scripts/protocol_typescript/protocol_dts_generator.ts +27 -16
  1466. package/scripts/protocol_typescript/protocol_schema.d.ts +9 -4
  1467. package/scripts/reformat-clang-js-ts.js +1 -1
  1468. package/scripts/run_build.mjs +14 -2
  1469. package/scripts/run_start.mjs +6 -3
  1470. package/scripts/scaffold/scaffold-widget.js +7 -7
  1471. package/scripts/scaffold/templates/WidgetTemplate.ts.txt +1 -1
  1472. package/scripts/tools/update_goldens.py +143 -168
  1473. package/scripts/tsconfig.json +2 -1
  1474. package/scripts/whitespaces.txt +1 -1
  1475. package/front_end/core/sdk/SourceMapScopes.test.ts +0 -507
  1476. package/front_end/core/sdk/SourceMapScopes.ts +0 -472
  1477. package/front_end/models/ai_assistance/agents/PerformanceInsightsAgent.test.ts +0 -448
  1478. package/front_end/models/ai_assistance/agents/PerformanceInsightsAgent.ts +0 -498
  1479. package/front_end/models/trace/extras/FetchNodes.test.ts +0 -261
  1480. package/front_end/models/trace/extras/FetchNodes.ts +0 -254
  1481. package/front_end/models/trace/extras/Metadata.ts +0 -79
  1482. package/front_end/models/trace/insights/LCPPhases.test.ts +0 -71
  1483. package/front_end/models/trace/insights/LCPPhases.ts +0 -222
  1484. package/front_end/panels/animation/AnimationScreenshotPopover.ts +0 -65
  1485. package/front_end/panels/animation/animationScreenshotPopover.css +0 -18
  1486. package/front_end/panels/application/ReportingApiReportsView.test.ts +0 -117
  1487. package/front_end/panels/application/ReportingApiReportsView.ts +0 -88
  1488. package/front_end/panels/elements/ElementsTreeElementHighlighter.test.ts +0 -51
  1489. package/front_end/panels/elements/ElementsTreeElementHighlighter.ts +0 -107
  1490. package/front_end/panels/elements/components/LayoutPane.ts +0 -515
  1491. package/front_end/panels/elements/components/LayoutPaneUtils.ts +0 -41
  1492. package/front_end/panels/elements/components/layoutPane.css +0 -168
  1493. package/front_end/panels/sources/components/breakpointsView.css +0 -275
  1494. package/front_end/panels/timeline/components/insights/InteractionToNextPaint.ts +0 -118
  1495. package/front_end/panels/timeline/components/insights/LCPPhases.ts +0 -256
  1496. package/front_end/panels/web_audio/AudioContextContentBuilder.ts +0 -113
  1497. package/front_end/panels/web_audio/AudioContextSelector.ts +0 -140
  1498. package/front_end/panels/web_audio/audioContextSelector.css +0 -20
  1499. package/front_end/panels/web_audio/graph_visualizer/EdgeView.ts +0 -80
  1500. package/front_end/panels/web_audio/graph_visualizer/GraphManager.ts +0 -46
  1501. package/front_end/panels/web_audio/graph_visualizer/GraphStyle.ts +0 -96
  1502. package/front_end/panels/web_audio/graph_visualizer/GraphView.ts +0 -197
  1503. package/front_end/panels/web_audio/graph_visualizer/NodeRendererUtility.ts +0 -43
  1504. package/front_end/panels/web_audio/graph_visualizer/NodeView.ts +0 -258
  1505. package/front_end/panels/web_audio/graph_visualizer/graph_visualizer.ts +0 -19
  1506. package/front_end/ui/components/docs/recorder_recording_view/basic.html +0 -20
  1507. package/front_end/ui/components/docs/recorder_recording_view/basic.ts +0 -99
  1508. package/front_end/ui/legacy/inspectorViewTabbedPane.css +0 -13
  1509. package/inspector_overlay/debug/tool_distances.html +0 -25
  1510. package/inspector_overlay/tool_distances.ts +0 -125
  1511. package/scripts/eslint_rules/lib/no-it-screenshot-only-or-repeat.ts +0 -47
  1512. package/scripts/eslint_rules/lib/no-screenshot-test-outside-perf-panel.ts +0 -77
  1513. package/scripts/eslint_rules/lib/screenshot-assertion-in-it-screenshot.ts +0 -110
  1514. package/scripts/eslint_rules/lib/single-screenshot-assertion-per-test.ts +0 -85
  1515. package/scripts/eslint_rules/tests/no-it-screenshot-only-or-repeat.test.ts +0 -34
  1516. package/scripts/eslint_rules/tests/no-screenshot-test-outside-perf-panel.test.ts +0 -99
  1517. package/scripts/eslint_rules/tests/screenshot-assertion-in-it-screenshot.test.ts +0 -79
  1518. package/scripts/eslint_rules/tests/single-screenshot-assertion-per-test.test.ts +0 -97
  1519. package/scripts/tools/update_goldens_unittest.py +0 -88
  1520. package/scripts/tools/update_goldens_v2.py +0 -68
  1521. package/scripts/watch_build.js +0 -230
  1522. /package/front_end/panels/recorder/models/{RecorderShorcutHelper.test.ts → RecorderShortcutHelper.test.ts} +0 -0
@@ -7,24 +7,103 @@ import '../../../ui/components/icon_button/icon_button.js';
7
7
  import * as Common from '../../../core/common/common.js';
8
8
  import * as Host from '../../../core/host/host.js';
9
9
  import * as i18n from '../../../core/i18n/i18n.js';
10
+ import * as Platform from '../../../core/platform/platform.js';
10
11
  import * as Root from '../../../core/root/root.js';
12
+ import * as SDK from '../../../core/sdk/sdk.js';
11
13
  import * as TimelineUtils from '../../../panels/timeline/utils/utils.js';
12
14
  import {html, type TemplateResult} from '../../../ui/lit/lit.js';
13
15
  import * as Trace from '../../trace/trace.js';
16
+ import {ConversationType} from '../AiHistoryStorage.js';
17
+ import {PerformanceInsightFormatter, TraceEventFormatter} from '../data_formatters/PerformanceInsightFormatter.js';
18
+ import {PerformanceTraceFormatter} from '../data_formatters/PerformanceTraceFormatter.js';
19
+ import {debugLog} from '../debug.js';
14
20
 
15
21
  import {
22
+ type AgentOptions,
16
23
  AiAgent,
17
24
  type ContextResponse,
18
25
  ConversationContext,
26
+ type ConversationSuggestion,
27
+ type ParsedResponse,
19
28
  type RequestOptions,
29
+ type ResponseData,
20
30
  ResponseType,
21
31
  } from './AiAgent.js';
22
32
 
33
+ const UIStringsNotTranslated = {
34
+ /**
35
+ *@description Shown when the agent is investigating a trace
36
+ */
37
+ analyzingTrace: 'Analyzing trace',
38
+ analyzingCallTree: 'Analyzing call tree',
39
+ /**
40
+ * @description Shown when the agent is investigating network activity
41
+ */
42
+ networkActivitySummary: 'Investigating network activity…',
43
+ /**
44
+ * @description Shown when the agent is investigating main thread activity
45
+ */
46
+ mainThreadActivity: 'Investigating main thread activity…',
47
+ } as const;
48
+ const lockedString = i18n.i18n.lockedString;
49
+
23
50
  /**
24
51
  * WARNING: preamble defined in code is only used when userTier is
25
52
  * TESTERS. Otherwise, a server-side preamble is used (see
26
53
  * chrome_preambles.gcl). Sync local changes with the server-side.
27
54
  */
55
+ /* clang-format off */
56
+ const insightPreamble = `You are an AI-powered web performance optimization expert, simulating a highly skilled Chrome DevTools user. Your goal is to provide actionable advice to web developers based on Chrome Performance Panel insights.
57
+
58
+ You will be provided with an Insight from the Chrome Performance Panel. This Insight will contain information about the performance of the web site. It is your task to analyze the data available to you and suggest solutions to improve the performance of the page.
59
+
60
+ You will be told the following information about the Insight:
61
+ - **Insight Title:** The name of the performance issue detected by Chrome DevTools.
62
+ - **Insight Summary:** A brief explanation of the performance problem and its potential impact on the user experience.
63
+ - **Detailed Analysis:** Specific data points and observations from the Chrome Performance Panel, including timestamps, durations, resource URLs, and function call stacks. Use this data to pinpoint the root cause of the performance issue.
64
+
65
+ You will be provided with a list of relevant URLs containing up-to-date information regarding web performance optimization. Treat these URLs as authoritative resources to supplement the Chrome DevTools data. Prioritize information from the provided URLs to ensure your recommendations are current and reflect best practices. Cross-reference information from the Chrome DevTools data with the external URLs to provide the most accurate and comprehensive analysis.
66
+
67
+ Additionally, you may also be asked basic questions such as "What is LCP?". Ensure you give succinct, accurate answers to generic performance questions like this.
68
+
69
+ *IMPORTANT*: All time units provided in the 'Detailed Analysis' are in milliseconds (ms). Ensure your response reflects this unit of measurement.
70
+
71
+ ## Step-by-step instructions
72
+
73
+ - Utilize the provided functions (e.g., \`getMainThreadActivity\`, \`getNetworkActivitySummary\`) to retrieve detailed performance data. Prioritize function calls that provide context relevant to the Insight being analyzed.
74
+ - Make sure you use \`getNetworkRequestDetail\` to get vital information about any network requests that you are referencing in your suggestions. Use this information to verify your assumptions.
75
+ - Retrieve all necessary data through function calls before generating your response. Do not rely on assumptions or incomplete information.
76
+ - Provide clear, actionable recommendations. Avoid technical jargon unless necessary, and explain any technical terms used.
77
+ - If you see a generic task like "Task", "Evaluate script" or "(anonymous)" in the main thread activity, try to look at its children to see what actual functions executed and refer to those. When referencing main thread activity, be as specific as you can. Ensure you identify to the user relevant functions and which script they were defined in. Avoid referencing "Task", "Evaluate script" and "(anonymous)" nodes if possible and instead focus on their children.
78
+ - Prioritize recommendations based on their potential impact on performance. Focus on the most significant bottlenecks.
79
+ - Structure your response using markdown headings and bullet points for improved readability.
80
+ - Your answer should contain the following sections:
81
+ 1. **Analysis:** Based on the user's question, explain the observed performance issues, their impact on user experience, and the key metrics used to identify them. Include relevant timestamps and durations from the provided data. Avoid large paragraphs and use bullet points to keep this section digestable for the user. Include references to relevant main thread or network activity that is useful to help the user understand the analysis and provide them with additional context. Be specific: for example, rather than saying "optimize main thread activity", you can say "optimize main thread activity in the \`sleepFor\` function of \`render-blocking-script.js\`."
82
+ 2. **Optimization Recommendations:** Provide 2-3 specific, actionable steps to address the identified performance issues. Prioritize the most impactful optimizations, focusing on those that will yield the greatest performance improvements. Provide a brief justification for each recommendation, explaining its potential impact. Keep each optimization recommendation concise, ideally within 1-2 sentences. Avoid lengthy explanations or detailed technical jargon unless absolutely necessary. Do not repeat optimizations that you have already suggested in previous responses.
83
+ - Your response should immediately start with the "Analysis" section.
84
+ - Be direct and to the point. Avoid unnecessary introductory phrases or filler content. Focus on delivering actionable advice efficiently.
85
+
86
+ ## Strict Constraints
87
+
88
+ - Adhere to the following critical requirements:
89
+ - Execute \`getMainThreadActivity\` only once *per Insight context*. If the Insight changes, you may call this function again.
90
+ - Execute \`getNetworkActivitySummary\` only once *per Insight context*. If the Insight changes, you may call this function again.
91
+ - Ensure comprehensive data retrieval through function calls to provide accurate and complete recommendations.
92
+ - Before suggesting changing the format of an image, consider what format it is already in. For example, if the mime type is image/webp, do not suggest to the user that the image is converted to WebP, as the image is already in that format.
93
+ - Do not mention function names (e.g., \`getMainThreadActivity\`, \`getNetworkActivitySummary\`) in your output. These are internal implementation details.
94
+ - Do not mention that you are an AI, or refer to yourself in the third person. You are simulating a performance expert.
95
+ - If asked about sensitive topics (religion, race, politics, sexuality, gender, etc.), respond with: "My expertise is limited to website performance analysis. I cannot provide information on that topic.".
96
+ - Refrain from providing answers on non-web-development topics, such as legal, financial, medical, or personal advice.
97
+
98
+ ## Additional guidance for specific insights
99
+ - If you are being asked any questions that relate to LCP, it is CRITICAL that you use \`getNetworkActivitySummary\` to get a summary of network requests.
100
+ - If the LCP resource was fetched over the network, you MUST use the \`getNetworkRequestDetail\` function to find out more information before providing your analysis.
101
+ - If the LCP resource was fetched over the network, pay attention to the network request's priority. Important resources for LCP should have a high priority. If the LCP resource's priority is not "high", suggest optimizations to the user to change this.
102
+ - If you are asked about "LCP by Phase" and the "element render delay" phase makes up a large percentage of the time, that indicates that there was main thread activity that blocked the browser painting. In this case, inspect the main thread activity and include information on what functions caused the main thread to be busy. Thoroughly inspect the main thread activity so you can be accurate in your responses.
103
+ - Only suggest image size and format optimizations as a solution if you are confident that the download time of the image was a major contribution to the performance problems you have investigated, or if the user specifically asks about image optimization techniques.
104
+ `;
105
+ /* clang-format on */
106
+
28
107
  /**
29
108
  * Preamble clocks in at ~970 tokens.
30
109
  * The prose is around 4.5 chars per token.
@@ -32,30 +111,24 @@ import {
32
111
  *
33
112
  * Check token length in https://aistudio.google.com/
34
113
  */
35
- const preamble = `You are an expert performance analyst embedded within Chrome DevTools.
114
+ export const callTreePreamble = `You are an expert performance analyst embedded within Chrome DevTools.
36
115
  You meticulously examine web application behavior captured by the Chrome DevTools Performance Panel and Chrome tracing.
37
116
  You will receive a structured text representation of a call tree, derived from a user-selected call frame within a performance trace's flame chart.
38
117
  This tree originates from the root task associated with the selected call frame.
39
118
 
40
119
  Each call frame is presented in the following format:
41
120
 
42
- Node: $id - $name
43
- Selected: true (if this is the call frame selected by the user)
44
- Duration: $duration (milliseconds, including children)
45
- Self Time: $self (milliseconds, excluding children, defaults to 0)
46
- URL: $url_number (reference to the "All URLs" list)
47
- Children:
48
- * $child.id - $child.name
121
+ 'id;name;duration;selfTime;urlIndex;childRange;[S]'
49
122
 
50
123
  Key definitions:
51
124
 
52
- * name: A concise string describing the call frame (e.g., 'Evaluate Script', 'render', 'fetchData').
53
125
  * id: A unique numerical identifier for the call frame.
54
- * Selected: Indicates if this is the call frame the user focused on. **Only one node will have "Selected: true".**
55
- * URL: The index of the URL associated with this call frame, referencing the "All URLs" list.
56
- * Duration: The total execution time of the call frame, including its children.
57
- * Self Time: The time spent directly within the call frame, excluding its children's execution.
58
- * Children: A list of child call frames, showing their IDs and names.
126
+ * name: A concise string describing the call frame (e.g., 'Evaluate Script', 'render', 'fetchData').
127
+ * duration: The total execution time of the call frame, including its children.
128
+ * selfTime: The time spent directly within the call frame, excluding its children's execution.
129
+ * urlIndex: Index referencing the "All URLs" list. Empty if no specific script URL is associated.
130
+ * childRange: Specifies the direct children of this node using their IDs. If empty ('' or 'S' at the end), the node has no children. If a single number (e.g., '4'), the node has one child with that ID. If in the format 'firstId-lastId' (e.g., '4-5'), it indicates a consecutive range of child IDs from 'firstId' to 'lastId', inclusive.
131
+ * S: **Optional marker.** The letter 'S' appears at the end of the line **only** for the single call frame selected by the user.
59
132
 
60
133
  Your objective is to provide a comprehensive analysis of the **selected call frame and the entire call tree** and its context within the performance recording, including:
61
134
 
@@ -83,38 +156,11 @@ All URLs:
83
156
 
84
157
  Call Tree:
85
158
 
86
- Node: 1 - main
87
- Selected: false
88
- Duration: 500
89
- Self Time: 100
90
- Children:
91
- * 2 - update
92
-
93
- Node: 2 - update
94
- Selected: false
95
- Duration: 200
96
- Self Time: 50
97
- Children:
98
- * 3 - animate
99
-
100
- Node: 3 - animate
101
- Selected: true
102
- Duration: 150
103
- Self Time: 20
104
- URL: 0
105
- Children:
106
- * 4 - calculatePosition
107
- * 5 - applyStyles
108
-
109
- Node: 4 - calculatePosition
110
- Selected: false
111
- Duration: 80
112
- Self Time: 80
113
-
114
- Node: 5 - applyStyles
115
- Selected: false
116
- Duration: 50
117
- Self Time: 50
159
+ 1;main;500;100;;
160
+ 2;update;200;50;;3
161
+ 3;animate;150;20;0;4-5;S
162
+ 4;calculatePosition;80;80;;
163
+ 5;applyStyles;50;50;;
118
164
 
119
165
  Analyze the selected call frame.
120
166
 
@@ -127,80 +173,323 @@ The 'calculatePosition' function, taking 80ms, is a potential bottleneck.
127
173
  Consider optimizing the position calculation logic or reducing the frequency of calls to improve animation performance.
128
174
  `;
129
175
 
130
- /*
131
- * Strings that don't need to be translated at this time.
132
- */
133
- const UIStringsNotTranslate = {
134
- analyzingCallTree: 'Analyzing call tree',
135
- } as const;
176
+ const fullTracePreamble = `You are an assistant, expert in web performance and highly skilled with Chrome DevTools.
136
177
 
137
- const lockedString = i18n.i18n.lockedString;
178
+ Your primary goal is to provide actionable advice to web developers about their web page by using the Chrome Performance Panel and analyzing a trace. You may need to diagnose problems yourself, or you may be given direction for what to focus on by the user.
179
+
180
+ You will be provided a summary of a trace: some performance metrics; the most critical network requests; a bottom-up call graph summary; and a brief overview of available insights. Each insight has information about potential performance issues with the page.
181
+
182
+ Don't mention anything about an insight without first getting more data about it by calling \`getInsightDetails\`.
183
+
184
+ You have many functions available to learn more about the trace. Use these to confirm hypotheses, or to further explore the trace when diagnosing performance issues.
185
+
186
+ You will be given bounds representing a time range within the trace. Bounds include a min and a max time in microseconds. max is always bigger than min in a bounds.
187
+
188
+ The 3 main performance metrics are:
189
+ - LCP: "Largest Contentful Paint"
190
+ - INP: "Interaction to Next Paint"
191
+ - CLS: "Cumulative Layout Shift"
192
+
193
+ Trace events referenced in the information given to you will be marked with an \`eventKey\`. For example: \`LCP element: <img src="..."> (eventKey: r-123, ts: 123456)\`
194
+ You can use this key with \`getEventByKey\` to get more information about that trace event. For example: \`getEventByKey('r-123')\`
195
+
196
+ ## Step-by-step instructions for debugging performance issues
197
+
198
+ Note: if the user asks a specific question about the trace (such as "What is my LCP?", or "How many requests were render-blocking?", directly answer their question and skip starting a performance investigation. Otherwise, your task is to collaborate with the user to discover and resolve real performance issues.
199
+
200
+ ### Step 1: Determine a performance problem to investigate
201
+
202
+ - With help from the user, determine what performance problem to focus on.
203
+ - If the user is not specific about what problem to investigate, help them by doing a high-level investigation yourself. Present to the user a few options with 1-sentence summaries. Mention what performance metrics each option impacts. Call as many functions and confirm the data thoroughly: never present an option without being certain it is a real performance issue. Don't suggest solutions yet.
204
+ - Rank the options from most impactful to least impactful, and present them to the user in that order.
205
+ - Don't present more than 5 options.
206
+ - Once a performance problem has been identified for investigation, move on to step 2.
207
+
208
+ ### Step 2: Suggest solutions
209
+
210
+ - Suggest possible solutions to remedy the identified performance problem. Be as specific as possible, using data from the trace via the provided functions to back up everything you say. You should prefer specific solutions, but absent any specific solution you may suggest general solutions (such as from an insight's documentation links).
211
+ - A good first step to discover solutions is to consider the insights, but you should also validate all potential advice by analyzing the trace until you are confident about the root cause of a performance issue.
212
+
213
+ ## Guidelines
214
+
215
+ - Use the provided functions to get detailed performance data. Prioritize functions that provide context relevant to the performance issue being investigated.
216
+ - Before finalizing your advice, look over it and validate using any relevant functions. If something seems off, refine the advice before giving it to the user.
217
+ - Do not rely on assumptions or incomplete information. Use the provided functions to get more data when needed.
218
+ - Use the track summary functions to get high-level detail about portions of the trace. For the \`bounds\` parameter, default to using the bounds of the trace. Never specifically ask the user for a bounds. You can use more narrow bounds (such as the bounds relevant to a specific insight) when appropriate. Narrow the bounds given functions when possible.
219
+ - Use \`getEventByKey\` to get data on a specific trace event. This is great for root-cause analysis or validating any assumptions.
220
+ - Provide clear, actionable recommendations. Avoid technical jargon unless necessary, and explain any technical terms used.
221
+ - If you see a generic task like "Task", "Evaluate script" or "(anonymous)" in the main thread activity, try to look at its children to see what actual functions are executed and refer to those. When referencing the main thread activity, be as specific as you can. Ensure you identify to the user relevant functions and which script they were defined in. Avoid referencing "Task", "Evaluate script" and "(anonymous)" nodes if possible and instead focus on their children.
222
+ - Structure your response using markdown headings and bullet points for improved readability.
223
+ - Be direct and to the point. Avoid unnecessary introductory phrases or filler content. Focus on delivering actionable advice efficiently.
224
+
225
+ ## Strict Constraints
226
+
227
+ Adhere to the following critical requirements:
228
+
229
+ - Never show bounds to the user.
230
+ - Never show eventKey to the user.
231
+ - Ensure your responses only use ms for time units.
232
+ - Ensure numbers for time units are rounded to the nearest whole number.
233
+ - Ensure comprehensive data retrieval through function calls to provide accurate and complete recommendations.
234
+ - If the user asks a specific question about web performance that doesn't have anything to do with the trace, don't call any functions and be succinct in your answer.
235
+ - Before suggesting changing the format of an image, consider what format it is already in. For example, if the mime type is image/webp, do not suggest to the user that the image is converted to WebP, as the image is already in that format.
236
+ - Do not mention the functions you call to gather information about the trace (e.g., \`getEventByKey\`, \`getMainThreadTrackSummary\`) in your output. These are internal implementation details that should be hidden from the user.
237
+ - Do not mention that you are an AI, or refer to yourself in the third person. You are simulating a performance expert.
238
+ - If asked about sensitive topics (religion, race, politics, sexuality, gender, etc.), respond with: "My expertise is limited to website performance analysis. I cannot provide information on that topic.".
239
+ - Do not provide answers on non-web-development topics, such as legal, financial, medical, or personal advice.
240
+ `;
241
+
242
+ const callFrameDataFormatDescription = `Each call frame is presented in the following format:
243
+
244
+ 'id;name;duration;selfTime;urlIndex;childRange;[S]'
245
+
246
+ Key definitions:
247
+
248
+ * id: A unique numerical identifier for the call frame.
249
+ * name: A concise string describing the call frame (e.g., 'Evaluate Script', 'render', 'fetchData').
250
+ * duration: The total execution time of the call frame, including its children.
251
+ * selfTime: The time spent directly within the call frame, excluding its children's execution.
252
+ * urlIndex: Index referencing the "All URLs" list. Empty if no specific script URL is associated.
253
+ * childRange: Specifies the direct children of this node using their IDs. If empty ('' or 'S' at the end), the node has no children. If a single number (e.g., '4'), the node has one child with that ID. If in the format 'firstId-lastId' (e.g., '4-5'), it indicates a consecutive range of child IDs from 'firstId' to 'lastId', inclusive.
254
+ * S: _Optional_. The letter 'S' terminates the line if that call frame was selected by the user.
255
+
256
+ Example Call Tree:
257
+
258
+ 1;main;500;100;;
259
+ 2;update;200;50;;3
260
+ 3;animate;150;20;0;4-5;S
261
+ 4;calculatePosition;80;80;;
262
+ 5;applyStyles;50;50;;
263
+ `;
264
+
265
+ const mainThreadActivityFormatDescription =
266
+ `The tree is represented as a call frame with a root task and a series of children.
267
+ The format of each callframe is:
268
+
269
+ 'id;name;duration;selfTime;urlIndex;childRange;[S]'
270
+
271
+ The fields are:
272
+
273
+ * id: A unique numerical identifier for the call frame.
274
+ * name: A concise string describing the call frame (e.g., 'Evaluate Script', 'render', 'fetchData').
275
+ * duration: The total execution time of the call frame, including its children.
276
+ * selfTime: The time spent directly within the call frame, excluding its children's execution.
277
+ * urlIndex: Index referencing the "All URLs" list. Empty if no specific script URL is associated.
278
+ * childRange: Specifies the direct children of this node using their IDs. If empty ('' or 'S' at the end), the node has no children. If a single number (e.g., '4'), the node has one child with that ID. If in the format 'firstId-lastId' (e.g., '4-5'), it indicates a consecutive range of child IDs from 'firstId' to 'lastId', inclusive.
279
+ * S: **Optional marker.** The letter 'S' appears at the end of the line **only** for the single call frame selected by the user.`;
280
+
281
+ enum ScorePriority {
282
+ REQUIRED = 3,
283
+ CRITICAL = 2,
284
+ DEFAULT = 1,
285
+ }
286
+
287
+ export class PerformanceTraceContext extends ConversationContext<TimelineUtils.AIContext.AgentFocus> {
288
+ static full(
289
+ parsedTrace: Trace.Handlers.Types.ParsedTrace, insightSet: Trace.Insights.Types.InsightSet|null,
290
+ traceMetadata: Trace.Types.File.MetaData): PerformanceTraceContext {
291
+ return new PerformanceTraceContext(TimelineUtils.AIContext.AgentFocus.full(parsedTrace, insightSet, traceMetadata));
292
+ }
293
+
294
+ static fromInsight(
295
+ parsedTrace: Trace.Handlers.Types.ParsedTrace, insight: Trace.Insights.Types.InsightModel,
296
+ insightSetBounds: Trace.Types.Timing.TraceWindowMicro): PerformanceTraceContext {
297
+ return new PerformanceTraceContext(
298
+ TimelineUtils.AIContext.AgentFocus.fromInsight(parsedTrace, insight, insightSetBounds));
299
+ }
300
+
301
+ static fromCallTree(callTree: TimelineUtils.AICallTree.AICallTree): PerformanceTraceContext {
302
+ return new PerformanceTraceContext(TimelineUtils.AIContext.AgentFocus.fromCallTree(callTree));
303
+ }
138
304
 
139
- export class CallTreeContext extends ConversationContext<TimelineUtils.AICallTree.AICallTree> {
140
- #callTree: TimelineUtils.AICallTree.AICallTree;
305
+ #focus: TimelineUtils.AIContext.AgentFocus;
141
306
 
142
- constructor(callTree: TimelineUtils.AICallTree.AICallTree) {
307
+ constructor(focus: TimelineUtils.AIContext.AgentFocus) {
143
308
  super();
144
- this.#callTree = callTree;
309
+ this.#focus = focus;
145
310
  }
146
311
 
147
312
  override getOrigin(): string {
148
- // Although in this context we expect the call tree to have a selected node
149
- // as the entrypoint into the "Ask AI" tool is via selecting a node, it is
150
- // possible to build trees without a selected node, in which case we
151
- // fallback to the root node.
152
- const node = this.#callTree.selectedNode ?? this.#callTree.rootNode;
153
- const selectedEvent = node.event;
154
- // Get the non-resolved (ignore sourcemaps) URL for the event. We use the
155
- // non-resolved URL as in the context of the AI Assistance panel, we care
156
- // about the origin it was served on.
157
- const nonResolvedURL = Trace.Handlers.Helpers.getNonResolvedURL(selectedEvent, this.#callTree.parsedTrace);
158
- if (nonResolvedURL) {
159
- const origin = Common.ParsedURL.ParsedURL.extractOrigin(nonResolvedURL);
160
- if (origin) { // origin could be the empty string.
161
- return origin;
313
+ const focus = this.#focus.data;
314
+
315
+ if (focus.type === 'full') {
316
+ const {min, max} = focus.parsedTrace.Meta.traceBounds;
317
+ return `trace-${min}-${max}`;
318
+ }
319
+
320
+ if (focus.type === 'call-tree') {
321
+ // Although in this context we expect the call tree to have a selected node
322
+ // as the entrypoint into the "Ask AI" tool is via selecting a node, it is
323
+ // possible to build trees without a selected node, in which case we
324
+ // fallback to the root node.
325
+ const node = focus.callTree.selectedNode ?? focus.callTree.rootNode;
326
+ const selectedEvent = node.event;
327
+ // Get the non-resolved (ignore sourcemaps) URL for the event. We use the
328
+ // non-resolved URL as in the context of the AI Assistance panel, we care
329
+ // about the origin it was served on.
330
+ const nonResolvedURL = Trace.Handlers.Helpers.getNonResolvedURL(selectedEvent, focus.callTree.parsedTrace);
331
+ if (nonResolvedURL) {
332
+ const origin = Common.ParsedURL.ParsedURL.extractOrigin(nonResolvedURL);
333
+ if (origin) { // origin could be the empty string.
334
+ return origin;
335
+ }
162
336
  }
337
+ // Generate a random "origin". We do this rather than return an empty
338
+ // string or some "unknown" string so that each event without a definite
339
+ // URL is considered a new, standalone origin. This is safer from a privacy
340
+ // & security perspective, else we risk bucketing events together that
341
+ // should not be. We also don't want to make it entirely random so we
342
+ // cannot calculate it deterministically.
343
+ const uuid = `${selectedEvent.name}_${selectedEvent.pid}_${selectedEvent.tid}_${selectedEvent.ts}`;
344
+ return uuid;
345
+ }
346
+
347
+ if (focus.type === 'insight') {
348
+ const {min, max} = focus.parsedTrace.Meta.traceBounds;
349
+ return `insight-${min}-${max}`;
163
350
  }
164
- // Generate a random "origin". We do this rather than return an empty
165
- // string or some "unknown" string so that each event without a definite
166
- // URL is considered a new, standalone origin. This is safer from a privacy
167
- // & security perspective, else we risk bucketing events together that
168
- // should not be. We also don't want to make it entirely random so we
169
- // cannot calculate it deterministically.
170
- const uuid = `${selectedEvent.name}_${selectedEvent.pid}_${selectedEvent.tid}_${selectedEvent.ts}`;
171
- return uuid;
351
+
352
+ Platform.assertNever(focus, 'Unknown agent focus');
172
353
  }
173
354
 
174
- override getItem(): TimelineUtils.AICallTree.AICallTree {
175
- return this.#callTree;
355
+ override getItem(): TimelineUtils.AIContext.AgentFocus {
356
+ return this.#focus;
176
357
  }
177
358
 
178
359
  override getIcon(): TemplateResult {
179
- return html`<devtools-icon name="performance" title="Performance"
180
- style="color: var(--sys-color-on-surface-subtle);"></devtools-icon>`;
360
+ return html`<devtools-icon name="performance" title="Performance"></devtools-icon>`;
181
361
  }
182
362
 
183
363
  override getTitle(): string {
184
- const event = this.#callTree.selectedNode?.event ?? this.#callTree.rootNode.event;
185
- if (!event) {
186
- return 'unknown';
364
+ const focus = this.#focus.data;
365
+
366
+ if (focus.type === 'full') {
367
+ return `Trace: ${new URL(focus.parsedTrace.Meta.mainFrameURL).hostname}`;
368
+ }
369
+
370
+ if (focus.type === 'call-tree') {
371
+ const event = focus.callTree.selectedNode?.event ?? focus.callTree.rootNode.event;
372
+ if (!event) {
373
+ return 'unknown';
374
+ }
375
+ return TimelineUtils.EntryName.nameForEntry(event);
376
+ }
377
+
378
+ if (focus.type === 'insight') {
379
+ return `Insight: ${focus.insight.title}`;
380
+ }
381
+
382
+ Platform.assertNever(focus, 'Unknown agent focus');
383
+ }
384
+
385
+ /**
386
+ * Presents the default suggestions that are shown when the user first clicks
387
+ * "Ask AI".
388
+ */
389
+ override async getSuggestions(): Promise<[ConversationSuggestion, ...ConversationSuggestion[]]|undefined> {
390
+ const focus = this.#focus.data;
391
+
392
+ if (focus.type !== 'insight') {
393
+ return;
187
394
  }
188
395
 
189
- return TimelineUtils.EntryName.nameForEntry(event);
396
+ return new PerformanceInsightFormatter(focus.parsedTrace, focus.insight).getSuggestions();
190
397
  }
191
398
  }
192
399
 
400
+ // 16k Tokens * ~4 char per token.
401
+ const MAX_FUNCTION_RESULT_BYTE_LENGTH = 16384 * 4;
402
+
403
+ /**
404
+ * Union of all the performance conversation types, which are all implemented by this file.
405
+ * This temporary until all Performance Panel AI features use the "Full" type. go/chrome-devtools:more-powerful-performance-agent-design
406
+ */
407
+ type PerformanceConversationType =
408
+ ConversationType.PERFORMANCE_FULL|ConversationType.PERFORMANCE_CALL_TREE|ConversationType.PERFORMANCE_INSIGHT;
409
+
193
410
  /**
194
411
  * One agent instance handles one conversation. Create a new agent
195
412
  * instance for a new conversation.
196
413
  */
197
- export class PerformanceAgent extends AiAgent<TimelineUtils.AICallTree.AICallTree> {
198
- readonly preamble = preamble;
414
+ export class PerformanceAgent extends AiAgent<TimelineUtils.AIContext.AgentFocus> {
415
+ // TODO: would make more sense on AgentOptions
416
+ #conversationType: PerformanceConversationType;
417
+ #formatter: PerformanceTraceFormatter|null = null;
418
+ #lastInsightForEnhancedQuery: Trace.Insights.Types.InsightModel|undefined;
419
+ #eventsSerializer = new TimelineUtils.EventsSerializer.EventsSerializer();
420
+ #lastFocusHandledForContextDetails: TimelineUtils.AIContext.AgentFocus|null = null;
421
+
422
+ constructor(opts: AgentOptions, conversationType: PerformanceConversationType) {
423
+ super(opts);
424
+ this.#conversationType = conversationType;
425
+ }
426
+
427
+ /**
428
+ * Store results (as facts) for the functions that are pure and return the
429
+ * same data for the same insight.
430
+ * This fact is then passed into the request on all future
431
+ * queries for the conversation. This means that the LLM is far less likely to
432
+ * call the function again, because we have provided the same data as a
433
+ * fact. We cache based on the active insight to ensure that if the user
434
+ * changes which insight they are focusing we will call the function again.
435
+ * It's important that we store it as a Fact in the cache, because the AI
436
+ * Agent stores facts in a set, and we need to pass the same object through to
437
+ * make sure it isn't mistakenly duplicated in the request.
438
+ */
439
+ #functionCallCacheForInsight = new Map<Trace.Insights.Types.InsightModel, {
440
+ getNetworkActivitySummary?: Host.AidaClient.RequestFact,
441
+ getMainThreadActivity?: Host.AidaClient.RequestFact,
442
+ }>();
199
443
 
200
- // We have to set the type of clientFeature here to be the entire enum
201
- // because in PerformanceAnnotationsAgent.ts we override it.
202
- // TODO(b/406961576): split the agents apart rather than have one extend the other.
203
- readonly clientFeature: Host.AidaClient.ClientFeature = Host.AidaClient.ClientFeature.CHROME_PERFORMANCE_AGENT;
444
+ /**
445
+ * Similar to above, but only used for the "Full" trace focus.
446
+ *
447
+ * The record key is the result of a function's displayInfoFromArgs.
448
+ */
449
+ #functionCallCacheForFocus =
450
+ new Map<TimelineUtils.AIContext.AgentFocus, Record<string, Host.AidaClient.RequestFact>>();
451
+
452
+ /*
453
+ * Since don't know for sure if the model will request the main thread or network requests information,
454
+ * add the formats description to facts once the main thread activity or network requests need to be sent.
455
+ */
456
+ #mainThreadActivityDescriptionFact:
457
+ Host.AidaClient.RequestFact = {text: mainThreadActivityFormatDescription, metadata: {source: 'devtools'}};
458
+ #networkDataDescriptionFact: Host.AidaClient.RequestFact = {
459
+ text: TraceEventFormatter.networkDataFormatDescription,
460
+ metadata: {source: 'devtools', score: ScorePriority.CRITICAL}
461
+ };
462
+ #callFrameDataDescriptionFact: Host.AidaClient.RequestFact = {
463
+ text: callFrameDataFormatDescription,
464
+ metadata: {source: 'devtools', score: ScorePriority.CRITICAL}
465
+ };
466
+ #traceFacts: Host.AidaClient.RequestFact[] = [];
467
+
468
+ get preamble(): string {
469
+ if (this.#conversationType === ConversationType.PERFORMANCE_FULL) {
470
+ return fullTracePreamble;
471
+ }
472
+ if (this.#conversationType === ConversationType.PERFORMANCE_CALL_TREE) {
473
+ return callTreePreamble;
474
+ }
475
+ if (this.#conversationType === ConversationType.PERFORMANCE_INSIGHT) {
476
+ return insightPreamble;
477
+ }
478
+ Platform.assertNever(this.#conversationType, 'Unexpected conversation type');
479
+ }
480
+
481
+ get clientFeature(): Host.AidaClient.ClientFeature {
482
+ if (this.#conversationType === ConversationType.PERFORMANCE_FULL) {
483
+ return Host.AidaClient.ClientFeature.CHROME_PERFORMANCE_FULL_AGENT;
484
+ }
485
+ if (this.#conversationType === ConversationType.PERFORMANCE_CALL_TREE) {
486
+ return Host.AidaClient.ClientFeature.CHROME_PERFORMANCE_AGENT;
487
+ }
488
+ if (this.#conversationType === ConversationType.PERFORMANCE_INSIGHT) {
489
+ return Host.AidaClient.ClientFeature.CHROME_PERFORMANCE_INSIGHTS_AGENT;
490
+ }
491
+ Platform.assertNever(this.#conversationType, 'Unexpected conversation type');
492
+ }
204
493
  get userTier(): string|undefined {
205
494
  return Root.Runtime.hostConfig.devToolsAiAssistancePerformanceAgent?.userTier;
206
495
  }
@@ -214,40 +503,745 @@ export class PerformanceAgent extends AiAgent<TimelineUtils.AICallTree.AICallTre
214
503
  };
215
504
  }
216
505
 
506
+ getConversationType(): ConversationType {
507
+ return this.#conversationType;
508
+ }
509
+
510
+ #lookupEvent(key: Trace.Types.File.SerializableKey): Trace.Types.Events.Event|null {
511
+ const parsedTrace = this.context?.getItem().data.parsedTrace;
512
+ if (!parsedTrace) {
513
+ return null;
514
+ }
515
+
516
+ try {
517
+ return this.#eventsSerializer.eventForKey(key, parsedTrace);
518
+ } catch (err) {
519
+ if (err.toString().includes('Unknown trace event')) {
520
+ return null;
521
+ }
522
+
523
+ throw err;
524
+ }
525
+ }
526
+
527
+ #serializeFocus(focus: TimelineUtils.AIContext.AgentFocus): string {
528
+ if (focus.data.type === 'full') {
529
+ if (!this.#formatter) {
530
+ return '';
531
+ }
532
+
533
+ return this.#formatter.formatTraceSummary();
534
+ }
535
+
536
+ if (focus.data.type === 'call-tree') {
537
+ return focus.data.callTree.serialize();
538
+ }
539
+
540
+ if (focus.data.type === 'insight') {
541
+ const formatter = new PerformanceInsightFormatter(focus.data.parsedTrace, focus.data.insight);
542
+ return formatter.formatInsight();
543
+ }
544
+
545
+ Platform.assertNever(focus.data, 'Unknown agent focus');
546
+ }
547
+
217
548
  async *
218
- handleContextDetails(aiCallTree: ConversationContext<TimelineUtils.AICallTree.AICallTree>|null):
549
+ handleContextDetails(context: ConversationContext<TimelineUtils.AIContext.AgentFocus>|null):
219
550
  AsyncGenerator<ContextResponse, void, void> {
220
- yield {
221
- type: ResponseType.CONTEXT,
222
- title: lockedString(UIStringsNotTranslate.analyzingCallTree),
223
- details: [
224
- {
225
- title: 'Selected call tree',
226
- text: aiCallTree?.getItem().serialize() ?? '',
227
- },
228
- ],
229
- };
551
+ if (!context) {
552
+ return;
553
+ }
554
+
555
+ const focus = context.getItem();
556
+ if (this.#lastFocusHandledForContextDetails === focus) {
557
+ return;
558
+ }
559
+
560
+ this.#lastFocusHandledForContextDetails = focus;
561
+
562
+ if (focus.data.type === 'full') {
563
+ yield {
564
+ type: ResponseType.CONTEXT,
565
+ title: lockedString(UIStringsNotTranslated.analyzingTrace),
566
+ details: [
567
+ {
568
+ title: 'Trace',
569
+ text: this.#serializeFocus(focus),
570
+ },
571
+ ],
572
+ };
573
+ } else if (focus.data.type === 'call-tree') {
574
+ yield {
575
+ type: ResponseType.CONTEXT,
576
+ title: lockedString(UIStringsNotTranslated.analyzingCallTree),
577
+ details: [
578
+ {
579
+ title: 'Selected call tree',
580
+ text: this.#serializeFocus(focus),
581
+ },
582
+ ],
583
+ };
584
+ } else if (focus.data.type === 'insight') {
585
+ const activeInsight = focus.data.insight;
586
+ const title = `Analyzing insight: ${activeInsight.title}`;
587
+ yield {
588
+ type: ResponseType.CONTEXT,
589
+ title,
590
+ details: [
591
+ {
592
+ // Purposefully use the raw title in the details view, we don't need to repeat "Analyzing insight"
593
+ title: activeInsight.title,
594
+ text: this.#serializeFocus(focus),
595
+ },
596
+ ],
597
+ };
598
+ } else {
599
+ Platform.assertNever(focus.data, 'Unknown agent focus');
600
+ }
230
601
  }
231
602
 
232
- #contextSet = new WeakSet();
603
+ #callTreeContextSet = new WeakSet();
233
604
 
234
- override async enhanceQuery(query: string, aiCallTree: ConversationContext<TimelineUtils.AICallTree.AICallTree>|null):
605
+ #isFunctionResponseTooLarge(response: string): boolean {
606
+ return response.length > MAX_FUNCTION_RESULT_BYTE_LENGTH;
607
+ }
608
+
609
+ override parseTextResponse(response: string): ParsedResponse {
610
+ /**
611
+ * Sometimes the LLM responds with code chunks that wrap a text based markdown response.
612
+ * If this happens, we want to remove those before continuing.
613
+ * See b/405054694 for more details.
614
+ */
615
+ const trimmed = response.trim();
616
+ const FIVE_BACKTICKS = '`````';
617
+ if (trimmed.startsWith(FIVE_BACKTICKS) && trimmed.endsWith(FIVE_BACKTICKS)) {
618
+ // Purposefully use the trimmed text here; we might as well remove any
619
+ // newlines that are at the very start or end.
620
+ const stripped = trimmed.slice(FIVE_BACKTICKS.length, -FIVE_BACKTICKS.length);
621
+ return super.parseTextResponse(stripped);
622
+ }
623
+ return super.parseTextResponse(response);
624
+ }
625
+
626
+ override async enhanceQuery(query: string, context: ConversationContext<TimelineUtils.AIContext.AgentFocus>|null):
235
627
  Promise<string> {
236
- const treeItem = aiCallTree?.getItem();
237
- let treeStr = treeItem?.serialize();
628
+ if (!context) {
629
+ this.clearDeclaredFunctions();
630
+ return query;
631
+ }
632
+
633
+ this.clearDeclaredFunctions();
634
+ this.#declareFunctions(context);
635
+
636
+ const focus = context.getItem();
637
+ let contextString = '';
638
+
639
+ if (focus.data.type === 'full') {
640
+ return query;
641
+ }
642
+
643
+ if (focus.data.type === 'call-tree') {
644
+ // If this is a followup chat about the same call tree, don't include the call tree serialization again.
645
+ // We don't need to repeat it and we'd rather have more the context window space.
646
+ if (!this.#callTreeContextSet.has(focus.data.callTree)) {
647
+ contextString = this.#serializeFocus(focus);
648
+ }
649
+ if (!this.#callTreeContextSet.has(focus.data.callTree)) {
650
+ this.#callTreeContextSet.add(focus.data.callTree);
651
+ }
652
+ const perfEnhancementQuery = contextString ? `${contextString}\n\n# User request\n\n` : '';
653
+ return `${perfEnhancementQuery}${query}`;
654
+ }
655
+
656
+ if (focus.data.type === 'insight') {
657
+ // We only need to add Insight info to a prompt when the context changes. For example:
658
+ // User clicks Insight A. We need to send info on Insight A with the prompt.
659
+ // User asks follow up question. We do not need to resend Insight A with the prompt.
660
+ // User clicks Insight B. We now need to send info on Insight B with the prompt.
661
+ // User clicks Insight A. We should resend the Insight info with the prompt.
662
+ const includeInsightInfo = focus.data.insight !== this.#lastInsightForEnhancedQuery;
663
+ const extraQuery =
664
+ `${includeInsightInfo ? this.#serializeFocus(focus) + '\n\n' : ''}# User question for you to answer:\n`;
665
+ this.#lastInsightForEnhancedQuery = focus.data.insight;
666
+ return `${extraQuery}${query}`;
667
+ }
668
+
669
+ Platform.assertNever(focus.data, 'Unknown agent focus');
670
+ }
671
+
672
+ override async * run(initialQuery: string, options: {
673
+ selected: ConversationContext<TimelineUtils.AIContext.AgentFocus>|null,
674
+ signal?: AbortSignal,
675
+ }): AsyncGenerator<ResponseData, void, void> {
676
+ const focus = options.selected?.getItem();
677
+
678
+ // Clear any previous facts in case the user changed the active context.
679
+ this.clearFacts();
680
+
681
+ if (this.#conversationType === ConversationType.PERFORMANCE_FULL) {
682
+ if (focus) {
683
+ this.#addFactsForFullTrace(focus);
684
+ }
685
+ } else if (this.#conversationType === ConversationType.PERFORMANCE_INSIGHT) {
686
+ const insight = focus?.data.type === 'insight' ? focus.data.insight : null;
687
+ const cachedFunctionCalls = insight ? this.#functionCallCacheForInsight.get(insight) : null;
688
+ if (cachedFunctionCalls) {
689
+ for (const fact of Object.values(cachedFunctionCalls)) {
690
+ this.addFact(fact);
691
+ }
692
+ }
693
+ }
694
+
695
+ return yield* super.run(initialQuery, options);
696
+ }
697
+
698
+ #createFactForTraceSummary(focus: TimelineUtils.AIContext.AgentFocus): void {
699
+ if (!this.#formatter) {
700
+ return;
701
+ }
702
+
703
+ const text = this.#serializeFocus(focus);
704
+ if (!text) {
705
+ return;
706
+ }
238
707
 
239
- // Collect the queries from previous messages in this session
708
+ this.#traceFacts.push(
709
+ {text: `Trace summary:\n${text}`, metadata: {source: 'devtools', score: ScorePriority.REQUIRED}});
710
+ }
240
711
 
241
- // If this is a followup chat about the same call tree, don't include the call tree serialization again.
242
- // We don't need to repeat it and we'd rather have more the context window space.
243
- if (treeItem && this.#contextSet.has(treeItem) && treeStr) {
244
- treeStr = undefined;
712
+ #createFactForCriticalRequests(): void {
713
+ if (!this.#formatter) {
714
+ return;
245
715
  }
246
- if (treeItem && !this.#contextSet.has(treeItem)) {
247
- this.#contextSet.add(treeItem);
716
+
717
+ const text = this.#formatter.formatCriticalRequests();
718
+ if (!text) {
719
+ return;
248
720
  }
249
721
 
250
- const perfEnhancementQuery = treeStr ? `${treeStr}\n\n# User request\n\n` : '';
251
- return `${perfEnhancementQuery}${query}`;
722
+ this.#traceFacts.push({
723
+ text,
724
+ metadata: {source: 'devtools', score: ScorePriority.CRITICAL},
725
+ });
726
+ }
727
+
728
+ #createFactForMainThreadBottomUpSummary(): void {
729
+ if (!this.#formatter) {
730
+ return;
731
+ }
732
+
733
+ const text = this.#formatter.formatMainThreadBottomUpSummary();
734
+ if (!text) {
735
+ return;
736
+ }
737
+
738
+ this.#traceFacts.push({
739
+ text,
740
+ metadata: {source: 'devtools', score: ScorePriority.CRITICAL},
741
+ });
742
+ }
743
+
744
+ #createFactForThirdPartySummary(): void {
745
+ if (!this.#formatter) {
746
+ return;
747
+ }
748
+
749
+ const text = this.#formatter.formatThirdPartySummary();
750
+ if (!text) {
751
+ return;
752
+ }
753
+
754
+ this.#traceFacts.push({
755
+ text,
756
+ metadata: {source: 'devtools', score: ScorePriority.CRITICAL},
757
+ });
758
+ }
759
+
760
+ #createFactForLongestTasks(): void {
761
+ if (!this.#formatter) {
762
+ return;
763
+ }
764
+
765
+ const text = this.#formatter.formatLongestTasks();
766
+ if (!text) {
767
+ return;
768
+ }
769
+
770
+ this.#traceFacts.push({
771
+ text,
772
+ metadata: {source: 'devtools', score: ScorePriority.CRITICAL},
773
+ });
774
+ }
775
+
776
+ #addFactsForFullTrace(focus: TimelineUtils.AIContext.AgentFocus): void {
777
+ if (focus.data.type !== 'full') {
778
+ return;
779
+ }
780
+
781
+ this.addFact(this.#callFrameDataDescriptionFact);
782
+ this.addFact(this.#networkDataDescriptionFact);
783
+
784
+ if (!this.#traceFacts.length) {
785
+ this.#formatter = new PerformanceTraceFormatter(focus, this.#eventsSerializer);
786
+ this.#createFactForTraceSummary(focus);
787
+ this.#createFactForCriticalRequests();
788
+ this.#createFactForMainThreadBottomUpSummary();
789
+ this.#createFactForThirdPartySummary();
790
+ this.#createFactForLongestTasks();
791
+ }
792
+
793
+ for (const fact of this.#traceFacts) {
794
+ this.addFact(fact);
795
+ }
796
+
797
+ const cachedFunctionCalls = this.#functionCallCacheForFocus.get(focus);
798
+ if (cachedFunctionCalls) {
799
+ for (const fact of Object.values(cachedFunctionCalls)) {
800
+ this.addFact(fact);
801
+ }
802
+ }
803
+ }
804
+
805
+ #cacheFunctionResult(focus: TimelineUtils.AIContext.AgentFocus, key: string, result: string): void {
806
+ const fact: Host.AidaClient.RequestFact = {
807
+ text: `This is the result of calling ${key}:\n${result}`,
808
+ metadata: {source: key, score: ScorePriority.DEFAULT},
809
+ };
810
+ const cache = this.#functionCallCacheForFocus.get(focus) ?? {};
811
+ cache[key] = fact;
812
+ this.#functionCallCacheForFocus.set(focus, cache);
813
+ }
814
+
815
+ #declareFunctionsForFullTrace(focus: TimelineUtils.AIContext.AgentFocus): void {
816
+ if (focus.data.type !== 'full') {
817
+ return;
818
+ }
819
+
820
+ const {parsedTrace, insightSet, traceMetadata} = focus.data;
821
+
822
+ this.declareFunction<{insightName: string}, {details: string}>('getInsightDetails', {
823
+ description:
824
+ 'Returns detailed information about a specific insight. Use this before commenting on any specific issue to get more information.',
825
+ parameters: {
826
+ type: Host.AidaClient.ParametersTypes.OBJECT,
827
+ description: '',
828
+ nullable: false,
829
+ properties: {
830
+ insightName: {
831
+ type: Host.AidaClient.ParametersTypes.STRING,
832
+ description: 'The name of the insight. Only use the insight names given in the Available Insights list.',
833
+ nullable: false,
834
+ }
835
+ },
836
+ },
837
+ displayInfoFromArgs: params => {
838
+ return {
839
+ title: lockedString(`Investigating insight ${params.insightName}…`),
840
+ action: `getInsightDetails('${params.insightName}')`
841
+ };
842
+ },
843
+ handler: async params => {
844
+ debugLog('Function call: getInsightDetails', params);
845
+ const insight = insightSet?.model[params.insightName as keyof Trace.Insights.Types.InsightModels];
846
+ if (!insight) {
847
+ return {error: 'No insight available'};
848
+ }
849
+
850
+ const details = new PerformanceInsightFormatter(parsedTrace, insight).formatInsight();
851
+
852
+ const key = `getInsightDetails('${params.insightName}')`;
853
+ this.#cacheFunctionResult(focus, key, details);
854
+ return {result: {details}};
855
+ },
856
+ });
857
+
858
+ this.declareFunction<{eventKey: string}, {details: string}>('getEventByKey', {
859
+ description:
860
+ 'Returns detailed information about a specific event. Use the detail returned to validate performance issues, but do not tell the user about irrelevant raw data from a trace event.',
861
+ parameters: {
862
+ type: Host.AidaClient.ParametersTypes.OBJECT,
863
+ description: '',
864
+ nullable: false,
865
+ properties: {
866
+ eventKey: {
867
+ type: Host.AidaClient.ParametersTypes.STRING,
868
+ description: 'The key for the event.',
869
+ nullable: false,
870
+ }
871
+ },
872
+ },
873
+ displayInfoFromArgs: params => {
874
+ return {title: lockedString('Looking at trace event…'), action: `getEventByKey('${params.eventKey}')`};
875
+ },
876
+ handler: async params => {
877
+ debugLog('Function call: getEventByKey', params);
878
+ const event = this.#lookupEvent(params.eventKey as Trace.Types.File.SerializableKey);
879
+ if (!event) {
880
+ return {error: 'Invalid eventKey'};
881
+ }
882
+
883
+ // TODO(b/425270067): Format in the same way that "Summary" detail tab does.
884
+ const details = JSON.stringify(event);
885
+
886
+ const key = `getEventByKey('${params.eventKey}')`;
887
+ this.#cacheFunctionResult(focus, key, details);
888
+ return {result: {details}};
889
+ },
890
+ });
891
+
892
+ const createBounds =
893
+ (min: Trace.Types.Timing.Micro, max: Trace.Types.Timing.Micro): Trace.Types.Timing.TraceWindowMicro => {
894
+ min = Math.max(min ?? 0, parsedTrace.Meta.traceBounds.min) as Trace.Types.Timing.Micro;
895
+ max = Math.min(max ?? Number.POSITIVE_INFINITY, parsedTrace.Meta.traceBounds.max) as Trace.Types.Timing.Micro;
896
+ return Trace.Helpers.Timing.traceWindowFromMicroSeconds(min, max);
897
+ };
898
+
899
+ this.declareFunction<{min: Trace.Types.Timing.Micro, max: Trace.Types.Timing.Micro}, {
900
+ activity: string,
901
+ }>('getMainThreadTrackSummary', {
902
+ description:
903
+ 'Returns a summary of the main thread for the given bounds. The result includes a top-down summary, bottom-up summary, third-parties summary, and a list of related insights for the events within the given bounds.',
904
+ parameters: {
905
+ type: Host.AidaClient.ParametersTypes.OBJECT,
906
+ description: '',
907
+ nullable: false,
908
+ properties: {
909
+ min: {
910
+ type: Host.AidaClient.ParametersTypes.INTEGER,
911
+ description: 'The minimum time of the bounds, in microseconds',
912
+ nullable: false,
913
+ },
914
+ max: {
915
+ type: Host.AidaClient.ParametersTypes.INTEGER,
916
+ description: 'The maximum time of the bounds, in microseconds',
917
+ nullable: false,
918
+ },
919
+ },
920
+ },
921
+ displayInfoFromArgs: args => {
922
+ return {
923
+ title: lockedString(UIStringsNotTranslated.mainThreadActivity),
924
+ action: `getMainThreadTrackSummary({min: ${args.min}, max: ${args.max}})`
925
+ };
926
+ },
927
+ handler: async args => {
928
+ debugLog('Function call: getMainThreadTrackSummary');
929
+
930
+ if (!this.#formatter) {
931
+ throw new Error('missing formatter');
932
+ }
933
+
934
+ const bounds = createBounds(args.min, args.max);
935
+ const activity = this.#formatter.formatMainThreadTrackSummary(bounds);
936
+ if (this.#isFunctionResponseTooLarge(activity)) {
937
+ return {
938
+ error:
939
+ 'getMainThreadTrackSummary response is too large. Try investigating using other functions, or a more narrow bounds',
940
+ };
941
+ }
942
+
943
+ const key = `getMainThreadTrackSummary({min: ${bounds.min}, max: ${bounds.max}})`;
944
+ this.#cacheFunctionResult(focus, key, activity);
945
+ return {result: {activity}};
946
+ },
947
+
948
+ });
949
+
950
+ this.declareFunction<
951
+ {min: Trace.Types.Timing.Micro, max: Trace.Types.Timing.Micro}, {activity: string}>('getNetworkTrackSummary', {
952
+ description: 'Returns a summary of the network for the given bounds.',
953
+ parameters: {
954
+ type: Host.AidaClient.ParametersTypes.OBJECT,
955
+ description: '',
956
+ nullable: false,
957
+ properties: {
958
+ min: {
959
+ type: Host.AidaClient.ParametersTypes.INTEGER,
960
+ description: 'The minimum time of the bounds, in microseconds',
961
+ nullable: false,
962
+ },
963
+ max: {
964
+ type: Host.AidaClient.ParametersTypes.INTEGER,
965
+ description: 'The maximum time of the bounds, in microseconds',
966
+ nullable: false,
967
+ },
968
+ },
969
+ },
970
+ displayInfoFromArgs: args => {
971
+ return {
972
+ title: lockedString(UIStringsNotTranslated.networkActivitySummary),
973
+ action: `getNetworkTrackSummary({min: ${args.min}, max: ${args.max}})`
974
+ };
975
+ },
976
+ handler: async args => {
977
+ debugLog('Function call: getNetworkTrackSummary');
978
+
979
+ if (!this.#formatter) {
980
+ throw new Error('missing formatter');
981
+ }
982
+
983
+ const bounds = createBounds(args.min, args.max);
984
+ const activity = this.#formatter.formatNetworkTrackSummary(bounds);
985
+ if (this.#isFunctionResponseTooLarge(activity)) {
986
+ return {
987
+ error:
988
+ 'getNetworkTrackSummary response is too large. Try investigating using other functions, or a more narrow bounds',
989
+ };
990
+ }
991
+
992
+ const key = `getNetworkTrackSummary({min: ${bounds.min}, max: ${bounds.max}})`;
993
+ this.#cacheFunctionResult(focus, key, activity);
994
+ return {result: {activity}};
995
+ },
996
+
997
+ });
998
+
999
+ this.declareFunction<{eventKey: string}, {callTree: string}>('getDetailedCallTree', {
1000
+ description: 'Returns a detailed call tree for the given main thread event.',
1001
+ parameters: {
1002
+ type: Host.AidaClient.ParametersTypes.OBJECT,
1003
+ description: '',
1004
+ nullable: false,
1005
+ properties: {
1006
+ eventKey: {
1007
+ type: Host.AidaClient.ParametersTypes.STRING,
1008
+ description: 'The key for the event.',
1009
+ nullable: false,
1010
+ },
1011
+ },
1012
+ },
1013
+ displayInfoFromArgs: args => {
1014
+ return {title: lockedString('Looking at call tree…'), action: `getDetailedCallTree(${args.eventKey})`};
1015
+ },
1016
+ handler: async args => {
1017
+ debugLog('Function call: getDetailedCallTree');
1018
+
1019
+ if (!this.#formatter) {
1020
+ throw new Error('missing formatter');
1021
+ }
1022
+
1023
+ const event = this.#lookupEvent(args.eventKey as Trace.Types.File.SerializableKey);
1024
+ if (!event) {
1025
+ return {error: 'Invalid eventKey'};
1026
+ }
1027
+
1028
+ const tree = TimelineUtils.AICallTree.AICallTree.fromEvent(event, parsedTrace);
1029
+ const callTree = tree?.serialize() ?? 'No call tree found';
1030
+
1031
+ const key = `getDetailedCallTree(${args.eventKey})`;
1032
+ this.#cacheFunctionResult(focus, key, callTree);
1033
+ return {result: {callTree}};
1034
+ },
1035
+
1036
+ });
1037
+
1038
+ const isFresh = TimelineUtils.FreshRecording.Tracker.instance().recordingIsFresh(parsedTrace);
1039
+ const hasScriptContents = traceMetadata.enhancedTraceVersion && parsedTrace.Scripts.scripts.some(s => s.content);
1040
+
1041
+ if (isFresh || hasScriptContents) {
1042
+ this.declareFunction<{url: string}, {content: string}>('getResourceContent', {
1043
+ description: 'Returns the content of the resource with the given url. Only use this for text resource types.',
1044
+ parameters: {
1045
+ type: Host.AidaClient.ParametersTypes.OBJECT,
1046
+ description: '',
1047
+ nullable: false,
1048
+ properties: {
1049
+ url: {
1050
+ type: Host.AidaClient.ParametersTypes.STRING,
1051
+ description: 'The url for the resource.',
1052
+ nullable: false,
1053
+ },
1054
+ },
1055
+ },
1056
+ displayInfoFromArgs: args => {
1057
+ return {title: lockedString('Looking at resource content…'), action: `getResourceContent(${args.url})`};
1058
+ },
1059
+ handler: async args => {
1060
+ debugLog('Function call: getResourceContent');
1061
+
1062
+ const url = args.url as Platform.DevToolsPath.UrlString;
1063
+ const resource = SDK.ResourceTreeModel.ResourceTreeModel.resourceForURL(url);
1064
+ if (!resource) {
1065
+ if (!resource) {
1066
+ return {error: 'Resource not found'};
1067
+ }
1068
+ }
1069
+
1070
+ const content = resource.content;
1071
+ if (!content) {
1072
+ return {error: 'Resource has no content'};
1073
+ }
1074
+
1075
+ const key = `getResourceContent(${args.url})`;
1076
+ this.#cacheFunctionResult(focus, key, content);
1077
+ return {result: {content}};
1078
+ },
1079
+
1080
+ });
1081
+ }
1082
+ }
1083
+
1084
+ #declareFunctions(context: ConversationContext<TimelineUtils.AIContext.AgentFocus>): void {
1085
+ const focus = context.getItem();
1086
+
1087
+ if (focus.data.type === 'full') {
1088
+ this.#declareFunctionsForFullTrace(focus);
1089
+ return;
1090
+ }
1091
+
1092
+ if (focus.data.type !== 'insight') {
1093
+ return;
1094
+ }
1095
+
1096
+ const {parsedTrace, insight, insightSetBounds} = focus.data;
1097
+
1098
+ this.declareFunction<Record<never, unknown>, {
1099
+ requests: string,
1100
+ }>('getNetworkActivitySummary', {
1101
+ description:
1102
+ 'Returns a summary of network activity for the selected insight. If you want to get more detailed information on a network request, you can pass the URL of a request into `getNetworkRequestDetail`.',
1103
+ parameters: {
1104
+ type: Host.AidaClient.ParametersTypes.OBJECT,
1105
+ description: '',
1106
+ nullable: true,
1107
+ properties: {},
1108
+ },
1109
+ displayInfoFromArgs: () => {
1110
+ return {
1111
+ title: lockedString(UIStringsNotTranslated.networkActivitySummary),
1112
+ action: 'getNetworkActivitySummary()'
1113
+ };
1114
+ },
1115
+ handler: async () => {
1116
+ debugLog('Function call: getNetworkActivitySummary');
1117
+ if (!insight) {
1118
+ return {error: 'No insight available'};
1119
+ }
1120
+ const requests = TimelineUtils.InsightAIContext.AIQueries.networkRequests(
1121
+ insight,
1122
+ insightSetBounds,
1123
+ parsedTrace,
1124
+ );
1125
+ const formatted = TraceEventFormatter.networkRequests(requests, parsedTrace);
1126
+
1127
+ const byteCount = Platform.StringUtilities.countWtf8Bytes(formatted);
1128
+ Host.userMetrics.performanceAINetworkSummaryResponseSize(byteCount);
1129
+
1130
+ if (this.#isFunctionResponseTooLarge(formatted)) {
1131
+ return {
1132
+ error: 'getNetworkActivitySummary response is too large. Try investigating using other functions',
1133
+ };
1134
+ }
1135
+ const summaryFact: Host.AidaClient.RequestFact = {
1136
+ text:
1137
+ `This is the network summary for this insight. You can use this and not call getNetworkActivitySummary again:\n${
1138
+ formatted}`,
1139
+ metadata: {source: 'getNetworkActivitySummary()'}
1140
+ };
1141
+ const cacheForInsight = this.#functionCallCacheForInsight.get(insight) ?? {};
1142
+ cacheForInsight.getNetworkActivitySummary = summaryFact;
1143
+ this.#functionCallCacheForInsight.set(insight, cacheForInsight);
1144
+
1145
+ this.addFact(this.#networkDataDescriptionFact);
1146
+ return {result: {requests: formatted}};
1147
+ },
1148
+ });
1149
+
1150
+ this.declareFunction<Record<'url', string>, {
1151
+ request: string,
1152
+ }>('getNetworkRequestDetail', {
1153
+ description:
1154
+ 'Returns detailed debugging information about a specific network request. Use this eagerly to gather information about a network request to improve your diagnosis and optimization recommendations',
1155
+ parameters: {
1156
+ type: Host.AidaClient.ParametersTypes.OBJECT,
1157
+ description: '',
1158
+ nullable: true,
1159
+ properties: {
1160
+ url: {
1161
+ type: Host.AidaClient.ParametersTypes.STRING,
1162
+ description: 'The URL of the network request',
1163
+ nullable: false,
1164
+ }
1165
+ },
1166
+ },
1167
+ displayInfoFromArgs: params => {
1168
+ return {
1169
+ title: lockedString(`Investigating network request ${params.url}…`),
1170
+ action: `getNetworkRequestDetail('${params.url}')`
1171
+ };
1172
+ },
1173
+ handler: async params => {
1174
+ debugLog('Function call: getNetworkRequestDetail', params);
1175
+ if (!insight) {
1176
+ return {error: 'No insight available'};
1177
+ }
1178
+ const request = TimelineUtils.InsightAIContext.AIQueries.networkRequest(parsedTrace, params.url);
1179
+ if (!request) {
1180
+ return {error: 'Request not found'};
1181
+ }
1182
+ const formatted = TraceEventFormatter.networkRequests([request], parsedTrace, {verbose: true});
1183
+
1184
+ const byteCount = Platform.StringUtilities.countWtf8Bytes(formatted);
1185
+ Host.userMetrics.performanceAINetworkRequestDetailResponseSize(byteCount);
1186
+
1187
+ if (this.#isFunctionResponseTooLarge(formatted)) {
1188
+ return {
1189
+ error: 'getNetworkRequestDetail response is too large. Try investigating using other functions',
1190
+ };
1191
+ }
1192
+ this.addFact(this.#networkDataDescriptionFact);
1193
+ return {result: {request: formatted}};
1194
+ },
1195
+ });
1196
+
1197
+ this.declareFunction<Record<never, unknown>, {activity: string}>('getMainThreadActivity', {
1198
+ description: 'Returns the main thread activity for the selected insight.',
1199
+ parameters: {
1200
+ type: Host.AidaClient.ParametersTypes.OBJECT,
1201
+ description: '',
1202
+ nullable: true,
1203
+ properties: {},
1204
+ },
1205
+ displayInfoFromArgs: () => {
1206
+ return {title: lockedString(UIStringsNotTranslated.mainThreadActivity), action: 'getMainThreadActivity()'};
1207
+ },
1208
+ handler: async () => {
1209
+ debugLog('Function call: getMainThreadActivity');
1210
+ if (!insight) {
1211
+ return {error: 'No insight available'};
1212
+ }
1213
+ const tree = TimelineUtils.InsightAIContext.AIQueries.mainThreadActivityForInsight(
1214
+ insight,
1215
+ insightSetBounds,
1216
+ parsedTrace,
1217
+ );
1218
+ if (!tree) {
1219
+ return {error: 'No main thread activity found'};
1220
+ }
1221
+ const activity = tree.serialize();
1222
+
1223
+ const byteCount = Platform.StringUtilities.countWtf8Bytes(activity);
1224
+ Host.userMetrics.performanceAIMainThreadActivityResponseSize(byteCount);
1225
+
1226
+ if (this.#isFunctionResponseTooLarge(activity)) {
1227
+ return {
1228
+ error: 'getMainThreadActivity response is too large. Try investigating using other functions',
1229
+ };
1230
+ }
1231
+ const activityFact: Host.AidaClient.RequestFact = {
1232
+ text:
1233
+ `This is the main thread activity for this insight. You can use this and not call getMainThreadActivity again:\n${
1234
+ activity}`,
1235
+ metadata: {source: 'getMainThreadActivity()'},
1236
+ };
1237
+ const cacheForInsight = this.#functionCallCacheForInsight.get(insight) ?? {};
1238
+ cacheForInsight.getMainThreadActivity = activityFact;
1239
+ this.#functionCallCacheForInsight.set(insight, cacheForInsight);
1240
+
1241
+ this.addFact(this.#mainThreadActivityDescriptionFact);
1242
+ return {result: {activity}};
1243
+ },
1244
+
1245
+ });
252
1246
  }
253
1247
  }