chrome-devtools-frontend 1.0.1376716 → 1.0.1380117

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 (434) hide show
  1. package/config/gni/devtools_grd_files.gni +15 -7
  2. package/config/gni/devtools_image_files.gni +2 -0
  3. package/front_end/Images/src/animation.svg +3 -0
  4. package/front_end/Images/src/brush-2.svg +3 -0
  5. package/front_end/core/common/SettingRegistration.ts +1 -1
  6. package/front_end/core/host/AidaClient.ts +1 -0
  7. package/front_end/core/host/InspectorFrontendHost.ts +4 -0
  8. package/front_end/core/i18n/ByteUtilities.test.ts +34 -0
  9. package/front_end/core/i18n/ByteUtilities.ts +65 -0
  10. package/front_end/core/i18n/NumberFormatter.ts +75 -0
  11. package/front_end/core/i18n/i18n.ts +4 -0
  12. package/front_end/core/i18n/time-utilities.test.ts +20 -2
  13. package/front_end/core/i18n/time-utilities.ts +125 -86
  14. package/front_end/core/platform/NumberUtilities.test.ts +3 -26
  15. package/front_end/core/platform/NumberUtilities.ts +0 -20
  16. package/front_end/core/root/Runtime.ts +6 -3
  17. package/front_end/core/sdk/CPUThrottlingManager.ts +4 -0
  18. package/front_end/core/sdk/CSSContainerQuery.test.ts +10 -16
  19. package/front_end/core/sdk/CSSContainerQuery.ts +3 -15
  20. package/front_end/core/sdk/CSSMatchedStyles.test.ts +4 -0
  21. package/front_end/core/sdk/CSSMatchedStyles.ts +5 -5
  22. package/front_end/core/sdk/CSSModel.ts +18 -0
  23. package/front_end/core/sdk/CSSPropertyParser.test.ts +16 -1
  24. package/front_end/core/sdk/CSSPropertyParser.ts +2 -2
  25. package/front_end/core/sdk/sdk-meta.ts +8 -0
  26. package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshot.ts +3 -3
  27. package/front_end/generated/ARIAProperties.js +4 -0
  28. package/front_end/generated/InspectorBackendCommands.js +8 -6
  29. package/front_end/generated/SupportedCSSProperties.js +17 -4
  30. package/front_end/generated/protocol-mapping.d.ts +15 -1
  31. package/front_end/generated/protocol-proxy-api.d.ts +14 -1
  32. package/front_end/generated/protocol.ts +26 -2
  33. package/front_end/models/extensions/ExtensionAPI.ts +9 -1
  34. package/front_end/models/heap_snapshot_model/HeapSnapshotModel.ts +2 -0
  35. package/front_end/models/javascript_metadata/NativeFunctions.js +8 -21
  36. package/front_end/models/live-metrics/web-vitals-injected/{rollup.config.js → rollup.config.mjs} +1 -1
  37. package/front_end/models/persistence/EditFileSystemView.ts +19 -9
  38. package/front_end/models/persistence/WorkspaceSettingsTab.ts +50 -54
  39. package/front_end/models/persistence/editFileSystemView.css +35 -15
  40. package/front_end/models/persistence/workspaceSettingsTab.css +21 -87
  41. package/front_end/models/timeline_model/timeline_model.ts +0 -6
  42. package/front_end/models/trace/Processor.test.ts +18 -17
  43. package/front_end/models/trace/Processor.ts +10 -14
  44. package/front_end/models/trace/README.md +0 -1
  45. package/front_end/models/{timeline_model → trace/extras}/TimelineJSProfile.ts +19 -29
  46. package/front_end/models/{timeline_model/TimelineModelFilter.test.ts → trace/extras/TraceFilter.test.ts} +15 -17
  47. package/front_end/models/trace/extras/TraceFilter.ts +62 -0
  48. package/front_end/models/{timeline_model/TimelineProfileTree.test.ts → trace/extras/TraceTree.test.ts} +44 -43
  49. package/front_end/models/{timeline_model/TimelineProfileTree.ts → trace/extras/TraceTree.ts} +65 -59
  50. package/front_end/models/trace/extras/extras.ts +3 -0
  51. package/front_end/models/trace/handlers/AnimationHandler.ts +0 -8
  52. package/front_end/models/trace/handlers/ExtensionTraceDataHandler.ts +1 -11
  53. package/front_end/models/trace/handlers/FramesHandler.test.ts +1 -6
  54. package/front_end/models/trace/handlers/FramesHandler.ts +1 -14
  55. package/front_end/models/trace/handlers/GPUHandler.test.ts +0 -2
  56. package/front_end/models/trace/handlers/GPUHandler.ts +1 -25
  57. package/front_end/models/trace/handlers/ImagePaintingHandler.ts +3 -0
  58. package/front_end/models/trace/handlers/InitiatorsHandler.test.ts +0 -1
  59. package/front_end/models/trace/handlers/InitiatorsHandler.ts +0 -20
  60. package/front_end/models/trace/handlers/InvalidationsHandler.test.ts +0 -1
  61. package/front_end/models/trace/handlers/InvalidationsHandler.ts +0 -18
  62. package/front_end/models/trace/handlers/LargestImagePaintHandler.test.ts +2 -2
  63. package/front_end/models/trace/handlers/LargestImagePaintHandler.ts +63 -3
  64. package/front_end/models/trace/handlers/LargestTextPaintHandler.ts +3 -0
  65. package/front_end/models/trace/handlers/LayerTreeHandler.test.ts +0 -2
  66. package/front_end/models/trace/handlers/LayerTreeHandler.ts +1 -18
  67. package/front_end/models/trace/handlers/LayoutShiftsHandler.test.ts +0 -3
  68. package/front_end/models/trace/handlers/LayoutShiftsHandler.ts +1 -20
  69. package/front_end/models/trace/handlers/MemoryHandler.test.ts +0 -1
  70. package/front_end/models/trace/handlers/MemoryHandler.ts +3 -0
  71. package/front_end/models/trace/handlers/MetaHandler.test.ts +1 -32
  72. package/front_end/models/trace/handlers/MetaHandler.ts +2 -30
  73. package/front_end/models/trace/handlers/NetworkRequestsHandler.test.ts +0 -26
  74. package/front_end/models/trace/handlers/NetworkRequestsHandler.ts +4 -23
  75. package/front_end/models/trace/handlers/PageFramesHandler.ts +3 -0
  76. package/front_end/models/trace/handlers/RendererHandler.test.ts +0 -4
  77. package/front_end/models/trace/handlers/RendererHandler.ts +1 -24
  78. package/front_end/models/trace/handlers/SamplesHandler.test.ts +0 -5
  79. package/front_end/models/trace/handlers/SamplesHandler.ts +0 -26
  80. package/front_end/models/trace/handlers/ScreenshotsHandler.test.ts +0 -1
  81. package/front_end/models/trace/handlers/SelectorStatsHandler.ts +3 -0
  82. package/front_end/models/trace/handlers/ServerTimingsHandler.ts +1 -16
  83. package/front_end/models/trace/handlers/Threads.test.ts +1 -2
  84. package/front_end/models/trace/handlers/UserInteractionsHandler.test.ts +4 -27
  85. package/front_end/models/trace/handlers/UserInteractionsHandler.ts +16 -25
  86. package/front_end/models/trace/handlers/UserTimingsHandler.ts +0 -17
  87. package/front_end/models/trace/handlers/WorkersHandler.test.ts +0 -1
  88. package/front_end/models/trace/handlers/WorkersHandler.ts +0 -23
  89. package/front_end/models/trace/handlers/types.ts +1 -8
  90. package/front_end/models/trace/insights/{CumulativeLayoutShift.test.ts → CLSCulprits.test.ts} +21 -21
  91. package/front_end/models/trace/insights/{CumulativeLayoutShift.ts → CLSCulprits.ts} +24 -5
  92. package/front_end/models/trace/insights/Common.ts +5 -55
  93. package/front_end/models/trace/insights/DocumentLatency.test.ts +2 -2
  94. package/front_end/models/trace/insights/DocumentLatency.ts +26 -6
  95. package/front_end/models/trace/insights/FontDisplay.ts +24 -5
  96. package/front_end/models/trace/insights/InteractionToNextPaint.test.ts +1 -1
  97. package/front_end/models/trace/insights/InteractionToNextPaint.ts +26 -6
  98. package/front_end/models/trace/insights/LCPDiscovery.test.ts +58 -0
  99. package/front_end/models/trace/insights/LCPDiscovery.ts +101 -0
  100. package/front_end/models/trace/insights/{LargestContentfulPaint.test.ts → LCPPhases.test.ts} +6 -28
  101. package/front_end/models/trace/insights/{LargestContentfulPaint.ts → LCPPhases.ts} +37 -38
  102. package/front_end/models/trace/insights/{InsightRunners.ts → Models.ts} +4 -3
  103. package/front_end/models/trace/insights/RenderBlocking.test.ts +1 -1
  104. package/front_end/models/trace/insights/RenderBlocking.ts +33 -28
  105. package/front_end/models/trace/insights/SlowCSSSelector.ts +26 -5
  106. package/front_end/models/trace/insights/{ThirdPartyWeb.test.ts → ThirdParties.test.ts} +3 -3
  107. package/front_end/models/trace/insights/{ThirdPartyWeb.ts → ThirdParties.ts} +24 -5
  108. package/front_end/models/trace/insights/Viewport.test.ts +1 -1
  109. package/front_end/models/trace/insights/Viewport.ts +27 -9
  110. package/front_end/models/trace/insights/insights.ts +1 -1
  111. package/front_end/models/trace/insights/types.ts +11 -9
  112. package/front_end/models/trace/types/TraceEvents.ts +51 -22
  113. package/front_end/panels/application/SharedStorageItemsView.test.ts +3 -3
  114. package/front_end/panels/application/SharedStorageItemsView.ts +5 -3
  115. package/front_end/panels/application/StorageView.ts +3 -3
  116. package/front_end/panels/application/components/StorageMetadataView.ts +1 -2
  117. package/front_end/panels/browser_debugger/XHRBreakpointsSidebarPane.ts +34 -31
  118. package/front_end/panels/coverage/CoverageView.ts +3 -3
  119. package/front_end/panels/elements/ComputedStyleModel.ts +9 -2
  120. package/front_end/panels/elements/ComputedStyleWidget.test.ts +72 -0
  121. package/front_end/panels/elements/ComputedStyleWidget.ts +12 -0
  122. package/front_end/panels/elements/ElementStatePaneWidget.test.ts +84 -30
  123. package/front_end/panels/elements/ElementStatePaneWidget.ts +42 -24
  124. package/front_end/panels/elements/ElementsTreeElement.ts +24 -11
  125. package/front_end/panels/elements/MetricsSidebarPane.ts +12 -7
  126. package/front_end/panels/elements/PropertyMatchers.ts +3 -0
  127. package/front_end/panels/elements/StylePropertiesSection.ts +15 -6
  128. package/front_end/panels/elements/StylePropertyTreeElement.test.ts +3 -1
  129. package/front_end/panels/elements/StylePropertyTreeElement.ts +8 -3
  130. package/front_end/panels/elements/stylePropertiesTreeOutline.css +2 -2
  131. package/front_end/panels/explain/components/ConsoleInsight.ts +8 -18
  132. package/front_end/panels/freestyler/AiAgent.test.ts +58 -1
  133. package/front_end/panels/freestyler/AiAgent.ts +58 -3
  134. package/front_end/panels/freestyler/DrJonesFileAgent.test.ts +99 -23
  135. package/front_end/panels/freestyler/DrJonesFileAgent.ts +53 -20
  136. package/front_end/panels/freestyler/DrJonesNetworkAgent.test.ts +15 -7
  137. package/front_end/panels/freestyler/DrJonesNetworkAgent.ts +36 -15
  138. package/front_end/panels/freestyler/DrJonesPerformanceAgent.test.ts +6 -6
  139. package/front_end/panels/freestyler/DrJonesPerformanceAgent.ts +48 -8
  140. package/front_end/panels/freestyler/FreestylerAgent.test.ts +15 -14
  141. package/front_end/panels/freestyler/FreestylerAgent.ts +52 -8
  142. package/front_end/panels/freestyler/FreestylerPanel.test.ts +539 -39
  143. package/front_end/panels/freestyler/FreestylerPanel.ts +349 -215
  144. package/front_end/panels/freestyler/components/FreestylerChatUi.test.ts +126 -34
  145. package/front_end/panels/freestyler/components/FreestylerChatUi.ts +320 -268
  146. package/front_end/panels/freestyler/components/UserActionRow.ts +156 -47
  147. package/front_end/panels/freestyler/components/freestylerChatUi.css +69 -34
  148. package/front_end/panels/freestyler/components/userActionRow.css +40 -67
  149. package/front_end/panels/freestyler/freestyler-meta.ts +3 -11
  150. package/front_end/panels/issues/components/HideIssuesMenu.ts +2 -11
  151. package/front_end/panels/layer_viewer/LayerDetailsView.ts +1 -2
  152. package/front_end/panels/layer_viewer/PaintProfilerView.ts +5 -5
  153. package/front_end/panels/lighthouse/LighthouseReportRenderer.ts +46 -0
  154. package/front_end/panels/mobile_throttling/ThrottlingSettingsTab.ts +26 -17
  155. package/front_end/panels/mobile_throttling/throttlingSettingsTab.css +25 -19
  156. package/front_end/panels/network/BinaryResourceView.ts +6 -7
  157. package/front_end/panels/network/EventSourceMessagesView.ts +1 -1
  158. package/front_end/panels/network/NetworkDataGridNode.ts +3 -3
  159. package/front_end/panels/network/NetworkLogView.ts +7 -8
  160. package/front_end/panels/network/RequestTimingView.test.ts +35 -1
  161. package/front_end/panels/network/RequestTimingView.ts +96 -0
  162. package/front_end/panels/network/ResourceWebSocketFrameView.ts +2 -2
  163. package/front_end/panels/network/networkTimingTable.css +2 -1
  164. package/front_end/panels/performance_monitor/PerformanceMonitor.ts +1 -1
  165. package/front_end/panels/profiler/HeapProfileView.ts +3 -3
  166. package/front_end/panels/profiler/HeapSnapshotView.ts +2 -2
  167. package/front_end/panels/profiler/HeapTimelineOverview.ts +12 -12
  168. package/front_end/panels/profiler/IsolateSelector.ts +3 -4
  169. package/front_end/panels/profiler/ProfileFlameChartDataProvider.ts +1 -1
  170. package/front_end/panels/profiler/ProfileSidebarTreeElement.ts +7 -6
  171. package/front_end/panels/profiler/ProfileView.ts +1 -1
  172. package/front_end/panels/recorder/components/RecordingView.ts +2 -2
  173. package/front_end/panels/recorder/injected/{rollup.config.js → rollup.config.mjs} +1 -1
  174. package/front_end/panels/recorder/recorderController.css +0 -4
  175. package/front_end/panels/security/CookieReportTreeElement.ts +1 -9
  176. package/front_end/panels/security/CookieReportView.ts +120 -0
  177. package/front_end/panels/security/SecurityPanel.ts +8 -2
  178. package/front_end/panels/security/cookieReportView.css +46 -0
  179. package/front_end/panels/security/sidebar.css +1 -2
  180. package/front_end/panels/sensors/LocationsSettingsTab.ts +26 -11
  181. package/front_end/panels/sensors/locationsSettingsTab.css +18 -18
  182. package/front_end/panels/settings/AISettingsTab.ts +6 -15
  183. package/front_end/panels/settings/KeybindsSettingsTab.ts +1 -1
  184. package/front_end/panels/settings/SettingsScreen.ts +61 -56
  185. package/front_end/panels/settings/aiSettingsTab.css +3 -14
  186. package/front_end/panels/settings/components/SyncSection.ts +1 -2
  187. package/front_end/panels/settings/components/syncSection.css +0 -10
  188. package/front_end/panels/settings/frameworkIgnoreListSettingsTab.css +3 -1
  189. package/front_end/panels/settings/keybindsSettingsTab.css +7 -10
  190. package/front_end/panels/settings/settingsScreen.css +27 -125
  191. package/front_end/panels/sources/DebuggerPlugin.ts +9 -4
  192. package/front_end/panels/sources/NavigatorView.ts +11 -13
  193. package/front_end/panels/timeline/ActiveFilters.ts +3 -4
  194. package/front_end/panels/timeline/AnimationsTrackAppender.ts +1 -2
  195. package/front_end/panels/timeline/CountersGraph.ts +2 -4
  196. package/front_end/panels/timeline/EventsTimelineTreeView.ts +7 -8
  197. package/front_end/panels/timeline/README.md +2 -1
  198. package/front_end/panels/timeline/TimelineController.ts +14 -4
  199. package/front_end/panels/timeline/TimelineEventOverview.ts +3 -4
  200. package/front_end/panels/timeline/TimelineFilters.ts +3 -4
  201. package/front_end/panels/timeline/TimelineFlameChartDataProvider.test.ts +1 -1
  202. package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +3 -10
  203. package/front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.ts +1 -2
  204. package/front_end/panels/timeline/TimelineFlameChartView.ts +21 -12
  205. package/front_end/panels/timeline/TimelineLoader.test.ts +1 -2
  206. package/front_end/panels/timeline/TimelineLoader.ts +3 -4
  207. package/front_end/panels/timeline/TimelineMiniMap.ts +10 -0
  208. package/front_end/panels/timeline/TimelinePanel.ts +20 -8
  209. package/front_end/panels/timeline/TimelineTreeView.test.ts +12 -13
  210. package/front_end/panels/timeline/TimelineTreeView.ts +35 -40
  211. package/front_end/panels/timeline/TimelineUIUtils.test.ts +2 -2
  212. package/front_end/panels/timeline/TimelineUIUtils.ts +12 -14
  213. package/front_end/panels/timeline/components/LayoutShiftDetails.ts +6 -7
  214. package/front_end/panels/timeline/components/LiveMetricsView.test.ts +3 -3
  215. package/front_end/panels/timeline/components/LiveMetricsView.ts +14 -26
  216. package/front_end/panels/timeline/components/MetricCard.test.ts +1 -1
  217. package/front_end/panels/timeline/components/MetricCard.ts +46 -0
  218. package/front_end/panels/timeline/components/NetworkRequestDetails.ts +3 -4
  219. package/front_end/panels/timeline/components/SidebarSingleInsightSet.test.ts +2 -0
  220. package/front_end/panels/timeline/components/SidebarSingleInsightSet.ts +41 -36
  221. package/front_end/panels/timeline/components/insights/CLSCulprits.ts +19 -33
  222. package/front_end/panels/timeline/components/insights/DocumentLatency.ts +29 -40
  223. package/front_end/panels/timeline/components/insights/FontDisplay.ts +17 -23
  224. package/front_end/panels/timeline/components/insights/Helpers.ts +12 -16
  225. package/front_end/panels/timeline/components/insights/InteractionToNextPaint.ts +14 -26
  226. package/front_end/panels/timeline/components/insights/LCPDiscovery.ts +25 -37
  227. package/front_end/panels/timeline/components/insights/LCPPhases.ts +20 -47
  228. package/front_end/panels/timeline/components/insights/RenderBlocking.ts +19 -28
  229. package/front_end/panels/timeline/components/insights/SidebarInsight.ts +1 -2
  230. package/front_end/panels/timeline/components/insights/SlowCSSSelector.ts +18 -31
  231. package/front_end/panels/timeline/components/insights/Table.ts +5 -3
  232. package/front_end/panels/timeline/components/insights/ThirdParties.ts +18 -25
  233. package/front_end/panels/timeline/components/insights/Viewport.ts +14 -25
  234. package/front_end/panels/timeline/components/liveMetricsView.css +5 -13
  235. package/front_end/panels/timeline/components/metricCard.css +11 -0
  236. package/front_end/panels/timeline/components/sidebarInsightsTab.css +1 -1
  237. package/front_end/panels/timeline/overlays/OverlaysImpl.test.ts +5 -5
  238. package/front_end/panels/timeline/overlays/OverlaysImpl.ts +13 -12
  239. package/front_end/panels/timeline/timelineFlameChartView.css +1 -1
  240. package/front_end/panels/timeline/utils/AICallTree.test.ts +105 -0
  241. package/front_end/panels/timeline/utils/AICallTree.ts +25 -24
  242. package/front_end/testing/EnvironmentHelpers.ts +5 -18
  243. package/front_end/testing/InsightHelpers.ts +4 -4
  244. package/front_end/testing/TraceHelpers.ts +1 -1
  245. package/front_end/third_party/puppeteer/README.chromium +2 -2
  246. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts +2 -3
  247. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts.map +1 -1
  248. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.js.map +1 -1
  249. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.d.ts +14 -3
  250. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.d.ts.map +1 -1
  251. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.js +16 -2
  252. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.js.map +1 -1
  253. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Input.d.ts +34 -5
  254. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Input.d.ts.map +1 -1
  255. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Input.js +51 -2
  256. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Input.js.map +1 -1
  257. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/ElementHandle.d.ts.map +1 -1
  258. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/ElementHandle.js +10 -8
  259. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/ElementHandle.js.map +1 -1
  260. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.d.ts.map +1 -1
  261. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.js +1 -1
  262. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.js.map +1 -1
  263. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Input.d.ts +14 -4
  264. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Input.d.ts.map +1 -1
  265. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Input.js +57 -23
  266. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Input.js.map +1 -1
  267. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ElementHandle.d.ts +1 -1
  268. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ElementHandle.d.ts.map +1 -1
  269. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ElementHandle.js +13 -10
  270. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ElementHandle.js.map +1 -1
  271. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Input.d.ts +15 -4
  272. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Input.d.ts.map +1 -1
  273. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Input.js +55 -26
  274. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Input.js.map +1 -1
  275. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/CallbackRegistry.d.ts +0 -8
  276. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/CallbackRegistry.d.ts.map +1 -1
  277. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/CallbackRegistry.js +2 -11
  278. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/CallbackRegistry.js.map +1 -1
  279. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConsoleMessage.d.ts +2 -1
  280. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConsoleMessage.d.ts.map +1 -1
  281. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConsoleMessage.js +5 -2
  282. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConsoleMessage.js.map +1 -1
  283. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Errors.d.ts +7 -0
  284. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Errors.d.ts.map +1 -1
  285. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Errors.js +9 -1
  286. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Errors.js.map +1 -1
  287. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/WaitTask.d.ts.map +1 -1
  288. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/WaitTask.js +5 -3
  289. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/WaitTask.js.map +1 -1
  290. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/environment.d.ts +1 -1
  291. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/environment.d.ts.map +1 -1
  292. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/environment.js +0 -3
  293. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/environment.js.map +1 -1
  294. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.d.ts +1 -1
  295. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.js +1 -1
  296. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/version.d.ts +1 -1
  297. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/version.js +1 -1
  298. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.d.ts +1 -1
  299. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.d.ts +3 -3
  300. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +3 -3
  301. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js.map +1 -1
  302. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/Mutex.d.ts +2 -2
  303. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/incremental-id-generator.d.ts +14 -0
  304. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/incremental-id-generator.d.ts.map +1 -0
  305. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/incremental-id-generator.js +18 -0
  306. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/incremental-id-generator.js.map +1 -0
  307. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +51 -10
  308. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +215 -97
  309. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts +2 -3
  310. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts.map +1 -1
  311. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.js.map +1 -1
  312. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.d.ts +14 -3
  313. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.d.ts.map +1 -1
  314. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.js +16 -2
  315. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.js.map +1 -1
  316. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Input.d.ts +34 -5
  317. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Input.d.ts.map +1 -1
  318. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Input.js +51 -2
  319. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Input.js.map +1 -1
  320. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/ElementHandle.d.ts.map +1 -1
  321. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/ElementHandle.js +10 -8
  322. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/ElementHandle.js.map +1 -1
  323. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.d.ts.map +1 -1
  324. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.js +1 -1
  325. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.js.map +1 -1
  326. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Input.d.ts +14 -4
  327. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Input.d.ts.map +1 -1
  328. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Input.js +57 -23
  329. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Input.js.map +1 -1
  330. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ElementHandle.d.ts +1 -1
  331. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ElementHandle.d.ts.map +1 -1
  332. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ElementHandle.js +13 -10
  333. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ElementHandle.js.map +1 -1
  334. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Input.d.ts +15 -4
  335. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Input.d.ts.map +1 -1
  336. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Input.js +55 -26
  337. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Input.js.map +1 -1
  338. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/CallbackRegistry.d.ts +0 -8
  339. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/CallbackRegistry.d.ts.map +1 -1
  340. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/CallbackRegistry.js +1 -9
  341. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/CallbackRegistry.js.map +1 -1
  342. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConsoleMessage.d.ts +2 -1
  343. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConsoleMessage.d.ts.map +1 -1
  344. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConsoleMessage.js +5 -2
  345. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConsoleMessage.js.map +1 -1
  346. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Errors.d.ts +7 -0
  347. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Errors.d.ts.map +1 -1
  348. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Errors.js +7 -0
  349. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Errors.js.map +1 -1
  350. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/WaitTask.d.ts.map +1 -1
  351. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/WaitTask.js +5 -3
  352. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/WaitTask.js.map +1 -1
  353. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/environment.d.ts +1 -1
  354. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/environment.d.ts.map +1 -1
  355. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/environment.js +0 -3
  356. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/environment.js.map +1 -1
  357. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.d.ts +1 -1
  358. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.js +1 -1
  359. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/version.d.ts +1 -1
  360. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/version.js +1 -1
  361. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +3 -3
  362. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +3 -3
  363. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js.map +1 -1
  364. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/incremental-id-generator.d.ts +14 -0
  365. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/incremental-id-generator.d.ts.map +1 -0
  366. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/incremental-id-generator.js +15 -0
  367. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/incremental-id-generator.js.map +1 -0
  368. package/front_end/third_party/puppeteer/package/lib/types.d.ts +51 -10
  369. package/front_end/third_party/puppeteer/package/package.json +4 -4
  370. package/front_end/third_party/puppeteer/package/src/api/Browser.ts +2 -3
  371. package/front_end/third_party/puppeteer/package/src/api/ElementHandle.ts +21 -3
  372. package/front_end/third_party/puppeteer/package/src/api/Input.ts +57 -8
  373. package/front_end/third_party/puppeteer/package/src/bidi/ElementHandle.ts +9 -7
  374. package/front_end/third_party/puppeteer/package/src/bidi/Frame.ts +1 -0
  375. package/front_end/third_party/puppeteer/package/src/bidi/Input.ts +72 -31
  376. package/front_end/third_party/puppeteer/package/src/cdp/ElementHandle.ts +14 -9
  377. package/front_end/third_party/puppeteer/package/src/cdp/Input.ts +71 -26
  378. package/front_end/third_party/puppeteer/package/src/common/CallbackRegistry.ts +1 -15
  379. package/front_end/third_party/puppeteer/package/src/common/ConsoleMessage.ts +8 -1
  380. package/front_end/third_party/puppeteer/package/src/common/Errors.ts +7 -0
  381. package/front_end/third_party/puppeteer/package/src/common/WaitTask.ts +9 -9
  382. package/front_end/third_party/puppeteer/package/src/environment.ts +1 -4
  383. package/front_end/third_party/puppeteer/package/src/generated/injected.ts +1 -1
  384. package/front_end/third_party/puppeteer/package/src/generated/version.ts +1 -1
  385. package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
  386. package/front_end/third_party/puppeteer/package/src/util/incremental-id-generator.ts +20 -0
  387. package/front_end/third_party/puppeteer/puppeteer-tsconfig.json +1 -0
  388. package/front_end/ui/components/buttons/Button.test.ts +14 -0
  389. package/front_end/ui/components/buttons/Button.ts +27 -4
  390. package/front_end/ui/components/cards/card.css +7 -4
  391. package/front_end/ui/components/dialogs/Dialog.ts +2 -4
  392. package/front_end/ui/components/dialogs/ShortcutDialog.ts +15 -13
  393. package/front_end/ui/components/dialogs/dialog.css +2 -6
  394. package/front_end/ui/components/dialogs/shortcutDialog.css +33 -41
  395. package/front_end/ui/components/docs/freestyler/basic.ts +6 -8
  396. package/front_end/ui/components/docs/freestyler/empty_state.ts +6 -8
  397. package/front_end/ui/components/docs/performance_panel/track_example.html +1 -1
  398. package/front_end/ui/components/markdown_view/MarkdownView.test.ts +39 -17
  399. package/front_end/ui/components/markdown_view/MarkdownView.ts +77 -14
  400. package/front_end/ui/components/markdown_view/markdownView.css +15 -0
  401. package/front_end/ui/components/settings/SettingCheckbox.ts +3 -2
  402. package/front_end/ui/legacy/ContextMenu.ts +2 -2
  403. package/front_end/ui/legacy/InplaceEditor.ts +18 -14
  404. package/front_end/ui/legacy/TabbedPane.ts +0 -14
  405. package/front_end/ui/legacy/UIUtils.ts +0 -7
  406. package/front_end/ui/legacy/components/cookie_table/CookiesTable.ts +7 -2
  407. package/front_end/ui/legacy/components/data_grid/DataGrid.ts +8 -4
  408. package/front_end/ui/legacy/components/data_grid/ViewportDataGrid.ts +20 -11
  409. package/front_end/ui/legacy/components/inline_editor/LinkSwatch.test.ts +19 -0
  410. package/front_end/ui/legacy/components/inline_editor/LinkSwatch.ts +1 -1
  411. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +1 -1
  412. package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +5 -22
  413. package/front_end/ui/legacy/components/perf_ui/OverviewGrid.ts +129 -100
  414. package/front_end/ui/legacy/components/perf_ui/TimelineGrid.ts +4 -2
  415. package/front_end/ui/legacy/components/perf_ui/TimelineOverviewCalculator.test.ts +9 -4
  416. package/front_end/ui/legacy/components/perf_ui/TimelineOverviewCalculator.ts +6 -6
  417. package/front_end/ui/legacy/components/perf_ui/TimelineOverviewPane.ts +22 -4
  418. package/front_end/ui/legacy/components/perf_ui/flameChart.css +0 -2
  419. package/front_end/ui/legacy/components/source_frame/BinaryResourceViewFactory.test.ts +49 -0
  420. package/front_end/ui/legacy/components/source_frame/BinaryResourceViewFactory.ts +23 -46
  421. package/front_end/ui/legacy/components/source_frame/ImageView.ts +1 -1
  422. package/front_end/ui/legacy/components/utils/ImagePreview.ts +1 -1
  423. package/front_end/ui/legacy/textPrompt.css +1 -1
  424. package/front_end/ui/legacy/toolbar.css +4 -5
  425. package/front_end/ui/visual_logging/KnownContextValues.ts +174 -0
  426. package/front_end/ui/visual_logging/LoggingConfig.ts +6 -2
  427. package/package.json +7 -6
  428. package/scripts/build/ninja/bundle.gni +3 -3
  429. package/scripts/build/{rollup.config.js → rollup.config.mjs} +4 -4
  430. package/scripts/devtools_paths.py +8 -4
  431. package/scripts/eslint_rules/tests/check_test_definitions_test.js +8 -3
  432. package/scripts/tools/update_goldens_v2.py +1 -1
  433. package/front_end/models/timeline_model/TimelineModelFilter.ts +0 -61
  434. /package/front_end/Images/{rollup.config.js → rollup.config.mjs} +0 -0
