chrome-devtools-frontend 1.0.1695017 → 1.0.1696961

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 (247) hide show
  1. package/eslint.config.mjs +4 -1
  2. package/front_end/core/common/Base64.ts +14 -4
  3. package/front_end/core/common/Gzip.ts +1 -1
  4. package/front_end/core/common/Object.ts +0 -1
  5. package/front_end/core/platform/Size.ts +43 -0
  6. package/front_end/core/platform/api/HostRuntime.ts +14 -0
  7. package/front_end/core/platform/browser/HostRuntime.ts +66 -0
  8. package/front_end/core/platform/node/HostRuntime.ts +12 -3
  9. package/front_end/core/platform/platform.ts +1 -0
  10. package/front_end/core/sdk/AccessibilityModel.ts +2 -2
  11. package/front_end/core/sdk/CSSMatchedStyles.ts +2 -0
  12. package/front_end/core/sdk/CSSPropertyParserMatchers.ts +29 -0
  13. package/front_end/core/sdk/CSSStyleSheetHeader.ts +2 -2
  14. package/front_end/core/sdk/ConsoleModel.ts +3 -3
  15. package/front_end/core/sdk/DOMModel.ts +10 -6
  16. package/front_end/core/sdk/DebuggerModel.ts +6 -0
  17. package/front_end/core/sdk/NetworkRequest.ts +19 -19
  18. package/front_end/core/sdk/RuntimeModel.ts +5 -0
  19. package/front_end/core/sdk/Script.ts +2 -2
  20. package/front_end/core/sdk/ServerTiming.ts +6 -6
  21. package/front_end/core/sdk/SourceMap.ts +112 -14
  22. package/front_end/core/sdk/SourceMapRangeMappings.ts +43 -0
  23. package/front_end/core/sdk/SourceMapScopeChainEntry.ts +15 -10
  24. package/front_end/core/sdk/SourceMapScopesInfo.ts +92 -10
  25. package/front_end/core/sdk/sdk.ts +2 -0
  26. package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshot.ts +1 -1
  27. package/front_end/entrypoints/inspector_main/RenderingOptions.ts +6 -6
  28. package/front_end/entrypoints/main/MainImpl.ts +1 -1
  29. package/front_end/generated/InspectorBackendCommands.ts +6 -3
  30. package/front_end/generated/protocol-mapping.d.ts +7 -0
  31. package/front_end/generated/protocol-proxy-api.d.ts +5 -0
  32. package/front_end/generated/protocol.ts +36 -3
  33. package/front_end/models/ai_assistance/AiAgent2.ts +27 -27
  34. package/front_end/models/ai_assistance/agents/AiAgent.ts +4 -0
  35. package/front_end/models/ai_assistance/agents/PerformanceAgent.snapshot.txt +2 -2
  36. package/front_end/models/ai_assistance/contexts/AccessibilityContext.ts +1 -0
  37. package/front_end/models/ai_assistance/contexts/DOMNodeContext.ts +5 -4
  38. package/front_end/models/ai_assistance/contexts/FileContext.ts +1 -0
  39. package/front_end/models/ai_assistance/contexts/PerformanceTraceContext.ts +1 -0
  40. package/front_end/models/ai_assistance/contexts/RequestContext.ts +1 -0
  41. package/front_end/models/ai_assistance/contexts/StorageContext.ts +1 -0
  42. package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.snapshot.txt +5 -5
  43. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +6 -6
  44. package/front_end/models/ai_assistance/tools/GetElementAccessibilityDetails.ts +5 -8
  45. package/front_end/models/ai_assistance/tools/GetNetworkRequestDetails.ts +4 -8
  46. package/front_end/models/ai_assistance/tools/GetSourceContent.ts +7 -5
  47. package/front_end/models/ai_assistance/tools/GetStyles.ts +10 -6
  48. package/front_end/models/ai_assistance/tools/ListSources.ts +26 -7
  49. package/front_end/models/ai_assistance/tools/ResolveDevtoolsNodePath.ts +5 -10
  50. package/front_end/models/ai_assistance/tools/Tool.ts +8 -1
  51. package/front_end/models/bindings/FileUtils.ts +18 -40
  52. package/front_end/models/bindings/TempFile.ts +5 -12
  53. package/front_end/models/comment_manager/CommentManager.ts +30 -6
  54. package/front_end/models/crux-manager/CrUXManager.ts +8 -5
  55. package/front_end/models/emulation/DeviceModeModel.ts +55 -105
  56. package/front_end/models/heap_snapshot/HeapSnapshotProxy.ts +1 -1
  57. package/front_end/models/issues_manager/CookieIssue.ts +1 -1
  58. package/front_end/models/issues_manager/DeprecationIssue.ts +2 -2
  59. package/front_end/models/javascript_metadata/NativeFunctions.ts +1 -5
  60. package/front_end/models/live-metrics/LiveMetrics.ts +1 -1
  61. package/front_end/models/persistence/IsolatedFileSystem.ts +16 -23
  62. package/front_end/models/trace/insights/DuplicatedJavaScript.ts +1 -1
  63. package/front_end/models/trace/insights/INPBreakdown.ts +1 -1
  64. package/front_end/models/trace/insights/ImageDelivery.ts +3 -3
  65. package/front_end/models/trace/insights/LCPDiscovery.ts +2 -2
  66. package/front_end/models/trace/insights/NetworkDependencyTree.ts +3 -3
  67. package/front_end/models/trace/insights/Viewport.ts +1 -1
  68. package/front_end/models/trace/types/Overlays.ts +2 -2
  69. package/front_end/panels/accessibility/AccessibilityNodeView.ts +2 -2
  70. package/front_end/panels/accessibility/AccessibilitySubPane.ts +0 -1
  71. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +74 -18
  72. package/front_end/panels/ai_assistance/components/AIv2MarkdownRenderer.ts +14 -3
  73. package/front_end/panels/ai_assistance/components/ChatInput.ts +1 -1
  74. package/front_end/panels/ai_assistance/components/ChatMessage.ts +1 -1
  75. package/front_end/panels/animation/AnimationUI.ts +1 -1
  76. package/front_end/panels/application/AppManifestView.ts +9 -11
  77. package/front_end/panels/application/ApplicationPanelSidebar.ts +9 -9
  78. package/front_end/panels/application/BackgroundServiceView.ts +1 -1
  79. package/front_end/panels/application/CookieItemsView.ts +1 -1
  80. package/front_end/panels/application/DOMStorageItemsView.ts +1 -1
  81. package/front_end/panels/application/DeviceBoundSessionsView.ts +2 -2
  82. package/front_end/panels/application/FrameDetailsView.ts +5 -5
  83. package/front_end/panels/application/IndexedDBViews.ts +2 -2
  84. package/front_end/panels/application/KeyValueStorageItemsView.ts +1 -2
  85. package/front_end/panels/application/ReportingApiView.ts +1 -1
  86. package/front_end/panels/application/ServiceWorkerCacheTreeElement.ts +1 -1
  87. package/front_end/panels/application/ServiceWorkersView.ts +1 -1
  88. package/front_end/panels/application/StorageBucketsTreeElement.ts +1 -1
  89. package/front_end/panels/application/WebMCPView.ts +1 -1
  90. package/front_end/panels/application/components/AdsView.ts +136 -7
  91. package/front_end/panels/application/components/BackForwardCacheStrings.ts +116 -117
  92. package/front_end/panels/application/components/BackForwardCacheView.ts +7 -7
  93. package/front_end/panels/application/components/BounceTrackingMitigationsView.ts +2 -2
  94. package/front_end/panels/application/components/PermissionsPolicySection.ts +2 -2
  95. package/front_end/panels/application/components/ProtocolHandlersView.ts +1 -1
  96. package/front_end/panels/application/components/ReportsGrid.ts +1 -1
  97. package/front_end/panels/application/components/StorageMetadataView.ts +1 -1
  98. package/front_end/panels/application/components/TrustTokensView.ts +3 -3
  99. package/front_end/panels/application/components/adScriptsTable.css +22 -0
  100. package/front_end/panels/application/preloading/PreloadingView.ts +20 -22
  101. package/front_end/panels/application/preloading/components/MismatchedPreloadingGrid.ts +9 -9
  102. package/front_end/panels/application/preloading/components/PreloadingDetailsReportView.ts +31 -33
  103. package/front_end/panels/application/preloading/components/PreloadingDisabledInfobar.ts +23 -23
  104. package/front_end/panels/application/preloading/components/PreloadingGrid.ts +4 -4
  105. package/front_end/panels/application/preloading/components/PreloadingString.ts +161 -161
  106. package/front_end/panels/application/preloading/components/RuleSetDetailsView.ts +2 -6
  107. package/front_end/panels/application/preloading/components/RuleSetGrid.ts +8 -8
  108. package/front_end/panels/application/preloading/components/UsedPreloadingView.ts +32 -32
  109. package/front_end/panels/application/resourcesPanel.css +17 -17
  110. package/front_end/panels/browser_debugger/DOMBreakpointsSidebarPane.ts +1 -1
  111. package/front_end/panels/changes/ChangesView.ts +1 -1
  112. package/front_end/panels/common/AiCodeCompletionSummaryToolbar.ts +1 -1
  113. package/front_end/panels/common/CPUThrottlingOption.ts +0 -1
  114. package/front_end/panels/common/GdpSignUpDialog.ts +3 -4
  115. package/front_end/panels/common/GeminiRebrandPromoDialog.ts +1 -1
  116. package/front_end/panels/console/ConsoleInsightTeaser.ts +1 -1
  117. package/front_end/panels/console/ConsolePinPane.ts +0 -1
  118. package/front_end/panels/console/ConsoleView.ts +2 -3
  119. package/front_end/panels/console/ConsoleViewMessage.ts +2 -3
  120. package/front_end/panels/coverage/CoverageListView.ts +6 -6
  121. package/front_end/panels/coverage/CoverageView.ts +7 -7
  122. package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +1 -1
  123. package/front_end/panels/elements/CSSRuleValidator.ts +10 -10
  124. package/front_end/panels/elements/ElementsPanel.ts +3 -3
  125. package/front_end/panels/elements/ElementsTreeElement.ts +1 -1
  126. package/front_end/panels/elements/ElementsTreeOutline.ts +1 -1
  127. package/front_end/panels/elements/LayoutPane.ts +1 -1
  128. package/front_end/panels/elements/StylePropertyTreeElement.ts +85 -2
  129. package/front_end/panels/elements/StylesSidebarPane.ts +3 -3
  130. package/front_end/panels/elements/stylePropertiesTreeOutline.css +2 -1
  131. package/front_end/panels/emulation/DeviceModeView.ts +1 -1
  132. package/front_end/panels/event_listeners/EventListenersView.ts +57 -89
  133. package/front_end/panels/explain/components/ConsoleInsight.ts +4 -4
  134. package/front_end/panels/issues/AffectedPartitioningBlobURLView.ts +3 -3
  135. package/front_end/panels/issues/IssuesPane.ts +1 -1
  136. package/front_end/panels/layer_viewer/Layers3DView.ts +4 -4
  137. package/front_end/panels/layers/LayerTreeModel.ts +1 -1
  138. package/front_end/panels/lighthouse/LighthouseController.ts +4 -4
  139. package/front_end/panels/lighthouse/LighthouseStatusView.ts +10 -10
  140. package/front_end/panels/lighthouse/LighthouseTimespanView.ts +2 -2
  141. package/front_end/panels/linear_memory_inspector/LinearMemoryInspectorController.ts +1 -1
  142. package/front_end/panels/linear_memory_inspector/LinearMemoryInspectorPane.ts +1 -1
  143. package/front_end/panels/media/MainView.ts +2 -2
  144. package/front_end/panels/mobile_throttling/CalibrationController.ts +4 -1
  145. package/front_end/panels/mobile_throttling/NetworkPanelIndicator.ts +1 -1
  146. package/front_end/panels/mobile_throttling/ThrottlingManager.ts +10 -0
  147. package/front_end/panels/mobile_throttling/ThrottlingSettingsTab.ts +3 -3
  148. package/front_end/panels/network/NetworkConfigView.ts +26 -16
  149. package/front_end/panels/network/NetworkItemView.ts +1 -1
  150. package/front_end/panels/network/NetworkLogView.ts +4 -5
  151. package/front_end/panels/network/NetworkPanel.ts +1 -1
  152. package/front_end/panels/network/RequestConditionsDrawer.ts +3 -3
  153. package/front_end/panels/network/RequestCookiesView.ts +2 -2
  154. package/front_end/panels/network/RequestPayloadView.ts +0 -2
  155. package/front_end/panels/network/RequestTimingView.ts +1 -1
  156. package/front_end/panels/network/ResourceChunkView.ts +1 -1
  157. package/front_end/panels/network/components/HeaderSectionRow.ts +2 -2
  158. package/front_end/panels/network/components/RequestHeaderSection.ts +1 -1
  159. package/front_end/panels/network/components/RequestTrustTokensView.ts +7 -7
  160. package/front_end/panels/network/components/ResponseHeaderSection.ts +3 -4
  161. package/front_end/panels/network/network-meta.ts +1 -1
  162. package/front_end/panels/profiler/HeapDetachedElementsView.ts +1 -1
  163. package/front_end/panels/profiler/HeapSnapshotGridNodes.ts +10 -10
  164. package/front_end/panels/profiler/HeapSnapshotView.ts +1 -1
  165. package/front_end/panels/profiler/IsolateSelector.ts +4 -4
  166. package/front_end/panels/profiler/ModuleUIStrings.ts +1 -1
  167. package/front_end/panels/profiler/ProfilesPanel.ts +2 -3
  168. package/front_end/panels/recorder/RecorderPanel.ts +1 -1
  169. package/front_end/panels/search/SearchView.ts +6 -6
  170. package/front_end/panels/security/SecurityModel.ts +4 -4
  171. package/front_end/panels/security/SecurityPanel.ts +83 -54
  172. package/front_end/panels/security/SecurityPanelSidebar.ts +41 -5
  173. package/front_end/panels/security/sidebar.css +9 -10
  174. package/front_end/panels/sensors/SensorsView.ts +1 -1
  175. package/front_end/panels/settings/AISettingsTab.ts +9 -9
  176. package/front_end/panels/settings/FrameworkIgnoreListSettingsTab.ts +1 -1
  177. package/front_end/panels/settings/KeybindsSettingsTab.ts +2 -2
  178. package/front_end/panels/settings/SettingsScreen.ts +156 -109
  179. package/front_end/panels/settings/WorkspaceSettingsTab.ts +1 -1
  180. package/front_end/panels/settings/components/SyncSection.ts +3 -3
  181. package/front_end/panels/settings/emulation/DevicesSettingsTab.ts +13 -13
  182. package/front_end/panels/settings/emulation/components/UserAgentClientHintsForm.ts +2 -2
  183. package/front_end/panels/snippets/SnippetsQuickOpen.ts +1 -1
  184. package/front_end/panels/sources/CSSPlugin.ts +3 -3
  185. package/front_end/panels/sources/DebuggerPlugin.ts +4 -4
  186. package/front_end/panels/sources/NavigatorView.ts +3 -3
  187. package/front_end/panels/sources/OutlineQuickOpen.ts +1 -1
  188. package/front_end/panels/sources/PersistenceActions.ts +2 -2
  189. package/front_end/panels/sources/SourcesNavigator.ts +5 -5
  190. package/front_end/panels/sources/TabbedEditorContainer.ts +1 -1
  191. package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +0 -1
  192. package/front_end/panels/sources/components/HeadersView.ts +1 -1
  193. package/front_end/panels/timeline/LayoutShiftsTrackAppender.ts +1 -1
  194. package/front_end/panels/timeline/TimelinePaintProfilerView.ts +1 -1
  195. package/front_end/panels/timeline/TimelineUIUtils.ts +0 -1
  196. package/front_end/panels/timeline/components/ExportTraceOptions.ts +2 -2
  197. package/front_end/panels/timeline/components/FieldSettingsDialog.ts +4 -4
  198. package/front_end/panels/timeline/components/IgnoreListSetting.ts +1 -1
  199. package/front_end/panels/timeline/components/LiveMetricsView.ts +7 -7
  200. package/front_end/panels/timeline/components/MetricCard.ts +3 -3
  201. package/front_end/panels/timeline/components/MetricCompareStrings.ts +12 -14
  202. package/front_end/panels/timeline/components/OriginMap.ts +3 -3
  203. package/front_end/panels/timeline/components/SidebarAnnotationsTab.ts +4 -4
  204. package/front_end/panels/timeline/overlays/OverlaysImpl.ts +6 -0
  205. package/front_end/panels/timeline/overlays/components/EntryLabelOverlay.ts +1 -1
  206. package/front_end/panels/timeline/overlays/components/TimespanBreakdownOverlay.ts +3 -1
  207. package/front_end/panels/timeline/timelineMiniMap.css +9 -9
  208. package/front_end/panels/timeline/timelineStatusDialog.css +9 -9
  209. package/front_end/panels/web_audio/WebAudioView.ts +1 -1
  210. package/front_end/panels/webauthn/WebauthnPane.ts +1 -1
  211. package/front_end/third_party/chromium/README.chromium +1 -1
  212. package/front_end/ui/comments/CommentAnchorResolver.ts +114 -3
  213. package/front_end/ui/comments/CommentOverlayManager.ts +95 -16
  214. package/front_end/ui/components/dialogs/TypeToAllowDialog.ts +1 -1
  215. package/front_end/ui/components/markdown_view/codeBlock.css +3 -8
  216. package/front_end/ui/components/markdown_view/markdownView.css +2 -7
  217. package/front_end/ui/components/panel_feedback/PanelFeedback.ts +2 -2
  218. package/front_end/ui/components/panel_feedback/PreviewToggle.ts +1 -1
  219. package/front_end/ui/components/request_link_icon/RequestLinkIcon.ts +1 -1
  220. package/front_end/ui/components/text_editor/AiCodeCompletionTeaser.ts +4 -4
  221. package/front_end/ui/components/text_editor/AiCodeGenerationTeaser.ts +3 -3
  222. package/front_end/{models → ui}/geometry/GeometryImpl.ts +4 -40
  223. package/front_end/ui/legacy/GlassPane.ts +1 -1
  224. package/front_end/ui/legacy/RemoteDebuggingTerminatedScreen.ts +2 -2
  225. package/front_end/ui/legacy/SoftDropDown.ts +1 -1
  226. package/front_end/ui/legacy/SplitWidget.ts +1 -1
  227. package/front_end/ui/legacy/SuggestBox.ts +1 -1
  228. package/front_end/ui/legacy/TabbedPane.ts +1 -1
  229. package/front_end/ui/legacy/TargetCrashedScreen.ts +2 -2
  230. package/front_end/ui/legacy/Treeoutline.ts +5 -1
  231. package/front_end/ui/legacy/UIUtils.ts +1 -1
  232. package/front_end/ui/legacy/Widget.ts +1 -1
  233. package/front_end/ui/legacy/components/data_grid/DataGrid.ts +1 -1
  234. package/front_end/ui/legacy/components/inline_editor/AnimationTimingModel.ts +1 -1
  235. package/front_end/ui/legacy/components/inline_editor/AnimationTimingUI.ts +1 -1
  236. package/front_end/ui/legacy/components/inline_editor/BezierUI.ts +1 -1
  237. package/front_end/ui/legacy/components/inline_editor/CSSAngleUtils.ts +1 -1
  238. package/front_end/ui/legacy/components/inline_editor/CSSShadowEditor.ts +1 -1
  239. package/front_end/ui/legacy/components/inline_editor/PositionAreaEditor.ts +204 -17
  240. package/front_end/ui/legacy/components/inline_editor/positionAreaEditor.css +6 -0
  241. package/front_end/ui/legacy/components/object_ui/ObjectPopoverHelper.ts +1 -1
  242. package/front_end/ui/legacy/components/perf_ui/FilmStripView.ts +1 -1
  243. package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +7 -9
  244. package/front_end/ui/legacy/components/quick_open/FilteredListWidget.ts +1 -1
  245. package/front_end/ui/visual_logging/KnownContextValues.ts +12 -0
  246. package/package.json +7 -4
  247. /package/front_end/{models → ui}/geometry/geometry.ts +0 -0
