chrome-devtools-frontend 1.0.1681498 → 1.0.1682249

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 (141) hide show
  1. package/eslint.config.mjs +8 -3
  2. package/front_end/core/sdk/ConsoleModel.ts +1 -1
  3. package/front_end/core/sdk/PreloadingModel.ts +44 -22
  4. package/front_end/core/sdk/RemoteObject.ts +4 -1
  5. package/front_end/core/sdk/RuntimeModel.ts +5 -5
  6. package/front_end/core/sdk/sdk.ts +2 -0
  7. package/front_end/entrypoints/formatter_worker/FormatterWorker.ts +1 -1
  8. package/front_end/entrypoints/inspector_main/InspectorMain.ts +3 -1
  9. package/front_end/entrypoints/inspector_main/inspector_main-meta.ts +1 -5
  10. package/front_end/entrypoints/main/MainImpl.ts +9 -10
  11. package/front_end/entrypoints/shell/shell.ts +0 -2
  12. package/front_end/entrypoints/trace_app/trace_app.ts +0 -2
  13. package/front_end/generated/InspectorBackendCommands.ts +2 -0
  14. package/front_end/generated/protocol-mapping.d.ts +16 -0
  15. package/front_end/generated/protocol-proxy-api.d.ts +12 -0
  16. package/front_end/generated/protocol.ts +12 -0
  17. package/front_end/models/ai_assistance/ExtensionScope.ts +11 -12
  18. package/front_end/models/ai_assistance/agents/AiAgent.ts +1 -1
  19. package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +2 -1
  20. package/front_end/models/ai_assistance/agents/PerformanceAgent.snapshot.txt +1 -1
  21. package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +2 -1
  22. package/front_end/models/ai_assistance/contexts/PerformanceTraceContext.ts +2 -1
  23. package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.snapshot.txt +8 -8
  24. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +8 -8
  25. package/front_end/models/bindings/DebuggerLanguagePlugins.ts +1 -0
  26. package/front_end/models/formatter/ScriptFormatter.ts +1 -0
  27. package/front_end/models/javascript_metadata/NativeFunctions.js +5 -1
  28. package/front_end/models/live-metrics/web-vitals-injected/spec/spec.ts +4 -4
  29. package/front_end/models/logs/NetworkLog.ts +8 -1
  30. package/front_end/models/persistence/AutomaticFileSystemWorkspaceBinding.ts +4 -2
  31. package/front_end/models/stack_trace/StackTraceImpl.ts +1 -0
  32. package/front_end/models/trace/Name.ts +5 -5
  33. package/front_end/models/trace/Styles.ts +115 -115
  34. package/front_end/models/trace/extras/TraceTree.ts +2 -1
  35. package/front_end/models/trace/helpers/Network.ts +4 -1
  36. package/front_end/models/trace/insights/CLSCulprits.ts +4 -2
  37. package/front_end/models/trace/insights/CharacterSet.ts +3 -3
  38. package/front_end/models/trace/insights/DOMSize.ts +1 -1
  39. package/front_end/models/trace/insights/DuplicatedJavaScript.ts +6 -2
  40. package/front_end/models/trace/insights/FontDisplay.ts +9 -3
  41. package/front_end/models/trace/insights/ForcedReflow.ts +4 -4
  42. package/front_end/models/trace/insights/INPBreakdown.ts +3 -4
  43. package/front_end/models/trace/insights/ImageDelivery.ts +2 -2
  44. package/front_end/models/trace/insights/LCPBreakdown.ts +1 -1
  45. package/front_end/models/trace/insights/LCPDiscovery.ts +5 -5
  46. package/front_end/models/trace/insights/LegacyJavaScript.ts +7 -3
  47. package/front_end/models/trace/insights/ModernHTTP.ts +3 -3
  48. package/front_end/models/trace/insights/NetworkDependencyTree.ts +13 -9
  49. package/front_end/models/trace/insights/RenderBlocking.ts +1 -1
  50. package/front_end/models/trace/insights/SlowCSSSelector.ts +29 -25
  51. package/front_end/models/trace/insights/ThirdParties.ts +13 -5
  52. package/front_end/models/trace/insights/Viewport.ts +4 -2
  53. package/front_end/models/workspace/IgnoreListManager.ts +53 -17
  54. package/front_end/panels/accessibility/ARIAAttributesView.ts +11 -2
  55. package/front_end/panels/ai_assistance/components/ChatMessage.ts +67 -53
  56. package/front_end/panels/ai_assistance/components/ChatView.ts +2 -2
  57. package/front_end/panels/ai_assistance/components/StylingAgentMarkdownRenderer.ts +2 -2
  58. package/front_end/panels/ai_assistance/components/WalkthroughView.ts +5 -5
  59. package/front_end/panels/animation/AnimationTimeline.ts +2 -0
  60. package/front_end/panels/application/preloading/PreloadingView.ts +9 -3
  61. package/front_end/panels/application/preloading/components/components.ts +2 -0
  62. package/front_end/panels/browser_debugger/ObjectEventListenersSidebarPane.ts +10 -11
  63. package/front_end/panels/changes/CombinedDiffView.ts +1 -1
  64. package/front_end/panels/common/ExtensionServer.ts +9 -10
  65. package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +9 -4
  66. package/front_end/panels/elements/ElementStatePaneWidget.ts +3 -0
  67. package/front_end/panels/elements/ElementsTreeElement.ts +7 -1
  68. package/front_end/panels/elements/EventListenersWidget.ts +10 -11
  69. package/front_end/panels/issues/IssueView.ts +5 -6
  70. package/front_end/panels/linear_memory_inspector/components/LinearMemoryViewer.ts +1 -1
  71. package/front_end/panels/media/PlayerPropertiesView.ts +309 -416
  72. package/front_end/panels/media/playerPropertiesView.css +1 -1
  73. package/front_end/panels/network/NetworkPanel.ts +2 -1
  74. package/front_end/panels/network/components/ResponseHeaderSection.ts +1 -2
  75. package/front_end/panels/network/network-meta.ts +6 -0
  76. package/front_end/panels/performance_monitor/PerformanceMonitor.ts +2 -1
  77. package/front_end/panels/recorder/RecordingView.ts +89 -73
  78. package/front_end/panels/recorder/ReplaySection.ts +59 -40
  79. package/front_end/panels/recorder/injected/injected.ts +4 -0
  80. package/front_end/panels/security/SecurityPanel.ts +5 -6
  81. package/front_end/panels/security/SecurityPanelSidebar.ts +244 -204
  82. package/front_end/panels/security/security.ts +0 -4
  83. package/front_end/panels/settings/EditFileSystemView.ts +8 -7
  84. package/front_end/panels/settings/FrameworkIgnoreListSettingsTab.ts +20 -14
  85. package/front_end/panels/snippets/ScriptSnippetFileSystem.ts +10 -11
  86. package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +3 -3
  87. package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +5 -5
  88. package/front_end/panels/timeline/components/CWVMetrics.ts +1 -2
  89. package/front_end/panels/timeline/components/IgnoreListSetting.ts +5 -5
  90. package/front_end/panels/timeline/components/LayoutShiftDetails.ts +2 -3
  91. package/front_end/panels/timeline/components/LiveMetricsView.ts +2 -2
  92. package/front_end/panels/timeline/components/Sidebar.ts +3 -3
  93. package/front_end/panels/timeline/components/SidebarSingleInsightSet.ts +1 -2
  94. package/front_end/panels/timeline/components/insights/BaseInsightComponent.ts +3 -1
  95. package/front_end/panels/timeline/components/insights/CLSCulprits.ts +1 -2
  96. package/front_end/panels/timeline/components/insights/Cache.ts +1 -2
  97. package/front_end/panels/timeline/components/insights/CharacterSet.ts +1 -2
  98. package/front_end/panels/timeline/components/insights/DOMSize.ts +1 -2
  99. package/front_end/panels/timeline/components/insights/DocumentLatency.ts +2 -2
  100. package/front_end/panels/timeline/components/insights/DuplicatedJavaScript.ts +2 -2
  101. package/front_end/panels/timeline/components/insights/FontDisplay.ts +1 -2
  102. package/front_end/panels/timeline/components/insights/ForcedReflow.ts +1 -2
  103. package/front_end/panels/timeline/components/insights/INPBreakdown.ts +1 -2
  104. package/front_end/panels/timeline/components/insights/ImageDelivery.ts +1 -2
  105. package/front_end/panels/timeline/components/insights/LCPBreakdown.ts +13 -13
  106. package/front_end/panels/timeline/components/insights/LCPDiscovery.ts +1 -2
  107. package/front_end/panels/timeline/components/insights/LegacyJavaScript.ts +4 -4
  108. package/front_end/panels/timeline/components/insights/ModernHTTP.ts +1 -2
  109. package/front_end/panels/timeline/components/insights/NetworkDependencyTree.ts +10 -8
  110. package/front_end/panels/timeline/components/insights/RenderBlocking.ts +2 -2
  111. package/front_end/panels/timeline/components/insights/SidebarInsight.ts +3 -1
  112. package/front_end/panels/timeline/components/insights/SlowCSSSelector.ts +2 -2
  113. package/front_end/panels/timeline/components/insights/ThirdParties.ts +1 -2
  114. package/front_end/panels/timeline/components/insights/Viewport.ts +1 -2
  115. package/front_end/panels/timeline/overlays/OverlaysImpl.ts +1 -2
  116. package/front_end/panels/timeline/timeline.ts +0 -2
  117. package/front_end/panels/web_audio/WebAudioView.ts +7 -7
  118. package/front_end/panels/webauthn/WebauthnPane.ts +9 -9
  119. package/front_end/third_party/chromium/README.chromium +1 -1
  120. package/front_end/ui/components/diff_view/DiffView.ts +2 -1
  121. package/front_end/ui/components/report_view/ReportView.docs.ts +2 -2
  122. package/front_end/ui/components/text_editor/javascript.ts +12 -13
  123. package/front_end/ui/legacy/GlassPane.ts +38 -14
  124. package/front_end/ui/legacy/Treeoutline.ts +14 -3
  125. package/front_end/ui/legacy/components/object_ui/CustomPreviewComponent.ts +1 -1
  126. package/front_end/ui/legacy/components/object_ui/JavaScriptREPL.ts +1 -1
  127. package/front_end/ui/legacy/components/object_ui/ObjectPopoverHelper.ts +1 -1
  128. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +21 -30
  129. package/front_end/ui/legacy/components/object_ui/RemoteObjectPreviewFormatter.ts +3 -8
  130. package/front_end/ui/legacy/components/utils/ImagePreview.ts +15 -16
  131. package/front_end/ui/legacy/components/utils/JSPresentationUtils.ts +4 -4
  132. package/front_end/ui/legacy/components/utils/Linkifier.ts +8 -10
  133. package/front_end/ui/settings/InspectorMainSettings.ts +12 -0
  134. package/front_end/ui/settings/settings.ts +2 -0
  135. package/front_end/ui/visual_logging/KnownContextValues.ts +21 -0
  136. package/mcp/mcp.ts +0 -6
  137. package/package.json +1 -1
  138. package/front_end/models/logs/logs-meta.ts +0 -24
  139. package/front_end/models/workspace/workspace-meta.ts +0 -40
  140. package/front_end/panels/security/OriginTreeElement.ts +0 -60
  141. package/front_end/panels/security/SecurityPanelSidebarTreeElement.ts +0 -30