@@ -15,7 +15,14 @@ import {describeWithMockConnection} from '../../testing/MockConnection.js';
15
15
  import {createNetworkPanelForMockConnection} from '../../testing/NetworkHelpers.js';
16
16
  import * as Coordinator from '../../ui/components/render_coordinator/render_coordinator.js';
17
17
 
18
- import {allowHeader, DrJonesNetworkAgent, formatHeaders, formatInitiatorUrl, ResponseType} from './freestyler.js';
18
+ import {
19
+ allowHeader,
20
+ DrJonesNetworkAgent,
21
+ formatHeaders,
22
+ formatInitiatorUrl,
23
+ RequestContext,
24
+ ResponseType,
25
+ } from './freestyler.js';
19
26
 
20
27
  const coordinator = Coordinator.RenderCoordinator.RenderCoordinator.instance();
21
28
 
@@ -215,7 +222,8 @@ describeWithMockConnection('DrJonesNetworkAgent', () => {
215
222
  aidaClient: mockAidaClient(generateAnswer),
216
223
  });
217
224
 
218
- const responses = await Array.fromAsync(agent.run('test', {selected: selectedNetworkRequest}));
225
+ const responses =
226
+ await Array.fromAsync(agent.run('test', {selected: new RequestContext(selectedNetworkRequest)}));
219
227
  assert.deepStrictEqual(responses, [
220
228
  {
221
229
  type: ResponseType.USER_QUERY,
@@ -236,7 +244,7 @@ describeWithMockConnection('DrJonesNetworkAgent', () => {
236
244
  {
237
245
  title: 'Timing',
238
246
  text:
239
- 'Queued at (timestamp): 0 μs\nStarted at (timestamp): 8.3 min\nQueueing (duration): 8.3 min\nConnection start (stalled) (duration): 800.00 ms\nRequest sent (duration): 100.00 ms\nDuration (duration): 8.3 min',
247
+ 'Queued at (timestamp): 0 μs\nStarted at (timestamp): 8.4 min\nQueueing (duration): 8.4 min\nConnection start (stalled) (duration): 800.00 ms\nRequest sent (duration): 100.00 ms\nDuration (duration): 8.4 min',
240
248
  },
241
249
  {
242
250
  title: 'Request initiator chain',
@@ -250,7 +258,7 @@ describeWithMockConnection('DrJonesNetworkAgent', () => {
250
258
  {
251
259
  type: ResponseType.QUERYING,
252
260
  query:
253
- '# Selected network request \nRequest: https://www.example.com\n\nRequest headers:\ncontent-type: bar1\n\nResponse headers:\ncontent-type: bar2\nx-forwarded-for: bar3\n\nResponse status: 200 \n\nRequest timing:\nQueued at (timestamp): 0 μs\nStarted at (timestamp): 8.3 min\nQueueing (duration): 8.3 min\nConnection start (stalled) (duration): 800.00 ms\nRequest sent (duration): 100.00 ms\nDuration (duration): 8.3 min\n\nRequest initiator chain:\n- URL: <redacted cross-origin initiator URL>\n\t- URL: https://www.example.com\n\t\t- URL: https://www.example.com/1\n\t\t- URL: https://www.example.com/2\n\n# User request\n\ntest',
261
+ '# Selected network request \nRequest: https://www.example.com\n\nRequest headers:\ncontent-type: bar1\n\nResponse headers:\ncontent-type: bar2\nx-forwarded-for: bar3\n\nResponse status: 200 \n\nRequest timing:\nQueued at (timestamp): 0 μs\nStarted at (timestamp): 8.4 min\nQueueing (duration): 8.4 min\nConnection start (stalled) (duration): 800.00 ms\nRequest sent (duration): 100.00 ms\nDuration (duration): 8.4 min\n\nRequest initiator chain:\n- URL: <redacted cross-origin initiator URL>\n\t- URL: https://www.example.com\n\t\t- URL: https://www.example.com/1\n\t\t- URL: https://www.example.com/2\n\n# User request\n\ntest',
254
262
  },
255
263
  {
256
264
  type: ResponseType.ANSWER,
@@ -274,11 +282,11 @@ x-forwarded-for: bar3
274
282
  Response status: 200 \n
275
283
  Request timing:
276
284
  Queued at (timestamp): 0 μs
277
- Started at (timestamp): 8.3 min
278
- Queueing (duration): 8.3 min
285
+ Started at (timestamp): 8.4 min
286
+ Queueing (duration): 8.4 min
279
287
  Connection start (stalled) (duration): 800.00 ms
280
288
  Request sent (duration): 100.00 ms
281
- Duration (duration): 8.3 min
289
+ Duration (duration): 8.4 min
282
290
 
283
291
  Request initiator chain:
284
292
  - URL: <redacted cross-origin initiator URL>
@@ -8,6 +8,7 @@ import * as i18n from '../../core/i18n/i18n.js';
8
8
  import type * as SDK from '../../core/sdk/sdk.js';
9
9
  import * as Logs from '../../models/logs/logs.js';
10
10
  import * as Network from '../../panels/network/network.js';
11
+ import * as PanelUtils from '../utils/utils.js';
11
12
 
12
13
  import {
13
14
  AgentType,
@@ -15,6 +16,7 @@ import {
15
16
  type AidaRequestOptions,
16
17
  type ContextDetail,
17
18
  type ContextResponse,
19
+ ConversationContext,
18
20
  type ParsedResponse,
19
21
  ResponseType,
20
22
  } from './AiAgent.js';
@@ -97,6 +99,31 @@ const UIStringsNotTranslate = {
97
99
 
98
100
  const lockedString = i18n.i18n.lockedString;
99
101
 
102
+ export class RequestContext extends ConversationContext<SDK.NetworkRequest.NetworkRequest> {
103
+ #request: SDK.NetworkRequest.NetworkRequest;
104
+
105
+ constructor(request: SDK.NetworkRequest.NetworkRequest) {
106
+ super();
107
+ this.#request = request;
108
+ }
109
+
110
+ override getOrigin(): string {
111
+ return new URL(this.#request.url()).origin;
112
+ }
113
+
114
+ override getItem(): SDK.NetworkRequest.NetworkRequest {
115
+ return this.#request;
116
+ }
117
+
118
+ override getIcon(): HTMLElement {
119
+ return PanelUtils.PanelUtils.getIconForNetworkRequest(this.#request);
120
+ }
121
+
122
+ override getTitle(): string {
123
+ return this.#request.name();
124
+ }
125
+ }
126
+
100
127
  /**
101
128
  * One agent instance handles one conversation. Create a new agent
102
129
  * instance for a new conversation.
@@ -107,14 +134,12 @@ export class DrJonesNetworkAgent extends AiAgent<SDK.NetworkRequest.NetworkReque
107
134
  readonly clientFeature = Host.AidaClient.ClientFeature.CHROME_DRJONES_NETWORK_AGENT;
108
135
  get userTier(): string|undefined {
109
136
  const config = Common.Settings.Settings.instance().getHostConfig();
110
- return config.devToolsAiAssistanceNetworkAgent?.userTier ?? config.devToolsExplainThisResourceDogfood?.userTier;
137
+ return config.devToolsAiAssistanceNetworkAgent?.userTier;
111
138
  }
112
139
  get options(): AidaRequestOptions {
113
140
  const config = Common.Settings.Settings.instance().getHostConfig();
114
- const temperature =
115
- config.devToolsAiAssistanceNetworkAgent?.temperature ?? config.devToolsExplainThisResourceDogfood?.temperature;
116
- const modelId =
117
- config.devToolsAiAssistanceNetworkAgent?.modelId ?? config.devToolsExplainThisResourceDogfood?.modelId;
141
+ const temperature = config.devToolsAiAssistanceNetworkAgent?.temperature;
142
+ const modelId = config.devToolsAiAssistanceNetworkAgent?.modelId;
118
143
 
119
144
  return {
120
145
  temperature,
@@ -123,7 +148,7 @@ export class DrJonesNetworkAgent extends AiAgent<SDK.NetworkRequest.NetworkReque
123
148
  }
124
149
 
125
150
  async *
126
- handleContextDetails(selectedNetworkRequest: SDK.NetworkRequest.NetworkRequest|null):
151
+ handleContextDetails(selectedNetworkRequest: ConversationContext<SDK.NetworkRequest.NetworkRequest>|null):
127
152
  AsyncGenerator<ContextResponse, void, void> {
128
153
  if (!selectedNetworkRequest) {
129
154
  return;
@@ -132,14 +157,15 @@ export class DrJonesNetworkAgent extends AiAgent<SDK.NetworkRequest.NetworkReque
132
157
  yield {
133
158
  type: ResponseType.CONTEXT,
134
159
  title: lockedString(UIStringsNotTranslate.analyzingNetworkData),
135
- details: createContextDetailsForDrJonesNetworkAgent(selectedNetworkRequest),
160
+ details: createContextDetailsForDrJonesNetworkAgent(selectedNetworkRequest.getItem()),
136
161
  };
137
162
  }
138
163
 
139
- override async enhanceQuery(query: string, selectedNetworkRequest: SDK.NetworkRequest.NetworkRequest|null):
140
- Promise<string> {
164
+ override async enhanceQuery(
165
+ query: string,
166
+ selectedNetworkRequest: ConversationContext<SDK.NetworkRequest.NetworkRequest>|null): Promise<string> {
141
167
  const networkEnchantmentQuery = selectedNetworkRequest ?
142
- `# Selected network request \n${formatNetworkRequest(selectedNetworkRequest)}\n\n# User request\n\n` :
168
+ `# Selected network request \n${formatNetworkRequest(selectedNetworkRequest.getItem())}\n\n# User request\n\n` :
143
169
  '';
144
170
  return `${networkEnchantmentQuery}${query}`;
145
171
  }
@@ -190,9 +216,7 @@ const allowedHeaders = new Set([
190
216
  'content-disposition',
191
217
  'content-encoding',
192
218
  'content-language',
193
- 'content-length',
194
219
  'content-location',
195
- 'content-md5',
196
220
  'content-range',
197
221
  'content-security-policy',
198
222
  'content-type',
@@ -200,7 +224,6 @@ const allowedHeaders = new Set([
200
224
  'date',
201
225
  'delta-base',
202
226
  'dnt',
203
- 'etag',
204
227
  'expect-ct',
205
228
  'expect',
206
229
  'expires',
@@ -208,9 +231,7 @@ const allowedHeaders = new Set([
208
231
  'front-end-https',
209
232
  'host',
210
233
  'http2-settings',
211
- 'if-match',
212
234
  'if-modified-since',
213
- 'if-none-match',
214
235
  'if-range',
215
236
  'if-unmodified-source',
216
237
  'im',
@@ -7,12 +7,12 @@ import {describeWithEnvironment, getGetHostConfigStub} from '../../testing/Envir
7
7
  import {TraceLoader} from '../../testing/TraceLoader.js';
8
8
  import * as TimelineUtils from '../timeline/utils/utils.js';
9
9
 
10
- import {DrJonesPerformanceAgent, ResponseType} from './freestyler.js';
10
+ import {CallTreeContext, DrJonesPerformanceAgent, ResponseType} from './freestyler.js';
11
11
 
12
12
  describeWithEnvironment('DrJonesPerformanceAgent', () => {
13
13
  function mockHostConfig(modelId?: string, temperature?: number) {
14
14
  getGetHostConfigStub({
15
- devToolsAiAssistancePerformanceAgentDogfood: {
15
+ devToolsAiAssistancePerformanceAgent: {
16
16
  modelId,
17
17
  temperature,
18
18
  },
@@ -133,7 +133,7 @@ describeWithEnvironment('DrJonesPerformanceAgent', () => {
133
133
  aidaClient: mockAidaClient(generateAnswer),
134
134
  });
135
135
 
136
- const responses = await Array.fromAsync(agent.run('test', {selected: aiCallTree}));
136
+ const responses = await Array.fromAsync(agent.run('test', {selected: new CallTreeContext(aiCallTree)}));
137
137
  const expectedData = '\n\n' +
138
138
  `
139
139
 
@@ -198,7 +198,7 @@ self: 3
198
198
  serialize: () => 'Mock call tree',
199
199
  } as unknown as TimelineUtils.AICallTree.AICallTree;
200
200
 
201
- const enhancedQuery1 = await agent.enhanceQuery('What is this?', mockAiCallTree);
201
+ const enhancedQuery1 = await agent.enhanceQuery('What is this?', new CallTreeContext(mockAiCallTree));
202
202
  assert.strictEqual(enhancedQuery1, 'Mock call tree\n\n# User request\n\nWhat is this?');
203
203
 
204
204
  // Create history state of the above query
@@ -227,13 +227,13 @@ self: 3
227
227
  ]]);
228
228
 
229
229
  const query2 = 'But what about this follow-up question?';
230
- const enhancedQuery2 = await agent.enhanceQuery(query2, mockAiCallTree);
230
+ const enhancedQuery2 = await agent.enhanceQuery(query2, new CallTreeContext(mockAiCallTree));
231
231
  assert.strictEqual(enhancedQuery2, query2);
232
232
  assert.isFalse(enhancedQuery2.includes(mockAiCallTree.serialize()));
233
233
 
234
234
  // Just making sure any subsequent chat doesnt include it either.
235
235
  const query3 = 'And this 3rd question?';
236
- const enhancedQuery3 = await agent.enhanceQuery(query3, mockAiCallTree);
236
+ const enhancedQuery3 = await agent.enhanceQuery(query3, new CallTreeContext(mockAiCallTree));
237
237
  assert.strictEqual(enhancedQuery3, query3);
238
238
  assert.isFalse(enhancedQuery3.includes(mockAiCallTree.serialize()));
239
239
  });
@@ -5,13 +5,15 @@
5
5
  import * as Common from '../../core/common/common.js';
6
6
  import * as Host from '../../core/host/host.js';
7
7
  import * as i18n from '../../core/i18n/i18n.js';
8
- import type * as TimelineUtils from '../../panels/timeline/utils/utils.js';
8
+ import * as TimelineUtils from '../../panels/timeline/utils/utils.js';
9
+ import * as PanelUtils from '../utils/utils.js';
9
10
 
10
11
  import {
11
12
  AgentType,
12
13
  AiAgent,
13
14
  type AidaRequestOptions,
14
15
  type ContextResponse,
16
+ ConversationContext,
15
17
  type ParsedResponse,
16
18
  ResponseType,
17
19
  } from './AiAgent.js';
@@ -120,6 +122,43 @@ const UIStringsNotTranslate = {
120
122
 
121
123
  const lockedString = i18n.i18n.lockedString;
122
124
 
125
+ export class CallTreeContext extends ConversationContext<TimelineUtils.AICallTree.AICallTree> {
126
+ #callTree: TimelineUtils.AICallTree.AICallTree;
127
+
128
+ constructor(callTree: TimelineUtils.AICallTree.AICallTree) {
129
+ super();
130
+ this.#callTree = callTree;
131
+ }
132
+
133
+ override getOrigin(): string {
134
+ // TODO: implement cross-origin checks for the PerformanceAgent.
135
+ return '';
136
+ }
137
+
138
+ override getItem(): TimelineUtils.AICallTree.AICallTree {
139
+ return this.#callTree;
140
+ }
141
+
142
+ override getIcon(): HTMLElement {
143
+ const iconData = {
144
+ iconName: 'performance',
145
+ color: 'var(--sys-color-on-surface-subtle)',
146
+ };
147
+ const icon = PanelUtils.PanelUtils.createIconElement(iconData, 'Performance');
148
+ icon.classList.add('icon');
149
+ return icon;
150
+ }
151
+
152
+ override getTitle(): string {
153
+ const {event} = this.#callTree.selectedNode;
154
+ if (!event) {
155
+ return 'unknown';
156
+ }
157
+
158
+ return TimelineUtils.EntryName.nameForEntry(event);
159
+ }
160
+ }
161
+
123
162
  /**
124
163
  * One agent instance handles one conversation. Create a new agent
125
164
  * instance for a new conversation.
@@ -130,12 +169,12 @@ export class DrJonesPerformanceAgent extends AiAgent<TimelineUtils.AICallTree.AI
130
169
  readonly clientFeature = Host.AidaClient.ClientFeature.CHROME_DRJONES_PERFORMANCE_AGENT;
131
170
  get userTier(): string|undefined {
132
171
  const config = Common.Settings.Settings.instance().getHostConfig();
133
- return config.devToolsAiAssistancePerformanceAgentDogfood?.userTier;
172
+ return config.devToolsAiAssistancePerformanceAgent?.userTier;
134
173
  }
135
174
  get options(): AidaRequestOptions {
136
175
  const config = Common.Settings.Settings.instance().getHostConfig();
137
- const temperature = config.devToolsAiAssistancePerformanceAgentDogfood?.temperature;
138
- const modelId = config.devToolsAiAssistancePerformanceAgentDogfood?.modelId;
176
+ const temperature = config.devToolsAiAssistancePerformanceAgent?.temperature;
177
+ const modelId = config.devToolsAiAssistancePerformanceAgent?.modelId;
139
178
 
140
179
  return {
141
180
  temperature,
@@ -144,7 +183,7 @@ export class DrJonesPerformanceAgent extends AiAgent<TimelineUtils.AICallTree.AI
144
183
  }
145
184
 
146
185
  async *
147
- handleContextDetails(aiCallTree: TimelineUtils.AICallTree.AICallTree|null):
186
+ handleContextDetails(aiCallTree: ConversationContext<TimelineUtils.AICallTree.AICallTree>|null):
148
187
  AsyncGenerator<ContextResponse, void, void> {
149
188
  yield {
150
189
  type: ResponseType.CONTEXT,
@@ -152,14 +191,15 @@ export class DrJonesPerformanceAgent extends AiAgent<TimelineUtils.AICallTree.AI
152
191
  details: [
153
192
  {
154
193
  title: 'Selected call tree',
155
- text: aiCallTree?.serialize() ?? '',
194
+ text: aiCallTree?.getItem().serialize() ?? '',
156
195
  },
157
196
  ],
158
197
  };
159
198
  }
160
199
 
161
- override async enhanceQuery(query: string, aiCallTree: TimelineUtils.AICallTree.AICallTree|null): Promise<string> {
162
- const treeStr = aiCallTree?.serialize();
200
+ override async enhanceQuery(query: string, aiCallTree: ConversationContext<TimelineUtils.AICallTree.AICallTree>|null):
201
+ Promise<string> {
202
+ const treeStr = aiCallTree?.getItem().serialize();
163
203
 
164
204
  // Collect the queries from previous messages in this session
165
205
  const prevQueries: string[] = [];
@@ -616,7 +616,7 @@ c`;
616
616
  });
617
617
 
618
618
  promise.resolve(true);
619
- await Array.fromAsync(agent.run('test', {selected: element}));
619
+ await Array.fromAsync(agent.run('test', {selected: new Freestyler.NodeContext(element)}));
620
620
 
621
621
  sinon.assert.match(execJs.getCall(0).args[1], sinon.match({throwOnSideEffect: true}));
622
622
  });
@@ -655,7 +655,7 @@ c`;
655
655
 
656
656
  });
657
657
  promise.resolve(true);
658
- await Array.fromAsync(agent.run('test', {selected: element}));
658
+ await Array.fromAsync(agent.run('test', {selected: new Freestyler.NodeContext(element)}));
659
659
 
660
660
  assert.strictEqual(execJs.getCalls().length, 2);
661
661
  sinon.assert.match(execJs.getCall(1).args[1], sinon.match({throwOnSideEffect: false}));
@@ -694,7 +694,7 @@ c`;
694
694
 
695
695
  });
696
696
  promise.resolve(false);
697
- const responses = await Array.fromAsync(agent.run('test', {selected: element}));
697
+ const responses = await Array.fromAsync(agent.run('test', {selected: new Freestyler.NodeContext(element)}));
698
698
 
699
699
  const actionStep = responses.find(response => response.type === Freestyler.ResponseType.ACTION)!;
700
700
 
@@ -732,7 +732,7 @@ c`;
732
732
 
733
733
  });
734
734
 
735
- const result = await Array.fromAsync(agent.run('test', {selected: element}));
735
+ const result = await Array.fromAsync(agent.run('test', {selected: new Freestyler.NodeContext(element)}));
736
736
  const actionSteps = result.filter(step => {
737
737
  return step.type === Freestyler.ResponseType.ACTION;
738
738
  });
@@ -757,7 +757,7 @@ c`;
757
757
  execJs,
758
758
  });
759
759
 
760
- const responses = await Array.fromAsync(agent.run('test', {selected: element}));
760
+ const responses = await Array.fromAsync(agent.run('test', {selected: new Freestyler.NodeContext(element)}));
761
761
  assert.deepStrictEqual(responses, [
762
762
  {
763
763
  type: Freestyler.ResponseType.USER_QUERY,
@@ -814,7 +814,7 @@ c`;
814
814
 
815
815
  });
816
816
 
817
- const responses = await Array.fromAsync(agent.run('test', {selected: element}));
817
+ const responses = await Array.fromAsync(agent.run('test', {selected: new Freestyler.NodeContext(element)}));
818
818
  assert.deepStrictEqual(responses, [
819
819
  {
820
820
  type: Freestyler.ResponseType.USER_QUERY,
@@ -864,7 +864,7 @@ c`;
864
864
 
865
865
  });
866
866
 
867
- const responses = await Array.fromAsync(agent.run('test', {selected: element}));
867
+ const responses = await Array.fromAsync(agent.run('test', {selected: new Freestyler.NodeContext(element)}));
868
868
  assert.deepStrictEqual(responses, [
869
869
  {
870
870
  type: Freestyler.ResponseType.USER_QUERY,
@@ -913,7 +913,7 @@ c`;
913
913
 
914
914
  });
915
915
 
916
- const responses = await Array.fromAsync(agent.run('test', {selected: element}));
916
+ const responses = await Array.fromAsync(agent.run('test', {selected: new Freestyler.NodeContext(element)}));
917
917
  assert.deepStrictEqual(responses, [
918
918
  {
919
919
  type: Freestyler.ResponseType.USER_QUERY,
@@ -956,7 +956,7 @@ c`;
956
956
  aidaClient: mockAidaClient(generateNothing),
957
957
  execJs,
958
958
  });
959
- const responses = await Array.fromAsync(agent.run('test', {selected: element}));
959
+ const responses = await Array.fromAsync(agent.run('test', {selected: new Freestyler.NodeContext(element)}));
960
960
  assert.deepStrictEqual(responses, [
961
961
  {
962
962
  type: Freestyler.ResponseType.USER_QUERY,
@@ -1019,7 +1019,7 @@ ANSWER: this is the answer`,
1019
1019
  execJs,
1020
1020
 
1021
1021
  });
1022
- const responses = await Array.fromAsync(agent.run('test', {selected: element}));
1022
+ const responses = await Array.fromAsync(agent.run('test', {selected: new Freestyler.NodeContext(element)}));
1023
1023
  assert.deepStrictEqual(responses, [
1024
1024
  {
1025
1025
  type: Freestyler.ResponseType.USER_QUERY,
@@ -1092,7 +1092,7 @@ ANSWER: this is the answer`,
1092
1092
 
1093
1093
  });
1094
1094
 
1095
- await Array.fromAsync(agent.run('test', {selected: element}));
1095
+ await Array.fromAsync(agent.run('test', {selected: new Freestyler.NodeContext(element)}));
1096
1096
 
1097
1097
  assert.deepStrictEqual(agent.chatHistoryForTesting, [
1098
1098
  {
@@ -1161,7 +1161,8 @@ ANSWER: this is the answer`,
1161
1161
 
1162
1162
  const controller = new AbortController();
1163
1163
  controller.abort();
1164
- await Array.fromAsync(agent.run('test', {selected: element, signal: controller.signal}));
1164
+ await Array.fromAsync(
1165
+ agent.run('test', {selected: new Freestyler.NodeContext(element), signal: controller.signal}));
1165
1166
 
1166
1167
  assert.deepStrictEqual(agent.chatHistoryForTesting, []);
1167
1168
  });
@@ -1209,7 +1210,7 @@ ANSWER: this is the answer`,
1209
1210
  createExtensionScope,
1210
1211
  execJs,
1211
1212
  });
1212
- const responses = await Array.fromAsync(agent.run('test', {selected: element}));
1213
+ const responses = await Array.fromAsync(agent.run('test', {selected: new Freestyler.NodeContext(element)}));
1213
1214
  const actionStep = responses.find(response => response.type === Freestyler.ResponseType.ACTION)!;
1214
1215
  assert.strictEqual(actionStep.output, 'Error: JavaScript execution is currently disabled.');
1215
1216
  assert.strictEqual(execJs.getCalls().length, 0);
@@ -1231,7 +1232,7 @@ ANSWER: this is the answer`,
1231
1232
  createExtensionScope,
1232
1233
  execJs,
1233
1234
  });
1234
- const responses = await Array.fromAsync(agent.run('test', {selected: element}));
1235
+ const responses = await Array.fromAsync(agent.run('test', {selected: new Freestyler.NodeContext(element)}));
1235
1236
  const actionStep = responses.find(response => response.type === Freestyler.ResponseType.ACTION)!;
1236
1237
  assert.strictEqual(
1237
1238
  actionStep.output, 'Error: JavaScript execution that modifies the page is currently disabled.');
@@ -9,6 +9,7 @@ import * as Platform from '../../core/platform/platform.js';
9
9
  import * as Root from '../../core/root/root.js';
10
10
  import * as SDK from '../../core/sdk/sdk.js';
11
11
  import * as UI from '../../ui/legacy/legacy.js';
12
+ import * as LitHtml from '../../ui/lit-html/lit-html.js';
12
13
 
13
14
  import {
14
15
  type ActionResponse,
@@ -16,6 +17,7 @@ import {
16
17
  AiAgent,
17
18
  type AidaRequestOptions,
18
19
  type ContextResponse,
20
+ ConversationContext,
19
21
  debugLog,
20
22
  isDebugMode,
21
23
  type ParsedResponse,
@@ -193,6 +195,7 @@ async function executeJsCode(
193
195
  }
194
196
 
195
197
  const MAX_OBSERVATION_BYTE_LENGTH = 25_000;
198
+ const OBSERVATION_TIMEOUT = 5_000;
196
199
 
197
200
  type CreateExtensionScopeFunction = (changes: ChangeManager) => {
198
201
  install(): Promise<void>, uninstall(): Promise<void>,
@@ -207,6 +210,38 @@ type AgentOptions = {
207
210
  execJs?: typeof executeJsCode,
208
211
  };
209
212
 
213
+ export class NodeContext extends ConversationContext<SDK.DOMModel.DOMNode> {
214
+ #node: SDK.DOMModel.DOMNode;
215
+
216
+ constructor(node: SDK.DOMModel.DOMNode) {
217
+ super();
218
+ this.#node = node;
219
+ }
220
+
221
+ getOrigin(): string {
222
+ const ownerDocument = this.#node.ownerDocument;
223
+ if (!ownerDocument) {
224
+ // The node is detached from a document.
225
+ return 'detached';
226
+ }
227
+ return new URL(ownerDocument.documentURL).origin;
228
+ }
229
+
230
+ getItem(): SDK.DOMModel.DOMNode {
231
+ return this.#node;
232
+ }
233
+
234
+ override getIcon(): HTMLElement {
235
+ return document.createElement('span');
236
+ }
237
+
238
+ override getTitle(): string|ReturnType<typeof LitHtml.Directives.until> {
239
+ return LitHtml.Directives.until(
240
+ Common.Linkifier.Linkifier.linkify(this.#node),
241
+ );
242
+ }
243
+ }
244
+
210
245
  /**
211
246
  * One agent instance handles one conversation. Create a new agent
212
247
  * instance for a new conversation.
@@ -430,10 +465,16 @@ export class FreestylerAgent extends AiAgent<SDK.DOMModel.DOMNode> {
430
465
  canceled: true,
431
466
  };
432
467
  }
433
- const result = await this.#execJs(
434
- functionDeclaration,
435
- {throwOnSideEffect},
436
- );
468
+ const result = await Promise.race([
469
+ this.#execJs(
470
+ functionDeclaration,
471
+ {throwOnSideEffect},
472
+ ),
473
+ new Promise<never>((_, reject) => {
474
+ setTimeout(
475
+ () => reject(new Error('Script execution exceeded the maximum allowed time.')), OBSERVATION_TIMEOUT);
476
+ }),
477
+ ]);
437
478
  const byteCount = Platform.StringUtilities.countWtf8Bytes(result);
438
479
  Host.userMetrics.freestylerEvalResponseSize(byteCount);
439
480
  if (byteCount > MAX_OBSERVATION_BYTE_LENGTH) {
@@ -606,7 +647,8 @@ export class FreestylerAgent extends AiAgent<SDK.DOMModel.DOMNode> {
606
647
  }
607
648
 
608
649
  override async *
609
- handleContextDetails(selectedElement: SDK.DOMModel.DOMNode|null): AsyncGenerator<ContextResponse, void, void> {
650
+ handleContextDetails(selectedElement: ConversationContext<SDK.DOMModel.DOMNode>|null):
651
+ AsyncGenerator<ContextResponse, void, void> {
610
652
  if (!selectedElement) {
611
653
  return;
612
654
  }
@@ -615,14 +657,16 @@ export class FreestylerAgent extends AiAgent<SDK.DOMModel.DOMNode> {
615
657
  title: lockedString(UIStringsNotTranslate.analyzingThePrompt),
616
658
  details: [{
617
659
  title: lockedString(UIStringsNotTranslate.dataUsed),
618
- text: await FreestylerAgent.describeElement(selectedElement),
660
+ text: await FreestylerAgent.describeElement(selectedElement.getItem()),
619
661
  }],
620
662
  };
621
663
  }
622
664
 
623
- override async enhanceQuery(query: string, selectedElement: SDK.DOMModel.DOMNode|null): Promise<string> {
665
+ override async enhanceQuery(query: string, selectedElement: ConversationContext<SDK.DOMModel.DOMNode>|null):
666
+ Promise<string> {
624
667
  const elementEnchantmentQuery = selectedElement ?
625
- `# Inspected element\n\n${await FreestylerAgent.describeElement(selectedElement)}\n\n# User request\n\n` :
668
+ `# Inspected element\n\n${
669
+ await FreestylerAgent.describeElement(selectedElement.getItem())}\n\n# User request\n\n` :
626
670
  '';
627
671
  return `${elementEnchantmentQuery}QUERY: ${query}`;
628
672
  }