@@ -111,7 +111,7 @@ const UIStrings = {
111
111
  /**
112
112
  * @description Disclaimer text right after the chat input.
113
113
  */
114
- inputDisclaimerForEmptyState: 'This is an experimental AI feature and won’t always get it right.',
114
+ inputDisclaimerForEmptyState: 'This is an experimental AI feature and won’t always get it right',
115
115
  /**
116
116
  * @description The message shown in a toast when the response is copied to the clipboard.
117
117
  */
@@ -182,10 +182,6 @@ const UIStringsNotTranslate = {
182
182
  * @description Placeholder text for the chat UI input with branding Gemini (do not translate)
183
183
  */
184
184
  inputPlaceholderForNoContextBranded: 'Ask Gemini',
185
- /**
186
- * @description Placeholder text for the chat UI input when AIAgent2 is enabled.
187
- */
188
- inputPlaceholderForV2: 'Ask a question (AIAgent2 enabled)',
189
185
  /**
190
186
  * @description Placeholder text for the chat UI input.
191
187
  */
@@ -289,6 +285,9 @@ async function getEmptyStateSuggestions(conversation?: AiAssistanceModel.AiConve
289
285
  function createV2MarkdownRenderer(conversation?: AiAssistanceModel.AiConversation.AiConversation):
290
286
  AIv2MarkdownRenderer {
291
287
  const options: AIv2MarkdownRendererOptions = {};
288
+ if (conversation) {
289
+ options.getEstablishedOrigin = () => conversation.origin;
290
+ }
292
291
  const primaryTarget = SDK.TargetManager.TargetManager.instance().primaryPageTarget();
293
292
  const domModel = primaryTarget?.model(SDK.DOMModel.DOMModel);
294
293
  const resourceTreeModel = primaryTarget?.model(SDK.ResourceTreeModel.ResourceTreeModel);
@@ -998,7 +997,8 @@ export class AiAssistancePanel extends UI.Panel.Panel {
998
997
  #updateConversationState(
999
998
  conversation?: AiAssistanceModel.AiConversation.AiConversation,
1000
999
  ): void {
1001
- if (this.#conversation !== conversation) {
1000
+ const isNewConversation = this.#conversation !== conversation;
1001
+ if (isNewConversation) {
1002
1002
  // Cancel any previous conversation
1003
1003
  this.#cancel();
1004
1004
  this.#messages = [];
@@ -1030,13 +1030,22 @@ export class AiAssistancePanel extends UI.Panel.Panel {
1030
1030
  const context = this.#getConversationContext(this.#getDefaultConversationType());
1031
1031
  this.#conversation.setContext(context);
1032
1032
  } else {
1033
+ const previousContext = this.#conversation.selectedContext;
1034
+ const previousItem = previousContext?.getItem();
1033
1035
  const context = this.#getConversationContext(this.#conversation.type);
1036
+ const newItem = context?.getItem();
1034
1037
  // Don't reset to the context selection agent if
1035
1038
  // we remove context automatically.
1036
1039
  // Require explicit user action.
1037
1040
  if (context || !AiAssistanceModel.AiUtils.isContextSelectionEnabled()) {
1038
1041
  this.#conversation.setContext(context);
1039
1042
  }
1043
+
1044
+ // Log when the user selects a different target mid-conversation (ContextA -> ContextB).
1045
+ if (AiAssistanceModel.AiUtils.isContextSelectionEnabled() && !this.#conversation.isReadOnly &&
1046
+ previousItem !== newItem && previousContext && context) {
1047
+ void VisualLogging.logFunctionCall('ai-v2-context-user-change', getContextTypeString(context));
1048
+ }
1040
1049
  }
1041
1050
  }
1042
1051
 
@@ -1297,6 +1306,12 @@ export class AiAssistancePanel extends UI.Panel.Panel {
1297
1306
  return true;
1298
1307
  }
1299
1308
 
1309
+ #getContextlessPlaceholder(): Platform.UIString.LocalizedString {
1310
+ return AiAssistanceModel.AiUtils.isGeminiBranding() ?
1311
+ lockedString(UIStringsNotTranslate.inputPlaceholderForNoContextBranded) :
1312
+ lockedString(UIStringsNotTranslate.inputPlaceholderForNoContext);
1313
+ }
1314
+
1300
1315
  #getChatInputPlaceholder(): Platform.UIString.LocalizedString {
1301
1316
  if (!this.#conversation) {
1302
1317
  return i18nString(UIStrings.followTheSteps);
@@ -1306,8 +1321,12 @@ export class AiAssistancePanel extends UI.Panel.Panel {
1306
1321
  return lockedString(UIStringsNotTranslate.crossOriginError);
1307
1322
  }
1308
1323
 
1324
+ // The unified V2 agent answers questions across every domain, but the
1325
+ // conversation type still tracks whichever context happens to be attached.
1326
+ // Falling through to the switch below would therefore describe that single
1327
+ // context, for example 'Ask a question about the selected element'.
1309
1328
  if (Root.Runtime.hostConfig.devToolsAiV2Architecture?.enabled) {
1310
- return lockedString(UIStringsNotTranslate.inputPlaceholderForV2);
1329
+ return this.#getContextlessPlaceholder();
1311
1330
  }
1312
1331
 
1313
1332
  switch (this.#conversation.type) {
@@ -1341,11 +1360,7 @@ export class AiAssistancePanel extends UI.Panel.Panel {
1341
1360
  case AiAssistanceModel.AiHistoryStorage.ConversationType.STORAGE:
1342
1361
  return lockedString(UIStringsNotTranslate.inputPlaceholderForNoContext);
1343
1362
  case AiAssistanceModel.AiHistoryStorage.ConversationType.NONE:
1344
-
1345
- if (AiAssistanceModel.AiUtils.isGeminiBranding()) {
1346
- return lockedString(UIStringsNotTranslate.inputPlaceholderForNoContextBranded);
1347
- }
1348
- return lockedString(UIStringsNotTranslate.inputPlaceholderForNoContext);
1363
+ return this.#getContextlessPlaceholder();
1349
1364
  }
1350
1365
  }
1351
1366
 
@@ -1407,12 +1422,22 @@ export class AiAssistancePanel extends UI.Panel.Panel {
1407
1422
  }
1408
1423
 
1409
1424
  #handleContextRemoved(): void {
1425
+ const previousContext = this.#conversation?.selectedContext;
1410
1426
  this.#conversation?.setContext(null);
1427
+ // Log when the user removes the active context (ContextA -> null).
1428
+ if (AiAssistanceModel.AiUtils.isContextSelectionEnabled() && previousContext) {
1429
+ void VisualLogging.logFunctionCall('ai-v2-context-user-removal', getContextTypeString(previousContext));
1430
+ }
1411
1431
  this.requestUpdate();
1412
1432
  }
1413
1433
 
1414
1434
  #handleContextAdd(): void {
1415
- this.#conversation?.setContext(this.#getConversationContext(this.#getDefaultConversationType()));
1435
+ const context = this.#getConversationContext(this.#getDefaultConversationType());
1436
+ this.#conversation?.setContext(context);
1437
+ // Log when the user adds context (null -> ContextB).
1438
+ if (AiAssistanceModel.AiUtils.isContextSelectionEnabled() && context) {
1439
+ void VisualLogging.logFunctionCall('ai-v2-context-user-add', getContextTypeString(context));
1440
+ }
1416
1441
  this.requestUpdate();
1417
1442
  }
1418
1443
 
@@ -1487,7 +1512,9 @@ export class AiAssistancePanel extends UI.Panel.Panel {
1487
1512
  }
1488
1513
 
1489
1514
  let conversation = this.#conversation;
1490
- if (!this.#conversation || this.#conversation.type !== targetConversationType || this.#conversation.isEmpty) {
1515
+ const shouldCreateConversation =
1516
+ !this.#conversation || this.#conversation.type !== targetConversationType || this.#conversation.isEmpty;
1517
+ if (shouldCreateConversation) {
1491
1518
  conversation = new AiAssistanceModel.AiConversation.AiConversation({
1492
1519
  type: targetConversationType,
1493
1520
  data: [],
@@ -1639,16 +1666,20 @@ export class AiAssistancePanel extends UI.Panel.Panel {
1639
1666
  this.#selectedRequest = data;
1640
1667
  } else if (data instanceof AiAssistanceModel.PerformanceTraceContext.PerformanceTraceContext) {
1641
1668
  this.#selectedPerformanceTrace = data;
1642
-
1643
1669
  } else if (data instanceof AiAssistanceModel.AccessibilityContext.AccessibilityContext) {
1644
1670
  this.#selectedAccessibility = data;
1645
1671
  } else if (data instanceof AiAssistanceModel.StorageContext.StorageContext) {
1646
1672
  this.#selectedStorage = data;
1647
1673
  }
1648
1674
 
1649
- void VisualLogging.logFunctionCall(`context-change-${this.#conversation?.type}`);
1650
-
1651
- this.requestUpdate();
1675
+ if (this.#conversation) {
1676
+ void VisualLogging.logFunctionCall(`context-change-${this.#conversation.type}`);
1677
+ // Log when the agent selects context (* -> ContextB).
1678
+ if (AiAssistanceModel.AiUtils.isContextSelectionEnabled() &&
1679
+ data instanceof AiAssistanceModel.AiAgent.ConversationContext) {
1680
+ void VisualLogging.logFunctionCall('ai-v2-context-agent-change', getContextTypeString(data));
1681
+ }
1682
+ }
1652
1683
  };
1653
1684
 
1654
1685
  async #handleInspectElement(): Promise<SDK.DOMModel.DOMNode|null> {
@@ -2016,6 +2047,31 @@ export function getResponseMarkdown(message: ModelChatMessage): string {
2016
2047
  return contentParts.join('\n\n');
2017
2048
  }
2018
2049
 
2050
+ /**
2051
+ * Visual logging context identifiers used to track conversation context lifecycle events.
2052
+ *
2053
+ * Context change telemetry tracks four transitions:
2054
+ * - User removal: ContextA -> null ('ai-v2-context-user-removal').
2055
+ * - User addition: null -> ContextB ('ai-v2-context-user-add').
2056
+ * - User selection change: ContextA -> ContextB ('ai-v2-context-user-change').
2057
+ * - Agent auto-selection: * -> ContextB ('ai-v2-context-agent-change').
2058
+ *
2059
+ * Telemetry only logs when context selection is enabled and the conversation is active.
2060
+ */
2061
+ export type ConversationContextTypeString =
2062
+ 'ai-context-none'|AiAssistanceModel.AiAgent.ConversationContextJslog|'ai-context-unknown';
2063
+
2064
+ /**
2065
+ * Resolves the visual logging context identifier for a given conversation context.
2066
+ */
2067
+ export function getContextTypeString(context: AiAssistanceModel.AiAgent.ConversationContext<unknown>|null|
2068
+ undefined): ConversationContextTypeString {
2069
+ if (!context) {
2070
+ return 'ai-context-none';
2071
+ }
2072
+ return context.jslogContext ?? 'ai-context-unknown';
2073
+ }
2074
+
2019
2075
  export class ActionDelegate implements UI.ActionRegistration.ActionDelegate {
2020
2076
  handleAction(_context: UI.Context.Context, actionId: string, opts?: Record<string, unknown>): boolean {
2021
2077
  switch (actionId) {
@@ -20,6 +20,14 @@ const {until} = Lit.Directives;
20
20
  export interface AIv2MarkdownRendererOptions {
21
21
  mainFrameId?: string;
22
22
  mainDocumentURL?: Platform.DevToolsPath.UrlString;
23
+ /**
24
+ * Retrieves the established origin locked for the active conversation.
25
+ * Required to authorize #file-<id> links and prevent cross-origin file leakage.
26
+ *
27
+ * TODO(crbug.com/559522248): Defer renderer instantiation until a conversation
28
+ * starts so this origin can be passed as a mandatory, non-getter property.
29
+ */
30
+ getEstablishedOrigin?: () => SDK.SecurityOrigin.SecurityOrigin | undefined;
23
31
  lookupTraceEvent?: (key: string) => Trace.Types.Events.Event | null;
24
32
  }
25
33
 
@@ -110,8 +118,11 @@ export class AIv2MarkdownRenderer extends MarkdownView.MarkdownView.MarkdownInsi
110
118
  return html`${fallbackText}`;
111
119
  }
112
120
  if (href.startsWith('#file-')) {
113
- const file = AiAssistanceModel.ListSources.ListSourcesTool.getUISourceCodes().find(
114
- file => AiAssistanceModel.ListSources.ListSourcesTool.uiSourceCodeId.get(file) === Number(href.substring(6)));
121
+ const fileId = Number(href.substring(6));
122
+ const origin = this.options.getEstablishedOrigin?.();
123
+ const file = (origin && Number.isInteger(fileId) && fileId > 0) ?
124
+ AiAssistanceModel.ListSources.ListSourcesTool.getSourceById(fileId, origin) :
125
+ undefined;
115
126
 
116
127
  if (file) {
117
128
  return this.#revealableLink(file, file.name());
@@ -209,7 +220,7 @@ export class AIv2MarkdownRenderer extends MarkdownView.MarkdownView.MarkdownInsi
209
220
 
210
221
  if (token.type === 'codespan') {
211
222
  // LLM likes outputting the link inside a codespan block.
212
- // Remove the codespan and render the link directly
223
+ // Remove the codespan and render the link directly.
213
224
  const matches = token.text.match(/^\[(.*)\]\((.+)\)$/);
214
225
  if (matches?.[2]) {
215
226
  const link = this.#renderLink(
@@ -75,7 +75,7 @@ const UIStringsNotTranslate = {
75
75
  /**
76
76
  * @description Text displayed when the chat input is disabled due to reading past conversation.
77
77
  */
78
- pastConversation: 'You’re viewing a past conversation.',
78
+ pastConversation: 'You’re viewing a past conversation',
79
79
  /**
80
80
  * @description Message displayed in toast in case of any failures while taking a screenshot of the page.
81
81
  */
@@ -114,7 +114,7 @@ const UIStringsNotTranslate = {
114
114
  /**
115
115
  * @description The error message when the LLM selects context from a different origin.
116
116
  */
117
- crossOriginError: 'I have selected the new context but you will have to start a new chat.',
117
+ crossOriginError: 'I have selected the new context but you will have to start a new chat',
118
118
  /**
119
119
  * @description The error message when the request payload is too large.
120
120
  */
@@ -6,7 +6,7 @@ import * as Common from '../../core/common/common.js';
6
6
  import * as i18n from '../../core/i18n/i18n.js';
7
7
  import * as Platform from '../../core/platform/platform.js';
8
8
  import type * as SDK from '../../core/sdk/sdk.js';
9
- import * as Geometry from '../../models/geometry/geometry.js';
9
+ import * as Geometry from '../../ui/geometry/geometry.js';
10
10
  import * as InlineEditor from '../../ui/legacy/components/inline_editor/inline_editor.js';
11
11
  import * as UI from '../../ui/legacy/legacy.js';
12
12
  import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
@@ -33,7 +33,7 @@ const UIStrings = {
33
33
  * @description Description text on manifests in App Manifest View of the Application panel which describes the app manifest view tab
34
34
  */
35
35
  manifestDescription:
36
- 'A manifest defines how your app appears on phone’s home screens and what the app looks like on launch.',
36
+ 'A manifest defines how your app appears on phone’s home screens and what the app looks like on launch',
37
37
  /**
38
38
  * @description Text in App Manifest View of the Application panel
39
39
  */
@@ -86,7 +86,7 @@ const UIStrings = {
86
86
  * @description Popup-text explaining what the App Id is used for.
87
87
  */
88
88
  appIdExplainer:
89
- 'This is used by the browser to know whether the manifest should be updating an existing application, or whether it refers to a new web app that can be installed.',
89
+ 'This is used by the browser to know whether the manifest should be updating an existing application, or whether it refers to a new web app that can be installed',
90
90
  /**
91
91
  * @description Text which is a hyperlink to more documentation
92
92
  */
@@ -142,7 +142,7 @@ const UIStrings = {
142
142
  /**
143
143
  * @description Text in App Manifest View of the Application panel
144
144
  */
145
- descriptionMayBeTruncated: 'Description may be truncated.',
145
+ descriptionMayBeTruncated: 'Description may be truncated',
146
146
  /**
147
147
  * @description Warning text about too many shortcuts
148
148
  */
@@ -210,7 +210,7 @@ const UIStrings = {
210
210
  * @example {100} PH1
211
211
  */
212
212
  manifestDoesNotContainASuitable:
213
- 'Manifest does not contain a suitable icon—PNG, SVG, or WebP format of at least {PH1}px is required, the \'`sizes`\' attribute must be set, and the \'`purpose`\' attribute, if set, must include \'`any`\'.',
213
+ 'Manifest does not contain a suitable icon—PNG, SVG, or WebP format of at least {PH1}px is required, the \'`sizes`\' attribute must be set, and the \'`purpose`\' attribute, if set, must include \'`any`\'',
214
214
  /**
215
215
  * @description Manifest installability error in the Application panel
216
216
  */
@@ -221,7 +221,7 @@ const UIStrings = {
221
221
  * @example {100} PH1
222
222
  */
223
223
  noSuppliedIconIsAtLeastSpxSquare:
224
- 'No supplied icon is at least {PH1} pixels square in `PNG`, `SVG`, or `WebP` format, with the purpose attribute unset or set to \'`any`\'.',
224
+ 'No supplied icon is at least {PH1} pixels square in `PNG`, `SVG`, or `WebP` format, with the purpose attribute unset or set to \'`any`\'',
225
225
  /**
226
226
  * @description Manifest installability error in the Application panel
227
227
  */
@@ -270,7 +270,7 @@ const UIStrings = {
270
270
  * @description Manifest installability error in the Application panel
271
271
  */
272
272
  preferrelatedapplicationsIsOnly:
273
- '\'`prefer_related_applications`\' is only supported on `Chrome` Beta and Stable channels on `Android`.',
273
+ '\'`prefer_related_applications`\' is only supported on `Chrome` Beta and Stable channels on `Android`',
274
274
  /**
275
275
  * @description Manifest installability error in the Application panel
276
276
  */
@@ -398,8 +398,7 @@ const UIStrings = {
398
398
  * @description Manifest installability error in the Application panel
399
399
  * @example {https://example.com/image.png} url
400
400
  */
401
- screenshotPixelSize:
402
- 'Screenshot {url} should specify a pixel size `[width]x[height]` instead of `any` as first size.',
401
+ screenshotPixelSize: 'Screenshot {url} should specify a pixel size `[width]x[height]` instead of `any` as first size',
403
402
  /**
404
403
  * @description Warning text about screenshots for Richer PWA Install UI on desktop
405
404
  */
@@ -429,13 +428,12 @@ const UIStrings = {
429
428
  * @example {https://developer.mozilla.org/en-US/docs/Web/Manifest/display_override} PH2
430
429
  * @example {https://developer.mozilla.org/en-US/docs/Web/Manifest} PH3
431
430
  */
432
- wcoFound: 'Chrome has successfully found the {PH1} value for the {PH2} field in the {PH3}.',
431
+ wcoFound: 'Chrome has successfully found the {PH1} value for the {PH2} field in the {PH3}',
433
432
  /**
434
433
  * @description Message for Windows Control Overlay value not found with link to documentation
435
434
  * @example {https://developer.mozilla.org/en-US/docs/Web/Manifest/display_override} PH1
436
435
  */
437
- wcoNotFound:
438
- 'Define {PH1} in the manifest to use the Window Controls Overlay API and customize your app’s title bar.',
436
+ wcoNotFound: 'Define {PH1} in the manifest to use the Window Controls Overlay API and customize your app’s title bar',
439
437
  /**
440
438
  * @description Link text for more information on customizing Window Controls Overlay title bar in the Application panel
441
439
  */
@@ -126,7 +126,7 @@ const UIStrings = {
126
126
  /**
127
127
  * @description Text in the Application panel describing the local storage tab.
128
128
  */
129
- localStorageDescription: 'On this page you can view, add, edit, and delete local storage key-value pairs.',
129
+ localStorageDescription: 'On this page you can view, add, edit, and delete local storage key-value pairs',
130
130
  /**
131
131
  * @description Text in Application Panel Sidebar of the Application panel
132
132
  */
@@ -138,7 +138,7 @@ const UIStrings = {
138
138
  /**
139
139
  * @description Text in the Application panel describing the session storage tab.
140
140
  */
141
- sessionStorageDescription: 'On this page you can view, add, edit, and delete session storage key-value pairs.',
141
+ sessionStorageDescription: 'On this page you can view, add, edit, and delete session storage key-value pairs',
142
142
  /**
143
143
  * @description Text in Application Panel Sidebar of the Application panel
144
144
  */
@@ -150,7 +150,7 @@ const UIStrings = {
150
150
  /**
151
151
  * @description Text in the Application panel describing the extension storage tab.
152
152
  */
153
- extensionStorageDescription: 'On this page you can view, add, edit, and delete extension storage key-value pairs.',
153
+ extensionStorageDescription: 'On this page you can view, add, edit, and delete extension storage key-value pairs',
154
154
  /**
155
155
  * @description Text for extension session storage in Application panel
156
156
  */
@@ -178,7 +178,7 @@ const UIStrings = {
178
178
  /**
179
179
  * @description Text for web cookies
180
180
  */
181
- cookiesDescription: 'On this page you can view, add, edit, and delete cookies.',
181
+ cookiesDescription: 'On this page you can view, add, edit, and delete cookies',
182
182
  /**
183
183
  * @description Text in Application Panel Sidebar of the Application panel
184
184
  */
@@ -202,7 +202,7 @@ const UIStrings = {
202
202
  /**
203
203
  * @description Text in the Application panel describing the extension storage tab.
204
204
  */
205
- indexeddbDescription: 'On this page you can view and delete indexedDB key-value pairs and databases.',
205
+ indexeddbDescription: 'On this page you can view and delete indexedDB key-value pairs and databases',
206
206
  /**
207
207
  * @description A context menu item in the Application Panel Sidebar of the Application panel
208
208
  */
@@ -242,7 +242,7 @@ const UIStrings = {
242
242
  /**
243
243
  * @description Text in Frames View of the Application panel
244
244
  */
245
- openedWindowsDescription: 'On this page you can view windows opened via window\.open\(\).',
245
+ openedWindowsDescription: 'On this page you can view windows opened via window\.open\(\)',
246
246
  /**
247
247
  * @description Label for plural of worker type: web workers
248
248
  */
@@ -255,7 +255,7 @@ const UIStrings = {
255
255
  * @description Description of content of unavailable document in Application panel
256
256
  */
257
257
  theContentOfThisDocumentHasBeen:
258
- 'The content of this document has been generated dynamically via \'document.write()\'.',
258
+ 'The content of this document has been generated dynamically via \'document.write()\'',
259
259
  /**
260
260
  * @description Text in Frames View of the Application panel
261
261
  */
@@ -267,7 +267,7 @@ const UIStrings = {
267
267
  /**
268
268
  * @description Description text for describing the dedicated worker tab.
269
269
  */
270
- workerDescription: 'On this page you can view dedicated workers that are created by the parent frame.',
270
+ workerDescription: 'On this page you can view dedicated workers that are created by the parent frame',
271
271
  /**
272
272
  * @description Aria text for screen reader to announce they can scroll to top of manifest if invoked
273
273
  */
@@ -289,7 +289,7 @@ const UIStrings = {
289
289
  /**
290
290
  * @description Description text in the Application Panel describing a frame's resources
291
291
  */
292
- resourceDescription: 'On this page you can view the frame’s resources.',
292
+ resourceDescription: 'On this page you can view the frame’s resources',
293
293
  } as const;
294
294
  const str_ = i18n.i18n.registerUIStrings('panels/application/ApplicationPanelSidebar.ts', UIStrings);
295
295
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
@@ -127,7 +127,7 @@ const UIStrings = {
127
127
  * @example {Start recording events} PH1
128
128
  * @example {Ctrl + E} PH2
129
129
  */
130
- startRecordingToDebug: 'Start to debug background services by using the "{PH1}" button or by pressing {PH2}.',
130
+ startRecordingToDebug: 'Start to debug background services by using the "{PH1}" button or by pressing {PH2}',
131
131
  /**
132
132
  * @description Text to show an item is empty
133
133
  */
@@ -35,8 +35,8 @@ import * as Common from '../../core/common/common.js';
35
35
  import * as i18n from '../../core/i18n/i18n.js';
36
36
  import * as SDK from '../../core/sdk/sdk.js';
37
37
  import * as AiAssistanceModel from '../../models/ai_assistance/ai_assistance.js';
38
- import * as Geometry from '../../models/geometry/geometry.js';
39
38
  import * as IssuesManager from '../../models/issues_manager/issues_manager.js';
39
+ import * as Geometry from '../../ui/geometry/geometry.js';
40
40
  import * as CookieTable from '../../ui/legacy/components/cookie_table/cookie_table.js';
41
41
  import * as UI from '../../ui/legacy/legacy.js';
42
42
  import {html, render} from '../../ui/lit/lit.js';
@@ -53,7 +53,7 @@ const UIStrings = {
53
53
  /**
54
54
  * @description Text for announcing a DOM Storage key/value item has been deleted
55
55
  */
56
- domStorageItemDeleted: 'The storage item was deleted.',
56
+ domStorageItemDeleted: 'The storage item was deleted',
57
57
  /**
58
58
  * @description Text of a context menu item to start a chat with AI
59
59
  */
@@ -133,7 +133,7 @@ const UIStrings = {
133
133
  /**
134
134
  *@description Placeholder text when no row is selected in a table of events.
135
135
  */
136
- selectEventToViewDetails: 'Select an event row to view more details.',
136
+ selectEventToViewDetails: 'Select an event row to view more details',
137
137
  /**
138
138
  *@description Column heading for the type of event that has occurred.
139
139
  */
@@ -157,7 +157,7 @@ const UIStrings = {
157
157
  /**
158
158
  *@description Default message when no events have appeared yet.
159
159
  */
160
- noEvents: 'No events have been logged yet.',
160
+ noEvents: 'No events have been logged yet',
161
161
  /**
162
162
  *@description Text to keep the log of events after refreshing.
163
163
  */
@@ -42,7 +42,7 @@ const UIStrings = {
42
42
  * @description Explanation for why the additional information section is being shown
43
43
  */
44
44
  thisAdditionalDebugging:
45
- 'This additional (debugging) information is shown because the \'Protocol Monitor\' experiment is enabled.',
45
+ 'This additional (debugging) information is shown because the \'Protocol Monitor\' experiment is enabled',
46
46
  /**
47
47
  * @description Label for subtitle of frame details view
48
48
  */
@@ -154,7 +154,7 @@ const UIStrings = {
154
154
  *(https://web.dev/why-coop-coep/)
155
155
  *(for a lot of languages 'cross-origin isolation' does not need to be translated, please translate only where necessary)
156
156
  */
157
- availabilityOfCertainApisDepends: 'Availability of certain APIs depends on the document being cross-origin isolated.',
157
+ availabilityOfCertainApisDepends: 'Availability of certain APIs depends on the document being cross-origin isolated',
158
158
  /**
159
159
  * @description Description of the SharedArrayBuffer status
160
160
  */
@@ -230,12 +230,12 @@ const UIStrings = {
230
230
  /**
231
231
  * @description Text descripting why a frame has been indentified as an advertisement.
232
232
  */
233
- parentIsAdExplanation: 'This frame is considered an ad frame because its parent frame is an ad frame.',
233
+ parentIsAdExplanation: 'This frame is considered an ad frame because its parent frame is an ad frame',
234
234
  /**
235
235
  * @description Text descripting why a frame has been indentified as an advertisement.
236
236
  */
237
237
  matchedBlockingRuleExplanation:
238
- 'This frame is considered an ad frame because its current (or previous) main document is an ad resource.',
238
+ 'This frame is considered an ad frame because its current (or previous) main document is an ad resource',
239
239
  /**
240
240
  * @description Text descripting why a frame has been indentified as an advertisement.
241
241
  */
@@ -258,7 +258,7 @@ const UIStrings = {
258
258
  *(https://developer.chrome.com/docs/web-platform/origin-trials/)
259
259
  *(please don't translate 'origin trials').
260
260
  */
261
- originTrialsExplanation: 'Origin trials give you access to a new or experimental feature.',
261
+ originTrialsExplanation: 'Origin trials give you access to a new or experimental feature',
262
262
  } as const;
263
263
  const str_ = i18n.i18n.registerUIStrings('panels/application/FrameDetailsView.ts', UIStrings);
264
264
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
@@ -46,7 +46,7 @@ const UIStrings = {
46
46
  /**
47
47
  * @description Explanation text in Application panel IndexedDB delete confirmation dialog
48
48
  */
49
- databaseWillBeRemoved: 'The selected database and contained data will be removed.',
49
+ databaseWillBeRemoved: 'The selected database and contained data will be removed',
50
50
  /**
51
51
  * @description Title of the confirmation dialog in the IndexedDB tab of the Application panel
52
52
  * that the user is about to clear an object store and this cannot be undone.
@@ -57,7 +57,7 @@ const UIStrings = {
57
57
  * @description Description in the confirmation dialog in the IndexedDB tab of the Application
58
58
  * panel that the user is about to clear an object store and this cannot be undone.
59
59
  */
60
- objectStoreWillBeCleared: 'The data contained in the selected object store will be removed.',
60
+ objectStoreWillBeCleared: 'The data contained in the selected object store will be removed',
61
61
  /**
62
62
  * @description Text in Indexed DBViews of the Application panel
63
63
  */
@@ -32,8 +32,7 @@ import '../../ui/components/buttons/buttons.js';
32
32
 
33
33
  import * as i18n from '../../core/i18n/i18n.js';
34
34
  import * as AIAssistance from '../../models/ai_assistance/ai_assistance.js';
35
- import * as Geometry from '../../models/geometry/geometry.js';
36
- // eslint-disable-next-line @devtools/es-modules-import
35
+ import * as Geometry from '../../ui/geometry/geometry.js';
37
36
  import dataGridAiButtonStyles from '../../ui/legacy/components/data_grid/dataGridAiButton.css.js';
38
37
  import * as UI from '../../ui/legacy/legacy.js';
39
38
  import {Directives as LitDirectives, html, nothing, render} from '../../ui/lit/lit.js';
@@ -29,7 +29,7 @@ const UIStrings = {
29
29
  * An endpoint is a URL where the report is sent to.
30
30
  * (https://developer.chrome.com/docs/capabilities/web-apis/reporting-api)
31
31
  */
32
- reportingApiDescription: 'On this page you will be able to inspect `Reporting API` reports and endpoints.',
32
+ reportingApiDescription: 'On this page you will be able to inspect `Reporting API` reports and endpoints',
33
33
  /**
34
34
  * @description Placeholder text that shows if no report was selected for viewing
35
35
  *report body (https://developers.google.com/web/updates/2018/09/reportingapi#sending).
@@ -26,7 +26,7 @@ const UIStrings = {
26
26
  /**
27
27
  * @description Description text in Application Panel describing the cache storage tab
28
28
  */
29
- cacheStorageDescription: 'On this page you can view and delete cache data.',
29
+ cacheStorageDescription: 'On this page you can view and delete cache data',
30
30
  /**
31
31
  * @description A context menu item in the Application Panel Sidebar of the Application panel
32
32
  */
@@ -51,7 +51,7 @@ const UIStrings = {
51
51
  /**
52
52
  * @description Text in Service Workers View of the Application panel
53
53
  */
54
- testPushMessageFromDevtools: 'Test push message from DevTools.',
54
+ testPushMessageFromDevtools: 'Test push message from DevTools',
55
55
  /**
56
56
  * @description Button label for service worker network requests
57
57
  */
@@ -37,7 +37,7 @@ const UIStrings = {
37
37
  * deleted independently. https://developer.chrome.com/docs/web-platform/storage-buckets.
38
38
  */
39
39
  storageBucketsDescription:
40
- 'On this page you can view and delete storage buckets, and their associated `Storage APIs`.',
40
+ 'On this page you can view and delete storage buckets, and their associated `Storage APIs`',
41
41
  } as const;
42
42
  const str_ = i18n.i18n.registerUIStrings('panels/application/StorageBucketsTreeElement.ts', UIStrings);
43
43
  export const i18nString: i18n.LocalizeString = i18n.i18n.getLocalizedString.bind(undefined, str_);
@@ -61,7 +61,7 @@ const UIStrings = {
61
61
  /**
62
62
  * @description Text to display when no calls have been made
63
63
  */
64
- noCallsPlaceholder: 'Start interacting with your `WebMCP` agent to see real-time tool calls and executions here.',
64
+ noCallsPlaceholder: 'Start interacting with your `WebMCP` agent to see real-time tool calls and executions here',
65
65
  /**
66
66
  * @description Text for the header of the tool details section
67
67
  */