@@ -47,6 +47,42 @@ export interface IgnoreListGeneralRules {
47
47
  isCurrentlyIgnoreListed?: boolean;
48
48
  }
49
49
 
50
+ export const skipStackFramesPatternSettingDescriptor: Common.Settings.SettingDescriptor<string> = {
51
+ name: 'skip-stack-frames-pattern',
52
+ type: Common.Settings.SettingType.REGEX,
53
+ defaultValue: '/node_modules/|^node:',
54
+ storageType: Common.Settings.SettingStorageType.SYNCED,
55
+ };
56
+
57
+ export const skipContentScriptsSettingDescriptor: Common.Settings.SettingDescriptor<boolean> = {
58
+ name: 'skip-content-scripts',
59
+ type: Common.Settings.SettingType.BOOLEAN,
60
+ defaultValue: true,
61
+ storageType: Common.Settings.SettingStorageType.SYNCED,
62
+ };
63
+
64
+ export const automaticallyIgnoreListKnownThirdPartyScriptsSettingDescriptor:
65
+ Common.Settings.SettingDescriptor<boolean> = {
66
+ name: 'automatically-ignore-list-known-third-party-scripts',
67
+ type: Common.Settings.SettingType.BOOLEAN,
68
+ defaultValue: true,
69
+ storageType: Common.Settings.SettingStorageType.SYNCED,
70
+ };
71
+
72
+ export const skipAnonymousScriptsSettingDescriptor: Common.Settings.SettingDescriptor<boolean> = {
73
+ name: 'skip-anonymous-scripts',
74
+ type: Common.Settings.SettingType.BOOLEAN,
75
+ defaultValue: false,
76
+ storageType: Common.Settings.SettingStorageType.SYNCED,
77
+ };
78
+
79
+ export const enableIgnoreListingSettingDescriptor: Common.Settings.SettingDescriptor<boolean> = {
80
+ name: 'enable-ignore-listing',
81
+ type: Common.Settings.SettingType.BOOLEAN,
82
+ defaultValue: true,
83
+ storageType: Common.Settings.SettingStorageType.SYNCED,
84
+ };
85
+
50
86
  export class IgnoreListManager extends Common.ObjectWrapper.ObjectWrapper<EventTypes> implements
