chrome-devtools-frontend 1.0.1376716 → 1.0.1386602

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 (885) hide show
  1. package/.stylelintrc.json +2 -1
  2. package/config/gni/devtools_grd_files.gni +40 -11
  3. package/config/gni/devtools_image_files.gni +4 -0
  4. package/docs/README.md +4 -0
  5. package/docs/contributing/issues.md +13 -10
  6. package/docs/get_the_code.md +4 -1
  7. package/docs/policy/README.md +6 -0
  8. package/docs/policy/slow-close.md +52 -0
  9. package/docs/styleguide/ux/README.md +1 -0
  10. package/docs/styleguide/ux/numbers.md +106 -0
  11. package/front_end/Images/src/animation.svg +3 -0
  12. package/front_end/Images/src/brush-2.svg +3 -0
  13. package/front_end/Images/src/cookie_off.svg +3 -0
  14. package/front_end/Images/src/domain.svg +3 -0
  15. package/front_end/core/common/Color.ts +3 -3
  16. package/front_end/core/common/SettingRegistration.ts +8 -1
  17. package/front_end/core/host/AidaClient.ts +4 -3
  18. package/front_end/core/host/InspectorFrontendHost.ts +4 -0
  19. package/front_end/core/host/InspectorFrontendHostAPI.ts +0 -1
  20. package/front_end/core/host/UserMetrics.ts +0 -8
  21. package/front_end/core/i18n/ByteUtilities.test.ts +34 -0
  22. package/front_end/core/i18n/ByteUtilities.ts +65 -0
  23. package/front_end/core/i18n/NumberFormatter.ts +75 -0
  24. package/front_end/core/i18n/i18n.ts +4 -0
  25. package/front_end/core/i18n/locales/af.json +1031 -887
  26. package/front_end/core/i18n/locales/am.json +1036 -892
  27. package/front_end/core/i18n/locales/ar.json +1039 -895
  28. package/front_end/core/i18n/locales/as.json +1032 -888
  29. package/front_end/core/i18n/locales/az.json +1034 -890
  30. package/front_end/core/i18n/locales/be.json +1031 -887
  31. package/front_end/core/i18n/locales/bg.json +1031 -887
  32. package/front_end/core/i18n/locales/bn.json +1033 -889
  33. package/front_end/core/i18n/locales/bs.json +1036 -892
  34. package/front_end/core/i18n/locales/ca.json +1031 -887
  35. package/front_end/core/i18n/locales/cs.json +1030 -886
  36. package/front_end/core/i18n/locales/cy.json +1032 -888
  37. package/front_end/core/i18n/locales/da.json +1031 -887
  38. package/front_end/core/i18n/locales/de.json +1033 -889
  39. package/front_end/core/i18n/locales/el.json +1031 -887
  40. package/front_end/core/i18n/locales/en-GB.json +1033 -889
  41. package/front_end/core/i18n/locales/es-419.json +1029 -885
  42. package/front_end/core/i18n/locales/es.json +1032 -888
  43. package/front_end/core/i18n/locales/et.json +1033 -889
  44. package/front_end/core/i18n/locales/eu.json +1031 -887
  45. package/front_end/core/i18n/locales/fa.json +1035 -891
  46. package/front_end/core/i18n/locales/fi.json +1035 -891
  47. package/front_end/core/i18n/locales/fil.json +1034 -890
  48. package/front_end/core/i18n/locales/fr-CA.json +1031 -887
  49. package/front_end/core/i18n/locales/fr.json +1049 -905
  50. package/front_end/core/i18n/locales/gl.json +1032 -888
  51. package/front_end/core/i18n/locales/gu.json +1035 -891
  52. package/front_end/core/i18n/locales/he.json +1031 -887
  53. package/front_end/core/i18n/locales/hi.json +1034 -890
  54. package/front_end/core/i18n/locales/hr.json +1031 -887
  55. package/front_end/core/i18n/locales/hu.json +1033 -889
  56. package/front_end/core/i18n/locales/hy.json +1046 -902
  57. package/front_end/core/i18n/locales/id.json +1023 -879
  58. package/front_end/core/i18n/locales/is.json +1032 -888
  59. package/front_end/core/i18n/locales/it.json +1031 -887
  60. package/front_end/core/i18n/locales/ja.json +1042 -898
  61. package/front_end/core/i18n/locales/ka.json +1034 -890
  62. package/front_end/core/i18n/locales/kk.json +1035 -891
  63. package/front_end/core/i18n/locales/km.json +1035 -891
  64. package/front_end/core/i18n/locales/kn.json +1036 -892
  65. package/front_end/core/i18n/locales/ko.json +1031 -887
  66. package/front_end/core/i18n/locales/ky.json +1032 -888
  67. package/front_end/core/i18n/locales/lo.json +1030 -886
  68. package/front_end/core/i18n/locales/lt.json +1032 -888
  69. package/front_end/core/i18n/locales/lv.json +1032 -888
  70. package/front_end/core/i18n/locales/mk.json +1032 -888
  71. package/front_end/core/i18n/locales/ml.json +1033 -889
  72. package/front_end/core/i18n/locales/mn.json +1034 -890
  73. package/front_end/core/i18n/locales/mr.json +1035 -891
  74. package/front_end/core/i18n/locales/ms.json +1033 -889
  75. package/front_end/core/i18n/locales/my.json +1033 -889
  76. package/front_end/core/i18n/locales/ne.json +1036 -892
  77. package/front_end/core/i18n/locales/nl.json +1033 -889
  78. package/front_end/core/i18n/locales/no.json +1036 -892
  79. package/front_end/core/i18n/locales/or.json +1043 -899
  80. package/front_end/core/i18n/locales/pa.json +1030 -886
  81. package/front_end/core/i18n/locales/pl.json +1032 -888
  82. package/front_end/core/i18n/locales/pt-PT.json +1033 -889
  83. package/front_end/core/i18n/locales/pt.json +1033 -889
  84. package/front_end/core/i18n/locales/ro.json +1029 -885
  85. package/front_end/core/i18n/locales/ru.json +1026 -882
  86. package/front_end/core/i18n/locales/si.json +1031 -887
  87. package/front_end/core/i18n/locales/sk.json +1033 -889
  88. package/front_end/core/i18n/locales/sl.json +1031 -887
  89. package/front_end/core/i18n/locales/sq.json +1061 -917
  90. package/front_end/core/i18n/locales/sr-Latn.json +1033 -889
  91. package/front_end/core/i18n/locales/sr.json +1033 -889
  92. package/front_end/core/i18n/locales/sv.json +1031 -887
  93. package/front_end/core/i18n/locales/sw.json +1033 -889
  94. package/front_end/core/i18n/locales/ta.json +1058 -914
  95. package/front_end/core/i18n/locales/te.json +1037 -893
  96. package/front_end/core/i18n/locales/th.json +1032 -888
  97. package/front_end/core/i18n/locales/tr.json +1031 -887
  98. package/front_end/core/i18n/locales/uk.json +1030 -886
  99. package/front_end/core/i18n/locales/ur.json +1031 -887
  100. package/front_end/core/i18n/locales/uz.json +1023 -879
  101. package/front_end/core/i18n/locales/vi.json +1032 -888
  102. package/front_end/core/i18n/locales/zh-HK.json +1032 -888
  103. package/front_end/core/i18n/locales/zh-TW.json +1032 -888
  104. package/front_end/core/i18n/locales/zh.json +1033 -889
  105. package/front_end/core/i18n/locales/zu.json +1032 -888
  106. package/front_end/core/i18n/time-utilities.test.ts +20 -2
  107. package/front_end/core/i18n/time-utilities.ts +125 -86
  108. package/front_end/core/platform/NumberUtilities.test.ts +3 -26
  109. package/front_end/core/platform/NumberUtilities.ts +0 -20
  110. package/front_end/core/root/Runtime.ts +6 -4
  111. package/front_end/core/sdk/CPUThrottlingManager.ts +4 -0
  112. package/front_end/core/sdk/CSSContainerQuery.test.ts +10 -16
  113. package/front_end/core/sdk/CSSContainerQuery.ts +3 -15
  114. package/front_end/core/sdk/CSSMatchedStyles.test.ts +4 -0
  115. package/front_end/core/sdk/CSSMatchedStyles.ts +5 -5
  116. package/front_end/core/sdk/CSSModel.ts +18 -0
  117. package/front_end/core/sdk/CSSPropertyParser.test.ts +16 -1
  118. package/front_end/core/sdk/CSSPropertyParser.ts +2 -2
  119. package/front_end/core/sdk/NetworkManager.test.ts +50 -0
  120. package/front_end/core/sdk/NetworkManager.ts +6 -4
  121. package/front_end/core/sdk/SourceMap.test.ts +5 -5
  122. package/front_end/core/sdk/SourceMapScopeChainEntry.test.ts +7 -2
  123. package/front_end/core/sdk/SourceMapScopeChainEntry.ts +2 -2
  124. package/front_end/core/sdk/SourceMapScopes.test.ts +112 -45
  125. package/front_end/core/sdk/SourceMapScopes.ts +39 -14
  126. package/front_end/core/sdk/SourceMapScopesInfo.test.ts +51 -50
  127. package/front_end/core/sdk/SourceMapScopesInfo.ts +1 -1
  128. package/front_end/core/sdk/sdk-meta.ts +35 -0
  129. package/front_end/devtools_compatibility.js +0 -1
  130. package/front_end/entrypoints/devtools_app/devtools_app.ts +1 -0
  131. package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshot.ts +3 -3
  132. package/front_end/entrypoints/inspector_main/renderingOptions.css +1 -1
  133. package/front_end/entrypoints/main/ExecutionContextSelector.test.ts +13 -3
  134. package/front_end/entrypoints/main/ExecutionContextSelector.ts +23 -1
  135. package/front_end/entrypoints/main/MainImpl.ts +0 -5
  136. package/front_end/generated/ARIAProperties.js +4 -0
  137. package/front_end/generated/Deprecation.ts +0 -15
  138. package/front_end/generated/InspectorBackendCommands.js +9 -7
  139. package/front_end/generated/SupportedCSSProperties.js +14 -41
  140. package/front_end/generated/protocol-mapping.d.ts +15 -1
  141. package/front_end/generated/protocol-proxy-api.d.ts +14 -1
  142. package/front_end/generated/protocol.ts +27 -2
  143. package/front_end/models/bindings/IgnoreListManager.ts +25 -2
  144. package/front_end/models/crux-manager/CrUXManager.test.ts +25 -6
  145. package/front_end/models/crux-manager/CrUXManager.ts +23 -4
  146. package/front_end/models/extensions/ExtensionAPI.ts +9 -1
  147. package/front_end/models/extensions/ExtensionServer.test.ts +14 -0
  148. package/front_end/models/extensions/ExtensionServer.ts +28 -15
  149. package/front_end/models/heap_snapshot_model/HeapSnapshotModel.ts +2 -0
  150. package/front_end/models/issues_manager/CookieIssue.ts +79 -2
  151. package/front_end/models/issues_manager/IssuesManager.ts +1 -1
  152. package/front_end/models/issues_manager/descriptions/cookieExcludePortMismatch.md +8 -0
  153. package/front_end/models/issues_manager/descriptions/cookieExcludeSchemeMismatch.md +7 -0
  154. package/front_end/models/javascript_metadata/NativeFunctions.js +22 -25
  155. package/front_end/models/live-metrics/web-vitals-injected/{rollup.config.js → rollup.config.mjs} +1 -1
  156. package/front_end/models/persistence/EditFileSystemView.ts +20 -10
  157. package/front_end/models/persistence/WorkspaceSettingsTab.ts +50 -54
  158. package/front_end/models/persistence/editFileSystemView.css +38 -15
  159. package/front_end/models/persistence/workspaceSettingsTab.css +21 -87
  160. package/front_end/models/timeline_model/timeline_model.ts +0 -6
  161. package/front_end/models/trace/Processor.test.ts +18 -17
  162. package/front_end/models/trace/Processor.ts +10 -14
  163. package/front_end/models/trace/README.md +0 -1
  164. package/front_end/models/trace/extras/Metadata.test.ts +35 -2
  165. package/front_end/models/trace/extras/Metadata.ts +24 -5
  166. package/front_end/models/{timeline_model → trace/extras}/TimelineJSProfile.ts +19 -29
  167. package/front_end/models/{timeline_model/TimelineModelFilter.test.ts → trace/extras/TraceFilter.test.ts} +15 -17
  168. package/front_end/models/trace/extras/TraceFilter.ts +62 -0
  169. package/front_end/models/{timeline_model/TimelineProfileTree.test.ts → trace/extras/TraceTree.test.ts} +44 -43
  170. package/front_end/models/{timeline_model/TimelineProfileTree.ts → trace/extras/TraceTree.ts} +86 -70
  171. package/front_end/models/trace/extras/URLForEntry.ts +6 -5
  172. package/front_end/models/trace/extras/extras.ts +3 -0
  173. package/front_end/models/trace/handlers/AnimationHandler.ts +0 -8
  174. package/front_end/models/trace/handlers/ExtensionTraceDataHandler.ts +1 -11
  175. package/front_end/models/trace/handlers/FramesHandler.test.ts +1 -6
  176. package/front_end/models/trace/handlers/FramesHandler.ts +1 -14
  177. package/front_end/models/trace/handlers/GPUHandler.test.ts +0 -2
  178. package/front_end/models/trace/handlers/GPUHandler.ts +1 -25
  179. package/front_end/models/trace/handlers/ImagePaintingHandler.ts +15 -0
  180. package/front_end/models/trace/handlers/InitiatorsHandler.test.ts +0 -1
  181. package/front_end/models/trace/handlers/InitiatorsHandler.ts +0 -20
  182. package/front_end/models/trace/handlers/InvalidationsHandler.test.ts +0 -1
  183. package/front_end/models/trace/handlers/InvalidationsHandler.ts +0 -18
  184. package/front_end/models/trace/handlers/LargestImagePaintHandler.test.ts +2 -2
  185. package/front_end/models/trace/handlers/LargestImagePaintHandler.ts +63 -3
  186. package/front_end/models/trace/handlers/LargestTextPaintHandler.ts +3 -0
  187. package/front_end/models/trace/handlers/LayerTreeHandler.test.ts +0 -2
  188. package/front_end/models/trace/handlers/LayerTreeHandler.ts +1 -18
  189. package/front_end/models/trace/handlers/LayoutShiftsHandler.test.ts +0 -3
  190. package/front_end/models/trace/handlers/LayoutShiftsHandler.ts +1 -20
  191. package/front_end/models/trace/handlers/MemoryHandler.test.ts +0 -1
  192. package/front_end/models/trace/handlers/MemoryHandler.ts +3 -0
  193. package/front_end/models/trace/handlers/MetaHandler.test.ts +1 -32
  194. package/front_end/models/trace/handlers/MetaHandler.ts +2 -30
  195. package/front_end/models/trace/handlers/NetworkRequestsHandler.test.ts +0 -26
  196. package/front_end/models/trace/handlers/NetworkRequestsHandler.ts +4 -23
  197. package/front_end/models/trace/handlers/PageFramesHandler.ts +3 -0
  198. package/front_end/models/trace/handlers/RendererHandler.test.ts +0 -4
  199. package/front_end/models/trace/handlers/RendererHandler.ts +1 -24
  200. package/front_end/models/trace/handlers/SamplesHandler.test.ts +0 -5
  201. package/front_end/models/trace/handlers/SamplesHandler.ts +0 -26
  202. package/front_end/models/trace/handlers/ScreenshotsHandler.test.ts +0 -1
  203. package/front_end/models/trace/handlers/SelectorStatsHandler.ts +3 -0
  204. package/front_end/models/trace/handlers/ServerTimingsHandler.ts +1 -16
  205. package/front_end/models/trace/handlers/Threads.test.ts +1 -2
  206. package/front_end/models/trace/handlers/UserInteractionsHandler.test.ts +4 -27
  207. package/front_end/models/trace/handlers/UserInteractionsHandler.ts +16 -25
  208. package/front_end/models/trace/handlers/UserTimingsHandler.ts +0 -17
  209. package/front_end/models/trace/handlers/WorkersHandler.test.ts +0 -1
  210. package/front_end/models/trace/handlers/WorkersHandler.ts +0 -23
  211. package/front_end/models/trace/handlers/types.ts +1 -8
  212. package/front_end/models/trace/helpers/Timing.ts +8 -0
  213. package/front_end/models/trace/insights/{CumulativeLayoutShift.test.ts → CLSCulprits.test.ts} +21 -21
  214. package/front_end/models/trace/insights/{CumulativeLayoutShift.ts → CLSCulprits.ts} +32 -5
  215. package/front_end/models/trace/insights/Common.ts +5 -55
  216. package/front_end/models/trace/insights/DocumentLatency.test.ts +2 -2
  217. package/front_end/models/trace/insights/DocumentLatency.ts +39 -6
  218. package/front_end/models/trace/insights/FontDisplay.ts +31 -5
  219. package/front_end/models/trace/insights/ImageDelivery.test.ts +98 -0
  220. package/front_end/models/trace/insights/ImageDelivery.ts +183 -0
  221. package/front_end/models/trace/insights/InteractionToNextPaint.test.ts +1 -1
  222. package/front_end/models/trace/insights/InteractionToNextPaint.ts +32 -6
  223. package/front_end/models/trace/insights/LCPDiscovery.test.ts +58 -0
  224. package/front_end/models/trace/insights/LCPDiscovery.ts +122 -0
  225. package/front_end/models/trace/insights/{LargestContentfulPaint.test.ts → LCPPhases.test.ts} +6 -28
  226. package/front_end/models/trace/insights/{LargestContentfulPaint.ts → LCPPhases.ts} +59 -38
  227. package/front_end/models/trace/insights/{InsightRunners.ts → Models.ts} +5 -3
  228. package/front_end/models/trace/insights/RenderBlocking.test.ts +1 -1
  229. package/front_end/models/trace/insights/RenderBlocking.ts +41 -28
  230. package/front_end/models/trace/insights/SlowCSSSelector.ts +33 -5
  231. package/front_end/models/trace/insights/{ThirdPartyWeb.test.ts → ThirdParties.test.ts} +3 -3
  232. package/front_end/models/trace/insights/{ThirdPartyWeb.ts → ThirdParties.ts} +32 -5
  233. package/front_end/models/trace/insights/Viewport.test.ts +1 -1
  234. package/front_end/models/trace/insights/Viewport.ts +40 -9
  235. package/front_end/models/trace/insights/insights.ts +1 -1
  236. package/front_end/models/trace/insights/types.ts +22 -9
  237. package/front_end/models/trace/types/File.ts +7 -0
  238. package/front_end/models/trace/types/TraceEvents.ts +60 -24
  239. package/front_end/panels/animation/AnimationTimeline.ts +2 -4
  240. package/front_end/panels/application/ApplicationPanelSidebar.test.ts +0 -5
  241. package/front_end/panels/application/ApplicationPanelSidebar.ts +15 -21
  242. package/front_end/panels/application/IndexedDBViews.ts +4 -1
  243. package/front_end/panels/application/ServiceWorkerCacheViews.ts +4 -1
  244. package/front_end/panels/application/SharedStorageItemsView.test.ts +3 -3
  245. package/front_end/panels/application/SharedStorageItemsView.ts +5 -3
  246. package/front_end/panels/application/StorageView.test.ts +1 -1
  247. package/front_end/panels/application/StorageView.ts +3 -3
  248. package/front_end/panels/application/components/StorageMetadataView.ts +1 -2
  249. package/front_end/panels/application/resourcesSidebar.css +1 -1
  250. package/front_end/panels/browser_debugger/CategorizedBreakpointsSidebarPane.ts +1 -1
  251. package/front_end/panels/browser_debugger/DOMBreakpointsSidebarPane.ts +1 -1
  252. package/front_end/panels/browser_debugger/XHRBreakpointsSidebarPane.ts +35 -32
  253. package/front_end/panels/browser_debugger/categorizedBreakpointsSidebarPane.css +1 -1
  254. package/front_end/panels/browser_debugger/xhrBreakpointsSidebarPane.css +1 -1
  255. package/front_end/panels/console/ConsoleViewMessage.test.ts +25 -0
  256. package/front_end/panels/console/ConsoleViewMessage.ts +23 -0
  257. package/front_end/panels/coverage/CoverageListView.ts +1 -1
  258. package/front_end/panels/coverage/CoverageView.ts +3 -3
  259. package/front_end/panels/developer_resources/DeveloperResourcesListView.ts +1 -1
  260. package/front_end/panels/elements/ClassesPaneWidget.ts +1 -1
  261. package/front_end/panels/elements/ComputedStyleModel.ts +9 -2
  262. package/front_end/panels/elements/ComputedStyleWidget.test.ts +72 -0
  263. package/front_end/panels/elements/ComputedStyleWidget.ts +12 -0
  264. package/front_end/panels/elements/ElementStatePaneWidget.test.ts +85 -30
  265. package/front_end/panels/elements/ElementStatePaneWidget.ts +49 -26
  266. package/front_end/panels/elements/ElementsSidebarPane.ts +3 -3
  267. package/front_end/panels/elements/ElementsTreeElement.ts +25 -11
  268. package/front_end/panels/elements/LayersWidget.ts +1 -1
  269. package/front_end/panels/elements/MetricsSidebarPane.ts +12 -7
  270. package/front_end/panels/elements/PropertyMatchers.test.ts +7 -0
  271. package/front_end/panels/elements/PropertyMatchers.ts +6 -0
  272. package/front_end/panels/elements/StylePropertiesSection.ts +15 -6
  273. package/front_end/panels/elements/StylePropertyTreeElement.test.ts +3 -1
  274. package/front_end/panels/elements/StylePropertyTreeElement.ts +8 -3
  275. package/front_end/panels/elements/classesPaneWidget.css +1 -1
  276. package/front_end/panels/elements/stylePropertiesTreeOutline.css +2 -2
  277. package/front_end/panels/emulation/DeviceModeView.ts +1 -1
  278. package/front_end/panels/emulation/DeviceModeWrapper.ts +1 -1
  279. package/front_end/panels/emulation/InspectedPagePlaceholder.ts +1 -1
  280. package/front_end/panels/explain/components/ConsoleInsight.ts +8 -18
  281. package/front_end/panels/freestyler/AiAgent.test.ts +376 -50
  282. package/front_end/panels/freestyler/AiAgent.ts +251 -144
  283. package/front_end/panels/freestyler/AiHistoryStorage.test.ts +159 -0
  284. package/front_end/panels/freestyler/AiHistoryStorage.ts +73 -0
  285. package/front_end/panels/freestyler/DrJonesFileAgent.test.ts +113 -38
  286. package/front_end/panels/freestyler/DrJonesFileAgent.ts +56 -34
  287. package/front_end/panels/freestyler/DrJonesNetworkAgent.test.ts +29 -20
  288. package/front_end/panels/freestyler/DrJonesNetworkAgent.ts +39 -18
  289. package/front_end/panels/freestyler/DrJonesPerformanceAgent.test.ts +44 -42
  290. package/front_end/panels/freestyler/DrJonesPerformanceAgent.ts +51 -22
  291. package/front_end/panels/freestyler/FreestylerAgent.test.ts +210 -28
  292. package/front_end/panels/freestyler/FreestylerAgent.ts +65 -26
  293. package/front_end/panels/freestyler/FreestylerPanel.test.ts +610 -39
  294. package/front_end/panels/freestyler/FreestylerPanel.ts +414 -255
  295. package/front_end/panels/freestyler/components/FreestylerChatUi.test.ts +126 -34
  296. package/front_end/panels/freestyler/components/FreestylerChatUi.ts +431 -280
  297. package/front_end/panels/freestyler/components/UserActionRow.ts +157 -47
  298. package/front_end/panels/freestyler/components/freestylerChatUi.css +90 -35
  299. package/front_end/panels/freestyler/components/userActionRow.css +41 -67
  300. package/front_end/panels/freestyler/freestyler-meta.ts +3 -11
  301. package/front_end/panels/freestyler/freestyler.ts +1 -0
  302. package/front_end/panels/issues/IssueAggregator.test.ts +50 -0
  303. package/front_end/panels/issues/IssueAggregator.ts +10 -10
  304. package/front_end/panels/issues/components/HideIssuesMenu.ts +2 -11
  305. package/front_end/panels/issues/issuesTree.css +1 -1
  306. package/front_end/panels/layer_viewer/LayerDetailsView.ts +2 -3
  307. package/front_end/panels/layer_viewer/Layers3DView.ts +1 -1
  308. package/front_end/panels/layer_viewer/PaintProfilerView.ts +6 -6
  309. package/front_end/panels/layers/LayersPanel.ts +1 -1
  310. package/front_end/panels/lighthouse/LighthouseReportRenderer.ts +46 -0
  311. package/front_end/panels/lighthouse/lighthouseStartView.css +1 -1
  312. package/front_end/panels/media/TickingFlameChart.ts +1 -1
  313. package/front_end/panels/mobile_throttling/ThrottlingSettingsTab.ts +26 -17
  314. package/front_end/panels/mobile_throttling/throttlingSettingsTab.css +25 -19
  315. package/front_end/panels/network/BinaryResourceView.ts +6 -7
  316. package/front_end/panels/network/BlockedURLsPane.ts +1 -1
  317. package/front_end/panels/network/EventSourceMessagesView.ts +1 -1
  318. package/front_end/panels/network/NetworkDataGridNode.ts +4 -3
  319. package/front_end/panels/network/NetworkLogView.test.ts +1 -1
  320. package/front_end/panels/network/NetworkLogView.ts +7 -8
  321. package/front_end/panels/network/NetworkPanel.ts +40 -32
  322. package/front_end/panels/network/NetworkWaterfallColumn.ts +1 -1
  323. package/front_end/panels/network/RequestTimingView.test.ts +35 -1
  324. package/front_end/panels/network/RequestTimingView.ts +96 -0
  325. package/front_end/panels/network/ResourceWebSocketFrameView.ts +2 -2
  326. package/front_end/panels/network/networkTimingTable.css +2 -1
  327. package/front_end/panels/performance_monitor/PerformanceMonitor.ts +1 -1
  328. package/front_end/panels/profiler/HeapProfileView.ts +10 -10
  329. package/front_end/panels/profiler/HeapSnapshotView.ts +2 -2
  330. package/front_end/panels/profiler/HeapTimelineOverview.ts +13 -13
  331. package/front_end/panels/profiler/IsolateSelector.ts +4 -5
  332. package/front_end/panels/profiler/LiveHeapProfileView.ts +3 -1
  333. package/front_end/panels/profiler/ProfileFlameChartDataProvider.ts +4 -4
  334. package/front_end/panels/profiler/ProfileSidebarTreeElement.ts +7 -6
  335. package/front_end/panels/profiler/ProfileView.ts +3 -3
  336. package/front_end/panels/profiler/profileLauncherView.css +1 -1
  337. package/front_end/panels/profiler/profilesSidebarTree.css +1 -1
  338. package/front_end/panels/recorder/components/RecordingView.ts +2 -2
  339. package/front_end/panels/recorder/injected/{rollup.config.js → rollup.config.mjs} +1 -1
  340. package/front_end/panels/recorder/recorderController.css +1 -5
  341. package/front_end/panels/security/CookieControlsTreeElement.ts +18 -0
  342. package/front_end/panels/security/CookieControlsView.test.ts +29 -0
  343. package/front_end/panels/security/CookieControlsView.ts +265 -0
  344. package/front_end/panels/security/CookieReportTreeElement.ts +1 -9
  345. package/front_end/panels/security/CookieReportView.test.ts +157 -0
  346. package/front_end/panels/security/CookieReportView.ts +316 -0
  347. package/front_end/panels/security/SecurityPanel.ts +12 -4
  348. package/front_end/panels/security/SecurityPanelSidebar.ts +6 -1
  349. package/front_end/panels/security/cookieControlsView.css +101 -0
  350. package/front_end/panels/security/cookieReportView.css +69 -0
  351. package/front_end/panels/security/security.ts +4 -0
  352. package/front_end/panels/security/sidebar.css +2 -3
  353. package/front_end/panels/sensors/LocationsSettingsTab.ts +26 -11
  354. package/front_end/panels/sensors/locationsSettingsTab.css +18 -18
  355. package/front_end/panels/settings/AISettingsTab.ts +6 -15
  356. package/front_end/panels/settings/KeybindsSettingsTab.ts +4 -3
  357. package/front_end/panels/settings/SettingsScreen.ts +64 -55
  358. package/front_end/panels/settings/aiSettingsTab.css +3 -14
  359. package/front_end/panels/settings/components/SyncSection.ts +1 -2
  360. package/front_end/panels/settings/components/syncSection.css +0 -10
  361. package/front_end/panels/settings/frameworkIgnoreListSettingsTab.css +4 -2
  362. package/front_end/panels/settings/keybindsSettingsTab.css +12 -10
  363. package/front_end/panels/settings/settings-meta.ts +3 -1
  364. package/front_end/panels/settings/settingsScreen.css +37 -125
  365. package/front_end/panels/sources/CallStackSidebarPane.ts +2 -2
  366. package/front_end/panels/sources/DebuggerPlugin.ts +9 -4
  367. package/front_end/panels/sources/NavigatorView.ts +12 -13
  368. package/front_end/panels/sources/navigatorTree.css +1 -1
  369. package/front_end/panels/sources/sourcesPanel.css +2 -2
  370. package/front_end/panels/timeline/ActiveFilters.ts +3 -4
  371. package/front_end/panels/timeline/AnimationsTrackAppender.ts +2 -9
  372. package/front_end/panels/timeline/AppenderUtils.ts +1 -1
  373. package/front_end/panels/timeline/CompatibilityTracksAppender.ts +38 -41
  374. package/front_end/panels/timeline/CountersGraph.ts +2 -4
  375. package/front_end/panels/timeline/EventsTimelineTreeView.ts +7 -8
  376. package/front_end/panels/timeline/ExtensionTrackAppender.ts +4 -13
  377. package/front_end/panels/timeline/InteractionsTrackAppender.ts +3 -4
  378. package/front_end/panels/timeline/LayoutShiftsTrackAppender.ts +6 -12
  379. package/front_end/panels/timeline/README.md +2 -1
  380. package/front_end/panels/timeline/ServerTimingsTrackAppender.ts +1 -10
  381. package/front_end/panels/timeline/ThreadAppender.ts +9 -12
  382. package/front_end/panels/timeline/TimelineController.ts +14 -4
  383. package/front_end/panels/timeline/TimelineDetailsView.test.ts +3 -2
  384. package/front_end/panels/timeline/TimelineDetailsView.ts +18 -17
  385. package/front_end/panels/timeline/TimelineEventOverview.ts +3 -4
  386. package/front_end/panels/timeline/TimelineFilters.ts +3 -4
  387. package/front_end/panels/timeline/TimelineFlameChartDataProvider.test.ts +1 -1
  388. package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +58 -46
  389. package/front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.ts +2 -3
  390. package/front_end/panels/timeline/TimelineFlameChartView.ts +54 -26
  391. package/front_end/panels/timeline/TimelineHistoryManager.test.ts +20 -15
  392. package/front_end/panels/timeline/TimelineHistoryManager.ts +46 -58
  393. package/front_end/panels/timeline/TimelineLayersView.ts +1 -1
  394. package/front_end/panels/timeline/TimelineLoader.test.ts +1 -2
  395. package/front_end/panels/timeline/TimelineLoader.ts +19 -4
  396. package/front_end/panels/timeline/TimelineMiniMap.ts +12 -2
  397. package/front_end/panels/timeline/TimelinePaintProfilerView.ts +1 -1
  398. package/front_end/panels/timeline/TimelinePanel.ts +161 -32
  399. package/front_end/panels/timeline/TimelineTreeView.test.ts +12 -13
  400. package/front_end/panels/timeline/TimelineTreeView.ts +98 -54
  401. package/front_end/panels/timeline/TimelineUIUtils.test.ts +2 -2
  402. package/front_end/panels/timeline/TimelineUIUtils.ts +56 -14
  403. package/front_end/panels/timeline/TimingsTrackAppender.ts +6 -13
  404. package/front_end/panels/timeline/components/FieldSettingsDialog.test.ts +1 -0
  405. package/front_end/panels/timeline/components/FieldSettingsDialog.ts +6 -1
  406. package/front_end/panels/timeline/components/LayoutShiftDetails.ts +6 -7
  407. package/front_end/panels/timeline/components/LiveMetricsView.test.ts +15 -3
  408. package/front_end/panels/timeline/components/LiveMetricsView.ts +27 -44
  409. package/front_end/panels/timeline/components/MetricCard.test.ts +1 -1
  410. package/front_end/panels/timeline/components/MetricCard.ts +46 -0
  411. package/front_end/panels/timeline/components/NetworkRequestDetails.ts +3 -4
  412. package/front_end/panels/timeline/components/Sidebar.ts +1 -4
  413. package/front_end/panels/timeline/components/SidebarAnnotationsTab.test.ts +1 -1
  414. package/front_end/panels/timeline/components/SidebarInsightsTab.ts +1 -1
  415. package/front_end/panels/timeline/components/SidebarSingleInsightSet.test.ts +23 -35
  416. package/front_end/panels/timeline/components/SidebarSingleInsightSet.ts +53 -41
  417. package/front_end/panels/timeline/components/TimelineSummary.test.ts +75 -0
  418. package/front_end/panels/timeline/components/TimelineSummary.ts +101 -0
  419. package/front_end/panels/timeline/components/Utils.test.ts +49 -0
  420. package/front_end/panels/timeline/components/Utils.ts +2 -2
  421. package/front_end/panels/timeline/components/components.ts +2 -0
  422. package/front_end/panels/timeline/components/insights/BaseInsightComponent.test.ts +84 -0
  423. package/front_end/panels/timeline/components/insights/BaseInsightComponent.ts +291 -0
  424. package/front_end/panels/timeline/components/insights/CLSCulprits.ts +24 -62
  425. package/front_end/panels/timeline/components/insights/DocumentLatency.ts +43 -72
  426. package/front_end/panels/timeline/components/insights/EventRef.ts +70 -2
  427. package/front_end/panels/timeline/components/insights/FontDisplay.ts +37 -61
  428. package/front_end/panels/timeline/components/insights/Helpers.ts +5 -212
  429. package/front_end/panels/timeline/components/insights/ImageDelivery.ts +142 -0
  430. package/front_end/panels/timeline/components/insights/InteractionToNextPaint.ts +34 -69
  431. package/front_end/panels/timeline/components/insights/LCPDiscovery.ts +52 -103
  432. package/front_end/panels/timeline/components/insights/LCPPhases.ts +31 -92
  433. package/front_end/panels/timeline/components/insights/RenderBlocking.ts +38 -64
  434. package/front_end/panels/timeline/components/insights/SidebarInsight.ts +3 -198
  435. package/front_end/panels/timeline/components/insights/SlowCSSSelector.ts +59 -95
  436. package/front_end/panels/timeline/components/insights/Table.ts +6 -3
  437. package/front_end/panels/timeline/components/insights/ThirdParties.ts +51 -78
  438. package/front_end/panels/timeline/components/insights/Viewport.ts +27 -49
  439. package/front_end/panels/timeline/components/insights/{sidebarInsight.css → baseInsightComponent.css} +9 -9
  440. package/front_end/panels/timeline/components/insights/insights.ts +4 -0
  441. package/front_end/panels/timeline/components/insights/types.ts +0 -7
  442. package/front_end/panels/timeline/components/liveMetricsView.css +10 -18
  443. package/front_end/panels/timeline/components/metricCard.css +11 -0
  444. package/front_end/panels/timeline/components/sidebarInsightsTab.css +1 -1
  445. package/front_end/panels/timeline/components/timelineSummary.css +67 -0
  446. package/front_end/panels/timeline/docs/flame_chart_migration.md +1 -1
  447. package/front_end/panels/timeline/fixtures/traces/README.md +4 -0
  448. package/front_end/panels/timeline/fixtures/traces/image-delivery.json.gz +0 -0
  449. package/front_end/panels/timeline/overlays/OverlaysImpl.test.ts +5 -5
  450. package/front_end/panels/timeline/overlays/OverlaysImpl.ts +35 -12
  451. package/front_end/panels/timeline/timeline-meta.ts +1 -1
  452. package/front_end/panels/timeline/timelineFlameChartView.css +1 -1
  453. package/front_end/panels/timeline/timelineFlamechartPopover.css +14 -4
  454. package/front_end/panels/timeline/timelineHistoryManager.css +7 -3
  455. package/front_end/panels/timeline/timelinePanel.css +0 -1
  456. package/front_end/panels/timeline/track_appenders/CompatibilityTracksAppender.test.ts +5 -5
  457. package/front_end/panels/timeline/track_appenders/ExtensionTrackAppender.test.ts +5 -6
  458. package/front_end/panels/timeline/track_appenders/LayoutShiftsTrackAppender.test.ts +11 -2
  459. package/front_end/panels/timeline/track_appenders/ServerTimingsTrackAppender.test.ts +0 -9
  460. package/front_end/panels/timeline/track_appenders/ThreadAppender.test.ts +37 -44
  461. package/front_end/panels/timeline/track_appenders/TimingsTrackAppender.test.ts +44 -30
  462. package/front_end/panels/timeline/utils/AICallTree.test.ts +105 -0
  463. package/front_end/panels/timeline/utils/AICallTree.ts +25 -24
  464. package/front_end/panels/timeline/utils/EntryName.ts +1 -2
  465. package/front_end/panels/timeline/utils/Helpers.ts +19 -0
  466. package/front_end/panels/timeline/utils/IgnoreList.test.ts +52 -0
  467. package/front_end/panels/timeline/utils/IgnoreList.ts +68 -7
  468. package/front_end/panels/timeline/utils/SourceMapsResolver.ts +2 -0
  469. package/front_end/panels/webauthn/webauthnPane.css +1 -1
  470. package/front_end/panels/whats_new/ReleaseNote.test.ts +90 -0
  471. package/front_end/panels/whats_new/ReleaseNoteText.ts +52 -0
  472. package/front_end/panels/whats_new/ReleaseNoteView.ts +157 -0
  473. package/front_end/panels/whats_new/WhatsNewImpl.ts +102 -0
  474. package/front_end/panels/whats_new/releaseNoteView.css +121 -0
  475. package/front_end/panels/whats_new/resources/WNDT.md +6 -0
  476. package/front_end/panels/whats_new/resources/whatsnew.avif +0 -0
  477. package/front_end/panels/whats_new/whats_new-meta.ts +142 -0
  478. package/front_end/panels/whats_new/whats_new.ts +13 -0
  479. package/front_end/services/puppeteer/PuppeteerConnection.ts +4 -3
  480. package/front_end/testing/EnvironmentHelpers.ts +6 -20
  481. package/front_end/testing/InsightHelpers.ts +4 -4
  482. package/front_end/testing/SourceMapEncoder.ts +27 -11
  483. package/front_end/testing/TraceHelpers.ts +3 -2
  484. package/front_end/testing/TraceLoader.ts +6 -2
  485. package/front_end/third_party/lighthouse/README.chromium +2 -2
  486. package/front_end/third_party/lighthouse/lighthouse-dt-bundle.js +1380 -1369
  487. package/front_end/third_party/lighthouse/locales/ar-XB.json +88 -85
  488. package/front_end/third_party/lighthouse/locales/ar.json +98 -95
  489. package/front_end/third_party/lighthouse/locales/bg.json +88 -85
  490. package/front_end/third_party/lighthouse/locales/ca.json +91 -88
  491. package/front_end/third_party/lighthouse/locales/cs.json +91 -88
  492. package/front_end/third_party/lighthouse/locales/da.json +94 -91
  493. package/front_end/third_party/lighthouse/locales/de.json +92 -89
  494. package/front_end/third_party/lighthouse/locales/el.json +92 -89
  495. package/front_end/third_party/lighthouse/locales/en-GB.json +89 -86
  496. package/front_end/third_party/lighthouse/locales/en-US.json +23 -20
  497. package/front_end/third_party/lighthouse/locales/en-XA.json +88 -85
  498. package/front_end/third_party/lighthouse/locales/en-XL.json +23 -20
  499. package/front_end/third_party/lighthouse/locales/es-419.json +92 -89
  500. package/front_end/third_party/lighthouse/locales/es.json +91 -88
  501. package/front_end/third_party/lighthouse/locales/fi.json +92 -89
  502. package/front_end/third_party/lighthouse/locales/fil.json +93 -90
  503. package/front_end/third_party/lighthouse/locales/fr.json +94 -91
  504. package/front_end/third_party/lighthouse/locales/he.json +97 -94
  505. package/front_end/third_party/lighthouse/locales/hi.json +92 -89
  506. package/front_end/third_party/lighthouse/locales/hr.json +90 -87
  507. package/front_end/third_party/lighthouse/locales/hu.json +90 -87
  508. package/front_end/third_party/lighthouse/locales/id.json +91 -88
  509. package/front_end/third_party/lighthouse/locales/it.json +90 -87
  510. package/front_end/third_party/lighthouse/locales/ja.json +90 -87
  511. package/front_end/third_party/lighthouse/locales/ko.json +90 -87
  512. package/front_end/third_party/lighthouse/locales/lt.json +90 -87
  513. package/front_end/third_party/lighthouse/locales/lv.json +91 -88
  514. package/front_end/third_party/lighthouse/locales/nl.json +90 -87
  515. package/front_end/third_party/lighthouse/locales/no.json +92 -89
  516. package/front_end/third_party/lighthouse/locales/pl.json +90 -87
  517. package/front_end/third_party/lighthouse/locales/pt-PT.json +111 -108
  518. package/front_end/third_party/lighthouse/locales/pt.json +97 -94
  519. package/front_end/third_party/lighthouse/locales/ro.json +94 -91
  520. package/front_end/third_party/lighthouse/locales/ru.json +93 -90
  521. package/front_end/third_party/lighthouse/locales/sk.json +93 -90
  522. package/front_end/third_party/lighthouse/locales/sl.json +91 -88
  523. package/front_end/third_party/lighthouse/locales/sr-Latn.json +91 -88
  524. package/front_end/third_party/lighthouse/locales/sr.json +91 -88
  525. package/front_end/third_party/lighthouse/locales/sv.json +92 -89
  526. package/front_end/third_party/lighthouse/locales/ta.json +101 -98
  527. package/front_end/third_party/lighthouse/locales/te.json +92 -89
  528. package/front_end/third_party/lighthouse/locales/th.json +95 -92
  529. package/front_end/third_party/lighthouse/locales/tr.json +91 -88
  530. package/front_end/third_party/lighthouse/locales/uk.json +93 -90
  531. package/front_end/third_party/lighthouse/locales/vi.json +95 -92
  532. package/front_end/third_party/lighthouse/locales/zh-HK.json +92 -89
  533. package/front_end/third_party/lighthouse/locales/zh-TW.json +98 -95
  534. package/front_end/third_party/lighthouse/locales/zh.json +96 -93
  535. package/front_end/third_party/puppeteer/README.chromium +2 -2
  536. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts +10 -3
  537. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts.map +1 -1
  538. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.js.map +1 -1
  539. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.d.ts +14 -3
  540. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.d.ts.map +1 -1
  541. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.js +16 -2
  542. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.js.map +1 -1
  543. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Frame.d.ts.map +1 -1
  544. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Frame.js +3 -1
  545. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Frame.js.map +1 -1
  546. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/HTTPRequest.d.ts +1 -0
  547. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/HTTPRequest.d.ts.map +1 -1
  548. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/HTTPRequest.js +1 -0
  549. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/HTTPRequest.js.map +1 -1
  550. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Input.d.ts +34 -5
  551. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Input.d.ts.map +1 -1
  552. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Input.js +51 -2
  553. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Input.js.map +1 -1
  554. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts +4 -0
  555. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts.map +1 -1
  556. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.js.map +1 -1
  557. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/ElementHandle.d.ts.map +1 -1
  558. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/ElementHandle.js +10 -8
  559. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/ElementHandle.js.map +1 -1
  560. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.d.ts.map +1 -1
  561. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.js +1 -1
  562. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.js.map +1 -1
  563. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Input.d.ts +14 -4
  564. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Input.d.ts.map +1 -1
  565. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Input.js +57 -23
  566. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Input.js.map +1 -1
  567. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.d.ts +1 -0
  568. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.d.ts.map +1 -1
  569. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.js +3 -0
  570. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.js.map +1 -1
  571. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.d.ts +3 -2
  572. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.d.ts.map +1 -1
  573. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.js +10 -4
  574. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.js.map +1 -1
  575. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserConnector.d.ts.map +1 -1
  576. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserConnector.js +2 -2
  577. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserConnector.js.map +1 -1
  578. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserContext.d.ts +2 -0
  579. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserContext.d.ts.map +1 -1
  580. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserContext.js +7 -0
  581. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserContext.js.map +1 -1
  582. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ElementHandle.d.ts +1 -1
  583. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ElementHandle.d.ts.map +1 -1
  584. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ElementHandle.js +13 -10
  585. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ElementHandle.js.map +1 -1
  586. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPRequest.d.ts +1 -0
  587. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPRequest.d.ts.map +1 -1
  588. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPRequest.js +3 -0
  589. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPRequest.js.map +1 -1
  590. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPResponse.d.ts +1 -2
  591. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPResponse.d.ts.map +1 -1
  592. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPResponse.js +4 -4
  593. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPResponse.js.map +1 -1
  594. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Input.d.ts +15 -4
  595. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Input.d.ts.map +1 -1
  596. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Input.js +55 -26
  597. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Input.js.map +1 -1
  598. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/NetworkManager.d.ts.map +1 -1
  599. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/NetworkManager.js +24 -12
  600. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/NetworkManager.js.map +1 -1
  601. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.d.ts +1 -0
  602. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.d.ts.map +1 -1
  603. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js +3 -0
  604. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js.map +1 -1
  605. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/CallbackRegistry.d.ts +0 -8
  606. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/CallbackRegistry.d.ts.map +1 -1
  607. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/CallbackRegistry.js +2 -11
  608. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/CallbackRegistry.js.map +1 -1
  609. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConnectOptions.d.ts +5 -0
  610. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConnectOptions.d.ts.map +1 -1
  611. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConsoleMessage.d.ts +2 -1
  612. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConsoleMessage.d.ts.map +1 -1
  613. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConsoleMessage.js +5 -2
  614. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConsoleMessage.js.map +1 -1
  615. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/DownloadBehavior.d.ts +30 -0
  616. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/DownloadBehavior.d.ts.map +1 -0
  617. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/DownloadBehavior.js +8 -0
  618. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/DownloadBehavior.js.map +1 -0
  619. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Errors.d.ts +7 -0
  620. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Errors.d.ts.map +1 -1
  621. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Errors.js +9 -1
  622. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Errors.js.map +1 -1
  623. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/WaitTask.d.ts.map +1 -1
  624. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/WaitTask.js +5 -3
  625. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/WaitTask.js.map +1 -1
  626. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/common.d.ts +1 -0
  627. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/common.d.ts.map +1 -1
  628. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/environment.d.ts +1 -1
  629. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/environment.d.ts.map +1 -1
  630. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/environment.js +0 -3
  631. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/environment.js.map +1 -1
  632. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.d.ts +1 -1
  633. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.js +1 -1
  634. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/version.d.ts +1 -1
  635. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/version.js +1 -1
  636. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.d.ts +1 -1
  637. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.d.ts.map +1 -1
  638. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.js +2 -2
  639. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.js.map +1 -1
  640. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.d.ts +3 -3
  641. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +3 -3
  642. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/Mutex.d.ts +2 -2
  643. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/incremental-id-generator.d.ts +14 -0
  644. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/incremental-id-generator.d.ts.map +1 -0
  645. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/incremental-id-generator.js +18 -0
  646. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/incremental-id-generator.js.map +1 -0
  647. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +100 -10
  648. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +291 -143
  649. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts +10 -3
  650. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts.map +1 -1
  651. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.js.map +1 -1
  652. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.d.ts +14 -3
  653. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.d.ts.map +1 -1
  654. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.js +16 -2
  655. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.js.map +1 -1
  656. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Frame.d.ts.map +1 -1
  657. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Frame.js +3 -1
  658. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Frame.js.map +1 -1
  659. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/HTTPRequest.d.ts +1 -0
  660. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/HTTPRequest.d.ts.map +1 -1
  661. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/HTTPRequest.js +1 -0
  662. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/HTTPRequest.js.map +1 -1
  663. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Input.d.ts +34 -5
  664. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Input.d.ts.map +1 -1
  665. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Input.js +51 -2
  666. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Input.js.map +1 -1
  667. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts +4 -0
  668. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts.map +1 -1
  669. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.js.map +1 -1
  670. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/ElementHandle.d.ts.map +1 -1
  671. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/ElementHandle.js +10 -8
  672. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/ElementHandle.js.map +1 -1
  673. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.d.ts.map +1 -1
  674. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.js +1 -1
  675. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.js.map +1 -1
  676. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Input.d.ts +14 -4
  677. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Input.d.ts.map +1 -1
  678. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Input.js +57 -23
  679. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Input.js.map +1 -1
  680. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.d.ts +1 -0
  681. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.d.ts.map +1 -1
  682. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.js +3 -0
  683. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.js.map +1 -1
  684. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.d.ts +3 -2
  685. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.d.ts.map +1 -1
  686. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.js +10 -4
  687. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.js.map +1 -1
  688. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserConnector.d.ts.map +1 -1
  689. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserConnector.js +2 -2
  690. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserConnector.js.map +1 -1
  691. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserContext.d.ts +2 -0
  692. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserContext.d.ts.map +1 -1
  693. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserContext.js +7 -0
  694. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserContext.js.map +1 -1
  695. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ElementHandle.d.ts +1 -1
  696. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ElementHandle.d.ts.map +1 -1
  697. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ElementHandle.js +13 -10
  698. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ElementHandle.js.map +1 -1
  699. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPRequest.d.ts +1 -0
  700. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPRequest.d.ts.map +1 -1
  701. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPRequest.js +3 -0
  702. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPRequest.js.map +1 -1
  703. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPResponse.d.ts +1 -2
  704. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPResponse.d.ts.map +1 -1
  705. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPResponse.js +4 -4
  706. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPResponse.js.map +1 -1
  707. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Input.d.ts +15 -4
  708. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Input.d.ts.map +1 -1
  709. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Input.js +55 -26
  710. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Input.js.map +1 -1
  711. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/NetworkManager.d.ts.map +1 -1
  712. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/NetworkManager.js +24 -12
  713. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/NetworkManager.js.map +1 -1
  714. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.d.ts +1 -0
  715. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.d.ts.map +1 -1
  716. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js +3 -0
  717. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js.map +1 -1
  718. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/CallbackRegistry.d.ts +0 -8
  719. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/CallbackRegistry.d.ts.map +1 -1
  720. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/CallbackRegistry.js +1 -9
  721. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/CallbackRegistry.js.map +1 -1
  722. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConnectOptions.d.ts +5 -0
  723. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConnectOptions.d.ts.map +1 -1
  724. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConsoleMessage.d.ts +2 -1
  725. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConsoleMessage.d.ts.map +1 -1
  726. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConsoleMessage.js +5 -2
  727. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConsoleMessage.js.map +1 -1
  728. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/DownloadBehavior.d.ts +30 -0
  729. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/DownloadBehavior.d.ts.map +1 -0
  730. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/DownloadBehavior.js +7 -0
  731. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/DownloadBehavior.js.map +1 -0
  732. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Errors.d.ts +7 -0
  733. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Errors.d.ts.map +1 -1
  734. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Errors.js +7 -0
  735. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Errors.js.map +1 -1
  736. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/WaitTask.d.ts.map +1 -1
  737. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/WaitTask.js +5 -3
  738. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/WaitTask.js.map +1 -1
  739. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/common.d.ts +1 -0
  740. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/common.d.ts.map +1 -1
  741. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/environment.d.ts +1 -1
  742. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/environment.d.ts.map +1 -1
  743. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/environment.js +0 -3
  744. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/environment.js.map +1 -1
  745. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.d.ts +1 -1
  746. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.js +1 -1
  747. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/version.d.ts +1 -1
  748. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/version.js +1 -1
  749. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.d.ts.map +1 -1
  750. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.js +2 -2
  751. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.js.map +1 -1
  752. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +3 -3
  753. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +3 -3
  754. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/incremental-id-generator.d.ts +14 -0
  755. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/incremental-id-generator.d.ts.map +1 -0
  756. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/incremental-id-generator.js +15 -0
  757. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/incremental-id-generator.js.map +1 -0
  758. package/front_end/third_party/puppeteer/package/lib/types.d.ts +100 -10
  759. package/front_end/third_party/puppeteer/package/package.json +5 -5
  760. package/front_end/third_party/puppeteer/package/src/api/Browser.ts +10 -3
  761. package/front_end/third_party/puppeteer/package/src/api/ElementHandle.ts +21 -3
  762. package/front_end/third_party/puppeteer/package/src/api/Frame.ts +3 -1
  763. package/front_end/third_party/puppeteer/package/src/api/HTTPRequest.ts +1 -0
  764. package/front_end/third_party/puppeteer/package/src/api/Input.ts +57 -8
  765. package/front_end/third_party/puppeteer/package/src/api/Page.ts +5 -0
  766. package/front_end/third_party/puppeteer/package/src/bidi/ElementHandle.ts +9 -7
  767. package/front_end/third_party/puppeteer/package/src/bidi/Frame.ts +1 -0
  768. package/front_end/third_party/puppeteer/package/src/bidi/Input.ts +72 -31
  769. package/front_end/third_party/puppeteer/package/src/bidi/Page.ts +4 -0
  770. package/front_end/third_party/puppeteer/package/src/cdp/Browser.ts +11 -3
  771. package/front_end/third_party/puppeteer/package/src/cdp/BrowserConnector.ts +2 -0
  772. package/front_end/third_party/puppeteer/package/src/cdp/BrowserContext.ts +11 -0
  773. package/front_end/third_party/puppeteer/package/src/cdp/ElementHandle.ts +14 -9
  774. package/front_end/third_party/puppeteer/package/src/cdp/HTTPRequest.ts +4 -0
  775. package/front_end/third_party/puppeteer/package/src/cdp/HTTPResponse.ts +3 -5
  776. package/front_end/third_party/puppeteer/package/src/cdp/Input.ts +71 -26
  777. package/front_end/third_party/puppeteer/package/src/cdp/NetworkManager.ts +34 -17
  778. package/front_end/third_party/puppeteer/package/src/cdp/Page.ts +4 -0
  779. package/front_end/third_party/puppeteer/package/src/common/CallbackRegistry.ts +1 -15
  780. package/front_end/third_party/puppeteer/package/src/common/ConnectOptions.ts +5 -0
  781. package/front_end/third_party/puppeteer/package/src/common/ConsoleMessage.ts +8 -1
  782. package/front_end/third_party/puppeteer/package/src/common/DownloadBehavior.ts +31 -0
  783. package/front_end/third_party/puppeteer/package/src/common/Errors.ts +7 -0
  784. package/front_end/third_party/puppeteer/package/src/common/WaitTask.ts +9 -9
  785. package/front_end/third_party/puppeteer/package/src/common/common.ts +1 -0
  786. package/front_end/third_party/puppeteer/package/src/environment.ts +1 -4
  787. package/front_end/third_party/puppeteer/package/src/generated/injected.ts +1 -1
  788. package/front_end/third_party/puppeteer/package/src/generated/version.ts +1 -1
  789. package/front_end/third_party/puppeteer/package/src/node/BrowserLauncher.ts +2 -0
  790. package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
  791. package/front_end/third_party/puppeteer/package/src/util/incremental-id-generator.ts +20 -0
  792. package/front_end/third_party/puppeteer/puppeteer-tsconfig.json +2 -0
  793. package/front_end/ui/components/buttons/Button.test.ts +14 -0
  794. package/front_end/ui/components/buttons/Button.ts +27 -4
  795. package/front_end/ui/components/cards/card.css +7 -4
  796. package/front_end/ui/components/data_grid/DataGridControllerIntegrator.ts +4 -1
  797. package/front_end/ui/components/dialogs/ButtonDialog.test.ts +78 -0
  798. package/front_end/ui/components/dialogs/ButtonDialog.ts +131 -0
  799. package/front_end/ui/components/dialogs/Dialog.test.ts +43 -0
  800. package/front_end/ui/components/dialogs/Dialog.ts +63 -3
  801. package/front_end/ui/components/dialogs/ShortcutDialog.test.ts +15 -1
  802. package/front_end/ui/components/dialogs/ShortcutDialog.ts +33 -23
  803. package/front_end/ui/components/dialogs/buttonDialog.css +9 -0
  804. package/front_end/ui/components/dialogs/dialog.css +15 -4
  805. package/front_end/ui/components/dialogs/dialogs.ts +2 -0
  806. package/front_end/ui/components/dialogs/shortcutDialog.css +58 -38
  807. package/front_end/ui/components/docs/dialog/button_dialog.html +28 -0
  808. package/front_end/ui/components/docs/dialog/button_dialog.ts +29 -0
  809. package/front_end/ui/components/docs/freestyler/basic.ts +6 -8
  810. package/front_end/ui/components/docs/freestyler/empty_state.ts +6 -8
  811. package/front_end/ui/components/docs/performance_panel/basic.ts +1 -1
  812. package/front_end/ui/components/docs/performance_panel/timeline_history_manager.ts +6 -4
  813. package/front_end/ui/components/docs/performance_panel/track_example.html +1 -1
  814. package/front_end/ui/components/floating_button/FloatingButton.ts +3 -2
  815. package/front_end/ui/components/icon_button/fileSourceIcon.css +7 -3
  816. package/front_end/ui/components/issue_counter/IssueCounter.ts +15 -2
  817. package/front_end/ui/components/legacy_wrapper/LegacyWrapper.ts +1 -1
  818. package/front_end/ui/components/markdown_view/MarkdownView.test.ts +39 -17
  819. package/front_end/ui/components/markdown_view/MarkdownView.ts +92 -14
  820. package/front_end/ui/components/markdown_view/markdownView.css +15 -0
  821. package/front_end/ui/components/render_coordinator/RenderCoordinator.ts +24 -18
  822. package/front_end/ui/components/settings/SettingCheckbox.ts +3 -2
  823. package/front_end/ui/components/switch/SwitchImpl.ts +2 -2
  824. package/front_end/ui/legacy/ContextMenu.ts +2 -2
  825. package/front_end/ui/legacy/Infobar.ts +6 -0
  826. package/front_end/ui/legacy/InplaceEditor.ts +18 -14
  827. package/front_end/ui/legacy/InspectorView.ts +40 -0
  828. package/front_end/ui/legacy/ListWidget.ts +4 -2
  829. package/front_end/ui/legacy/TabbedPane.ts +0 -14
  830. package/front_end/ui/legacy/ThrottledWidget.ts +2 -2
  831. package/front_end/ui/legacy/Toolbar.ts +3 -3
  832. package/front_end/ui/legacy/UIUtils.ts +8 -13
  833. package/front_end/ui/legacy/Widget.ts +32 -0
  834. package/front_end/ui/legacy/components/cookie_table/CookiesTable.ts +7 -2
  835. package/front_end/ui/legacy/components/data_grid/DataGrid.test.ts +6 -9
  836. package/front_end/ui/legacy/components/data_grid/DataGrid.ts +43 -38
  837. package/front_end/ui/legacy/components/data_grid/ViewportDataGrid.ts +21 -12
  838. package/front_end/ui/legacy/components/inline_editor/LinkSwatch.test.ts +19 -0
  839. package/front_end/ui/legacy/components/inline_editor/LinkSwatch.ts +1 -1
  840. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +1 -1
  841. package/front_end/ui/legacy/components/perf_ui/ChartViewport.ts +2 -2
  842. package/front_end/ui/legacy/components/perf_ui/FilmStripView.ts +1 -1
  843. package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +37 -47
  844. package/front_end/ui/legacy/components/perf_ui/OverviewGrid.ts +129 -100
  845. package/front_end/ui/legacy/components/perf_ui/TimelineGrid.ts +4 -2
  846. package/front_end/ui/legacy/components/perf_ui/TimelineOverviewCalculator.test.ts +9 -4
  847. package/front_end/ui/legacy/components/perf_ui/TimelineOverviewCalculator.ts +23 -9
  848. package/front_end/ui/legacy/components/perf_ui/TimelineOverviewPane.ts +102 -43
  849. package/front_end/ui/legacy/components/perf_ui/flameChart.css +0 -2
  850. package/front_end/ui/legacy/components/perf_ui/perf_ui-meta.ts +4 -4
  851. package/front_end/ui/legacy/components/source_frame/BinaryResourceViewFactory.test.ts +49 -0
  852. package/front_end/ui/legacy/components/source_frame/BinaryResourceViewFactory.ts +23 -46
  853. package/front_end/ui/legacy/components/source_frame/ImageView.ts +1 -1
  854. package/front_end/ui/legacy/components/utils/ImagePreview.ts +1 -1
  855. package/front_end/ui/legacy/components/utils/jsUtils.css +8 -0
  856. package/front_end/ui/legacy/filter.css +1 -1
  857. package/front_end/ui/legacy/inspectorCommon.css +1 -1
  858. package/front_end/ui/legacy/listWidget.css +4 -1
  859. package/front_end/ui/legacy/reportView.css +1 -1
  860. package/front_end/ui/legacy/textPrompt.css +1 -1
  861. package/front_end/ui/legacy/toolbar.css +7 -11
  862. package/front_end/ui/legacy/treeoutline.css +3 -1
  863. package/front_end/ui/visual_logging/KnownContextValues.ts +186 -1
  864. package/front_end/ui/visual_logging/LoggingConfig.ts +6 -2
  865. package/front_end/ui/visual_logging/LoggingDriver.test.ts +27 -1
  866. package/front_end/ui/visual_logging/LoggingDriver.ts +7 -4
  867. package/package.json +8 -8
  868. package/scripts/build/ninja/bundle.gni +3 -3
  869. package/scripts/build/{rollup.config.js → rollup.config.mjs} +4 -4
  870. package/scripts/build/wasm-as.py +1 -1
  871. package/scripts/devtools_paths.py +8 -4
  872. package/scripts/eslint_rules/tests/check_test_definitions_test.js +8 -3
  873. package/scripts/freestyler/auto_freestyler.js +12 -4
  874. package/scripts/freestyler/to_tsv.mjs +40 -0
  875. package/scripts/tools/update_goldens.py +11 -13
  876. package/scripts/tools/update_goldens_v2.py +1 -1
  877. package/front_end/models/timeline_model/TimelineModelFilter.ts +0 -61
  878. package/front_end/panels/timeline/components/insights/SidebarInsight.test.ts +0 -72
  879. package/front_end/ui/components/docs/two_states_counter/basic.html +0 -27
  880. package/front_end/ui/components/docs/two_states_counter/basic.ts +0 -45
  881. package/front_end/ui/components/two_states_counter/TwoStatesCounter.test.ts +0 -73
  882. package/front_end/ui/components/two_states_counter/TwoStatesCounter.ts +0 -104
  883. package/front_end/ui/components/two_states_counter/twoStatesCounter.css +0 -37
  884. package/front_end/ui/components/two_states_counter/two_states_counter.ts +0 -9
  885. /package/front_end/Images/{rollup.config.js → rollup.config.mjs} +0 -0
