chrome-devtools-frontend 1.0.1550444 → 1.0.1553956

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 (455) hide show
  1. package/docs/styleguide/ux/components.md +34 -8
  2. package/eslint.config.mjs +7 -0
  3. package/front_end/Images/generate-css-vars.js +8 -4
  4. package/front_end/core/common/Settings.ts +20 -8
  5. package/front_end/core/host/UserMetrics.ts +3 -1
  6. package/front_end/core/i18n/collect-ui-strings.js +19 -10
  7. package/front_end/core/i18n/generate-locales-js.js +4 -4
  8. package/front_end/core/protocol_client/CDPConnection.ts +1 -0
  9. package/front_end/core/protocol_client/InspectorBackend.ts +5 -1
  10. package/front_end/core/root/Runtime.ts +0 -12
  11. package/front_end/core/sdk/DOMModel.ts +38 -3
  12. package/front_end/core/sdk/DebuggerModel.ts +9 -4
  13. package/front_end/core/sdk/IsolateManager.ts +7 -0
  14. package/front_end/core/sdk/PageResourceLoader.ts +3 -3
  15. package/front_end/core/sdk/RehydratingConnection.ts +5 -2
  16. package/front_end/entrypoints/main/MainImpl.ts +28 -10
  17. package/front_end/generated/SupportedCSSProperties.js +14 -0
  18. package/front_end/models/ai_assistance/AiConversation.ts +94 -4
  19. package/front_end/models/ai_assistance/agents/AiAgent.ts +30 -15
  20. package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +179 -41
  21. package/front_end/models/ai_assistance/agents/StylingAgent.snapshot.txt +5 -0
  22. package/front_end/models/ai_assistance/agents/StylingAgent.ts +62 -0
  23. package/front_end/models/ai_assistance/data_formatters/NetworkRequestFormatter.ts +2 -1
  24. package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.ts +1 -7
  25. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +124 -12
  26. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +125 -30
  27. package/front_end/models/ai_assistance/performance/AICallTree.ts +42 -0
  28. package/front_end/models/ai_code_generation/AiCodeGeneration.ts +12 -0
  29. package/front_end/models/issues_manager/Issue.ts +1 -0
  30. package/front_end/models/issues_manager/IssueAggregator.ts +9 -0
  31. package/front_end/models/issues_manager/IssuesManager.ts +5 -0
  32. package/front_end/models/issues_manager/PermissionElementIssue.ts +262 -0
  33. package/front_end/models/issues_manager/descriptions/permissionElementActivationDisabled.md +7 -0
  34. package/front_end/models/issues_manager/descriptions/permissionElementActivationDisabledWithOccluder.md +9 -0
  35. package/front_end/models/issues_manager/descriptions/permissionElementActivationDisabledWithOccluderParent.md +9 -0
  36. package/front_end/models/issues_manager/descriptions/permissionElementCspFrameAncestorsMissing.md +5 -0
  37. package/front_end/models/issues_manager/descriptions/permissionElementFencedFrameDisallowed.md +5 -0
  38. package/front_end/models/issues_manager/descriptions/permissionElementFontSizeTooLarge.md +5 -0
  39. package/front_end/models/issues_manager/descriptions/permissionElementFontSizeTooSmall.md +5 -0
  40. package/front_end/models/issues_manager/descriptions/permissionElementGeolocationDeprecated.md +5 -0
  41. package/front_end/models/issues_manager/descriptions/permissionElementInsetBoxShadowUnsupported.md +5 -0
  42. package/front_end/models/issues_manager/descriptions/permissionElementInvalidDisplayStyle.md +5 -0
  43. package/front_end/models/issues_manager/descriptions/permissionElementInvalidSizeValue.md +5 -0
  44. package/front_end/models/issues_manager/descriptions/permissionElementInvalidType.md +5 -0
  45. package/front_end/models/issues_manager/descriptions/permissionElementInvalidTypeActivation.md +5 -0
  46. package/front_end/models/issues_manager/descriptions/permissionElementLowContrast.md +5 -0
  47. package/front_end/models/issues_manager/descriptions/permissionElementNonOpaqueColor.md +5 -0
  48. package/front_end/models/issues_manager/descriptions/permissionElementPaddingBottomUnsupported.md +6 -0
  49. package/front_end/models/issues_manager/descriptions/permissionElementPaddingRightUnsupported.md +6 -0
  50. package/front_end/models/issues_manager/descriptions/permissionElementPermissionsPolicyBlocked.md +5 -0
  51. package/front_end/models/issues_manager/descriptions/permissionElementRegistrationFailed.md +5 -0
  52. package/front_end/models/issues_manager/descriptions/permissionElementRequestInProgress.md +5 -0
  53. package/front_end/models/issues_manager/descriptions/permissionElementSecurityChecksFailed.md +5 -0
  54. package/front_end/models/issues_manager/descriptions/permissionElementTypeNotSupported.md +5 -0
  55. package/front_end/models/issues_manager/descriptions/permissionElementUntrustedEvent.md +7 -0
  56. package/front_end/models/issues_manager/issues_manager.ts +2 -0
  57. package/front_end/models/javascript_metadata/NativeFunctions.js +8 -0
  58. package/front_end/models/stack_trace/StackTraceModel.ts +37 -18
  59. package/front_end/models/trace/Processor.ts +14 -15
  60. package/front_end/models/trace/insights/Common.ts +2 -8
  61. package/front_end/models/trace/insights/types.ts +12 -2
  62. package/front_end/models/trace/types/TraceEvents.ts +4 -1
  63. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +28 -6
  64. package/front_end/panels/ai_assistance/ai_assistance-meta.ts +9 -23
  65. package/front_end/panels/ai_assistance/ai_assistance.ts +1 -0
  66. package/front_end/panels/ai_assistance/components/ChatView.ts +78 -2
  67. package/front_end/panels/ai_assistance/components/CollapsibleAssistanceContentWidget.ts +71 -0
  68. package/front_end/panels/ai_assistance/components/PerformanceAgentFlameChart.ts +126 -0
  69. package/front_end/panels/ai_assistance/components/PerformanceAgentMarkdownRenderer.ts +131 -2
  70. package/front_end/panels/ai_assistance/components/chatView.css +28 -0
  71. package/front_end/panels/ai_assistance/components/collapsibleAssistanceContentWidget.css +33 -0
  72. package/front_end/panels/application/AppManifestView.ts +1007 -521
  73. package/front_end/panels/application/ApplicationPanelSidebar.ts +1 -17
  74. package/front_end/panels/application/ExtensionStorageItemsView.ts +3 -5
  75. package/front_end/panels/application/KeyValueStorageItemsView.ts +3 -2
  76. package/front_end/panels/application/components/BackForwardCacheView.ts +2 -2
  77. package/front_end/panels/application/preloading/PreloadingView.ts +46 -45
  78. package/front_end/panels/application/preloading/components/MismatchedPreloadingGrid.ts +80 -75
  79. package/front_end/panels/application/preloading/components/PreloadingDisabledInfobar.ts +169 -133
  80. package/front_end/panels/application/preloading/components/RuleSetDetailsView.ts +74 -93
  81. package/front_end/panels/application/preloading/components/RuleSetGrid.ts +142 -117
  82. package/front_end/panels/application/preloading/components/UsedPreloadingView.ts +51 -11
  83. package/front_end/panels/application/preloading/components/components.ts +0 -2
  84. package/front_end/panels/common/Annotation.ts +184 -0
  85. package/front_end/panels/common/AnnotationManager.ts +148 -11
  86. package/front_end/panels/common/ExtensionView.ts +47 -0
  87. package/front_end/panels/common/PersistenceUtils.ts +22 -25
  88. package/front_end/panels/common/annotation.css +40 -0
  89. package/front_end/panels/common/common.ts +1 -0
  90. package/front_end/panels/console/ConsoleInsightTeaser.ts +187 -5
  91. package/front_end/panels/console/ConsolePinPane.ts +437 -217
  92. package/front_end/panels/console/ConsolePrompt.ts +32 -223
  93. package/front_end/panels/console/ConsoleView.ts +67 -66
  94. package/front_end/panels/console/ConsoleViewMessage.ts +8 -3
  95. package/front_end/panels/console/consoleInsightTeaser.css +23 -0
  96. package/front_end/panels/console/consoleView.css +1 -1
  97. package/front_end/panels/elements/AdoptedStyleSheetTreeElement.ts +89 -0
  98. package/front_end/panels/elements/ColorSwatchPopoverIcon.ts +2 -2
  99. package/front_end/panels/elements/ComputedStyleWidget.ts +16 -5
  100. package/front_end/panels/elements/ElementsPanel.ts +38 -12
  101. package/front_end/panels/elements/ElementsSidebarPane.ts +1 -3
  102. package/front_end/panels/elements/ElementsTreeElement.ts +313 -353
  103. package/front_end/panels/elements/ElementsTreeOutline.ts +39 -13
  104. package/front_end/panels/elements/StylePropertyTreeElement.ts +15 -14
  105. package/front_end/panels/elements/StylesSidebarPane.ts +1 -1
  106. package/front_end/panels/emulation/MediaQueryInspector.ts +171 -125
  107. package/front_end/panels/explain/components/ConsoleInsight.ts +175 -150
  108. package/front_end/panels/explain/components/consoleInsight.css +348 -347
  109. package/front_end/panels/issues/AffectedPermissionElementsView.ts +46 -0
  110. package/front_end/panels/issues/IssueView.ts +2 -0
  111. package/front_end/panels/issues/IssuesPane.ts +6 -0
  112. package/front_end/panels/layer_viewer/LayerDetailsView.ts +165 -149
  113. package/front_end/panels/layer_viewer/Layers3DView.ts +131 -78
  114. package/front_end/panels/lighthouse/LighthouseStatusView.ts +149 -100
  115. package/front_end/panels/linear_memory_inspector/components/LinearMemoryHighlightChipList.ts +90 -64
  116. package/front_end/panels/linear_memory_inspector/components/LinearMemoryInspector.ts +25 -34
  117. package/front_end/panels/linear_memory_inspector/components/LinearMemoryValueInterpreter.ts +60 -44
  118. package/front_end/panels/linear_memory_inspector/components/ValueInterpreterDisplay.ts +170 -151
  119. package/front_end/panels/linear_memory_inspector/components/ValueInterpreterSettings.ts +50 -51
  120. package/front_end/panels/linear_memory_inspector/components/valueInterpreterDisplay.css +0 -13
  121. package/front_end/panels/linear_memory_inspector/components/valueInterpreterSettings.css +20 -18
  122. package/front_end/panels/mobile_throttling/CalibrationController.ts +3 -1
  123. package/front_end/panels/network/NetworkDataGridNode.ts +14 -6
  124. package/front_end/panels/network/NetworkItemView.ts +42 -3
  125. package/front_end/panels/network/NetworkLogView.ts +10 -11
  126. package/front_end/panels/network/NetworkPanel.ts +63 -1
  127. package/front_end/panels/network/RequestInitiatorView.ts +146 -113
  128. package/front_end/panels/network/components/RequestHeaderSection.css +51 -50
  129. package/front_end/panels/network/components/RequestHeaderSection.ts +81 -71
  130. package/front_end/panels/network/components/RequestHeadersView.css +1 -1
  131. package/front_end/panels/network/components/RequestHeadersView.ts +26 -11
  132. package/front_end/panels/network/components/RequestTrustTokensView.css +24 -14
  133. package/front_end/panels/network/components/RequestTrustTokensView.ts +144 -140
  134. package/front_end/panels/profiler/IsolateSelector.ts +2 -1
  135. package/front_end/panels/protocol_monitor/ProtocolMonitor.ts +49 -33
  136. package/front_end/panels/recorder/RecorderController.ts +2 -3
  137. package/front_end/panels/recorder/components/ControlButton.ts +68 -34
  138. package/front_end/panels/recorder/components/CreateRecordingView.ts +9 -6
  139. package/front_end/panels/recorder/components/RecordingView.ts +81 -88
  140. package/front_end/panels/recorder/components/ReplaySection.ts +226 -145
  141. package/front_end/panels/recorder/{controllers → components}/SelectorPicker.ts +129 -52
  142. package/front_end/panels/recorder/components/StepEditor.ts +21 -67
  143. package/front_end/panels/recorder/components/StepView.ts +222 -180
  144. package/front_end/panels/recorder/components/TimelineSection.ts +69 -48
  145. package/front_end/panels/recorder/components/components.ts +2 -2
  146. package/front_end/panels/recorder/components/selectorPicker.css +14 -0
  147. package/front_end/panels/recorder/components/stepEditor.css +0 -5
  148. package/front_end/panels/recorder/components/stepView.css +196 -198
  149. package/front_end/panels/recorder/extensions/ExtensionManager.ts +4 -48
  150. package/front_end/panels/recorder/models/ScreenshotUtils.ts +17 -11
  151. package/front_end/panels/security/CookieControlsView.ts +9 -16
  152. package/front_end/panels/settings/components/SyncSection.ts +0 -1
  153. package/front_end/panels/sources/CSSPlugin.ts +3 -3
  154. package/front_end/panels/sources/CallStackSidebarPane.ts +60 -75
  155. package/front_end/panels/sources/SourcesPanel.ts +1 -11
  156. package/front_end/panels/sources/TabbedEditorContainer.ts +11 -8
  157. package/front_end/panels/sources/ThreadsSidebarPane.ts +96 -101
  158. package/front_end/panels/sources/threadsSidebarPane.css +6 -5
  159. package/front_end/panels/timeline/InteractionsTrackAppender.ts +2 -3
  160. package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +23 -33
  161. package/front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.ts +4 -3
  162. package/front_end/panels/timeline/TimelineFlameChartView.ts +12 -0
  163. package/front_end/panels/timeline/TimelinePanel.ts +3 -5
  164. package/front_end/panels/timeline/components/IgnoreListSetting.ts +164 -142
  165. package/front_end/panels/timeline/components/InteractionBreakdown.ts +48 -28
  166. package/front_end/panels/timeline/components/LayoutShiftDetails.ts +18 -23
  167. package/front_end/panels/timeline/components/NetworkRequestTooltip.ts +98 -73
  168. package/front_end/panels/timeline/components/SidebarInsightsTab.ts +9 -12
  169. package/front_end/panels/timeline/components/SidebarSingleInsightSet.ts +262 -291
  170. package/front_end/panels/timeline/components/Utils.ts +25 -0
  171. package/front_end/panels/timeline/components/insights/BaseInsightComponent.ts +210 -146
  172. package/front_end/panels/timeline/components/insights/CLSCulprits.ts +8 -20
  173. package/front_end/panels/timeline/components/insights/Cache.ts +0 -9
  174. package/front_end/panels/timeline/components/insights/DOMSize.ts +11 -33
  175. package/front_end/panels/timeline/components/insights/DocumentLatency.ts +0 -9
  176. package/front_end/panels/timeline/components/insights/DuplicatedJavaScript.ts +0 -9
  177. package/front_end/panels/timeline/components/insights/EventRef.ts +47 -109
  178. package/front_end/panels/timeline/components/insights/FontDisplay.ts +0 -9
  179. package/front_end/panels/timeline/components/insights/ForcedReflow.ts +0 -9
  180. package/front_end/panels/timeline/components/insights/INPBreakdown.ts +0 -9
  181. package/front_end/panels/timeline/components/insights/ImageDelivery.ts +1 -10
  182. package/front_end/panels/timeline/components/insights/ImageRef.ts +112 -0
  183. package/front_end/panels/timeline/components/insights/InsightRenderer.ts +91 -0
  184. package/front_end/panels/timeline/components/insights/LCPBreakdown.ts +0 -9
  185. package/front_end/panels/timeline/components/insights/LCPDiscovery.ts +4 -11
  186. package/front_end/panels/timeline/components/insights/LegacyJavaScript.ts +0 -9
  187. package/front_end/panels/timeline/components/insights/ModernHTTP.ts +0 -9
  188. package/front_end/panels/timeline/components/insights/NetworkDependencyTree.ts +6 -21
  189. package/front_end/panels/timeline/components/insights/NodeLink.ts +68 -43
  190. package/front_end/panels/timeline/components/insights/README.md +2 -3
  191. package/front_end/panels/timeline/components/insights/RenderBlocking.ts +0 -9
  192. package/front_end/panels/timeline/components/insights/SlowCSSSelector.ts +0 -9
  193. package/front_end/panels/timeline/components/insights/ThirdParties.ts +0 -9
  194. package/front_end/panels/timeline/components/insights/Viewport.ts +7 -19
  195. package/front_end/panels/timeline/components/insights/baseInsightComponent.css +5 -0
  196. package/front_end/panels/timeline/components/insights/insights.ts +2 -0
  197. package/front_end/panels/timeline/components/interactionBreakdown.css +15 -13
  198. package/front_end/panels/timeline/enable-easter-egg.js +7 -3
  199. package/front_end/third_party/chromium/README.chromium +1 -1
  200. package/front_end/third_party/puppeteer/README.chromium +2 -2
  201. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BluetoothEmulation.d.ts +96 -0
  202. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BluetoothEmulation.d.ts.map +1 -0
  203. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BluetoothEmulation.js +8 -0
  204. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BluetoothEmulation.js.map +1 -0
  205. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts +87 -0
  206. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts.map +1 -1
  207. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.js.map +1 -1
  208. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/DeviceRequestPrompt.d.ts +2 -6
  209. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/DeviceRequestPrompt.d.ts.map +1 -1
  210. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/DeviceRequestPrompt.js +5 -24
  211. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/DeviceRequestPrompt.js.map +1 -1
  212. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts +5 -0
  213. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts.map +1 -1
  214. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.js.map +1 -1
  215. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/api.d.ts +1 -0
  216. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/api.d.ts.map +1 -1
  217. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/api.js.map +1 -1
  218. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BluetoothEmulation.d.ts +18 -0
  219. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BluetoothEmulation.d.ts.map +1 -0
  220. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BluetoothEmulation.js +42 -0
  221. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BluetoothEmulation.js.map +1 -0
  222. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.d.ts +4 -1
  223. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.d.ts.map +1 -1
  224. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.js +10 -0
  225. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.js.map +1 -1
  226. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/DeviceRequestPrompt.d.ts +27 -0
  227. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/DeviceRequestPrompt.d.ts.map +1 -0
  228. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/DeviceRequestPrompt.js +90 -0
  229. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/DeviceRequestPrompt.js.map +1 -0
  230. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.d.ts +3 -1
  231. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.d.ts.map +1 -1
  232. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.js +3 -2
  233. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.js.map +1 -1
  234. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.d.ts +4 -1
  235. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.d.ts.map +1 -1
  236. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.js +5 -2
  237. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.js.map +1 -1
  238. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.d.ts +4 -0
  239. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.d.ts.map +1 -1
  240. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.js +14 -2
  241. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.js.map +1 -1
  242. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/util.d.ts.map +1 -1
  243. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/util.js +7 -0
  244. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/util.js.map +1 -1
  245. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Accessibility.js +1 -1
  246. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Accessibility.js.map +1 -1
  247. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BluetoothEmulation.d.ts +18 -0
  248. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BluetoothEmulation.d.ts.map +1 -0
  249. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BluetoothEmulation.js +30 -0
  250. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BluetoothEmulation.js.map +1 -0
  251. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.d.ts +5 -2
  252. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.d.ts.map +1 -1
  253. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.js +22 -3
  254. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.js.map +1 -1
  255. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/CdpSession.d.ts +1 -1
  256. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/CdpSession.d.ts.map +1 -1
  257. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/DeviceRequestPrompt.d.ts +2 -3
  258. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/DeviceRequestPrompt.d.ts.map +1 -1
  259. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/DeviceRequestPrompt.js +4 -6
  260. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/DeviceRequestPrompt.js.map +1 -1
  261. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/FrameManager.d.ts +2 -2
  262. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/FrameManager.d.ts.map +1 -1
  263. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/FrameManager.js +1 -1
  264. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/FrameManager.js.map +1 -1
  265. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.d.ts +2 -0
  266. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.d.ts.map +1 -1
  267. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js +8 -0
  268. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js.map +1 -1
  269. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/WebWorker.d.ts.map +1 -1
  270. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/WebWorker.js +8 -3
  271. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/WebWorker.js.map +1 -1
  272. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/cdp.d.ts +1 -0
  273. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/cdp.d.ts.map +1 -1
  274. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/cdp.js +1 -0
  275. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/cdp.js.map +1 -1
  276. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/BrowserConnector.js +30 -0
  277. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/BrowserConnector.js.map +1 -1
  278. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConnectOptions.d.ts +15 -0
  279. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConnectOptions.d.ts.map +1 -1
  280. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.d.ts +1 -1
  281. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.d.ts +1 -1
  282. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.d.ts.map +1 -1
  283. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.js +2 -13
  284. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.js.map +1 -1
  285. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/LaunchOptions.d.ts +5 -3
  286. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/LaunchOptions.d.ts.map +1 -1
  287. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/LaunchOptions.js +17 -0
  288. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/LaunchOptions.js.map +1 -1
  289. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.d.ts +3 -3
  290. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +3 -3
  291. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js.map +1 -1
  292. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/Mutex.d.ts +2 -2
  293. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.d.ts +1 -1
  294. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.js +1 -1
  295. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +221 -4
  296. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +182 -95
  297. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BluetoothEmulation.d.ts +96 -0
  298. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BluetoothEmulation.d.ts.map +1 -0
  299. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BluetoothEmulation.js +7 -0
  300. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BluetoothEmulation.js.map +1 -0
  301. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts +87 -0
  302. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts.map +1 -1
  303. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.js.map +1 -1
  304. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/DeviceRequestPrompt.d.ts +2 -6
  305. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/DeviceRequestPrompt.d.ts.map +1 -1
  306. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/DeviceRequestPrompt.js +4 -22
  307. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/DeviceRequestPrompt.js.map +1 -1
  308. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts +5 -0
  309. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts.map +1 -1
  310. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.js.map +1 -1
  311. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/api.d.ts +1 -0
  312. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/api.d.ts.map +1 -1
  313. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/api.js.map +1 -1
  314. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BluetoothEmulation.d.ts +18 -0
  315. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BluetoothEmulation.d.ts.map +1 -0
  316. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BluetoothEmulation.js +38 -0
  317. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BluetoothEmulation.js.map +1 -0
  318. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.d.ts +4 -1
  319. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.d.ts.map +1 -1
  320. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.js +10 -0
  321. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.js.map +1 -1
  322. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/DeviceRequestPrompt.d.ts +27 -0
  323. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/DeviceRequestPrompt.d.ts.map +1 -0
  324. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/DeviceRequestPrompt.js +85 -0
  325. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/DeviceRequestPrompt.js.map +1 -0
  326. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.d.ts +3 -1
  327. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.d.ts.map +1 -1
  328. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.js +3 -2
  329. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.js.map +1 -1
  330. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.d.ts +4 -1
  331. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.d.ts.map +1 -1
  332. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.js +5 -2
  333. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.js.map +1 -1
  334. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.d.ts +4 -0
  335. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.d.ts.map +1 -1
  336. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.js +14 -2
  337. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.js.map +1 -1
  338. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/util.d.ts.map +1 -1
  339. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/util.js +7 -0
  340. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/util.js.map +1 -1
  341. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Accessibility.js +1 -1
  342. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Accessibility.js.map +1 -1
  343. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BluetoothEmulation.d.ts +18 -0
  344. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BluetoothEmulation.d.ts.map +1 -0
  345. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BluetoothEmulation.js +26 -0
  346. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BluetoothEmulation.js.map +1 -0
  347. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.d.ts +5 -2
  348. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.d.ts.map +1 -1
  349. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.js +22 -3
  350. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.js.map +1 -1
  351. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/CdpSession.d.ts +1 -1
  352. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/CdpSession.d.ts.map +1 -1
  353. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/DeviceRequestPrompt.d.ts +2 -3
  354. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/DeviceRequestPrompt.d.ts.map +1 -1
  355. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/DeviceRequestPrompt.js +2 -4
  356. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/DeviceRequestPrompt.js.map +1 -1
  357. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/FrameManager.d.ts +2 -2
  358. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/FrameManager.d.ts.map +1 -1
  359. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/FrameManager.js +2 -2
  360. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/FrameManager.js.map +1 -1
  361. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.d.ts +2 -0
  362. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.d.ts.map +1 -1
  363. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js +8 -0
  364. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js.map +1 -1
  365. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/WebWorker.d.ts.map +1 -1
  366. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/WebWorker.js +8 -3
  367. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/WebWorker.js.map +1 -1
  368. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/cdp.d.ts +1 -0
  369. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/cdp.d.ts.map +1 -1
  370. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/cdp.js +1 -0
  371. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/cdp.js.map +1 -1
  372. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/BrowserConnector.js +31 -1
  373. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/BrowserConnector.js.map +1 -1
  374. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConnectOptions.d.ts +15 -0
  375. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConnectOptions.d.ts.map +1 -1
  376. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.d.ts +1 -1
  377. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.d.ts.map +1 -1
  378. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.js +2 -13
  379. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.js.map +1 -1
  380. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/LaunchOptions.d.ts +5 -3
  381. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/LaunchOptions.d.ts.map +1 -1
  382. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/LaunchOptions.js +16 -1
  383. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/LaunchOptions.js.map +1 -1
  384. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +3 -3
  385. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +3 -3
  386. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js.map +1 -1
  387. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.d.ts +1 -1
  388. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.js +1 -1
  389. package/front_end/third_party/puppeteer/package/lib/types.d.ts +221 -4
  390. package/front_end/third_party/puppeteer/package/package.json +4 -4
  391. package/front_end/third_party/puppeteer/package/src/api/BluetoothEmulation.ts +103 -0
  392. package/front_end/third_party/puppeteer/package/src/api/Browser.ts +96 -1
  393. package/front_end/third_party/puppeteer/package/src/api/DeviceRequestPrompt.ts +2 -10
  394. package/front_end/third_party/puppeteer/package/src/api/Page.ts +6 -0
  395. package/front_end/third_party/puppeteer/package/src/api/api.ts +1 -0
  396. package/front_end/third_party/puppeteer/package/src/bidi/BluetoothEmulation.ts +52 -0
  397. package/front_end/third_party/puppeteer/package/src/bidi/Browser.ts +15 -0
  398. package/front_end/third_party/puppeteer/package/src/bidi/DeviceRequestPrompt.ts +138 -0
  399. package/front_end/third_party/puppeteer/package/src/bidi/Frame.ts +7 -3
  400. package/front_end/third_party/puppeteer/package/src/bidi/Page.ts +10 -2
  401. package/front_end/third_party/puppeteer/package/src/bidi/core/BrowsingContext.ts +30 -2
  402. package/front_end/third_party/puppeteer/package/src/bidi/util.ts +8 -0
  403. package/front_end/third_party/puppeteer/package/src/cdp/Accessibility.ts +1 -1
  404. package/front_end/third_party/puppeteer/package/src/cdp/BluetoothEmulation.ts +47 -0
  405. package/front_end/third_party/puppeteer/package/src/cdp/Browser.ts +33 -3
  406. package/front_end/third_party/puppeteer/package/src/cdp/CdpSession.ts +1 -1
  407. package/front_end/third_party/puppeteer/package/src/cdp/DeviceRequestPrompt.ts +3 -8
  408. package/front_end/third_party/puppeteer/package/src/cdp/Frame.ts +2 -2
  409. package/front_end/third_party/puppeteer/package/src/cdp/FrameManager.ts +9 -4
  410. package/front_end/third_party/puppeteer/package/src/cdp/Page.ts +13 -0
  411. package/front_end/third_party/puppeteer/package/src/cdp/WebWorker.ts +8 -3
  412. package/front_end/third_party/puppeteer/package/src/cdp/cdp.ts +1 -0
  413. package/front_end/third_party/puppeteer/package/src/common/BrowserConnector.ts +45 -1
  414. package/front_end/third_party/puppeteer/package/src/common/ConnectOptions.ts +20 -0
  415. package/front_end/third_party/puppeteer/package/src/node/ChromeLauncher.ts +5 -17
  416. package/front_end/third_party/puppeteer/package/src/node/LaunchOptions.ts +23 -7
  417. package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
  418. package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
  419. package/front_end/third_party/puppeteer/puppeteer-tsconfig.json +4 -0
  420. package/front_end/ui/components/annotations/AnnotationRepository.ts +153 -13
  421. package/front_end/ui/components/snackbars/Snackbars.docs.ts +0 -1
  422. package/front_end/ui/components/text_editor/AiCodeCompletionTeaserPlaceholder.ts +12 -3
  423. package/front_end/ui/components/text_editor/AiCodeGenerationProvider.ts +182 -0
  424. package/front_end/ui/components/text_editor/text_editor.ts +1 -0
  425. package/front_end/ui/helpers/OpenInNewTab.ts +5 -1
  426. package/front_end/ui/i18n/i18n.ts +9 -9
  427. package/front_end/ui/kit/icons/Icon.docs.ts +22 -65
  428. package/front_end/ui/kit/kit.ts +1 -0
  429. package/front_end/ui/kit/link/Link.docs.ts +15 -0
  430. package/front_end/ui/kit/link/Link.ts +151 -0
  431. package/front_end/ui/kit/link/link.css +27 -0
  432. package/front_end/ui/legacy/EmptyWidget.ts +6 -0
  433. package/front_end/ui/legacy/Floaty.ts +442 -0
  434. package/front_end/ui/legacy/InspectorView.ts +12 -0
  435. package/front_end/ui/legacy/ReportView.ts +1 -1
  436. package/front_end/ui/legacy/SelectMenu.docs.ts +0 -1
  437. package/front_end/ui/legacy/TabbedPane.ts +131 -53
  438. package/front_end/ui/legacy/components/cookie_table/CookiesTable.ts +1 -1
  439. package/front_end/ui/legacy/components/inline_editor/ColorSwatch.ts +36 -36
  440. package/front_end/ui/legacy/components/object_ui/JavaScriptREPL.ts +22 -37
  441. package/front_end/ui/legacy/components/object_ui/RemoteObjectPreviewFormatter.ts +31 -1
  442. package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +2 -2
  443. package/front_end/ui/legacy/components/utils/Linkifier.ts +7 -11
  444. package/front_end/ui/legacy/floaty.css +77 -0
  445. package/front_end/ui/legacy/legacy.ts +2 -0
  446. package/front_end/ui/visual_logging/KnownContextValues.ts +6 -0
  447. package/inspector_overlay/loadCSS.rollup.js +5 -4
  448. package/package.json +2 -2
  449. package/front_end/panels/application/preloading/components/PreloadingMismatchedHeadersGrid.ts +0 -99
  450. package/front_end/panels/recorder/components/SelectButton.ts +0 -304
  451. package/front_end/panels/recorder/controllers/controllers.ts +0 -7
  452. package/front_end/ui/components/chrome_link/ChromeLink.ts +0 -76
  453. package/front_end/ui/components/chrome_link/chromeLink.css +0 -12
  454. package/front_end/ui/components/chrome_link/chrome_link.ts +0 -9
  455. /package/front_end/panels/recorder/components/{selectButton.css → replaySection.css} +0 -0