51
87
  SDK.TargetManager.SDKModelObserver<SDK.DebuggerModel.DebuggerModel> {
52
88
  readonly #settings: Common.Settings.Settings;
@@ -70,12 +106,12 @@ export class IgnoreListManager extends Common.ObjectWrapper.ObjectWrapper<EventT
70
106
  this.#targetManager.addModelListener(
71
107
  SDK.RuntimeModel.RuntimeModel, SDK.RuntimeModel.Events.ExecutionContextDestroyed,
72
108
  this.onExecutionContextDestroyed, this, {scoped: true});
73
- this.#settings.moduleSetting('skip-stack-frames-pattern').addChangeListener(this.patternChanged.bind(this));
74
- this.#settings.moduleSetting('skip-content-scripts').addChangeListener(this.patternChanged.bind(this));
75
- this.#settings.moduleSetting('automatically-ignore-list-known-third-party-scripts')
109
+ this.#settings.resolve(skipStackFramesPatternSettingDescriptor).addChangeListener(this.patternChanged.bind(this));
110
+ this.#settings.resolve(skipContentScriptsSettingDescriptor).addChangeListener(this.patternChanged.bind(this));
111
+ this.#settings.resolve(automaticallyIgnoreListKnownThirdPartyScriptsSettingDescriptor)
76
112
  .addChangeListener(this.patternChanged.bind(this));
77
- this.#settings.moduleSetting('enable-ignore-listing').addChangeListener(this.patternChanged.bind(this));
78
- this.#settings.moduleSetting('skip-anonymous-scripts').addChangeListener(this.patternChanged.bind(this));
113
+ this.#settings.resolve(enableIgnoreListingSettingDescriptor).addChangeListener(this.patternChanged.bind(this));
114
+ this.#settings.resolve(skipAnonymousScriptsSettingDescriptor).addChangeListener(this.patternChanged.bind(this));
79
115
 
80
116
  this.#targetManager.observeModels(SDK.DebuggerModel.DebuggerModel, this);
81
117
  }
@@ -162,7 +198,7 @@ export class IgnoreListManager extends Common.ObjectWrapper.ObjectWrapper<EventT
162
198
  }
163
199
 
164
200
  private getSkipStackFramesPatternSetting(): Common.Settings.RegExpSetting {
165
- return this.#settings.moduleSetting('skip-stack-frames-pattern') as Common.Settings.RegExpSetting;
201
+ return this.#settings.resolve(skipStackFramesPatternSettingDescriptor) as Common.Settings.RegExpSetting;
166
202
  }
167
203
 
168
204
  private setIgnoreListPatterns(debuggerModel: SDK.DebuggerModel.DebuggerModel): Promise<boolean> {
@@ -324,57 +360,57 @@ export class IgnoreListManager extends Common.ObjectWrapper.ObjectWrapper<EventT
324
360
  }
325
361
 
326
362
  get enableIgnoreListing(): boolean {
327
- return this.#settings.moduleSetting('enable-ignore-listing').get();
363
+ return this.#settings.resolve(enableIgnoreListingSettingDescriptor).get();
328
364
  }
329
365
 
330
366
  set enableIgnoreListing(value: boolean) {
331
- this.#settings.moduleSetting('enable-ignore-listing').set(value);
367
+ this.#settings.resolve(enableIgnoreListingSettingDescriptor).set(value);
332
368
  }
333
369
 
334
370
  get skipContentScripts(): boolean {
335
- return this.enableIgnoreListing && this.#settings.moduleSetting('skip-content-scripts').get();
371
+ return this.enableIgnoreListing && this.#settings.resolve(skipContentScriptsSettingDescriptor).get();
336
372
  }
337
373
 
338
374
  get skipAnonymousScripts(): boolean {
339
- return this.enableIgnoreListing && this.#settings.moduleSetting('skip-anonymous-scripts').get();
375
+ return this.enableIgnoreListing && this.#settings.resolve(skipAnonymousScriptsSettingDescriptor).get();
340
376
  }
341
377
 
342
378
  get automaticallyIgnoreListKnownThirdPartyScripts(): boolean {
343
379
  return this.enableIgnoreListing &&
344
- this.#settings.moduleSetting('automatically-ignore-list-known-third-party-scripts').get();
380
+ this.#settings.resolve(automaticallyIgnoreListKnownThirdPartyScriptsSettingDescriptor).get();
345
381
  }
346
382
 
347
383
  ignoreListContentScripts(): void {
348
384
  if (!this.enableIgnoreListing) {
349
385
  this.enableIgnoreListing = true;
350
386
  }
351
- this.#settings.moduleSetting('skip-content-scripts').set(true);
387
+ this.#settings.resolve(skipContentScriptsSettingDescriptor).set(true);
352
388
  }
353
389
 
354
390
  unIgnoreListContentScripts(): void {
355
- this.#settings.moduleSetting('skip-content-scripts').set(false);
391
+ this.#settings.resolve(skipContentScriptsSettingDescriptor).set(false);
356
392
  }
357
393
 
358
394
  ignoreListAnonymousScripts(): void {
359
395
  if (!this.enableIgnoreListing) {
360
396
  this.enableIgnoreListing = true;
361
397
  }
362
- this.#settings.moduleSetting('skip-anonymous-scripts').set(true);
398
+ this.#settings.resolve(skipAnonymousScriptsSettingDescriptor).set(true);
363
399
  }
364
400
 
365
401
  unIgnoreListAnonymousScripts(): void {
366
- this.#settings.moduleSetting('skip-anonymous-scripts').set(false);
402
+ this.#settings.resolve(skipAnonymousScriptsSettingDescriptor).set(false);
367
403
  }
368
404
 
369
405
  ignoreListThirdParty(): void {
370
406
  if (!this.enableIgnoreListing) {
371
407
  this.enableIgnoreListing = true;
372
408
  }
373
- this.#settings.moduleSetting('automatically-ignore-list-known-third-party-scripts').set(true);
409
+ this.#settings.resolve(automaticallyIgnoreListKnownThirdPartyScriptsSettingDescriptor).set(true);
374
410
  }
375
411
 
376
412
  unIgnoreListThirdParty(): void {
377
- this.#settings.moduleSetting('automatically-ignore-list-known-third-party-scripts').set(false);
413
+ this.#settings.resolve(automaticallyIgnoreListKnownThirdPartyScriptsSettingDescriptor).set(false);
378
414
  }
379
415
 