@@ -7,7 +7,11 @@ import * as i18n from '../../core/i18n/i18n.js';
7
7
  import type * as Platform from '../../core/platform/platform.js';
8
8
  import * as SDK from '../../core/sdk/sdk.js';
9
9
  import * as Workspace from '../../models/workspace/workspace.js';
10
+ import * as ElementsPanel from '../../panels/elements/elements.js';
10
11
  import * as NetworkForward from '../../panels/network/forward/forward.js';
12
+ import * as NetworkPanel from '../../panels/network/network.js';
13
+ import * as SourcesPanel from '../../panels/sources/sources.js';
14
+ import * as TimelinePanel from '../../panels/timeline/timeline.js';
11
15
  import * as TimelineUtils from '../../panels/timeline/utils/utils.js';
12
16
  import * as UI from '../../ui/legacy/legacy.js';
13
17
  import * as LitHtml from '../../ui/lit-html/lit-html.js';
@@ -15,10 +19,15 @@ import * as LitHtml from '../../ui/lit-html/lit-html.js';
15
19
  import {
16
20
  AgentType,
17
21
  type AiAgent,
22
+ type ConversationContext,
18
23
  ErrorType,
19
24
  type ResponseData,
20
25
  ResponseType,
26
+ type SerializedAgent,
21
27
  } from './AiAgent.js';