@@ -8,7 +8,6 @@ import * as Host from '../../core/host/host.js';
8
8
  import * as i18n from '../../core/i18n/i18n.js';
9
9
  import * as Root from '../../core/root/root.js';
10
10
  import * as SDK from '../../core/sdk/sdk.js';
11
- import * as AiCodeCompletion from '../../models/ai_code_completion/ai_code_completion.js';
12
11
  import * as Badges from '../../models/badges/badges.js';
13
12
  import * as Formatter from '../../models/formatter/formatter.js';
14
13
  import * as SourceMapScopes from '../../models/source_map_scopes/source_map_scopes.js';
@@ -18,7 +17,6 @@ import {Icon} from '../../ui/kit/kit.js';
18
17
  import * as ObjectUI from '../../ui/legacy/components/object_ui/object_ui.js';
19
18
  import * as UI from '../../ui/legacy/legacy.js';
20
19
  import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
21
- import * as PanelCommon from '../common/common.js';
22
20
 
23
21
  import {ConsolePanel} from './ConsolePanel.js';
24
22
  import consolePromptStyles from './consolePrompt.css.js';
@@ -44,8 +42,6 @@ const UIStrings = {
44
42
  const str_ = i18n.i18n.registerUIStrings('panels/console/ConsolePrompt.ts', UIStrings);
45
43
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
46
44
 
47
- const AI_CODE_COMPLETION_CHARACTER_LIMIT = 20_000;
48
-
49
45
  export class ConsolePrompt extends Common.ObjectWrapper.eventMixin<EventTypes, typeof UI.Widget.Widget>(
50
46
  UI.Widget.Widget) {
51
47
  private addCompletionsFromHistory: boolean;
@@ -71,15 +67,8 @@ export class ConsolePrompt extends Common.ObjectWrapper.eventMixin<EventTypes, t
71
67
  #selfXssWarningShown = false;
72
68
  #javaScriptCompletionCompartment: CodeMirror.Compartment = new CodeMirror.Compartment();
73
69
 
74
- private aidaClient?: Host.AidaClient.AidaClient;
75
- private aidaAvailability?: Host.AidaClient.AidaAccessPreconditions;
76
- private boundOnAidaAvailabilityChange?: () => Promise<void>;
77
- private aiCodeCompletion?: AiCodeCompletion.AiCodeCompletion.AiCodeCompletion;
78
- teaser?: PanelCommon.AiCodeCompletionTeaser;
79
- private placeholderCompartment: CodeMirror.Compartment = new CodeMirror.Compartment();
80
- private aiCodeCompletionSetting =
81
- Common.Settings.Settings.instance().createSetting('ai-code-completion-enabled', false);
82
- private aiCodeCompletionCitations?: Host.AidaClient.Citation[] = [];
70
+ private aiCodeCompletionConfig?: TextEditor.AiCodeCompletionProvider.AiCodeCompletionConfig;
71
+ private aiCodeCompletionProvider?: TextEditor.AiCodeCompletionProvider.AiCodeCompletionProvider;
83
72
 
84
73
  #getJavaScriptCompletionExtensions(): CodeMirror.Extension {
85
74
  if (this.#selfXssWarningShown) {
@@ -101,7 +90,7 @@ export class ConsolePrompt extends Common.ObjectWrapper.eventMixin<EventTypes, t
101
90
  this.editor.dispatch({effects});
102
91
  }
103
92
 
104
- constructor() {
93
+ constructor(aiCodeCompletionConfig?: TextEditor.AiCodeCompletionProvider.AiCodeCompletionConfig) {
105
94
  super({
106
95
  jslog: `${VisualLogging.textField('console-prompt').track({
107
96
  change: true,
@@ -165,14 +154,11 @@ export class ConsolePrompt extends Common.ObjectWrapper.eventMixin<EventTypes, t
165
154
  this.#javaScriptCompletionCompartment.of(this.#getJavaScriptCompletionExtensions()),
166
155
  ];
167
156
 
168
- if (this.isAiCodeCompletionEnabled()) {
169
- const aiCodeCompletionTeaserDismissedSetting =
170
- Common.Settings.Settings.instance().createSetting('ai-code-completion-teaser-dismissed', false);
171
- if (!this.aiCodeCompletionSetting.get() && !aiCodeCompletionTeaserDismissedSetting.get()) {
172
- this.teaser = new PanelCommon.AiCodeCompletionTeaser({onDetach: this.detachAiCodeCompletionTeaser.bind(this)});
173
- extensions.push(this.placeholderCompartment.of([]));
174
- }
175
- extensions.push(TextEditor.Config.aiAutoCompleteSuggestion);
157
+ this.aiCodeCompletionConfig = aiCodeCompletionConfig;
158
+ if (this.aiCodeCompletionConfig) {
159
+ this.aiCodeCompletionProvider =
160
+ TextEditor.AiCodeCompletionProvider.AiCodeCompletionProvider.createInstance(this.aiCodeCompletionConfig);
161
+ extensions.push(...this.aiCodeCompletionProvider.extension());
176
162
  }
177
163
 
178
164
  const doc = this.initialText;
@@ -180,6 +166,14 @@ export class ConsolePrompt extends Common.ObjectWrapper.eventMixin<EventTypes, t
180
166
 
181
167
  this.editor = new TextEditor.TextEditor.TextEditor(editorState);
182
168
 
169
+ if (this.aiCodeCompletionProvider) {
170
+ this.aiCodeCompletionProvider.editorInitialized(this.editor);
171
+ this.editor.editor.dispatch({
172
+ effects: TextEditor.AiCodeCompletionProvider.setAiCodeCompletionTeaserMode.of(
173
+ TextEditor.AiCodeCompletionProvider.AiCodeCompletionTeaserMode.ONLY_SHOW_ON_EMPTY)
174
+ });
175
+ }
176
+
183
177
  this.editor.addEventListener('keydown', event => {
184
178
  if (event.defaultPrevented) {
185
179
  event.stopPropagation();
@@ -197,15 +191,6 @@ export class ConsolePrompt extends Common.ObjectWrapper.eventMixin<EventTypes, t
197
191
 
198
192
  // Record the console tool load time after the console prompt constructor is complete.
199
193
  Host.userMetrics.panelLoaded('console', 'DevTools.Launch.Console');
200
-
201
- if (this.isAiCodeCompletionEnabled()) {
202
- this.aiCodeCompletionSetting.addChangeListener(this.onAiCodeCompletionSettingChanged.bind(this));
203
- this.onAiCodeCompletionSettingChanged();
204
- this.boundOnAidaAvailabilityChange = this.onAidaAvailabilityChange.bind(this);
205
- Host.AidaClient.HostConfigTracker.instance().addEventListener(
206
- Host.AidaClient.Events.AIDA_AVAILABILITY_CHANGED, this.boundOnAidaAvailabilityChange);
207
- void this.onAidaAvailabilityChange();
208
- }
209
194
  }
210
195
 
211
196
  private eagerSettingChanged(): void {
@@ -220,7 +205,7 @@ export class ConsolePrompt extends Common.ObjectWrapper.eventMixin<EventTypes, t
220
205
  return this.eagerPreviewElement;
221
206
  }
222
207
 
223
- private onTextChanged(docContentChanged?: boolean): void {
208
+ private onTextChanged(): void {
224
209
  // ConsoleView and prompt both use a throttler, so we clear the preview
225
210
  // ASAP to avoid inconsistency between a fresh viewport and stale preview.
226
211
  if (this.eagerEvalSetting.get()) {
@@ -229,49 +214,10 @@ export class ConsolePrompt extends Common.ObjectWrapper.eventMixin<EventTypes, t
229
214
  this.requestPreviewBound,
230
215
  asSoonAsPossible ? Common.Throttler.Scheduling.AS_SOON_AS_POSSIBLE : Common.Throttler.Scheduling.DEFAULT);
231
216
  }
232
- if (docContentChanged && this.aiCodeCompletion && this.isAiCodeCompletionEnabled()) {
233
- // Only trigger when doc content changes.
234
- // This ensures that it is not triggered when user is going through the options in existing completion menu.
235
- this.triggerAiCodeCompletion();
236
- }
237
217
  this.updatePromptIcon();
238
218
  this.dispatchEventToListeners(Events.TEXT_CHANGED);
239
219
  }
240
220
 
241
- triggerAiCodeCompletion(): void {
242
- const {doc, selection} = this.editor.state;
243
- const query = doc.toString();
244
- const cursor = selection.main.head;
245
- const currentExecutionContext = UI.Context.Context.instance().flavor(SDK.RuntimeModel.ExecutionContext);
246
- let prefix = query.substring(0, cursor);
247
- if (prefix.trim().length === 0) {
248
- return;
249
- }
250
- if (currentExecutionContext) {
251
- const consoleModel = currentExecutionContext.target().model(SDK.ConsoleModel.ConsoleModel);
252
- if (consoleModel) {
253
- let lastMessage = '';
254
- let consoleMessages = '';
255
- for (const message of consoleModel.messages()) {
256
- if (message.type !== SDK.ConsoleModel.FrontendMessageType.Command || message.messageText === lastMessage) {
257
- continue;
258
- }
259
- lastMessage = message.messageText;
260
- consoleMessages = consoleMessages + message.messageText + '\n\n';
261
- }
262
- prefix = consoleMessages + prefix;
263
- }
264
- }
265
- let suffix = query.substring(cursor);
266
- if (prefix.length > AI_CODE_COMPLETION_CHARACTER_LIMIT) {
267
- prefix = prefix.substring(prefix.length - AI_CODE_COMPLETION_CHARACTER_LIMIT);
268
- }
269
- if (suffix.length > AI_CODE_COMPLETION_CHARACTER_LIMIT) {
270
- suffix = suffix.substring(0, AI_CODE_COMPLETION_CHARACTER_LIMIT);
271
- }
272
- this.aiCodeCompletion?.onTextChanged(prefix, suffix, cursor);
273
- }
274
-
275
221
  private async requestPreview(): Promise<void> {
276
222
  const id = ++this.requestPreviewCurrent;
277
223
  const text = TextEditor.Config.contentIncludingHint(this.editor.editor).trim();
@@ -303,10 +249,6 @@ export class ConsolePrompt extends Common.ObjectWrapper.eventMixin<EventTypes, t
303
249
  this.highlightingNode = false;
304
250
  SDK.OverlayModel.OverlayModel.hideDOMNodeHighlight();
305
251
  }
306
- if (this.boundOnAidaAvailabilityChange) {
307
- Host.AidaClient.HostConfigTracker.instance().removeEventListener(
308
- Host.AidaClient.Events.AIDA_AVAILABILITY_CHANGED, this.boundOnAidaAvailabilityChange);
309
- }
310
252
  }
311
253
 
312
254
  history(): TextEditor.AutocompleteHistory.AutocompleteHistory {
@@ -318,7 +260,7 @@ export class ConsolePrompt extends Common.ObjectWrapper.eventMixin<EventTypes, t
318
260
  }
319
261
 
320
262
  clearAiCodeCompletionCache(): void {
321
- this.aiCodeCompletion?.clearCachedRequest();
263
+ this.aiCodeCompletionProvider?.clearCache();
322
264
  }
323
265
 
324
266
  moveCaretToEndOfPrompt(): void {
@@ -342,7 +284,7 @@ export class ConsolePrompt extends Common.ObjectWrapper.eventMixin<EventTypes, t
342
284
  }
343
285
 
344
286
  private editorKeymap(): readonly CodeMirror.KeyBinding[] {
345
- const keymap: CodeMirror.KeyBinding[] = [
287
+ return [
346
288
  {
347
289
  // Handle the KeyboardEvent manually.
348
290
  any: (_view, event) => {
@@ -369,7 +311,9 @@ export class ConsolePrompt extends Common.ObjectWrapper.eventMixin<EventTypes, t
369
311
  {mac: 'Ctrl-n', run: () => this.#editorHistory.moveHistory(Direction.FORWARD, true)},
370
312
  {
371
313
  key: 'Escape',
372
- run: () => this.runOnEscape(),
314
+ run: () => {
315
+ return TextEditor.JavaScript.closeArgumentsHintsTooltip(this.editor.editor, this.#argumentHintsState);
316
+ },
373
317
  },
374
318
  {
375
319
  key: 'Ctrl-Enter',
@@ -387,38 +331,6 @@ export class ConsolePrompt extends Common.ObjectWrapper.eventMixin<EventTypes, t
387
331
  shift: CodeMirror.insertNewlineAndIndent,
388
332
  },
389
333
  ];
390
-
391
- if (this.isAiCodeCompletionEnabled()) {
392
- keymap.push({
393
- key: 'Tab',
394
- run: () => {
395
- const {accepted, suggestion} = TextEditor.Config.acceptAiAutoCompleteSuggestion(this.editor.editor);
396
- if (accepted) {
397
- this.dispatchEventToListeners(
398
- Events.AI_CODE_COMPLETION_SUGGESTION_ACCEPTED, {citations: this.aiCodeCompletionCitations});
399
- if (suggestion?.rpcGlobalId) {
400
- this.aiCodeCompletion?.registerUserAcceptance(suggestion.rpcGlobalId, suggestion.sampleId);
401
- }
402
- }
403
- return accepted;
404
- },
405
- });
406
- }
407
-
408
- return keymap;
409
- }
410
-
411
- private runOnEscape(): boolean {
412
- if (TextEditor.JavaScript.closeArgumentsHintsTooltip(this.editor.editor, this.#argumentHintsState)) {
413
- return true;
414
- }
415
- if (this.aiCodeCompletion && TextEditor.Config.hasActiveAiSuggestion(this.editor.state)) {
416
- this.editor.dispatch({
417
- effects: TextEditor.Config.setAiAutoCompleteSuggestion.of(null),
418
- });
419
- return true;
420
- }
421
- return false;
422
334
  }
423
335
 
424
336
  private async enterWillEvaluate(forceEvaluate?: boolean): Promise<boolean> {
@@ -472,9 +384,15 @@ export class ConsolePrompt extends Common.ObjectWrapper.eventMixin<EventTypes, t
472
384
  changes: {from: 0, to: this.editor.state.doc.length},
473
385
  scrollIntoView: true,
474
386
  });
475
- if (this.teaser) {
476
- this.detachAiCodeCompletionTeaser();
477
- this.teaser = undefined;
387
+ if (this.aiCodeCompletionProvider) {
388
+ const teaserMode =
389
+ this.editor.editor.state.field(TextEditor.AiCodeCompletionProvider.aiCodeCompletionTeaserModeState);
390
+ if (teaserMode !== TextEditor.AiCodeCompletionProvider.AiCodeCompletionTeaserMode.OFF) {
391
+ this.editor.editor.dispatch({
392
+ effects: TextEditor.AiCodeCompletionProvider.setAiCodeCompletionTeaserMode.of(
393
+ TextEditor.AiCodeCompletionProvider.AiCodeCompletionTeaserMode.OFF)
394
+ });
395
+ }
478
396
  }
479
397
  } else if (this.editor.state.doc.length) {
480
398
  CodeMirror.insertNewlineAndIndent(this.editor.editor);
@@ -531,8 +449,7 @@ export class ConsolePrompt extends Common.ObjectWrapper.eventMixin<EventTypes, t
531
449
  private editorUpdate(update: CodeMirror.ViewUpdate): void {
532
450
  if (update.docChanged ||
533
451
  CodeMirror.selectedCompletion(update.state) !== CodeMirror.selectedCompletion(update.startState)) {
534
- const docContentChanged = update.state.doc !== update.startState.doc;
535
- this.onTextChanged(docContentChanged);
452
+ this.onTextChanged();
536
453
  } else if (update.selectionSet) {
537
454
  this.updatePromptIcon();
538
455
  }
@@ -542,122 +459,14 @@ export class ConsolePrompt extends Common.ObjectWrapper.eventMixin<EventTypes, t
542
459
  this.editor.focus();
543
460
  }
544
461
 
545
- // TODO(b/435654172): Refactor and move aiCodeCompletion model one level up to avoid
546
- // defining additional listeners and events.
547
- private setAiCodeCompletion(): void {
548
- if (this.aiCodeCompletion) {
549
- return;
550
- }
551
- if (!this.aidaClient) {
552
- this.aidaClient = new Host.AidaClient.AidaClient();
553
- }
554
- if (this.teaser) {
555
- this.detachAiCodeCompletionTeaser();
556
- this.teaser = undefined;
557
- }
558
- this.aiCodeCompletion = new AiCodeCompletion.AiCodeCompletion.AiCodeCompletion(
559
- {aidaClient: this.aidaClient}, AiCodeCompletion.AiCodeCompletion.ContextFlavor.CONSOLE, {
560
- getSelectionHead: () => this.editor.editor.state.selection.main.head,
561
- getCompletionHint: () => this.editor.editor.plugin(TextEditor.Config.showCompletionHint)?.currentHint,
562
- setAiAutoCompletion: (suggestion: TextEditor.Config.ActiveSuggestion|null) => {
563
- this.editor.dispatch({effects: TextEditor.Config.setAiAutoCompleteSuggestion.of(suggestion)});
564
- }
565
- },
566
- ['\n\n']);
567
- this.aiCodeCompletion.addEventListener(AiCodeCompletion.AiCodeCompletion.Events.RESPONSE_RECEIVED, event => {
568
- this.aiCodeCompletionCitations = event.data.citations;
569
- this.dispatchEventToListeners(Events.AI_CODE_COMPLETION_RESPONSE_RECEIVED, event.data);
570
- });
571
- this.aiCodeCompletion.addEventListener(AiCodeCompletion.AiCodeCompletion.Events.REQUEST_TRIGGERED, event => {
572
- this.dispatchEventToListeners(Events.AI_CODE_COMPLETION_REQUEST_TRIGGERED, event.data);
573
- });
574
- }
575
-
576
- private onAiCodeCompletionSettingChanged(): void {
577
- if (this.aiCodeCompletionSetting.get() && this.isAiCodeCompletionEnabled()) {
578
- this.setAiCodeCompletion();
579
- } else if (this.aiCodeCompletion) {
580
- this.aiCodeCompletion.remove();
581
- this.aiCodeCompletion = undefined;
582
- }
583
- }
584
-
585
- private async onAidaAvailabilityChange(): Promise<void> {
586
- const currentAidaAvailability = await Host.AidaClient.AidaClient.checkAccessPreconditions();
587
- if (currentAidaAvailability !== this.aidaAvailability) {
588
- this.aidaAvailability = currentAidaAvailability;
589
- if (this.aidaAvailability === Host.AidaClient.AidaAccessPreconditions.AVAILABLE) {
590
- this.onAiCodeCompletionSettingChanged();
591
- if (this.teaser) {
592
- this.editor.dispatch({
593
- effects: this.placeholderCompartment.reconfigure(
594
- [TextEditor.AiCodeCompletionTeaserPlaceholder.aiCodeCompletionTeaserPlaceholder(this.teaser)])
595
- });
596
- }
597
- } else if (this.aiCodeCompletion) {
598
- this.aiCodeCompletion.remove();
599
- this.aiCodeCompletion = undefined;
600
- if (this.teaser) {
601
- this.detachAiCodeCompletionTeaser();
602
- }
603
- }
604
- }
605
- }
606
-
607
- async onAiCodeCompletionTeaserActionKeyDown(event: Event): Promise<void> {
608
- if (this.teaser?.isShowing()) {
609
- await this.teaser?.onAction(event);
610
- void VisualLogging.logKeyDown(event.currentTarget, event, 'ai-code-completion-teaser.fre');
611
- }
612
- }
613
-
614
- onAiCodeCompletionTeaserDismissKeyDown(event: Event): void {
615
- if (this.teaser?.isShowing()) {
616
- this.teaser?.onDismiss(event);
617
- void VisualLogging.logKeyDown(event.currentTarget, event, 'ai-code-completion-teaser.dismiss');
618
- }
619
- }
620
-
621
- private detachAiCodeCompletionTeaser(): void {
622
- this.editor.dispatch({
623
- effects: this.placeholderCompartment.reconfigure([]),
624
- });
625
- }
626
-
627
- private isAiCodeCompletionEnabled(): boolean {
628
- const devtoolsLocale = i18n.DevToolsLocale.DevToolsLocale.instance();
629
- const aidaAvailability = Root.Runtime.hostConfig.aidaAvailability;
630
- if (!devtoolsLocale.locale.startsWith('en-')) {
631
- return false;
632
- }
633
- if (aidaAvailability?.blockedByGeo) {
634
- return false;
635
- }
636
- if (aidaAvailability?.blockedByAge) {
637
- return false;
638
- }
639
- return Boolean(aidaAvailability?.enabled && Root.Runtime.hostConfig.devToolsAiCodeCompletion?.enabled);
640
- }
641
-
642
462
  private editorSetForTest(): void {
643
463
  }
644
-
645
- setAidaClientForTest(aidaClient: Host.AidaClient.AidaClient): void {
646
- this.aidaClient = aidaClient;
647
- }
648
464
  }
649
465
 
650
466
  export const enum Events {
651
467
  TEXT_CHANGED = 'TextChanged',
652
- AI_CODE_COMPLETION_SUGGESTION_ACCEPTED = 'AiCodeCompletionSuggestionAccepted',
653
- AI_CODE_COMPLETION_RESPONSE_RECEIVED = 'AiCodeCompletionResponseReceived',
654
- AI_CODE_COMPLETION_REQUEST_TRIGGERED = 'AiCodeCompletionRequestTriggered'
655
468
  }
656
469
 
657
470
  export interface EventTypes {
658
471
  [Events.TEXT_CHANGED]: void;
659
- [Events.AI_CODE_COMPLETION_SUGGESTION_ACCEPTED]: AiCodeCompletion.AiCodeCompletion.ResponseReceivedEvent;
660
- [Events.AI_CODE_COMPLETION_RESPONSE_RECEIVED]: AiCodeCompletion.AiCodeCompletion.ResponseReceivedEvent;
661
- // eslint-disable-next-line @typescript-eslint/no-empty-object-type
662
- [Events.AI_CODE_COMPLETION_REQUEST_TRIGGERED]: {};
663
472
  }
@@ -41,7 +41,7 @@ import * as Platform from '../../core/platform/platform.js';
41
41
  import * as Root from '../../core/root/root.js';
42
42
  import * as SDK from '../../core/sdk/sdk.js';
43
43
  import * as Protocol from '../../generated/protocol.js';
44
- import type * as AiCodeCompletion from '../../models/ai_code_completion/ai_code_completion.js';
44
+ import * as AiCodeCompletion from '../../models/ai_code_completion/ai_code_completion.js';
45
45
  import * as Bindings from '../../models/bindings/bindings.js';
46
46
  import * as IssuesManager from '../../models/issues_manager/issues_manager.js';
47
47
  import * as Logs from '../../models/logs/logs.js';
@@ -49,6 +49,7 @@ import * as TextUtils from '../../models/text_utils/text_utils.js';
49
49
  import * as CodeHighlighter from '../../ui/components/code_highlighter/code_highlighter.js';
50
50
  import * as Highlighting from '../../ui/components/highlighting/highlighting.js';
51
51
  import * as IssueCounter from '../../ui/components/issue_counter/issue_counter.js';
52
+ import type * as TextEditor from '../../ui/components/text_editor/text_editor.js';
52
53
  import {createIcon} from '../../ui/kit/kit.js';
53
54
  // eslint-disable-next-line @devtools/es-modules-import
54
55
  import objectValueStyles from '../../ui/legacy/components/object_ui/objectValue.css.js';
@@ -336,10 +337,10 @@ export class ConsoleView extends UI.Widget.VBox implements
336
337
  private issueResolver = new IssuesManager.IssueResolver.IssueResolver();
337
338
  #isDetached = false;
338
339
  #onIssuesCountUpdateBound = this.#onIssuesCountUpdate.bind(this);
339
- private aiCodeCompletionSetting =
340
- Common.Settings.Settings.instance().createSetting('ai-code-completion-enabled', false);
340
+ aiCodeCompletionConfig?: TextEditor.AiCodeCompletionProvider.AiCodeCompletionConfig;
341
341
  private aiCodeCompletionSummaryToolbarContainer?: HTMLElement;
342
342
  private aiCodeCompletionSummaryToolbar?: AiCodeCompletionSummaryToolbar;
343
+ private aiCodeCompletionCitations: Host.AidaClient.Citation[] = [];
343
344
 
344
345
  constructor(viewportThrottlerTimeout: number) {
345
346
  super();
@@ -506,7 +507,7 @@ export class ConsoleView extends UI.Widget.VBox implements
506
507
  this.showSettingsPaneSetting.addChangeListener(
507
508
  () => settingsPane.classList.toggle('hidden', !this.showSettingsPaneSetting.get()));
508
509
 
509
- this.pinPane = new ConsolePinPane(liveExpressionButton, () => this.prompt.focus());
510
+ this.pinPane = new ConsolePinPane(() => this.prompt.focus());
510
511
  this.pinPane.element.classList.add('console-view-pinpane');
511
512
  this.pinPane.element.classList.remove('flex-auto');
512
513
  this.pinPane.show(this.contentsElement);
@@ -555,23 +556,36 @@ export class ConsoleView extends UI.Widget.VBox implements
555
556
  this.consoleMessages = [];
556
557
  this.consoleGroupStarts = [];
557
558
 
558
- this.prompt = new ConsolePrompt();
559
+ const devtoolsLocale = i18n.DevToolsLocale.DevToolsLocale.instance();
560
+ this.aiCodeCompletionConfig =
561
+ AiCodeCompletion.AiCodeCompletion.AiCodeCompletion.isAiCodeCompletionEnabled(devtoolsLocale.locale) ? {
562
+ completionContext: {
563
+ getPrefix: this.getConsoleMessageHistory.bind(this),
564
+ additionalFiles: [{
565
+ path: 'devtools-console-context.js',
566
+ content: AiCodeCompletion.AiCodeCompletion.consoleAdditionalContextFileContent,
567
+ included_reason: Host.AidaClient.Reason.RELATED_FILE,
568
+ }],
569
+ stopSequences: ['\n\n'],
570
+ },
571
+ onFeatureEnabled: () => {
572
+ this.setupAiCodeCompletion();
573
+ },
574
+ onFeatureDisabled: () => {
575
+ this.cleanupAiCodeCompletion();
576
+ },
577
+ onSuggestionAccepted: this.#onAiCodeCompletionSuggestionAccepted.bind(this),
578
+ onRequestTriggered: this.#onAiCodeCompletionRequestTriggered.bind(this),
579
+ onResponseReceived: this.#onAiCodeCompletionResponseReceived.bind(this),
580
+ panel: AiCodeCompletion.AiCodeCompletion.ContextFlavor.CONSOLE,
581
+ } :
582
+ undefined;
583
+
584
+ this.prompt = new ConsolePrompt(this.aiCodeCompletionConfig);
559
585
  this.prompt.show(this.promptElement);
560
586
  this.prompt.element.addEventListener('keydown', this.promptKeyDown.bind(this), true);
561
587
  this.prompt.addEventListener(ConsolePromptEvents.TEXT_CHANGED, this.promptTextChanged, this);
562
588
 
563
- if (this.isAiCodeCompletionEnabled()) {
564
- this.aiCodeCompletionSetting.addChangeListener(this.onAiCodeCompletionSettingChanged.bind(this));
565
- this.onAiCodeCompletionSettingChanged();
566
- this.prompt.addEventListener(
567
- ConsolePromptEvents.AI_CODE_COMPLETION_SUGGESTION_ACCEPTED, this.#onAiCodeCompletionSuggestionAccepted, this);
568
- this.prompt.addEventListener(
569
- ConsolePromptEvents.AI_CODE_COMPLETION_REQUEST_TRIGGERED, this.#onAiCodeCompletionRequestTriggered, this);
570
- this.prompt.addEventListener(
571
- ConsolePromptEvents.AI_CODE_COMPLETION_RESPONSE_RECEIVED, this.#onAiCodeCompletionResponseReceived, this);
572
- this.element.addEventListener('keydown', this.keyDown.bind(this));
573
- }
574
-
575
589
  this.messagesElement.addEventListener('keydown', this.messagesKeyDown.bind(this), false);
576
590
  this.prompt.element.addEventListener('focusin', () => {
577
591
  if (this.isScrolledToBottom()) {
@@ -629,27 +643,25 @@ export class ConsoleView extends UI.Widget.VBox implements
629
643
  }
630
644
 
631
645
  createAiCodeCompletionSummaryToolbar(): void {
646
+ if (this.aiCodeCompletionSummaryToolbar) {
647
+ return;
648
+ }
632
649
  this.aiCodeCompletionSummaryToolbar = new AiCodeCompletionSummaryToolbar({
633
650
  citationsTooltipId: CITATIONS_TOOLTIP_ID,
634
651
  disclaimerTooltipId: DISCLAIMER_TOOLTIP_ID,
635
652
  spinnerTooltipId: SPINNER_TOOLTIP_ID
636
653
  });
637
- this.aiCodeCompletionSummaryToolbarContainer = this.element.createChild('div');
654
+ this.aiCodeCompletionSummaryToolbarContainer =
655
+ this.element.createChild('div', 'ai-code-completion-summary-toolbar-container');
638
656
  this.aiCodeCompletionSummaryToolbar.show(this.aiCodeCompletionSummaryToolbarContainer, undefined, true);
639
657
  }
640
658
 
641
- #onAiCodeCompletionSuggestionAccepted(
642
- event: Common.EventTarget.EventTargetEvent<AiCodeCompletion.AiCodeCompletion.ResponseReceivedEvent>): void {
643
- if (!this.aiCodeCompletionSummaryToolbar || !event.data.citations || event.data.citations.length === 0) {
659
+ #onAiCodeCompletionSuggestionAccepted(): void {
660
+ if (!this.aiCodeCompletionSummaryToolbar || this.aiCodeCompletionCitations.length === 0) {
644
661
  return;
645
662
  }
646
- const citations: string[] = [];
647
- event.data.citations.forEach(citation => {
648
- const uri = citation.uri;
649
- if (uri) {
650
- citations.push(uri);
651
- }
652
- });
663
+ const citations =
664
+ this.aiCodeCompletionCitations.map(citation => citation.uri).filter((uri): uri is string => Boolean(uri));
653
665
  this.aiCodeCompletionSummaryToolbar.updateCitations(citations);
654
666
  }
655
667
 
@@ -657,7 +669,8 @@ export class ConsoleView extends UI.Widget.VBox implements
657
669
  this.aiCodeCompletionSummaryToolbar?.setLoading(true);
658
670
  }
659
671
 
660
- #onAiCodeCompletionResponseReceived(): void {
672
+ #onAiCodeCompletionResponseReceived(citations: Host.AidaClient.Citation[]): void {
673
+ this.aiCodeCompletionCitations = citations;
661
674
  this.aiCodeCompletionSummaryToolbar?.setLoading(false);
662
675
  }
663
676
 
@@ -1136,6 +1149,25 @@ export class ConsoleView extends UI.Widget.VBox implements
1136
1149
  this.pendingBatchResize = false;
1137
1150
  }
1138
1151
 
1152
+ getConsoleMessageHistory(): string {
1153
+ const currentExecutionContext = UI.Context.Context.instance().flavor(SDK.RuntimeModel.ExecutionContext);
1154
+ let consoleMessages = '';
1155
+ if (currentExecutionContext) {
1156
+ const consoleModel = currentExecutionContext.target().model(SDK.ConsoleModel.ConsoleModel);
1157
+ if (consoleModel) {
1158
+ let lastMessage = '';
1159
+ for (const message of consoleModel.messages()) {
1160
+ if (message.type !== SDK.ConsoleModel.FrontendMessageType.Command || message.messageText === lastMessage) {
1161
+ continue;
1162
+ }
1163
+ lastMessage = message.messageText;
1164
+ consoleMessages = consoleMessages + message.messageText + '\n\n';
1165
+ }
1166
+ }
1167
+ }
1168
+ return consoleMessages;
1169
+ }
1170
+
1139
1171
  private consoleCleared(): void {
1140
1172
  const hadFocus = this.viewport.element.hasFocus();
1141
1173
  this.cancelBuildHiddenCache();
@@ -1457,22 +1489,6 @@ export class ConsoleView extends UI.Widget.VBox implements
1457
1489
  }
1458
1490
  }
1459
1491
 
1460
- private async keyDown(event: Event): Promise<void> {
1461
- if (!this.prompt.teaser?.isShowing()) {
1462
- return;
1463
- }
1464
- const keyboardEvent = (event as KeyboardEvent);
1465
- if (UI.KeyboardShortcut.KeyboardShortcut.eventHasCtrlEquivalentKey(keyboardEvent)) {
1466
- if (keyboardEvent.key === 'i') {
1467
- keyboardEvent.consume(true);
1468
- await this.prompt.onAiCodeCompletionTeaserActionKeyDown(event);
1469
- } else if (keyboardEvent.key === 'x') {
1470
- keyboardEvent.consume(true);
1471
- this.prompt.onAiCodeCompletionTeaserDismissKeyDown(event);
1472
- }
1473
- }
1474
- }
1475
-
1476
1492
  private printResult(
1477
1493
  result: SDK.RemoteObject.RemoteObject|null, originatingConsoleMessage: SDK.ConsoleModel.ConsoleMessage,
1478
1494
  exceptionDetails?: Protocol.Runtime.ExceptionDetails): void {
@@ -1697,29 +1713,14 @@ export class ConsoleView extends UI.Widget.VBox implements
1697
1713
  return distanceToPromptEditorBottom <= 2;
1698
1714
  }
1699
1715
 
1700
- private onAiCodeCompletionSettingChanged(): void {
1701
- if (this.aiCodeCompletionSetting.get() && this.isAiCodeCompletionEnabled()) {
1702
- this.createAiCodeCompletionSummaryToolbar();
1703
- } else if (this.aiCodeCompletionSummaryToolbarContainer) {
1704
- this.aiCodeCompletionSummaryToolbarContainer.remove();
1705
- this.aiCodeCompletionSummaryToolbarContainer = undefined;
1706
- this.aiCodeCompletionSummaryToolbar = undefined;
1707
- }
1716
+ private setupAiCodeCompletion(): void {
1717
+ this.createAiCodeCompletionSummaryToolbar();
1708
1718
  }
1709
1719
 
1710
- private isAiCodeCompletionEnabled(): boolean {
1711
- const devtoolsLocale = i18n.DevToolsLocale.DevToolsLocale.instance();
1712
- const aidaAvailability = Root.Runtime.hostConfig.aidaAvailability;
1713
- if (!devtoolsLocale.locale.startsWith('en-')) {
1714
- return false;
1715
- }
1716
- if (aidaAvailability?.blockedByGeo) {
1717
- return false;
1718
- }
1719
- if (aidaAvailability?.blockedByAge) {
1720
- return false;
1721
- }
1722
- return Boolean(Root.Runtime.hostConfig.devToolsAiCodeCompletion?.enabled);
1720
+ private cleanupAiCodeCompletion(): void {
1721
+ this.aiCodeCompletionSummaryToolbarContainer?.remove();
1722
+ this.aiCodeCompletionSummaryToolbarContainer = undefined;
1723
+ this.aiCodeCompletionSummaryToolbar = undefined;
1723
1724
  }
1724
1725
  }
1725
1726
 
@@ -379,13 +379,18 @@ export class ConsoleViewMessage implements ConsoleViewportElement {
379
379
  }
380
380
 
381
381
  setInsight(insight: HTMLElement): void {
382
- this.elementInternal?.querySelector('devtools-console-insight')?.remove();
382
+ this.elementInternal?.querySelector('.devtools-console-insight')?.remove();
383
383
  this.elementInternal?.append(insight);
384
384
  this.elementInternal?.classList.toggle('has-insight', true);
385
385
  insight.addEventListener('close', () => {
386
386
  Host.userMetrics.actionTaken(Host.UserMetrics.Action.InsightClosed);
387
387
  this.elementInternal?.classList.toggle('has-insight', false);
388
- this.elementInternal?.removeChild(insight);
388
+ const widget = UI.Widget.Widget.get(insight);
389
+ if (widget) {
390
+ widget.detach();
391
+ } else {
392
+ this.elementInternal?.removeChild(insight);
393
+ }
389
394
  this.#teaser?.setInactive(false);
390
395
  }, {once: true});
391
396
  this.#teaser?.setInactive(true);
@@ -1526,7 +1531,7 @@ export class ConsoleViewMessage implements ConsoleViewportElement {
1526
1531
  return false;
1527
1532
  }
1528
1533
  if (!Common.Settings.Settings.instance().moduleSetting('console-insight-teasers-enabled').getIfNotDisabled() ||
1529
- !AiAssistanceModel.BuiltInAi.BuiltInAi.instance().hasSession()) {
1534
+ !AiAssistanceModel.BuiltInAi.BuiltInAi.instance().isEventuallyAvailable()) {
1530
1535
  return false;
1531
1536
  }
1532
1537
  const devtoolsLocale = i18n.DevToolsLocale.DevToolsLocale.instance();
@@ -13,6 +13,8 @@
13
13
 
14
14
  .response-container {
15
15
  height: 85px;
16
+ display: flex;
17
+ flex-direction: column;
16
18
  }
17
19
 
18
20
  @keyframes gradient {
@@ -94,4 +96,25 @@
94
96
  margin-left: auto;
95
97
  }
96
98
  }
99
+
100
+ .progress-line {
101
+ display: flex;
102
+ align-items: center;
103
+ flex-grow: 1;
104
+
105
+ .label {
106
+ margin-right: var(--sys-size-6);
107
+ }
108
+
109
+ .indicator-container {
110
+ height: var(--sys-size-5);
111
+ background-color: var(--sys-color-surface5);
112
+ flex-grow: 1
113
+ }
114
+
115
+ .indicator {
116
+ background-color: var(--sys-color-primary);
117
+ height: 100%;
118
+ }
119
+ }
97
120
  }
@@ -538,7 +538,7 @@
538
538
  height: 0;
539
539
  }
540
540
 
541
- devtools-console-insight {
541
+ .devtools-console-insight {
542
542
  margin: 9px 22px 11px 24px;
543
543
  }
544
544