380
416
  ignoreListURL(url: Platform.DevToolsPath.UrlString): void {
@@ -35,6 +35,7 @@ interface ViewInput {
35
35
  onCancelEditing: (attribute: SDK.DOMModel.Attribute) => void;
36
36
  attributeBeingEdited: SDK.DOMModel.Attribute|null;
37
37
  attributes: SDK.DOMModel.Attribute[];
38
+ backendNodeId?: number;
38
39
  }
39
40
 
40
41
  type View = (input: ViewInput, output: object, target: HTMLElement|DocumentFragment) => void;
@@ -70,7 +71,7 @@ export const DEFAULT_VIEW: View = (input, output, target) => {
70
71
  .template=${html`
71
72
  <ul role="tree">
72
73
  ${input.attributes?.map(attribute => html`
73
- <li role="treeitem">
74
+ <li role="treeitem" jslog=${VisualLogging.treeItem('aria-attribute')}>
74
75
  <style>${accessibilityPropertiesStyles}</style>
75
76
  <span class="ax-name monospace" @mousedown=${onStartEditing.bind(null, attribute)}>
76
77
  ${attribute.name}
@@ -93,7 +94,14 @@ export const DEFAULT_VIEW: View = (input, output, target) => {
93
94
  </ul>
94
95
  `}></devtools-tree>`,
95
96
  // clang-format on
96
- target, {container: {attributes: {jslog: `${VisualLogging.section('aria-attributes')}`}}});
97
+ target, {
98
+ container: {
99
+ attributes: {
100
+ jslog: `${VisualLogging.section('aria-attributes')}`,
101
+ ...(input.backendNodeId ? {'data-backend-node-id': `${input.backendNodeId}`} : {}),
102
+ },
103
+ },
104
+ });
97
105
  };
98
106
 
99
107
  export class ARIAAttributesPane extends AccessibilitySubPane<ShadowRoot> {
@@ -150,6 +158,7 @@ export class ARIAAttributesPane extends AccessibilitySubPane<ShadowRoot> {
150
158
  onCommitEditing,
151
159
  onCancelEditing,
152
160
  propertyCompletions,
161
+ backendNodeId: this.node()?.backendNodeId(),
153
162
  };
154
163
  this.#view(input, {}, this.contentElement);
155
164
  }
@@ -12,12 +12,6 @@ import * as Platform from '../../../core/platform/platform.js';
12
12
  import * as SDK from '../../../core/sdk/sdk.js';
13
13
  import * as TextUtils from '../../../core/text_utils/text_utils.js';
14
14
  import type * as Protocol from '../../../generated/protocol.js';
15
- import type {
16
- AiWidget, BottomUpTreeAiWidget, ComputedStyleAiWidget, CoreVitalsAiWidget, DomTreeAiWidget, LighthouseReportAiWidget,
17
- NetworkRequestGeneralHeadersAiWidget, NetworkRequestsListAiWidget, NetworkTrackAiWidget, PerfInsightAiWidget,
18
- PerformanceTraceAiWidget, SourceCodeAiWidget, SourceFileAiWidget, SourceFilesListAiWidget, StorageBreakdownAiWidget,
19
- StylePropertiesAiWidget, TimelineEventSummaryAiWidget,
20
- TimelineRangeSummaryAiWidget} from '../../../models/ai_assistance/agents/AiAgent.js';
21
15
  import * as AiAssistanceModel from '../../../models/ai_assistance/ai_assistance.js';
22
16
  import * as ComputedStyle from '../../../models/computed_style/computed_style.js';
23
17
  import * as Formatter from '../../../models/formatter/formatter.js';
@@ -29,7 +23,6 @@ import * as Marked from '../../../third_party/marked/marked.js';
29
23
  import * as Buttons from '../../../ui/components/buttons/buttons.js';
30
24
  import * as Input from '../../../ui/components/input/input.js';
31
25
  import type * as MarkdownView from '../../../ui/components/markdown_view/markdown_view.js';
32
- import type {MarkdownLitRenderer} from '../../../ui/components/markdown_view/MarkdownView.js';
33
26
  import * as Snackbars from '../../../ui/components/snackbars/snackbars.js';
34
27
  import * as UIHelpers from '../../../ui/helpers/helpers.js';
35
28
  import type * as PerfUI from '../../../ui/legacy/components/perf_ui/perf_ui.js';
@@ -42,7 +35,6 @@ import * as Lighthouse from '../../lighthouse/lighthouse.js';
42
35
  import * as NetworkForward from '../../network/forward/forward.js';
43
36
  import * as Network from '../../network/network.js';
44
37
  import * as TimelineComponents from '../../timeline/components/components.js';
45
- import type {BaseInsightComponent} from '../../timeline/components/insights/BaseInsightComponent.js';
46
38
  import * as TimelineInsights from '../../timeline/components/insights/insights.js';
47
39
  import * as Timeline from '../../timeline/timeline.js';
48
40
  import * as TimelineUtils from '../../timeline/utils/utils.js';
@@ -486,7 +478,7 @@ export interface Step {
486
478
  /**
487
479
  * Visual widgets rendered alongside this step (e.g. core web vitals, network traces).
488
480
  */
489
- widgets?: AiWidget[];
481
+ widgets?: AiAssistanceModel.AiAgent.AiWidget[];
490
482
  /**
491
483
  * Context item details gathered or inspected during this step.
492
484
  */
@@ -517,7 +509,7 @@ export interface StepPart {
517
509
  */
518
510
  export interface WidgetPart {
519
511
  type: 'widget';
520
- widgets: AiWidget[];
512
+ widgets: AiAssistanceModel.AiAgent.AiWidget[];
521
513
  }
522
514
 
523
515
  export type ModelMessagePart = AnswerPart|StepPart|WidgetPart;
@@ -585,7 +577,7 @@ export interface MessageInput {
585
577
  isFirstMessage: boolean;
586
578
  prompt: string;
587
579
  canShowFeedbackForm: boolean;
588
- markdownRenderer: MarkdownLitRenderer;
580
+ markdownRenderer: MarkdownView.MarkdownView.MarkdownLitRenderer;
589
581
  onSuggestionClick: (suggestion: string) => void;
590
582
  onFeedbackSubmit: (rpcId: Host.AidaClient.RpcGlobalId, rate: Host.AidaClient.Rating, feedback?: string) => void;
591
583
  onCopyResponseClick: (message: ModelChatMessage) => void;
@@ -670,10 +662,11 @@ export const DEFAULT_VIEW = (input: ChatMessageViewInput, output: ViewOutput, ta
670
662
 
671
663
  export type View = typeof DEFAULT_VIEW;
672
664
 
673
- function renderTextAsMarkdown(text: string, markdownRenderer: MarkdownLitRenderer, {animate, ref: refFn}: {
674
- animate?: boolean,
675
- ref?: (element?: Element) => void,
676
- } = {}): Lit.TemplateResult {
665
+ function renderTextAsMarkdown(text: string, markdownRenderer: MarkdownView.MarkdownView.MarkdownLitRenderer,
666
+ {animate, ref: refFn}: {
667
+ animate?: boolean,
668
+ ref?: (element?: Element) => void,
669
+ } = {}): Lit.TemplateResult {
677
670
  let tokens = [];
678
671
  try {
679
672
  tokens = Marked.Marked.lexer(text);
@@ -756,7 +749,7 @@ function renderStepDetails({
756
749
  isLast,
757
750
  }: {
758
751
  step: Step,
759
- markdownRenderer: MarkdownLitRenderer,
752
+ markdownRenderer: MarkdownView.MarkdownView.MarkdownLitRenderer,
760
753
  isLast: boolean,
761
754
  }): Lit.LitTemplate {
762
755
  const sideEffects =
@@ -954,7 +947,7 @@ function renderStepBadge({step, isLast}: {
954
947
 
955
948
  export function renderStep({step, markdownRenderer, isLast}: {
956
949
  step: Step,
957
- markdownRenderer: MarkdownLitRenderer,
950
+ markdownRenderer: MarkdownView.MarkdownView.MarkdownLitRenderer,
958
951
  isLast: boolean,
959
952
  }): Lit.LitTemplate {
960
953
  const stepClasses = Lit.Directives.classMap({
@@ -1017,7 +1010,8 @@ async function resolveNode(backendNodeId: Protocol.DOM.BackendNodeId): Promise<S
1017
1010
  return resolved;
1018
1011
  }
1019
1012
 
1020
- async function makeStorageBreakdownWidget(widgetData: StorageBreakdownAiWidget): Promise<WidgetMakerResponse|null> {
1013
+ async function makeStorageBreakdownWidget(widgetData: AiAssistanceModel.AiAgent.StorageBreakdownAiWidget):
1014
+ Promise<WidgetMakerResponse|null> {
1021
1015
  const target = SDK.TargetManager.TargetManager.instance().primaryPageTarget();
1022
1016
  if (!target) {
1023
1017
  return null;
@@ -1062,7 +1056,8 @@ async function makeStorageBreakdownWidget(widgetData: StorageBreakdownAiWidget):
1062
1056
  };
1063
1057
  }
1064
1058
 
1065
- async function makeComputedStyleWidget(widgetData: ComputedStyleAiWidget): Promise<WidgetMakerResponse|null> {
1059
+ async function makeComputedStyleWidget(widgetData: AiAssistanceModel.AiAgent.ComputedStyleAiWidget):
1060
+ Promise<WidgetMakerResponse|null> {
1066
1061
  const domNodeForId = await resolveNode(widgetData.data.backendNodeId);
1067
1062
  if (!domNodeForId) {
1068
1063
  return null;
@@ -1112,7 +1107,8 @@ async function makeComputedStyleWidget(widgetData: ComputedStyleAiWidget): Promi
1112
1107
  };
1113
1108
  }
1114
1109
 
1115
- async function makeCoreWebVitalsWidget(widgetData: CoreVitalsAiWidget): Promise<WidgetMakerResponse|null> {
1110
+ async function makeCoreWebVitalsWidget(widgetData: AiAssistanceModel.AiAgent.CoreVitalsAiWidget):
1111
+ Promise<WidgetMakerResponse|null> {
1116
1112
  // clang-format off
1117
1113
  const renderedWidget = html`<devtools-widget class="core-vitals-widget" ${widget(TimelineComponents.CWVMetrics.CWVMetrics, {data: widgetData.data, skipBottomBorder: true})}>
1118
1114
  </devtools-widget>`;
@@ -1127,7 +1123,8 @@ async function makeCoreWebVitalsWidget(widgetData: CoreVitalsAiWidget): Promise<
1127
1123
  };
1128
1124
  }
1129
1125
 
1130
- async function makeStylePropertiesWidget(widgetData: StylePropertiesAiWidget): Promise<WidgetMakerResponse|null> {
1126
+ async function makeStylePropertiesWidget(widgetData: AiAssistanceModel.AiAgent.StylePropertiesAiWidget):
1127
+ Promise<WidgetMakerResponse|null> {
1131
1128
  const domNodeForId = await resolveNode(widgetData.data.backendNodeId);
1132
1129
  if (!domNodeForId) {
1133
1130
  return null;
@@ -1166,7 +1163,7 @@ async function makeStylePropertiesWidget(widgetData: StylePropertiesAiWidget): P
1166
1163
  }
1167
1164
 
1168
1165
  const INSIGHT_METADATA: Record<string, {
1169
- component: new () => BaseInsightComponent<Trace.Insights.Types.InsightModel>,
1166
+ component: new () => TimelineInsights.BaseInsightComponent.BaseInsightComponent<Trace.Insights.Types.InsightModel>,
1170
1167
  accessibleLabel: string,
1171
1168
  title: string,
1172
1169
  jslog: string,
@@ -1288,15 +1285,21 @@ const INSIGHT_METADATA: Record<string, {
1288
1285
  };
1289
1286
 
1290
1287
  function renderInsightWidget<T extends Trace.Insights.Types.InsightModel>(
1291
- component: new () => BaseInsightComponent<T>, insight: T, jslog: string, accessibleLabel: string, title: string,
1292
- bounds?: Trace.Types.Timing.TraceWindowMicro): WidgetMakerResponse {
1288
+ component: new () => TimelineInsights.BaseInsightComponent.BaseInsightComponent<T>,
1289
+ insight: T,
1290
+ jslog: string,
1291
+ accessibleLabel: string,
1292
+ title: string,
1293
+ bounds?: Trace.Types.Timing.TraceWindowMicro,
1294
+ ): WidgetMakerResponse {
1293
1295
  const renderedWidget = html`<devtools-widget
1294
1296
  class=${jslog}
1295
1297
  ${widget(component, {
1296
1298
  model: insight,
1297
1299
  minimal: true,
1298
1300
  bounds: bounds ?? null,
1299
- })}></devtools-widget>`;
1301
+ })}
1302
+ ></devtools-widget>`;
1300
1303
 
1301
1304
  return {
1302
1305
  renderedWidget,
@@ -1307,7 +1310,8 @@ function renderInsightWidget<T extends Trace.Insights.Types.InsightModel>(
1307
1310
  };
1308
1311
  }
1309
1312
 
1310
- async function makePerfInsightWidget(widgetData: PerfInsightAiWidget): Promise<WidgetMakerResponse|null> {
1313
+ async function makePerfInsightWidget(widgetData: AiAssistanceModel.AiAgent.PerfInsightAiWidget):
1314
+ Promise<WidgetMakerResponse|null> {
1311
1315
  const insightKey = widgetData.data.insight;
1312
1316
  const insight = widgetData.data.insightData;
1313
1317
 
@@ -1328,7 +1332,8 @@ async function makePerfInsightWidget(widgetData: PerfInsightAiWidget): Promise<W
1328
1332
  return renderInsightWidget(meta.component, insight, meta.jslog, meta.accessibleLabel, meta.title, bounds);
1329
1333
  }
1330
1334
 
1331
- async function makeBottomUpTimelineTreeWidget(widgetData: BottomUpTreeAiWidget): Promise<WidgetMakerResponse|null> {
1335
+ async function makeBottomUpTimelineTreeWidget(widgetData: AiAssistanceModel.AiAgent.BottomUpTreeAiWidget):
1336
+ Promise<WidgetMakerResponse|null> {
1332
1337
  const bottomUpRootNode = AiAssistanceModel.AIQueries.AIQueries.mainThreadActivityBottomUp(
1333
1338
  widgetData.data.bounds, widgetData.data.parsedTrace);
1334
1339
  if (!bottomUpRootNode) {
@@ -1419,7 +1424,8 @@ function renderWidgetResponse(response: WidgetMakerResponse|null): Lit.LitTempla
1419
1424
  // clang-format on
1420
1425
  }
1421
1426
 
1422
- async function makePerformanceTraceWidget(widgetData: PerformanceTraceAiWidget): Promise<WidgetMakerResponse|null> {
1427
+ async function makePerformanceTraceWidget(widgetData: AiAssistanceModel.AiAgent.PerformanceTraceAiWidget):
1428
+ Promise<WidgetMakerResponse|null> {
1423
1429
  const customRevealTitle = lockedString(UIStringsNotTranslate.revealTrace);
1424
1430
  return {
1425
1431
  renderedWidget: null,
@@ -1431,7 +1437,8 @@ async function makePerformanceTraceWidget(widgetData: PerformanceTraceAiWidget):
1431
1437
  };
1432
1438
  }
1433
1439
 
1434
- async function makeSourceFileWidget(widgetData: SourceFileAiWidget): Promise<WidgetMakerResponse|null> {
1440
+ async function makeSourceFileWidget(widgetData: AiAssistanceModel.AiAgent.SourceFileAiWidget):
1441
+ Promise<WidgetMakerResponse|null> {
1435
1442
  const file = widgetData.data.uiSourceCode;
1436
1443
  const customRevealTitle = i18n.i18n.lockedString(`Show ${file.name()}`);
1437
1444
  return {
@@ -1444,7 +1451,8 @@ async function makeSourceFileWidget(widgetData: SourceFileAiWidget): Promise<Wid
1444
1451
  };
1445
1452
  }
1446
1453
 
1447
- async function makeSourceCodeWidget(widgetData: SourceCodeAiWidget): Promise<WidgetMakerResponse|null> {
1454
+ async function makeSourceCodeWidget(widgetData: AiAssistanceModel.AiAgent.SourceCodeAiWidget):
1455
+ Promise<WidgetMakerResponse|null> {
1448
1456
  const url = widgetData.data.url;
1449
1457
  const filename = url.split('/').pop() || url;
1450
1458
  const line = widgetData.data.line;
@@ -1510,7 +1518,8 @@ function renderFileRevealButton(
1510
1518
  `;
1511
1519
  }
1512
1520
 
1513
- async function makeSourceFilesListWidget(widgetData: SourceFilesListAiWidget): Promise<WidgetMakerResponse|null> {
1521
+ async function makeSourceFilesListWidget(widgetData: AiAssistanceModel.AiAgent.SourceFilesListAiWidget):
1522
+ Promise<WidgetMakerResponse|null> {
1514
1523
  const files = widgetData.data.uiSourceCodes;
1515
1524
  if (files.length === 0) {
1516
1525
  return null;
@@ -1540,12 +1549,12 @@ async function makeSourceFilesListWidget(widgetData: SourceFilesListAiWidget): P
1540
1549
  };
1541
1550
  }
1542
1551
 
1543
- const expandedNetworkRequestsWidgets = new WeakSet<NetworkRequestsListAiWidget>();
1552
+ const expandedNetworkRequestsWidgets = new WeakSet<AiAssistanceModel.AiAgent.NetworkRequestsListAiWidget>();
1544
1553
 
1545
1554
  // A widget with a table of the list of network requests sent to the agent.
1546
1555
  // Only show 15 requests maximum in collapsed version. The rest of the requests
1547
1556
  // will be hidden unless the user clicks "Show all".
1548
- async function makeNetworkRequestsListWidget(widgetData: NetworkRequestsListAiWidget):
1557
+ async function makeNetworkRequestsListWidget(widgetData: AiAssistanceModel.AiAgent.NetworkRequestsListAiWidget):
1549
1558
  Promise<WidgetMakerResponse|null> {
1550
1559
  const requests = widgetData.data.requests;
1551
1560
  if (requests.length === 0) {
@@ -1613,7 +1622,8 @@ async function makeNetworkRequestsListWidget(widgetData: NetworkRequestsListAiWi
1613
1622
  };
1614
1623
  }
1615
1624
 
1616
- function renderNetworkRequestPreview(networkRequest: NonNullable<DomTreeAiWidget['data']['networkRequest']>):
1625
+ function renderNetworkRequestPreview(
1626
+ networkRequest: NonNullable<AiAssistanceModel.AiAgent.DomTreeAiWidget['data']['networkRequest']>):
1617
1627
  Lit.TemplateResult {
1618
1628
  const filename = networkRequest.url.split('/').pop() || networkRequest.url;
1619
1629
  const size = i18n.ByteUtilities.bytesToString(networkRequest.size);
@@ -1643,7 +1653,8 @@ function renderNetworkRequestPreview(networkRequest: NonNullable<DomTreeAiWidget
1643
1653
  // clang-format on
1644
1654
  }
1645
1655
 
1646
- async function makeDomTreeWidget(widgetData: DomTreeAiWidget): Promise<WidgetMakerResponse|null> {
1656
+ async function makeDomTreeWidget(widgetData: AiAssistanceModel.AiAgent.DomTreeAiWidget):
1657
+ Promise<WidgetMakerResponse|null> {
1647
1658
  const root = widgetData.data.root;
1648
1659
  if (!(root instanceof SDK.DOMModel.DOMNodeSnapshot)) {
1649
1660
  return null;
@@ -1696,10 +1707,10 @@ async function makeDomTreeWidget(widgetData: DomTreeAiWidget): Promise<WidgetMak
1696
1707
  * corresponding `make...Widget` functions and handling them here.
1697
1708
  */
1698
1709
  /**
1699
- * Generates a deterministic unique identifier for a given AiWidget based on
1710
+ * Generates a deterministic unique identifier for a given AiAssistanceModel.AiAgent.AiWidget based on
1700
1711
  * its name and identifying data. This signature is used for widget deduplication.
1701
1712
  */
1702
- export function getWidgetSignature(widget: AiWidget): string {
1713
+ export function getWidgetSignature(widget: AiAssistanceModel.AiAgent.AiWidget): string {
1703
1714
  switch (widget.name) {
1704
1715
  case 'COMPUTED_STYLES':
1705
1716
  return `${widget.name}:${widget.data.backendNodeId}`;
@@ -1738,7 +1749,7 @@ export function getWidgetSignature(widget: AiWidget): string {
1738
1749
  return `${widget.name}:${widget.data.totalUsageBytes}:${
1739
1750
  widget.data.usageBreakdown.map(e => `${e.storageType}_${e.bytes}`).join(',')}`;
1740
1751
  default:
1741
- Platform.assertNever(widget, 'Unknown AiWidget name');
1752
+ Platform.assertNever(widget, 'Unknown AiAssistanceModel.AiAgent.AiWidget name');
1742
1753
  }
1743
1754
  }
1744
1755
 
@@ -1750,7 +1761,7 @@ export function getWidgetSignature(widget: AiWidget): string {
1750
1761
  export function getDeduplicatedWidgetsMessage(message: ModelChatMessage): ModelChatMessage {
1751
1762
  const seenWidgets = new Set<string>();
1752
1763
 
1753
- const filterWidgets = (widgets: AiWidget[]): AiWidget[] => {
1764
+ const filterWidgets = (widgets: AiAssistanceModel.AiAgent.AiWidget[]): AiAssistanceModel.AiAgent.AiWidget[] => {
1754
1765
  return widgets.filter(widget => {
1755
1766
  const signature = getWidgetSignature(widget);
1756
1767
  if (seenWidgets.has(signature)) {
@@ -1788,8 +1799,8 @@ export function getDeduplicatedWidgetsMessage(message: ModelChatMessage): ModelC
1788
1799
  };
1789
1800
  }
1790
1801
 
1791
- async function renderWidgets(
1792
- widgets: AiWidget[]|undefined, options: {wrapperClass?: string} = {}): Promise<Lit.LitTemplate> {
1802
+ async function renderWidgets(widgets: AiAssistanceModel.AiAgent.AiWidget[]|undefined,
1803
+ options: {wrapperClass?: string} = {}): Promise<Lit.LitTemplate> {
1793
1804
  if (!widgets || widgets.length === 0) {
1794
1805
  return Lit.nothing;
1795
1806
  }
@@ -1848,7 +1859,7 @@ async function renderWidgets(
1848
1859
  response = await makeStorageBreakdownWidget(widgetData);
1849
1860
  break;
1850
1861
  default:
1851
- Platform.assertNever(widgetData, 'Unknown AiWidget name');
1862
+ Platform.assertNever(widgetData, 'Unknown AiAssistanceModel.AiAgent.AiWidget name');
1852
1863
  }
1853
1864
  return renderWidgetResponse(response);
1854
1865
  }));
@@ -2119,7 +2130,7 @@ export class ChatMessage extends UI.Widget.Widget {
2119
2130
  canShowFeedbackForm = false;
2120
2131
  isLastMessage = false;
2121
2132
  isFirstMessage = false;
2122
- markdownRenderer!: MarkdownLitRenderer;
2133
+ markdownRenderer!: MarkdownView.MarkdownView.MarkdownLitRenderer;
2123
2134
  onSuggestionClick: (suggestion: string) => void = () => {};
2124
2135
  onFeedbackSubmit:
2125
2136
  (rpcId: Host.AidaClient.RpcGlobalId, rate: Host.AidaClient.Rating, feedback?: string) => void = () => {};
@@ -2301,7 +2312,7 @@ export class ChatMessage extends UI.Widget.Widget {
2301
2312
  }
2302
2313
  }
2303
2314
 
2304
- async function makeTimelineRangeSummaryWidget(widgetData: TimelineRangeSummaryAiWidget):
2315
+ async function makeTimelineRangeSummaryWidget(widgetData: AiAssistanceModel.AiAgent.TimelineRangeSummaryAiWidget):
2305
2316
  Promise<WidgetMakerResponse|null> {
2306
2317
  const {bounds, parsedTrace, track} = widgetData.data;
2307
2318
  let events: readonly Trace.Types.Events.Event[] = [];
@@ -2324,13 +2335,14 @@ async function makeTimelineRangeSummaryWidget(widgetData: TimelineRangeSummaryAi
2324
2335
  const mainThread = AiAssistanceModel.AIQueries.AIQueries.findMainThread(navigationId, parsedTrace);
2325
2336
  if (mainThread) {
2326
2337
  events = mainThread.entries;
2327
- AiAssistanceModel.Debug.debugLog(
2328
- `TimelineRangeSummaryAiWidget found main thread. PID:`, mainThread.pid, 'TID:', mainThread.tid,
2329
- 'Number of entries:', mainThread.entries.length);
2338
+ AiAssistanceModel.Debug.debugLog(`AiAssistanceModel.AiAgent.TimelineRangeSummaryAiWidget found main thread. PID:`,
2339
+ mainThread.pid, 'TID:', mainThread.tid,
2340
+ 'Number of entries:', mainThread.entries.length);
2330
2341
  }
2331
2342
  }
2332
2343
  if (!events) {
2333
- AiAssistanceModel.Debug.debugLog(`Warning: could not find events for TimelineRangeSummaryAiWidget`, widgetData);
2344
+ AiAssistanceModel.Debug.debugLog(
2345
+ `Warning: could not find events for AiAssistanceModel.AiAgent.TimelineRangeSummaryAiWidget`, widgetData);
2334
2346
  return null;
2335
2347
  }
2336
2348
 
@@ -2378,7 +2390,8 @@ async function makeTimelineRangeSummaryWidget(widgetData: TimelineRangeSummaryAi
2378
2390
  };
2379
2391
  }
2380
2392
 
2381
- async function makeNetworkTrackWidget(widgetData: NetworkTrackAiWidget): Promise<WidgetMakerResponse|null> {
2393
+ async function makeNetworkTrackWidget(widgetData: AiAssistanceModel.AiAgent.NetworkTrackAiWidget):
2394
+ Promise<WidgetMakerResponse|null> {
2382
2395
  const {parsedTrace, bounds} = widgetData.data;
2383
2396
  const dataProvider = new Timeline.TimelineFlameChartNetworkDataProvider.TimelineFlameChartNetworkDataProvider();
2384
2397
 
@@ -2402,7 +2415,8 @@ async function makeNetworkTrackWidget(widgetData: NetworkTrackAiWidget): Promise
2402
2415
  };
2403
2416
  }
2404
2417
 
2405
- async function makeLighthouseReportWidget(widgetData: LighthouseReportAiWidget): Promise<WidgetMakerResponse|null> {
2418
+ async function makeLighthouseReportWidget(widgetData: AiAssistanceModel.AiAgent.LighthouseReportAiWidget):
2419
+ Promise<WidgetMakerResponse|null> {
2406
2420
  let reportEl: HTMLElement|null = null;
2407
2421
  try {
2408
2422
  // Snapshot mode audits only collect individual audit results and do not generate
@@ -2431,7 +2445,7 @@ async function makeLighthouseReportWidget(widgetData: LighthouseReportAiWidget):
2431
2445
  };
2432
2446
  }
2433
2447
 
2434
- async function makeTimelineEventSummaryWidget(widgetData: TimelineEventSummaryAiWidget):
2448
+ async function makeTimelineEventSummaryWidget(widgetData: AiAssistanceModel.AiAgent.TimelineEventSummaryAiWidget):
2435
2449
  Promise<WidgetMakerResponse|null> {
2436
2450
  const renderedWidget = html`<devtools-widget class="timeline-event-summary-widget" ${widget(() => {
2437
2451
  return Timeline.TimelineDetailsView.TimelineDetailsPane.makeEventWidget(
@@ -2449,8 +2463,8 @@ async function makeTimelineEventSummaryWidget(widgetData: TimelineEventSummaryAi
2449
2463
  };
2450
2464
  }
2451
2465
 
2452
- async function makeNetworkRequestGeneralHeadersWidget(widgetData: NetworkRequestGeneralHeadersAiWidget):
2453
- Promise<WidgetMakerResponse|null> {
2466
+ async function makeNetworkRequestGeneralHeadersWidget(
2467
+ widgetData: AiAssistanceModel.AiAgent.NetworkRequestGeneralHeadersAiWidget): Promise<WidgetMakerResponse|null> {
2454
2468
  const renderedWidget = html`<devtools-widget class="network-request-general-headers-widget" ${widget(() => {
2455
2469
  return Network.RequestHeadersView.RequestHeadersView.createGeneralHeadersView(widgetData.data.request);
2456
2470
  })}></devtools-widget>`;
@@ -9,7 +9,7 @@ import * as i18n from '../../../core/i18n/i18n.js';
9
9
  import type * as Platform from '../../../core/platform/platform.js';
10
10
  import * as AiAssistanceModel from '../../../models/ai_assistance/ai_assistance.js';
11
11
  import * as Buttons from '../../../ui/components/buttons/buttons.js';
12
- import type {MarkdownLitRenderer} from '../../../ui/components/markdown_view/MarkdownView.js';
12
+ import type * as MarkdownView from '../../../ui/components/markdown_view/markdown_view.js';
13
13
  import * as UI from '../../../ui/legacy/legacy.js';
14
14
  import {Directives, html, render} from '../../../ui/lit/lit.js';
15
15
 
@@ -95,7 +95,7 @@ export interface Props {
95
95
  textInputValue: string;
96
96
  onTextChange: (text: string) => void;
97
97
  uploadImageInputEnabled?: boolean;
98
- markdownRenderer: MarkdownLitRenderer;
98
+ markdownRenderer: MarkdownView.MarkdownView.MarkdownLitRenderer;
99
99
  generateConversationSummary: (markdown: string) => Promise<string>;
100
100
  walkthrough: {
101
101
  onOpen: (message: ModelChatMessage) => void,
@@ -5,7 +5,7 @@
5
5
  import * as SDK from '../../../core/sdk/sdk.js';
6
6
  import type * as Protocol from '../../../generated/protocol.js';
7
7
  import * as Marked from '../../../third_party/marked/marked.js';
8
- import type * as MarkdownView from '../../../ui/components/markdown_view/MarkdownView.js';
8
+ import type * as MarkdownView from '../../../ui/components/markdown_view/markdown_view.js';
9
9
  import * as Lit from '../../../ui/lit/lit.js';
10
10
  import * as PanelsCommon from '../../common/common.js';
11
11
 
@@ -65,7 +65,7 @@ export class StylingAgentMarkdownRenderer extends MarkdownRendererWithCodeBlock
65
65
  <devtools-markdown-view .data=${{
66
66
  tokens: Marked.Marked.lexer(row['Details']),
67
67
  renderer: new StylingAgentMarkdownRenderer(this.mainFrameId),
68
- } as MarkdownView.MarkdownViewData}></devtools-markdown-view>
68
+ } as MarkdownView.MarkdownView.MarkdownViewData}></devtools-markdown-view>
69
69
  </td>
70
70
  </tr>
71
71
  `;
@@ -6,7 +6,7 @@ import * as i18n from '../../../core/i18n/i18n.js';
6
6
  import * as AiAssistanceModel from '../../../models/ai_assistance/ai_assistance.js';
7
7
  import * as Buttons from '../../../ui/components/buttons/buttons.js';
8
8
  import * as Input from '../../../ui/components/input/input.js';
9
- import type {MarkdownLitRenderer} from '../../../ui/components/markdown_view/MarkdownView.js';
9
+ import type * as MarkdownView from '../../../ui/components/markdown_view/markdown_view.js';
10
10
  import * as UI from '../../../ui/legacy/legacy.js';
11
11
  import * as Lit from '../../../ui/lit/lit.js';
12
12
  import * as VisualLogging from '../../../ui/visual_logging/visual_logging.js';
@@ -64,7 +64,7 @@ const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
64
64
  export interface ViewInput {
65
65
  message: ModelChatMessage|null;
66
66
  isLoading: boolean;
67
- markdownRenderer: MarkdownLitRenderer;
67
+ markdownRenderer: MarkdownView.MarkdownView.MarkdownLitRenderer;
68
68
  isInlined: boolean;
69
69
  isExpanded: boolean;
70
70
  prompt: string;
@@ -251,7 +251,7 @@ export class WalkthroughView extends UI.Widget.Widget {
251
251
 
252
252
  #message: ModelChatMessage|null = null;
253
253
  #isLoading = false;
254
- #markdownRenderer: MarkdownLitRenderer|null = null;
254
+ #markdownRenderer: MarkdownView.MarkdownView.MarkdownLitRenderer|null = null;
255
255
  #onToggle: (isOpen: boolean, message: ModelChatMessage) => void = () => {};
256
256
  #onOpen: (message: ModelChatMessage) => void = () => {};
257
257
  #isInlined = false;
@@ -361,11 +361,11 @@ export class WalkthroughView extends UI.Widget.Widget {
361
361
  return this.#isLoading;
362
362
  }
363
363
 
364
- get markdownRenderer(): MarkdownLitRenderer|null {
364
+ get markdownRenderer(): MarkdownView.MarkdownView.MarkdownLitRenderer|null {
365
365
  return this.#markdownRenderer;
366
366
  }
367
367
 
368
- set markdownRenderer(markdownRenderer: MarkdownLitRenderer|null) {
368
+ set markdownRenderer(markdownRenderer: MarkdownView.MarkdownView.MarkdownLitRenderer|null) {
369
369
  this.#markdownRenderer = markdownRenderer;
370
370
  this.requestUpdate();
371
371
  }
@@ -1199,6 +1199,7 @@ export class NodeUI {
1199
1199
  constructor(_animationEffect: SDK.AnimationModel.AnimationEffect) {
1200
1200
  this.element = document.createElement('div');
1201
1201
  this.element.classList.add('animation-node-row');
1202
+ this.element.setAttribute('jslog', `${VisualLogging.tableRow('animation-node-row')}`);
1202
1203
  this.#description = this.element.createChild('div', 'animation-node-description');
1203
1204
  this.#description.setAttribute('jslog', `${VisualLogging.tableCell('description').track({resize: true})}`);
1204
1205
  this.#timelineElement = this.element.createChild('div', 'animation-node-timeline');
@@ -1211,6 +1212,7 @@ export class NodeUI {
1211
1212
  UI.UIUtils.createTextChild(this.#description, '<node>');
1212
1213
  return;
1213
1214
  }
1215
+ this.element.setAttribute('data-backend-node-id', String(node.backendNodeId()));
1214
1216
  this.#node = node;
1215
1217
  this.nodeChanged();
1216
1218
  const link = PanelsCommon.DOMLinkifier.Linkifier.instance().linkify(node, {