28
+ import {
29
+ AiHistoryStorage,
30
+ } from './AiHistoryStorage.js';
22
31
  import {ChangeManager} from './ChangeManager.js';
23
32
  import {
24
33
  ChatMessageEntity,
@@ -30,12 +39,14 @@ import {
30
39
  } from './components/FreestylerChatUi.js';
31
40
  import {
32
41
  DrJonesFileAgent,
42
+ FileContext,
33
43
  } from './DrJonesFileAgent.js';
34
44
  import {
35
45
  DrJonesNetworkAgent,
46
+ RequestContext,
36
47
  } from './DrJonesNetworkAgent.js';
37
- import {DrJonesPerformanceAgent} from './DrJonesPerformanceAgent.js';
38
- import {FreestylerAgent} from './FreestylerAgent.js';
48
+ import {CallTreeContext, DrJonesPerformanceAgent} from './DrJonesPerformanceAgent.js';
49
+ import {FreestylerAgent, NodeContext} from './FreestylerAgent.js';
39
50
  import freestylerPanelStyles from './freestylerPanel.css.js';
40
51
 
41
52
  const {html} = LitHtml;
@@ -61,17 +72,29 @@ const UIStrings = {
61
72
  */
62
73
  sendFeedback: 'Send feedback',
63
74
  /**
64
- *@description Announcement text for screen readers when the chat is cleared.
75
+ *@description Announcement text for screen readers when a new chat is created.
76
+ */
77
+ newChatCreated: 'New chat created',
78
+ /**
79
+ *@description Announcement text for screen readers when the chat is deleted.
65
80
  */
66
- chatCleared: 'Chat cleared',
81
+ chatDeleted: 'Chat deleted',
67
82
  /**
68
83
  *@description AI assistance UI text creating selecting a history entry.
69
84
  */
70
85
  history: 'History',
71
86
  /**
72
- *@description AI assistance UI text clearing the current chat session.
87
+ *@description AI assistance UI text deleting the current chat session.
88
+ */
89
+ deleteChat: 'Delete chat',
90
+ /**
91
+ *@description AI assistance UI text that deletes all history entries.
92
+ */
93
+ clearChatHistory: 'Clear chat history',
94
+ /**
95
+ *@description AI assistance UI text explains that he user had no pas conversations.
73
96
  */
74
- clearChat: 'Clear chat',
97
+ noPastConversations: 'No past conversations',
75
98
  };
76
99
 
77
100
  /*
@@ -106,55 +129,6 @@ function selectedElementFilter(maybeNode: SDK.DOMModel.DOMNode|null): SDK.DOMMod
106
129
  return null;
107
130
  }
108
131
 
109
- // TODO(ergunsh): Use the WidgetElement instead of separately creating the toolbar.
110
- function createToolbar(
111
- target: HTMLElement,
112
- {onHistoryClick, onNewAgentClick, onDeleteClick}:
113
- {onHistoryClick: (event: Event) => void, onNewAgentClick: () => void, onDeleteClick: () => void}): void {
114
- const toolbarContainer = target.createChild('div', 'freestyler-toolbar-container');
115
- const leftToolbar = new UI.Toolbar.Toolbar('freestyler-left-toolbar', toolbarContainer);
116
- const rightToolbar = new UI.Toolbar.Toolbar('freestyler-right-toolbar', toolbarContainer);
117
-
118
- const clearButton =
119
- new UI.Toolbar.ToolbarButton(i18nString(UIStrings.newChat), 'plus', undefined, 'freestyler.new-chat');
120
- clearButton.addEventListener(UI.Toolbar.ToolbarButton.Events.CLICK, onNewAgentClick);
121
- leftToolbar.appendToolbarItem(clearButton);
122
- leftToolbar.appendSeparator();
123
- const historyButton =
124
- new UI.Toolbar.ToolbarButton(i18nString(UIStrings.history), 'history', undefined, 'freestyler.history');
125
- historyButton.addEventListener(UI.Toolbar.ToolbarButton.Events.CLICK, event => {
126
- onHistoryClick(event.data);
127
- });
128
- leftToolbar.appendToolbarItem(historyButton);
129
- const deleteButton =
130
- new UI.Toolbar.ToolbarButton(i18nString(UIStrings.clearChat), 'bin', undefined, 'freestyler.delete');
131
- deleteButton.addEventListener(UI.Toolbar.ToolbarButton.Events.CLICK, onDeleteClick);
132
- leftToolbar.appendToolbarItem(deleteButton);
133
-
134
- const link = UI.XLink.XLink.create(
135
- AI_ASSISTANCE_SEND_FEEDBACK, i18nString(UIStrings.sendFeedback), undefined, undefined,
136
- 'freestyler.send-feedback');
137
- link.style.setProperty('display', null);
138
- link.style.setProperty('text-decoration', 'none');
139
- link.style.setProperty('padding', '0 var(--sys-size-3)');
140
- const linkItem = new UI.Toolbar.ToolbarItem(link);
141
- rightToolbar.appendToolbarItem(linkItem);
142
-
143
- rightToolbar.appendSeparator();
144
- const helpButton = new UI.Toolbar.ToolbarButton(i18nString(UIStrings.help), 'help', undefined, 'freestyler.help');
145
- helpButton.addEventListener(UI.Toolbar.ToolbarButton.Events.CLICK, () => {
146
- Host.InspectorFrontendHost.InspectorFrontendHostInstance.openInNewTab(AI_ASSISTANCE_HELP);
147
- });
148
- rightToolbar.appendToolbarItem(helpButton);
149
-
150
- const settingsButton =
151
- new UI.Toolbar.ToolbarButton(i18nString(UIStrings.settings), 'gear', undefined, 'freestyler.settings');
152
- settingsButton.addEventListener(UI.Toolbar.ToolbarButton.Events.CLICK, () => {
153
- void UI.ViewManager.ViewManager.instance().showView('chrome-ai');
154
- });
155
- rightToolbar.appendToolbarItem(settingsButton);
156
- }
157
-
158
132
  function defaultView(input: FreestylerChatUiProps, output: ViewOutput, target: HTMLElement): void {
159
133
  // clang-format off
160
134
  LitHtml.render(html`
@@ -169,6 +143,34 @@ function defaultView(input: FreestylerChatUiProps, output: ViewOutput, target: H
169
143
  // clang-format on
170
144
  }
171
145
 
146
+ function createNodeContext(node: SDK.DOMModel.DOMNode|null): NodeContext|null {
147
+ if (!node) {
148
+ return null;
149
+ }
150
+ return new NodeContext(node);
151
+ }
152
+
153
+ function createFileContext(file: Workspace.UISourceCode.UISourceCode|null): FileContext|null {
154
+ if (!file) {
155
+ return null;
156
+ }
157
+ return new FileContext(file);
158
+ }
159
+
160
+ function createRequestContext(request: SDK.NetworkRequest.NetworkRequest|null): RequestContext|null {
161
+ if (!request) {
162
+ return null;
163
+ }
164
+ return new RequestContext(request);
165
+ }
166
+
167
+ function createCallTreeContext(callTree: TimelineUtils.AICallTree.AICallTree|null): CallTreeContext|null {
168
+ if (!callTree) {
169
+ return null;
170
+ }
171
+ return new CallTreeContext(callTree);
172
+ }
173
+
172
174
  let freestylerPanelInstance: FreestylerPanel;
173
175
  export class FreestylerPanel extends UI.Panel.Panel {
174
176
  static panelName = 'freestyler';
@@ -176,17 +178,27 @@ export class FreestylerPanel extends UI.Panel.Panel {
176
178
  #toggleSearchElementAction: UI.ActionRegistration.Action;
177
179
  #contentContainer: HTMLElement;
178
180
  #aidaClient: Host.AidaClient.AidaClient;
179
- #freestylerAgent: FreestylerAgent;
180
- #drJonesFileAgent: DrJonesFileAgent;
181
- #drJonesNetworkAgent: DrJonesNetworkAgent;
182
- #drJonesPerformanceAgent: DrJonesPerformanceAgent;
183
181
  #viewProps: FreestylerChatUiProps;
184
182
  #viewOutput: ViewOutput = {};
185
183
  #serverSideLoggingEnabled = isFreestylerServerSideLoggingEnabled();
186
184
  #freestylerEnabledSetting: Common.Settings.Setting<boolean>|undefined;
187
185
  #changeManager = new ChangeManager();
188
186
 
187
+ #newChatButton =
188
+ new UI.Toolbar.ToolbarButton(i18nString(UIStrings.newChat), 'plus', undefined, 'freestyler.new-chat');
189
+ #historyEntriesButton =
190
+ new UI.Toolbar.ToolbarButton(i18nString(UIStrings.history), 'history', undefined, 'freestyler.history');
191
+ #deleteHistoryEntryButton =
192
+ new UI.Toolbar.ToolbarButton(i18nString(UIStrings.deleteChat), 'bin', undefined, 'freestyler.delete');
193
+
189
194
  #agents = new Set<AiAgent<unknown>>();
195
+ #currentAgent?: AiAgent<unknown>;
196
+
197
+ #previousSameOriginContext?: ConversationContext<unknown>;
198
+ #selectedFile: FileContext|null = null;
199
+ #selectedElement: NodeContext|null = null;
200
+ #selectedCallTree: CallTreeContext|null = null;
201
+ #selectedRequest: RequestContext|null = null;
190
202
 
191
203
  constructor(private view: View = defaultView, {aidaClient, aidaAvailability, syncInfo}: {
192
204
  aidaClient: Host.AidaClient.AidaClient,
@@ -196,11 +208,7 @@ export class FreestylerPanel extends UI.Panel.Panel {
196
208
  super(FreestylerPanel.panelName);
197
209
  this.#freestylerEnabledSetting = this.#getAiAssistanceEnabledSetting();
198
210
 
199
- createToolbar(this.contentElement, {
200
- onNewAgentClick: this.#clearMessages.bind(this),
201
- onHistoryClick: this.#onHistoryClicked.bind(this),
202
- onDeleteClick: this.#onDeleteClicked.bind(this),
203
- });
211
+ this.#createToolbar();
204
212
  this.#toggleSearchElementAction =
205
213
  UI.ActionRegistry.ActionRegistry.instance().getAction('elements.toggle-element-search');
206
214
  this.#aidaClient = aidaClient;
@@ -219,23 +227,64 @@ export class FreestylerPanel extends UI.Panel.Panel {
219
227
  onInspectElementClick: this.#handleSelectElementClick.bind(this),
220
228
  onFeedbackSubmit: this.#handleFeedbackSubmit.bind(this),
221
229
  onCancelClick: this.#cancel.bind(this),
222
- onSelectedNetworkRequestClick: this.#handleSelectedNetworkRequestClick.bind(this),
223
- onSelectedFileRequestClick: this.#handleSelectedFileClick.bind(this),
230
+ onContextClick: this.#handleContextClick.bind(this),
231
+ onNewConversation: this.#handleNewChatRequest.bind(this),
224
232
  canShowFeedbackForm: this.#serverSideLoggingEnabled,
225
233
  userInfo: {
226
234
  accountImage: syncInfo.accountImage,
227
235
  accountFullName: syncInfo.accountFullName,
228
236
  },
229
- selectedElement: null,
230
- selectedFile: null,
231
- selectedNetworkRequest: null,
232
- selectedAiCallTree: null,
237
+ selectedContext: null,
238
+ blockedByCrossOrigin: false,
239
+ stripLinks: false,
240
+ isReadOnly: false,
233
241
  };
234
242
 
235
- this.#freestylerAgent = this.#createFreestylerAgent();
236
- this.#drJonesFileAgent = this.#createDrJonesFileAgent();
237
- this.#drJonesNetworkAgent = this.#createDrJonesNetworkAgent();
238
- this.#drJonesPerformanceAgent = this.#createDrJonesPerformanceAgent();
243
+ for (const historyEntry of AiHistoryStorage.instance().getHistory()) {
244
+ this.#createAgent(historyEntry.type, historyEntry);
245
+ }
246
+ }
247
+
248
+ #createToolbar(): void {
249
+ const toolbarContainer = this.contentElement.createChild('div', 'freestyler-toolbar-container');
250
+ const leftToolbar = new UI.Toolbar.Toolbar('freestyler-left-toolbar', toolbarContainer);
251
+ const rightToolbar = new UI.Toolbar.Toolbar('freestyler-right-toolbar', toolbarContainer);
252
+
253
+ this.#newChatButton.addEventListener(UI.Toolbar.ToolbarButton.Events.CLICK, this.#handleNewChatRequest.bind(this));
254
+ leftToolbar.appendToolbarItem(this.#newChatButton);
255
+ leftToolbar.appendSeparator();
256
+
257
+ this.#historyEntriesButton.addEventListener(UI.Toolbar.ToolbarButton.Events.CLICK, event => {
258
+ this.#onHistoryClicked(event.data);
259
+ });
260
+ leftToolbar.appendToolbarItem(this.#historyEntriesButton);
261
+ this.#deleteHistoryEntryButton.addEventListener(
262
+ UI.Toolbar.ToolbarButton.Events.CLICK, this.#onDeleteClicked.bind(this));
263
+ leftToolbar.appendToolbarItem(this.#deleteHistoryEntryButton);
264
+
265
+ const link = UI.XLink.XLink.create(
266
+ AI_ASSISTANCE_SEND_FEEDBACK, i18nString(UIStrings.sendFeedback), undefined, undefined,
267
+ 'freestyler.send-feedback');
268
+ link.style.setProperty('display', null);
269
+ link.style.setProperty('color', 'var(--sys-color-primary)');
270
+ link.style.setProperty('margin', '0 var(--sys-size-3)');
271
+ link.style.setProperty('height', 'calc(100% - 6px)');
272
+ const linkItem = new UI.Toolbar.ToolbarItem(link);
273
+ rightToolbar.appendToolbarItem(linkItem);
274
+
275
+ rightToolbar.appendSeparator();
276
+ const helpButton = new UI.Toolbar.ToolbarButton(i18nString(UIStrings.help), 'help', undefined, 'freestyler.help');
277
+ helpButton.addEventListener(UI.Toolbar.ToolbarButton.Events.CLICK, () => {
278
+ Host.InspectorFrontendHost.InspectorFrontendHostInstance.openInNewTab(AI_ASSISTANCE_HELP);
279
+ });
280
+ rightToolbar.appendToolbarItem(helpButton);
281
+
282
+ const settingsButton =
283
+ new UI.Toolbar.ToolbarButton(i18nString(UIStrings.settings), 'gear', undefined, 'freestyler.settings');
284
+ settingsButton.addEventListener(UI.Toolbar.ToolbarButton.Events.CLICK, () => {
285
+ void UI.ViewManager.ViewManager.instance().showView('chrome-ai');
286
+ });
287
+ rightToolbar.appendToolbarItem(settingsButton);
239
288
  }
240
289
 
241
290
  #getChatUiState(): FreestylerChatUiState {
@@ -253,41 +302,44 @@ export class FreestylerPanel extends UI.Panel.Panel {
253
302
  }
254
303
  }
255
304
 
256
- #createFreestylerAgent(): FreestylerAgent {
257
- const agent = new FreestylerAgent({
305
+ #createAgent(agentType: AgentType, history?: SerializedAgent): AiAgent<unknown> {
306
+ const options = {
258
307
  aidaClient: this.#aidaClient,
259
- changeManager: this.#changeManager,
260
308
  serverSideLoggingEnabled: this.#serverSideLoggingEnabled,
261
- });
262
- this.#agents.add(agent);
263
- return agent;
264
- }
309
+ };
310
+ let agent: AiAgent<unknown>;
311
+ switch (agentType) {
312
+ case AgentType.FREESTYLER: {
313
+ agent = new FreestylerAgent({
314
+ ...options,
315
+ changeManager: this.#changeManager,
316
+ });
317
+ break;
318
+ }
319
+ case AgentType.DRJONES_NETWORK_REQUEST: {
320
+ agent = new DrJonesNetworkAgent(options);
321
+ break;
322
+ }
323
+ case AgentType.DRJONES_FILE: {
324
+ agent = new DrJonesFileAgent(options);
325
+ break;
326
+ }
327
+ case AgentType.DRJONES_PERFORMANCE: {
328
+ agent = new DrJonesPerformanceAgent(options);
329
+ break;
330
+ }
331
+ }
265
332
 
266
- #createDrJonesFileAgent(): DrJonesFileAgent {
267
- const agent = new DrJonesFileAgent({
268
- aidaClient: this.#aidaClient,
269
- serverSideLoggingEnabled: this.#serverSideLoggingEnabled,
270
- });
271
- this.#agents.add(agent);
272
- return agent;
273
- }
333
+ if (history) {
334
+ agent.populateHistoryFromStorage(history);
335
+ }
274
336
 
275
- #createDrJonesNetworkAgent(): DrJonesNetworkAgent {
276
- const agent = new DrJonesNetworkAgent({
277
- aidaClient: this.#aidaClient,
278
- serverSideLoggingEnabled: this.#serverSideLoggingEnabled,
279
- });
280
337
  this.#agents.add(agent);
281
338
  return agent;
282
339
  }
283
340
 
284
- #createDrJonesPerformanceAgent(): DrJonesPerformanceAgent {
285
- const agent = new DrJonesPerformanceAgent({
286
- aidaClient: this.#aidaClient,
287
- serverSideLoggingEnabled: this.#serverSideLoggingEnabled,
288
- });
289
- this.#agents.add(agent);
290
- return agent;
341
+ #updateToolbarState(): void {
342
+ this.#deleteHistoryEntryButton.setVisible(Boolean(this.#currentAgent && !this.#currentAgent.isEmpty));
291
343
  }
292
344
 
293
345
  static async instance(opts: {
@@ -306,22 +358,62 @@ export class FreestylerPanel extends UI.Panel.Panel {
306
358
  return freestylerPanelInstance;
307
359
  }
308
360
 
361
+ // We select the default agent based on the open panels if
362
+ // there isn't any active conversation.
363
+ #selectDefaultAgentIfNeeded(): void {
364
+ // If there already is an agent and not it is not empty,
365
+ // we don't automatically change the agent.
366
+ if (this.#currentAgent && !this.#currentAgent.isEmpty) {
367
+ return;
368
+ }
369
+
370
+ const config = Common.Settings.Settings.instance().getHostConfig();
371
+ const isElementsPanelVisible =
372
+ Boolean(UI.Context.Context.instance().flavor(ElementsPanel.ElementsPanel.ElementsPanel));
373
+ const isNetworkPanelVisible = Boolean(UI.Context.Context.instance().flavor(NetworkPanel.NetworkPanel.NetworkPanel));
374
+ const isSourcesPanelVisible = Boolean(UI.Context.Context.instance().flavor(SourcesPanel.SourcesPanel.SourcesPanel));
375
+ const isPerformancePanelVisible =
376
+ Boolean(UI.Context.Context.instance().flavor(TimelinePanel.TimelinePanel.TimelinePanel));
377
+
378
+ let targetAgentType: AgentType|undefined = undefined;
379
+ if (isElementsPanelVisible && config.devToolsFreestyler?.enabled) {
380
+ targetAgentType = AgentType.FREESTYLER;
381
+ } else if (isNetworkPanelVisible && config.devToolsAiAssistanceNetworkAgent?.enabled) {
382
+ targetAgentType = AgentType.DRJONES_NETWORK_REQUEST;
383
+ } else if (isSourcesPanelVisible && config.devToolsAiAssistanceFileAgent?.enabled) {
384
+ targetAgentType = AgentType.DRJONES_FILE;
385
+ } else if (isPerformancePanelVisible && config.devToolsAiAssistancePerformanceAgent?.enabled) {
386
+ targetAgentType = AgentType.DRJONES_PERFORMANCE;
387
+ }
388
+
389
+ this.#currentAgent = targetAgentType ? this.#createAgent(targetAgentType) : undefined;
390
+ this.#viewProps.agentType = targetAgentType;
391
+ this.#onContextSelectionChanged();
392
+ void this.doUpdate();
393
+ }
394
+
309
395
  override wasShown(): void {
310
396
  this.registerCSSFiles([freestylerPanelStyles]);
311
397
  this.#viewOutput.freestylerChatUi?.restoreScrollPosition();
312
398
  this.#viewOutput.freestylerChatUi?.focusTextInput();
399
+ this.#selectDefaultAgentIfNeeded();
313
400
  void this.#handleAidaAvailabilityChange();
314
401
  void this
315
402
  .#handleFreestylerEnabledSettingChanged(); // If the setting was switched on/off while the FreestylerPanel was not shown.
403
+ this.#selectedElement =
404
+ createNodeContext(selectedElementFilter(UI.Context.Context.instance().flavor(SDK.DOMModel.DOMNode))),
405
+ this.#selectedRequest =
406
+ createRequestContext(UI.Context.Context.instance().flavor(SDK.NetworkRequest.NetworkRequest)),
407
+ this.#selectedCallTree =
408
+ createCallTreeContext(UI.Context.Context.instance().flavor(TimelineUtils.AICallTree.AICallTree)),
409
+ this.#selectedFile = createFileContext(UI.Context.Context.instance().flavor(Workspace.UISourceCode.UISourceCode)),
316
410
  this.#viewProps = {
317
411
  ...this.#viewProps,
412
+ agentType: this.#currentAgent?.type,
318
413
  inspectElementToggled: this.#toggleSearchElementAction.toggled(),
319
- selectedElement: selectedElementFilter(UI.Context.Context.instance().flavor(SDK.DOMModel.DOMNode)),
320
- selectedNetworkRequest: UI.Context.Context.instance().flavor(SDK.NetworkRequest.NetworkRequest),
321
- selectedAiCallTree: UI.Context.Context.instance().flavor(TimelineUtils.AICallTree.AICallTree),
322
- selectedFile: UI.Context.Context.instance().flavor(Workspace.UISourceCode.UISourceCode),
414
+ selectedContext: this.#getConversationContext(),
323
415
  };
324
- this.doUpdate();
416
+ void this.doUpdate();
325
417
 
326
418
  this.#freestylerEnabledSetting?.addChangeListener(this.#handleFreestylerEnabledSettingChanged, this);
327
419
  Host.AidaClient.HostConfigTracker.instance().addEventListener(
@@ -335,7 +427,14 @@ export class FreestylerPanel extends UI.Panel.Panel {
335
427
  TimelineUtils.AICallTree.AICallTree, this.#handleTraceEntryNodeFlavorChange);
336
428
  UI.Context.Context.instance().addFlavorChangeListener(
337
429
  Workspace.UISourceCode.UISourceCode, this.#handleUISourceCodeFlavorChange);
338
-
430
+ UI.Context.Context.instance().addFlavorChangeListener(
431
+ ElementsPanel.ElementsPanel.ElementsPanel, this.#selectDefaultAgentIfNeeded, this);
432
+ UI.Context.Context.instance().addFlavorChangeListener(
433
+ NetworkPanel.NetworkPanel.NetworkPanel, this.#selectDefaultAgentIfNeeded, this);
434
+ UI.Context.Context.instance().addFlavorChangeListener(
435
+ SourcesPanel.SourcesPanel.SourcesPanel, this.#selectDefaultAgentIfNeeded, this);
436
+ UI.Context.Context.instance().addFlavorChangeListener(
437
+ TimelinePanel.TimelinePanel.TimelinePanel, this.#selectDefaultAgentIfNeeded, this);
339
438
  Host.userMetrics.actionTaken(Host.UserMetrics.Action.AiAssistancePanelOpened);
340
439
  }
341
440
 
@@ -352,6 +451,14 @@ export class FreestylerPanel extends UI.Panel.Panel {
352
451
  TimelineUtils.AICallTree.AICallTree, this.#handleTraceEntryNodeFlavorChange);
353
452
  UI.Context.Context.instance().removeFlavorChangeListener(
354
453
  Workspace.UISourceCode.UISourceCode, this.#handleUISourceCodeFlavorChange);
454
+ UI.Context.Context.instance().removeFlavorChangeListener(
455
+ ElementsPanel.ElementsPanel.ElementsPanel, this.#selectDefaultAgentIfNeeded, this);
456
+ UI.Context.Context.instance().removeFlavorChangeListener(
457
+ NetworkPanel.NetworkPanel.NetworkPanel, this.#selectDefaultAgentIfNeeded, this);
458
+ UI.Context.Context.instance().removeFlavorChangeListener(
459
+ SourcesPanel.SourcesPanel.SourcesPanel, this.#selectDefaultAgentIfNeeded, this);
460
+ UI.Context.Context.instance().removeFlavorChangeListener(
461
+ TimelinePanel.TimelinePanel.TimelinePanel, this.#selectDefaultAgentIfNeeded, this);
355
462
  }
356
463
 
357
464
  #handleAidaAvailabilityChange = async(): Promise<void> => {
@@ -365,7 +472,7 @@ export class FreestylerPanel extends UI.Panel.Panel {
365
472
  accountFullName: syncInfo.accountFullName,
366
473
  };
367
474
  this.#viewProps.state = this.#getChatUiState();
368
- this.doUpdate();
475
+ void this.doUpdate();
369
476
  }
370
477
  };
371
478
 
@@ -375,46 +482,49 @@ export class FreestylerPanel extends UI.Panel.Panel {
375
482
  }
376
483
 
377
484
  this.#viewProps.inspectElementToggled = ev.data;
378
- this.doUpdate();
485
+ void this.doUpdate();
379
486
  };
380
487
 
381
488
  #handleDOMNodeFlavorChange = (ev: Common.EventTarget.EventTargetEvent<SDK.DOMModel.DOMNode>): void => {
382
- if (this.#viewProps.selectedElement === ev.data) {
489
+ if (this.#selectedElement?.getItem() === ev.data) {
383
490
  return;
384
491
  }
385
492
 
386
- this.#viewProps.selectedElement = selectedElementFilter(ev.data);
387
- this.doUpdate();
493
+ this.#selectedElement = createNodeContext(selectedElementFilter(ev.data));
494
+ this.#onContextSelectionChanged();
388
495
  };
389
496
 
390
497
  #handleNetworkRequestFlavorChange =
391
498
  (ev: Common.EventTarget.EventTargetEvent<SDK.NetworkRequest.NetworkRequest>): void => {
392
- if (this.#viewProps.selectedNetworkRequest === ev.data) {
499
+ if (this.#selectedRequest?.getItem() === ev.data) {
393
500
  return;
394
501
  }
395
502
 
396
- this.#viewProps.selectedNetworkRequest = Boolean(ev.data) ? ev.data : null;
397
- this.doUpdate();
503
+ this.#selectedRequest = Boolean(ev.data) ? new RequestContext(ev.data) : null;
504
+ this.#onContextSelectionChanged();
398
505
  };
399
506
 
400
507
  #handleTraceEntryNodeFlavorChange =
401
508
  (ev: Common.EventTarget.EventTargetEvent<TimelineUtils.AICallTree.AICallTree>): void => {
402
- if (this.#viewProps.selectedAiCallTree === ev.data) {
509
+ if (this.#selectedCallTree?.getItem() === ev.data) {
403
510
  return;
404
511
  }
405
512
 
406
- this.#viewProps.selectedAiCallTree = Boolean(ev.data) ? ev.data : null;
407
- this.doUpdate();
513
+ this.#selectedCallTree = Boolean(ev.data) ? new CallTreeContext(ev.data) : null;
514
+ this.#onContextSelectionChanged();
408
515
  };
409
516
 
410
517
  #handleUISourceCodeFlavorChange =
411
518
  (ev: Common.EventTarget.EventTargetEvent<Workspace.UISourceCode.UISourceCode>): void => {
412
- if (this.#viewProps.selectedFile === ev.data) {
519
+ const newFile = ev.data;
520
+ if (!newFile) {
413
521
  return;
414
522
  }
415
-
416
- this.#viewProps.selectedFile = Boolean(ev.data) ? ev.data : null;
417
- this.doUpdate();
523
+ if (this.#selectedFile?.getItem() === newFile) {
524
+ return;
525
+ }
526
+ this.#selectedFile = new FileContext(ev.data);
527
+ this.#onContextSelectionChanged();
418
528
  };
419
529
 
420
530
  #handleFreestylerEnabledSettingChanged = (): void => {
@@ -424,10 +534,11 @@ export class FreestylerPanel extends UI.Panel.Panel {
424
534
  }
425
535
 
426
536
  this.#viewProps.state = nextChatUiState;
427
- this.doUpdate();
537
+ void this.doUpdate();
428
538
  };
429
539
 
430
- doUpdate(): void {
540
+ override async doUpdate(): Promise<void> {
541
+ this.#updateToolbarState();
431
542
  this.view(this.#viewProps, this.#viewOutput, this.#contentContainer);
432
543
  }
433
544
 
@@ -450,90 +561,98 @@ export class FreestylerPanel extends UI.Panel.Panel {
450
561
  });
451
562
  }
452
563
 
453
- #handleSelectedNetworkRequestClick(): void|Promise<void> {
454
- if (this.#viewProps.selectedNetworkRequest) {
564
+ #handleContextClick(): void|Promise<void> {
565
+ const context = this.#viewProps.selectedContext;
566
+ if (context instanceof RequestContext) {
455
567
  const requestLocation = NetworkForward.UIRequestLocation.UIRequestLocation.tab(
456
- this.#viewProps.selectedNetworkRequest, NetworkForward.UIRequestLocation.UIRequestTabs.HEADERS_COMPONENT);
568
+ context.getItem(), NetworkForward.UIRequestLocation.UIRequestTabs.HEADERS_COMPONENT);
457
569
  return Common.Revealer.reveal(requestLocation);
458
570
  }
459
- }
460
-
461
- #handleSelectedFileClick(): void|Promise<void> {
462
- if (this.#viewProps.selectedFile) {
463
- return Common.Revealer.reveal(this.#viewProps.selectedFile.uiLocation(0, 0));
571
+ if (context instanceof FileContext) {
572
+ return Common.Revealer.reveal(context.getItem().uiLocation(0, 0));
464
573
  }
574
+ if (context instanceof CallTreeContext) {
575
+ const trace = new SDK.TraceObject.RevealableEvent(context.getItem().selectedNode.event);
576
+ return Common.Revealer.reveal(trace);
577
+ }
578
+ // Node picker is using linkifier.
465
579
  }
466
580
 
467
581
  handleAction(actionId: string): void {
582
+ if (this.#viewProps.isLoading) {
583
+ // If running some queries already, focus the input with the abort
584
+ // button and do nothing.
585
+ this.#viewOutput.freestylerChatUi?.focusTextInput();
586
+ return;
587
+ }
588
+
589
+ let targetAgentType: AgentType|undefined;
468
590
  switch (actionId) {
469
591
  case 'freestyler.elements-floating-button': {
470
- this.#viewOutput.freestylerChatUi?.focusTextInput();
471
592
  Host.userMetrics.actionTaken(Host.UserMetrics.Action.FreestylerOpenedFromElementsPanelFloatingButton);
472
- this.#viewProps.agentType = AgentType.FREESTYLER;
473
- this.#viewProps.messages = [];
474
- this.doUpdate();
475
- void this.#doConversation(this.#freestylerAgent.runFromHistory());
593
+ targetAgentType = AgentType.FREESTYLER;
476
594
  break;
477
595
  }
478
596
  case 'freestyler.element-panel-context': {
479
- this.#viewOutput.freestylerChatUi?.focusTextInput();
480
597
  Host.userMetrics.actionTaken(Host.UserMetrics.Action.FreestylerOpenedFromElementsPanel);
481
- this.#viewProps.agentType = AgentType.FREESTYLER;
482
- this.#viewProps.messages = [];
483
- this.doUpdate();
484
- void this.#doConversation(this.#freestylerAgent.runFromHistory());
598
+ targetAgentType = AgentType.FREESTYLER;
485
599
  break;
486
600
  }
487
601
  case 'drjones.network-floating-button': {
488
- this.#viewOutput.freestylerChatUi?.focusTextInput();
489
602
  Host.userMetrics.actionTaken(Host.UserMetrics.Action.DrJonesOpenedFromNetworkPanelFloatingButton);
490
- this.#viewProps.agentType = AgentType.DRJONES_NETWORK_REQUEST;
491
- this.#viewProps.messages = [];
492
- this.doUpdate();
493
- void this.#doConversation(this.#drJonesNetworkAgent.runFromHistory());
603
+ targetAgentType = AgentType.DRJONES_NETWORK_REQUEST;
494
604
  break;
495
605
  }
496
606
  case 'drjones.network-panel-context': {
497
- this.#viewOutput.freestylerChatUi?.focusTextInput();
498
607
  Host.userMetrics.actionTaken(Host.UserMetrics.Action.DrJonesOpenedFromNetworkPanel);
499
- this.#viewProps.agentType = AgentType.DRJONES_NETWORK_REQUEST;
500
- this.#viewProps.messages = [];
501
- this.doUpdate();
502
- void this.#doConversation(this.#drJonesNetworkAgent.runFromHistory());
608
+ targetAgentType = AgentType.DRJONES_NETWORK_REQUEST;
503
609
  break;
504
610
  }
505
611
  case 'drjones.performance-panel-context': {
506
- this.#viewOutput.freestylerChatUi?.focusTextInput();
507
612
  Host.userMetrics.actionTaken(Host.UserMetrics.Action.DrJonesOpenedFromPerformancePanel);
508
- this.#viewProps.agentType = AgentType.DRJONES_PERFORMANCE;
509
- this.#viewProps.messages = [];
510
- this.doUpdate();
511
- void this.#doConversation(this.#drJonesPerformanceAgent.runFromHistory());
613
+ targetAgentType = AgentType.DRJONES_PERFORMANCE;
512
614
  break;
513
615
  }
514
616
  case 'drjones.sources-floating-button': {
515
- this.#viewOutput.freestylerChatUi?.focusTextInput();
516
617
  Host.userMetrics.actionTaken(Host.UserMetrics.Action.DrJonesOpenedFromSourcesPanelFloatingButton);
517
- this.#viewProps.agentType = AgentType.DRJONES_FILE;
518
- this.#viewProps.messages = [];
519
- this.doUpdate();
520
- void this.#doConversation(this.#drJonesFileAgent.runFromHistory());
618
+ targetAgentType = AgentType.DRJONES_FILE;
521
619
  break;
522
620
  }
523
621
  case 'drjones.sources-panel-context': {
524
- this.#viewOutput.freestylerChatUi?.focusTextInput();
525
622
  Host.userMetrics.actionTaken(Host.UserMetrics.Action.DrJonesOpenedFromSourcesPanel);
526
- this.#viewProps.agentType = AgentType.DRJONES_FILE;
527
- this.#viewProps.messages = [];
528
- this.doUpdate();
529
- void this.#doConversation(this.#drJonesFileAgent.runFromHistory());
623
+ targetAgentType = AgentType.DRJONES_FILE;
530
624
  break;
531
625
  }
532
626
  }
627
+
628
+ if (!targetAgentType) {
629
+ return;
630
+ }
631
+
632
+ let newAgent = false;
633
+ if (!this.#currentAgent || this.#currentAgent.type !== targetAgentType || this.#currentAgent.isHistoryEntry ||
634
+ targetAgentType === AgentType.DRJONES_PERFORMANCE) {
635
+ this.#currentAgent = this.#createAgent(targetAgentType);
636
+ newAgent = true;
637
+ }
638
+ this.#viewProps.agentType = this.#currentAgent.type;
639
+ this.#viewOutput.freestylerChatUi?.focusTextInput();
640
+ this.#onContextSelectionChanged();
641
+ void this.doUpdate();
642
+ if (newAgent) {
643
+ this.#viewProps.messages = [];
644
+ this.#viewProps.isReadOnly = false;
645
+ void this.#doConversation(this.#currentAgent.runFromHistory());
646
+ }
533
647
  }
534
648
 
535
649
  #onHistoryClicked(event: Event): void {
536
- const contextMenu = new UI.ContextMenu.ContextMenu(event);
650
+ const boundingRect = this.#historyEntriesButton.element.getBoundingClientRect();
651
+ const contextMenu = new UI.ContextMenu.ContextMenu(event, {
652
+ x: boundingRect.left,
653
+ y: boundingRect.bottom,
654
+ useSoftMenu: true,
655
+ });
537
656
 
538
657
  for (const agent of [...this.#agents].reverse()) {
539
658
  if (agent.isEmpty) {
@@ -544,130 +663,161 @@ export class FreestylerPanel extends UI.Panel.Panel {
544
663
  continue;
545
664
  }
546
665
 
547
- contextMenu.defaultSection().appendItem(
548
- title,
549
- () => {
550
- void this.#switchAgent(agent);
551
- },
552
- );
666
+ contextMenu.defaultSection().appendItem(title, () => {
667
+ void this.#switchAgent(agent);
668
+ });
669
+ }
670
+
671
+ const historyEmpty = contextMenu.defaultSection().items.length === 0;
672
+ if (historyEmpty) {
673
+ contextMenu.defaultSection().appendItem(i18nString(UIStrings.noPastConversations), () => {}, {
674
+ disabled: true,
675
+ });
553
676
  }
554
677
 
678
+ contextMenu.footerSection().appendItem(
679
+ i18nString(UIStrings.clearChatHistory),
680
+ () => {
681
+ this.#clearHistory();
682
+ },
683
+ {
684
+ disabled: historyEmpty,
685
+ },
686
+ );
687
+
555
688
  void contextMenu.show();
556
689
  }
557
690
 
691
+ #clearHistory(): void {
692
+ this.#agents = new Set();
693
+ this.#currentAgent = undefined;
694
+ this.#viewProps.messages = [];
695
+ this.#viewProps.agentType = undefined;
696
+ this.#runAbortController.abort();
697
+ void AiHistoryStorage.instance().deleteAll();
698
+ void this.doUpdate();
699
+ }
700
+
558
701
  #onDeleteClicked(): void {
559
- if (!this.#viewProps.agentType) {
560
- return;
702
+ if (this.#currentAgent) {
703
+ this.#agents.delete(this.#currentAgent);
704
+ void AiHistoryStorage.instance().deleteHistoryEntry(this.#currentAgent.id);
705
+ this.#currentAgent = undefined;
706
+ this.#cancel();
561
707
  }
562
708
 
563
- switch (this.#viewProps.agentType) {
564
- case AgentType.FREESTYLER:
565
- this.#agents.delete(this.#freestylerAgent);
566
- this.#freestylerAgent = this.#createFreestylerAgent();
567
- break;
568
- case AgentType.DRJONES_FILE:
569
- this.#agents.delete(this.#drJonesFileAgent);
570
- this.#drJonesFileAgent = this.#createDrJonesFileAgent();
571
- break;
572
- case AgentType.DRJONES_NETWORK_REQUEST:
573
- this.#agents.delete(this.#drJonesNetworkAgent);
574
- this.#drJonesNetworkAgent = this.#createDrJonesNetworkAgent();
575
- break;
576
- case AgentType.DRJONES_PERFORMANCE:
577
- this.#agents.delete(this.#drJonesPerformanceAgent);
578
- this.#drJonesPerformanceAgent = this.#createDrJonesPerformanceAgent();
579
- break;
580
- }
581
709
  this.#viewProps.messages = [];
582
- this.#viewProps.agentType = undefined;
583
- this.doUpdate();
710
+
711
+ this.#selectDefaultAgentIfNeeded();
712
+ this.#onContextSelectionChanged();
713
+ void this.doUpdate();
714
+ UI.ARIAUtils.alert(i18nString(UIStrings.chatDeleted));
584
715
  }
585
716
 
586
717
  async #switchAgent(agent: AiAgent<unknown>): Promise<void> {
587
- switch (agent.type) {
588
- case AgentType.FREESTYLER:
589
- if (this.#freestylerAgent === agent && agent.type === this.#viewProps.agentType) {
590
- return;
591
- }
592
- this.#freestylerAgent = agent as FreestylerAgent;
593
- break;
594
- case AgentType.DRJONES_FILE:
595
- if (this.#drJonesFileAgent === agent && agent.type === this.#viewProps.agentType) {
596
- return;
597
- }
598
- this.#drJonesFileAgent = agent as DrJonesFileAgent;
599
- break;
600
- case AgentType.DRJONES_NETWORK_REQUEST:
601
- if (this.#drJonesNetworkAgent === agent && agent.type === this.#viewProps.agentType) {
602
- return;
603
- }
604
- this.#drJonesNetworkAgent = agent as DrJonesNetworkAgent;
605
- break;
606
- case AgentType.DRJONES_PERFORMANCE:
607
- if (this.#drJonesPerformanceAgent === agent && agent.type === this.#viewProps.agentType) {
608
- return;
609
- }
610
- this.#drJonesPerformanceAgent = agent as DrJonesPerformanceAgent;
611
- break;
718
+ if (this.#currentAgent === agent) {
719
+ return;
612
720
  }
721
+
722
+ this.#currentAgent = agent;
613
723
  this.#viewProps.messages = [];
614
724
  this.#viewProps.agentType = agent.type;
725
+ this.#onContextSelectionChanged();
726
+ this.#viewProps.isReadOnly = true;
615
727
  await this.#doConversation(agent.runFromHistory());
616
728
  }
617
729
 
618
- #clearMessages(): void {
730
+ #handleNewChatRequest(): void {
619
731
  this.#viewProps.messages = [];
620
732
  this.#viewProps.isLoading = false;
621
- switch (this.#viewProps.agentType) {
622
- case AgentType.FREESTYLER:
623
- this.#freestylerAgent = this.#createFreestylerAgent();
624
- break;
625
- case AgentType.DRJONES_FILE:
626
- this.#drJonesFileAgent = this.#createDrJonesFileAgent();
627
- break;
628
- case AgentType.DRJONES_NETWORK_REQUEST:
629
- this.#drJonesNetworkAgent = this.#createDrJonesNetworkAgent();
630
- break;
631
- case AgentType.DRJONES_PERFORMANCE:
632
- this.#drJonesPerformanceAgent = this.#createDrJonesPerformanceAgent();
633
- break;
634
- }
635
-
733
+ this.#currentAgent = undefined;
636
734
  this.#cancel();
637
- this.doUpdate();
638
- UI.ARIAUtils.alert(i18nString(UIStrings.chatCleared));
735
+
736
+ this.#selectDefaultAgentIfNeeded();
737
+ void this.doUpdate();
738
+ UI.ARIAUtils.alert(i18nString(UIStrings.newChatCreated));
739
+ }
740
+
741
+ #handleCrossOriginChatCancellation(): void {
742
+ if (this.#previousSameOriginContext) {
743
+ this.#onContextSelectionChanged(this.#previousSameOriginContext);
744
+ }
639
745
  }
640
746
 
641
747
  #runAbortController = new AbortController();
642
748
  #cancel(): void {
643
749
  this.#runAbortController.abort();
644
750
  this.#viewProps.isLoading = false;
645
- this.doUpdate();
751
+ void this.doUpdate();
646
752
  }
647
753
 
648
- async #startConversation(text: string): Promise<void> {
649
- if (!this.#viewProps.agentType) {
754
+ #onContextSelectionChanged(contextToRestore?: ConversationContext<unknown>): void {
755
+ if (!this.#currentAgent) {
756
+ this.#viewProps.blockedByCrossOrigin = false;
757
+ void this.doUpdate();
650
758
  return;
651
759
  }
652
- this.#runAbortController = new AbortController();
653
- const signal = this.#runAbortController.signal;
760
+ const currentContext = contextToRestore ?? this.#getConversationContext();
761
+ this.#viewProps.selectedContext = currentContext;
762
+ if (!currentContext) {
763
+ this.#viewProps.blockedByCrossOrigin = false;
764
+ this.#viewProps.requiresNewConversation = false;
765
+ void this.doUpdate();
766
+ return;
767
+ }
768
+ this.#viewProps.blockedByCrossOrigin = !currentContext.isOriginAllowed(this.#currentAgent.origin);
769
+ if (!this.#viewProps.blockedByCrossOrigin) {
770
+ this.#previousSameOriginContext = currentContext;
771
+ }
772
+ if (this.#viewProps.blockedByCrossOrigin && this.#previousSameOriginContext) {
773
+ this.#viewProps.onCancelCrossOriginChat = this.#handleCrossOriginChatCancellation.bind(this);
774
+ }
775
+ this.#viewProps.isReadOnly = this.#currentAgent.isHistoryEntry;
776
+ this.#viewProps.requiresNewConversation = this.#currentAgent.type === AgentType.DRJONES_PERFORMANCE &&
777
+ Boolean(this.#currentAgent.context) && this.#currentAgent.context !== currentContext;
778
+ this.#viewProps.stripLinks = this.#viewProps.agentType === AgentType.DRJONES_PERFORMANCE;
779
+ void this.doUpdate();
780
+ }
654
781
 
655
- let runner: AsyncGenerator<ResponseData, void, void>|undefined;
656
- switch (this.#viewProps.agentType) {
782
+ #getConversationContext(): ConversationContext<unknown>|null {
783
+ if (!this.#currentAgent) {
784
+ return null;
785
+ }
786
+ let context: ConversationContext<unknown>|null;
787
+ switch (this.#currentAgent.type) {
657
788
  case AgentType.FREESTYLER:
658
- runner = this.#freestylerAgent.run(text, {signal, selected: this.#viewProps.selectedElement});
789
+ context = this.#selectedElement;
659
790
  break;
660
791
  case AgentType.DRJONES_FILE:
661
- runner = this.#drJonesFileAgent.run(text, {signal, selected: this.#viewProps.selectedFile});
792
+ context = this.#selectedFile;
662
793
  break;
663
794
  case AgentType.DRJONES_NETWORK_REQUEST:
664
- runner = this.#drJonesNetworkAgent.run(text, {signal, selected: this.#viewProps.selectedNetworkRequest});
795
+ context = this.#selectedRequest;
665
796
  break;
666
797
  case AgentType.DRJONES_PERFORMANCE:
667
- runner = this.#drJonesPerformanceAgent.run(text, {signal, selected: this.#viewProps.selectedAiCallTree});
798
+ context = this.#selectedCallTree;
668
799
  break;
669
800
  }
801
+ return context;
802
+ }
670
803
 
804
+ async #startConversation(text: string): Promise<void> {
805
+ if (!this.#currentAgent) {
806
+ return;
807
+ }
808
+ this.#runAbortController = new AbortController();
809
+ const signal = this.#runAbortController.signal;
810
+ const context = this.#getConversationContext();
811
+ // If a different context is provided, it must be from the same origin.
812
+ if (context && !context.isOriginAllowed(this.#currentAgent.origin)) {
813
+ // This error should not be reached. If it happens, some
814
+ // invariants do not hold anymore.
815
+ throw new Error('cross-origin context data should not be included');
816
+ }
817
+ const runner = this.#currentAgent.run(text, {
818
+ signal,
819
+ selected: context,
820
+ });
671
821
  UI.ARIAUtils.alert(lockedString(UIStringsNotTranslate.answerLoading));
672
822
  await this.#doConversation(runner);
673
823
  UI.ARIAUtils.alert(lockedString(UIStringsNotTranslate.answerReady));
@@ -679,6 +829,7 @@ export class FreestylerPanel extends UI.Panel.Panel {
679
829
  steps: [],
680
830
  };
681
831
  let step: Step = {isLoading: true};
832
+ this.#viewProps.isLoading = true;
682
833
  for await (const data of generator) {
683
834
  step.sideEffect = undefined;
684
835
  switch (data.type) {
@@ -687,7 +838,6 @@ export class FreestylerPanel extends UI.Panel.Panel {
687
838
  entity: ChatMessageEntity.USER,
688
839
  text: data.query,
689
840
  });
690
- this.#viewProps.isLoading = true;
691
841
  systemMessage = {
692
842
  entity: ChatMessageEntity.MODEL,
693
843
  steps: [],
@@ -757,13 +907,11 @@ export class FreestylerPanel extends UI.Panel.Panel {
757
907
  systemMessage.steps.pop();
758
908
  }
759
909
  step.isLoading = false;
760
- this.#viewProps.isLoading = false;
761
910
  break;
762
911
  }
763
912
  case ResponseType.ERROR: {
764
913
  systemMessage.error = data.error;
765
914
  systemMessage.rpcId = undefined;
766
- this.#viewProps.isLoading = false;
767
915
  const lastStep = systemMessage.steps.at(-1);
768
916
  if (lastStep) {
769
917
  // Mark the last step as cancelled to make the UI feel better.
@@ -777,9 +925,20 @@ export class FreestylerPanel extends UI.Panel.Panel {
777
925
  }
778
926
  }
779
927
 
780
- this.doUpdate();
781
- this.#viewOutput.freestylerChatUi?.scrollToLastMessage();
928
+ void this.doUpdate();
929
+
930
+ // This handles scrolling to the bottom for live conversations when:
931
+ // * User submits the query & the context step is shown.
932
+ // * There is a side effect dialog shown.
933
+ if (!this.#viewProps.isReadOnly &&
934
+ (data.type === ResponseType.CONTEXT || data.type === ResponseType.SIDE_EFFECT)) {
935
+ this.#viewOutput.freestylerChatUi?.scrollToBottom();
936
+ }
782
937
  }
938
+
939
+ this.#viewProps.isLoading = false;
940
+ this.#viewOutput.freestylerChatUi?.finishTextAnimations();
941
+ void this.doUpdate();
783
942
  }
784
943
  }
785
944