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.
- package/eslint.config.mjs +8 -3
- package/front_end/core/sdk/ConsoleModel.ts +1 -1
- package/front_end/core/sdk/PreloadingModel.ts +44 -22
- package/front_end/core/sdk/RemoteObject.ts +4 -1
- package/front_end/core/sdk/RuntimeModel.ts +5 -5
- package/front_end/core/sdk/sdk.ts +2 -0
- package/front_end/entrypoints/formatter_worker/FormatterWorker.ts +1 -1
- package/front_end/entrypoints/inspector_main/InspectorMain.ts +3 -1
- package/front_end/entrypoints/inspector_main/inspector_main-meta.ts +1 -5
- package/front_end/entrypoints/main/MainImpl.ts +9 -10
- package/front_end/entrypoints/shell/shell.ts +0 -2
- package/front_end/entrypoints/trace_app/trace_app.ts +0 -2
- package/front_end/generated/InspectorBackendCommands.ts +2 -0
- package/front_end/generated/protocol-mapping.d.ts +16 -0
- package/front_end/generated/protocol-proxy-api.d.ts +12 -0
- package/front_end/generated/protocol.ts +12 -0
- package/front_end/models/ai_assistance/ExtensionScope.ts +11 -12
- package/front_end/models/ai_assistance/agents/AiAgent.ts +1 -1
- package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +2 -1
- package/front_end/models/ai_assistance/agents/PerformanceAgent.snapshot.txt +1 -1
- package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +2 -1
- package/front_end/models/ai_assistance/contexts/PerformanceTraceContext.ts +2 -1
- package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.snapshot.txt +8 -8
- package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +8 -8
- package/front_end/models/bindings/DebuggerLanguagePlugins.ts +1 -0
- package/front_end/models/formatter/ScriptFormatter.ts +1 -0
- package/front_end/models/javascript_metadata/NativeFunctions.js +5 -1
- package/front_end/models/live-metrics/web-vitals-injected/spec/spec.ts +4 -4
- package/front_end/models/logs/NetworkLog.ts +8 -1
- package/front_end/models/persistence/AutomaticFileSystemWorkspaceBinding.ts +4 -2
- package/front_end/models/stack_trace/StackTraceImpl.ts +1 -0
- package/front_end/models/trace/Name.ts +5 -5
- package/front_end/models/trace/Styles.ts +115 -115
- package/front_end/models/trace/extras/TraceTree.ts +2 -1
- package/front_end/models/trace/helpers/Network.ts +4 -1
- package/front_end/models/trace/insights/CLSCulprits.ts +4 -2
- package/front_end/models/trace/insights/CharacterSet.ts +3 -3
- package/front_end/models/trace/insights/DOMSize.ts +1 -1
- package/front_end/models/trace/insights/DuplicatedJavaScript.ts +6 -2
- package/front_end/models/trace/insights/FontDisplay.ts +9 -3
- package/front_end/models/trace/insights/ForcedReflow.ts +4 -4
- package/front_end/models/trace/insights/INPBreakdown.ts +3 -4
- package/front_end/models/trace/insights/ImageDelivery.ts +2 -2
- package/front_end/models/trace/insights/LCPBreakdown.ts +1 -1
- package/front_end/models/trace/insights/LCPDiscovery.ts +5 -5
- package/front_end/models/trace/insights/LegacyJavaScript.ts +7 -3
- package/front_end/models/trace/insights/ModernHTTP.ts +3 -3
- package/front_end/models/trace/insights/NetworkDependencyTree.ts +13 -9
- package/front_end/models/trace/insights/RenderBlocking.ts +1 -1
- package/front_end/models/trace/insights/SlowCSSSelector.ts +29 -25
- package/front_end/models/trace/insights/ThirdParties.ts +13 -5
- package/front_end/models/trace/insights/Viewport.ts +4 -2
- package/front_end/models/workspace/IgnoreListManager.ts +53 -17
- package/front_end/panels/accessibility/ARIAAttributesView.ts +11 -2
- package/front_end/panels/ai_assistance/components/ChatMessage.ts +67 -53
- package/front_end/panels/ai_assistance/components/ChatView.ts +2 -2
- package/front_end/panels/ai_assistance/components/StylingAgentMarkdownRenderer.ts +2 -2
- package/front_end/panels/ai_assistance/components/WalkthroughView.ts +5 -5
- package/front_end/panels/animation/AnimationTimeline.ts +2 -0
- package/front_end/panels/application/preloading/PreloadingView.ts +9 -3
- package/front_end/panels/application/preloading/components/components.ts +2 -0
- package/front_end/panels/browser_debugger/ObjectEventListenersSidebarPane.ts +10 -11
- package/front_end/panels/changes/CombinedDiffView.ts +1 -1
- package/front_end/panels/common/ExtensionServer.ts +9 -10
- package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +9 -4
- package/front_end/panels/elements/ElementStatePaneWidget.ts +3 -0
- package/front_end/panels/elements/ElementsTreeElement.ts +7 -1
- package/front_end/panels/elements/EventListenersWidget.ts +10 -11
- package/front_end/panels/issues/IssueView.ts +5 -6
- package/front_end/panels/linear_memory_inspector/components/LinearMemoryViewer.ts +1 -1
- package/front_end/panels/media/PlayerPropertiesView.ts +309 -416
- package/front_end/panels/media/playerPropertiesView.css +1 -1
- package/front_end/panels/network/NetworkPanel.ts +2 -1
- package/front_end/panels/network/components/ResponseHeaderSection.ts +1 -2
- package/front_end/panels/network/network-meta.ts +6 -0
- package/front_end/panels/performance_monitor/PerformanceMonitor.ts +2 -1
- package/front_end/panels/recorder/RecordingView.ts +89 -73
- package/front_end/panels/recorder/ReplaySection.ts +59 -40
- package/front_end/panels/recorder/injected/injected.ts +4 -0
- package/front_end/panels/security/SecurityPanel.ts +5 -6
- package/front_end/panels/security/SecurityPanelSidebar.ts +244 -204
- package/front_end/panels/security/security.ts +0 -4
- package/front_end/panels/settings/EditFileSystemView.ts +8 -7
- package/front_end/panels/settings/FrameworkIgnoreListSettingsTab.ts +20 -14
- package/front_end/panels/snippets/ScriptSnippetFileSystem.ts +10 -11
- package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +3 -3
- package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +5 -5
- package/front_end/panels/timeline/components/CWVMetrics.ts +1 -2
- package/front_end/panels/timeline/components/IgnoreListSetting.ts +5 -5
- package/front_end/panels/timeline/components/LayoutShiftDetails.ts +2 -3
- package/front_end/panels/timeline/components/LiveMetricsView.ts +2 -2
- package/front_end/panels/timeline/components/Sidebar.ts +3 -3
- package/front_end/panels/timeline/components/SidebarSingleInsightSet.ts +1 -2
- package/front_end/panels/timeline/components/insights/BaseInsightComponent.ts +3 -1
- package/front_end/panels/timeline/components/insights/CLSCulprits.ts +1 -2
- package/front_end/panels/timeline/components/insights/Cache.ts +1 -2
- package/front_end/panels/timeline/components/insights/CharacterSet.ts +1 -2
- package/front_end/panels/timeline/components/insights/DOMSize.ts +1 -2
- package/front_end/panels/timeline/components/insights/DocumentLatency.ts +2 -2
- package/front_end/panels/timeline/components/insights/DuplicatedJavaScript.ts +2 -2
- package/front_end/panels/timeline/components/insights/FontDisplay.ts +1 -2
- package/front_end/panels/timeline/components/insights/ForcedReflow.ts +1 -2
- package/front_end/panels/timeline/components/insights/INPBreakdown.ts +1 -2
- package/front_end/panels/timeline/components/insights/ImageDelivery.ts +1 -2
- package/front_end/panels/timeline/components/insights/LCPBreakdown.ts +13 -13
- package/front_end/panels/timeline/components/insights/LCPDiscovery.ts +1 -2
- package/front_end/panels/timeline/components/insights/LegacyJavaScript.ts +4 -4
- package/front_end/panels/timeline/components/insights/ModernHTTP.ts +1 -2
- package/front_end/panels/timeline/components/insights/NetworkDependencyTree.ts +10 -8
- package/front_end/panels/timeline/components/insights/RenderBlocking.ts +2 -2
- package/front_end/panels/timeline/components/insights/SidebarInsight.ts +3 -1
- package/front_end/panels/timeline/components/insights/SlowCSSSelector.ts +2 -2
- package/front_end/panels/timeline/components/insights/ThirdParties.ts +1 -2
- package/front_end/panels/timeline/components/insights/Viewport.ts +1 -2
- package/front_end/panels/timeline/overlays/OverlaysImpl.ts +1 -2
- package/front_end/panels/timeline/timeline.ts +0 -2
- package/front_end/panels/web_audio/WebAudioView.ts +7 -7
- package/front_end/panels/webauthn/WebauthnPane.ts +9 -9
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/ui/components/diff_view/DiffView.ts +2 -1
- package/front_end/ui/components/report_view/ReportView.docs.ts +2 -2
- package/front_end/ui/components/text_editor/javascript.ts +12 -13
- package/front_end/ui/legacy/GlassPane.ts +38 -14
- package/front_end/ui/legacy/Treeoutline.ts +14 -3
- package/front_end/ui/legacy/components/object_ui/CustomPreviewComponent.ts +1 -1
- package/front_end/ui/legacy/components/object_ui/JavaScriptREPL.ts +1 -1
- package/front_end/ui/legacy/components/object_ui/ObjectPopoverHelper.ts +1 -1
- package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +21 -30
- package/front_end/ui/legacy/components/object_ui/RemoteObjectPreviewFormatter.ts +3 -8
- package/front_end/ui/legacy/components/utils/ImagePreview.ts +15 -16
- package/front_end/ui/legacy/components/utils/JSPresentationUtils.ts +4 -4
- package/front_end/ui/legacy/components/utils/Linkifier.ts +8 -10
- package/front_end/ui/settings/InspectorMainSettings.ts +12 -0
- package/front_end/ui/settings/settings.ts +2 -0
- package/front_end/ui/visual_logging/KnownContextValues.ts +21 -0
- package/mcp/mcp.ts +0 -6
- package/package.json +1 -1
- package/front_end/models/logs/logs-meta.ts +0 -24
- package/front_end/models/workspace/workspace-meta.ts +0 -40
- package/front_end/panels/security/OriginTreeElement.ts +0 -60
- 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.
|
|
74
|
-
this.#settings.
|
|
75
|
-
this.#settings.
|
|
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.
|
|
78
|
-
this.#settings.
|
|
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.
|
|
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.
|
|
363
|
+
return this.#settings.resolve(enableIgnoreListingSettingDescriptor).get();
|
|
328
364
|
}
|
|
329
365
|
|
|
330
366
|
set enableIgnoreListing(value: boolean) {
|
|
331
|
-
this.#settings.
|
|
367
|
+
this.#settings.resolve(enableIgnoreListingSettingDescriptor).set(value);
|
|
332
368
|
}
|
|
333
369
|
|
|
334
370
|
get skipContentScripts(): boolean {
|
|
335
|
-
return this.enableIgnoreListing && this.#settings.
|
|
371
|
+
return this.enableIgnoreListing && this.#settings.resolve(skipContentScriptsSettingDescriptor).get();
|
|
336
372
|
}
|
|
337
373
|
|
|
338
374
|
get skipAnonymousScripts(): boolean {
|
|
339
|
-
return this.enableIgnoreListing && this.#settings.
|
|
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.
|
|
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.
|
|
387
|
+
this.#settings.resolve(skipContentScriptsSettingDescriptor).set(true);
|
|
352
388
|
}
|
|
353
389
|
|
|
354
390
|
unIgnoreListContentScripts(): void {
|
|
355
|
-
this.#settings.
|
|
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.
|
|
398
|
+
this.#settings.resolve(skipAnonymousScriptsSettingDescriptor).set(true);
|
|
363
399
|
}
|
|
364
400
|
|
|
365
401
|
unIgnoreListAnonymousScripts(): void {
|
|
366
|
-
this.#settings.
|
|
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.
|
|
409
|
+
this.#settings.resolve(automaticallyIgnoreListKnownThirdPartyScriptsSettingDescriptor).set(true);
|
|
374
410
|
}
|
|
375
411
|
|
|
376
412
|
unIgnoreListThirdParty(): void {
|
|
377
|
-
this.#settings.
|
|
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, {
|
|
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,
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
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):
|
|
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):
|
|
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):
|
|
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):
|
|
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>,
|
|
1292
|
-
|
|
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
|
-
})}
|
|
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):
|
|
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):
|
|
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):
|
|
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):
|
|
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):
|
|
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):
|
|
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(
|
|
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):
|
|
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
|
-
|
|
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
|
-
|
|
2329
|
-
|
|
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(
|
|
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):
|
|
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):
|
|
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(
|
|
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
|
|
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/
|
|
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
|
|
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, {
|