chrome-devtools-frontend 1.0.1520139 → 1.0.1521223

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 (35) hide show
  1. package/docs/checklist/README.md +80 -27
  2. package/front_end/core/host/GdpClient.ts +18 -6
  3. package/front_end/core/host/InspectorFrontendHost.ts +3 -0
  4. package/front_end/core/root/Runtime.ts +5 -0
  5. package/front_end/core/sdk/CSSModel.ts +8 -0
  6. package/front_end/core/sdk/CSSRule.ts +4 -0
  7. package/front_end/core/sdk/CSSStartingStyle.ts +29 -0
  8. package/front_end/core/sdk/DOMModel.ts +24 -1
  9. package/front_end/core/sdk/RehydratingConnection.snapshot.txt +209 -209
  10. package/front_end/core/sdk/RehydratingConnection.ts +5 -2
  11. package/front_end/core/sdk/sdk.ts +2 -0
  12. package/front_end/entrypoints/rehydrated_devtools_app/rehydrated_devtools_app.ts +1 -0
  13. package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +2 -26
  14. package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.snapshot.txt +32 -32
  15. package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.ts +11 -21
  16. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +32 -21
  17. package/front_end/models/badges/UserBadges.ts +5 -4
  18. package/front_end/models/trace/handlers/ScriptsHandler.ts +2 -1
  19. package/front_end/models/trace/insights/LegacyJavaScript.ts +2 -1
  20. package/front_end/panels/ai_assistance/components/ChatView.ts +1 -1
  21. package/front_end/panels/ai_assistance/components/chatView.css +1 -1
  22. package/front_end/panels/coverage/CoverageListView.ts +28 -55
  23. package/front_end/panels/coverage/CoverageView.ts +12 -5
  24. package/front_end/panels/elements/ComputedStyleModel.ts +2 -1
  25. package/front_end/panels/elements/ElementsTreeElement.ts +47 -0
  26. package/front_end/panels/elements/ElementsTreeOutline.ts +13 -0
  27. package/front_end/panels/elements/StylePropertiesSection.ts +16 -0
  28. package/front_end/panels/elements/components/AdornerManager.ts +7 -0
  29. package/front_end/panels/settings/components/SyncSection.ts +5 -17
  30. package/front_end/panels/timeline/components/ExportTraceOptions.ts +56 -4
  31. package/front_end/panels/timeline/components/exportTraceOptions.css +5 -0
  32. package/front_end/third_party/lighthouse/README.chromium +8 -1
  33. package/front_end/ui/legacy/InspectorView.ts +22 -15
  34. package/front_end/ui/visual_logging/KnownContextValues.ts +1 -0
  35. package/package.json +1 -1
@@ -39,6 +39,13 @@ Content:
39
39
  "method": "Runtime.enable"
40
40
  }
41
41
 
42
+ /* fakeDevToolsFrontend says: */
43
+ {
44
+ "id": 2,
45
+ "sessionId": 1,
46
+ "method": "Debugger.enable"
47
+ }
48
+
42
49
  /* RehydratingConnection says: */
43
50
  {
44
51
  "method": "Runtime.executionContextCreated",
@@ -130,13 +137,6 @@ Content:
130
137
  "sessionId": 1
131
138
  }
132
139
 
133
- /* fakeDevToolsFrontend says: */
134
- {
135
- "id": 2,
136
- "sessionId": 1,
137
- "method": "Debugger.enable"
138
- }
139
-
140
140
  /* RehydratingConnection says: */
141
141
  {
142
142
  "method": "Debugger.scriptParsed",
@@ -171,15 +171,6 @@ Content:
171
171
  }
172
172
  }
173
173
 
174
- /* RehydratingConnection says: */
175
- {
176
- "id": 3,
177
- "result": {
178
- "scriptSource": "(function () {\n 'us…"
179
- },
180
- "sessionId": 1
181
- }
182
-
183
174
  /* RehydratingConnection says: */
184
175
  {
185
176
  "method": "Debugger.scriptParsed",
@@ -217,15 +208,6 @@ Content:
217
208
  }
218
209
  }
219
210
 
220
- /* RehydratingConnection says: */
221
- {
222
- "id": 4,
223
- "result": {
224
- "scriptSource": "No source text avail…"
225
- },
226
- "sessionId": 1
227
- }
228
-
229
211
  /* RehydratingConnection says: */
230
212
  {
231
213
  "method": "Debugger.scriptParsed",
@@ -265,15 +247,6 @@ Content:
265
247
  }
266
248
  }
267
249
 
268
- /* RehydratingConnection says: */
269
- {
270
- "id": 5,
271
- "result": {
272
- "scriptSource": "\nvar firebaseConfig …"
273
- },
274
- "sessionId": 1
275
- }
276
-
277
250
  /* RehydratingConnection says: */
278
251
  {
279
252
  "method": "Debugger.scriptParsed",
@@ -313,15 +286,6 @@ Content:
313
286
  }
314
287
  }
315
288
 
316
- /* RehydratingConnection says: */
317
- {
318
- "id": 6,
319
- "result": {
320
- "scriptSource": "\\n window.dataLayer…"
321
- },
322
- "sessionId": 1
323
- }
324
-
325
289
  /* RehydratingConnection says: */
326
290
  {
327
291
  "method": "Debugger.scriptParsed",
@@ -361,15 +325,6 @@ Content:
361
325
  }
362
326
  }
363
327
 
364
- /* RehydratingConnection says: */
365
- {
366
- "id": 7,
367
- "result": {
368
- "scriptSource": " …"
369
- },
370
- "sessionId": 1
371
- }
372
-
373
328
  /* RehydratingConnection says: */
374
329
  {
375
330
  "method": "Debugger.scriptParsed",
@@ -409,15 +364,6 @@ Content:
409
364
  }
410
365
  }
411
366
 
412
- /* RehydratingConnection says: */
413
- {
414
- "id": 8,
415
- "result": {
416
- "scriptSource": "\\n\\tperformance.mark…"
417
- },
418
- "sessionId": 1
419
- }
420
-
421
367
  /* RehydratingConnection says: */
422
368
  {
423
369
  "method": "Debugger.scriptParsed",
@@ -457,15 +403,6 @@ Content:
457
403
  }
458
404
  }
459
405
 
460
- /* RehydratingConnection says: */
461
- {
462
- "id": 9,
463
- "result": {
464
- "scriptSource": "/* Modernizr 2.0.4 (…"
465
- },
466
- "sessionId": 1
467
- }
468
-
469
406
  /* RehydratingConnection says: */
470
407
  {
471
408
  "method": "Debugger.scriptParsed",
@@ -506,15 +443,6 @@ Content:
506
443
  }
507
444
  }
508
445
 
509
- /* RehydratingConnection says: */
510
- {
511
- "id": 10,
512
- "result": {
513
- "scriptSource": "!function(e,t){\"obje…"
514
- },
515
- "sessionId": 1
516
- }
517
-
518
446
  /* RehydratingConnection says: */
519
447
  {
520
448
  "method": "Debugger.scriptParsed",
@@ -554,15 +482,6 @@ Content:
554
482
  }
555
483
  }
556
484
 
557
- /* RehydratingConnection says: */
558
- {
559
- "id": 11,
560
- "result": {
561
- "scriptSource": "/*!\n * ============…"
562
- },
563
- "sessionId": 1
564
- }
565
-
566
485
  /* RehydratingConnection says: */
567
486
  {
568
487
  "method": "Debugger.scriptParsed",
@@ -602,15 +521,6 @@ Content:
602
521
  }
603
522
  }
604
523
 
605
- /* RehydratingConnection says: */
606
- {
607
- "id": 12,
608
- "result": {
609
- "scriptSource": "function getNav() {\n…"
610
- },
611
- "sessionId": 1
612
- }
613
-
614
524
  /* RehydratingConnection says: */
615
525
  {
616
526
  "method": "Debugger.scriptParsed",
@@ -650,15 +560,6 @@ Content:
650
560
  }
651
561
  }
652
562
 
653
- /* RehydratingConnection says: */
654
- {
655
- "id": 13,
656
- "result": {
657
- "scriptSource": "\nperformance.mark('e…"
658
- },
659
- "sessionId": 1
660
- }
661
-
662
563
  /* RehydratingConnection says: */
663
564
  {
664
565
  "method": "Debugger.scriptParsed",
@@ -698,15 +599,6 @@ Content:
698
599
  }
699
600
  }
700
601
 
701
- /* RehydratingConnection says: */
702
- {
703
- "id": 14,
704
- "result": {
705
- "scriptSource": "\\n (function(i,s,o,…"
706
- },
707
- "sessionId": 1
708
- }
709
-
710
602
  /* RehydratingConnection says: */
711
603
  {
712
604
  "method": "Debugger.scriptParsed",
@@ -746,15 +638,6 @@ Content:
746
638
  }
747
639
  }
748
640
 
749
- /* RehydratingConnection says: */
750
- {
751
- "id": 15,
752
- "result": {
753
- "scriptSource": "\\n var disqus_s…"
754
- },
755
- "sessionId": 1
756
- }
757
-
758
641
  /* RehydratingConnection says: */
759
642
  {
760
643
  "method": "Debugger.scriptParsed",
@@ -794,15 +677,6 @@ Content:
794
677
  }
795
678
  }
796
679
 
797
- /* RehydratingConnection says: */
798
- {
799
- "id": 16,
800
- "result": {
801
- "scriptSource": "var DISQUSWIDGETS,di…"
802
- },
803
- "sessionId": 1
804
- }
805
-
806
680
  /* RehydratingConnection says: */
807
681
  {
808
682
  "method": "Debugger.scriptParsed",
@@ -841,15 +715,6 @@ Content:
841
715
  }
842
716
  }
843
717
 
844
- /* RehydratingConnection says: */
845
- {
846
- "id": 17,
847
- "result": {
848
- "scriptSource": "No source text avail…"
849
- },
850
- "sessionId": 1
851
- }
852
-
853
718
  /* RehydratingConnection says: */
854
719
  {
855
720
  "method": "Debugger.scriptParsed",
@@ -887,15 +752,6 @@ Content:
887
752
  }
888
753
  }
889
754
 
890
- /* RehydratingConnection says: */
891
- {
892
- "id": 18,
893
- "result": {
894
- "scriptSource": "No source text avail…"
895
- },
896
- "sessionId": 1
897
- }
898
-
899
755
  /* RehydratingConnection says: */
900
756
  {
901
757
  "method": "Debugger.scriptParsed",
@@ -935,15 +791,6 @@ Content:
935
791
  }
936
792
  }
937
793
 
938
- /* RehydratingConnection says: */
939
- {
940
- "id": 19,
941
- "result": {
942
- "scriptSource": "\n// Copyright 2012 G…"
943
- },
944
- "sessionId": 1
945
- }
946
-
947
794
  /* RehydratingConnection says: */
948
795
  {
949
796
  "method": "Debugger.scriptParsed",
@@ -983,15 +830,6 @@ Content:
983
830
  }
984
831
  }
985
832
 
986
- /* RehydratingConnection says: */
987
- {
988
- "id": 20,
989
- "result": {
990
- "scriptSource": "(function(){var aa=f…"
991
- },
992
- "sessionId": 1
993
- }
994
-
995
833
  /* RehydratingConnection says: */
996
834
  {
997
835
  "method": "Debugger.scriptParsed",
@@ -1026,15 +864,6 @@ Content:
1026
864
  }
1027
865
  }
1028
866
 
1029
- /* RehydratingConnection says: */
1030
- {
1031
- "id": 21,
1032
- "result": {
1033
- "scriptSource": "(async function(){ a…"
1034
- },
1035
- "sessionId": 1
1036
- }
1037
-
1038
867
  /* RehydratingConnection says: */
1039
868
  {
1040
869
  "method": "Debugger.scriptParsed",
@@ -1067,15 +896,6 @@ Content:
1067
896
  }
1068
897
  }
1069
898
 
1070
- /* RehydratingConnection says: */
1071
- {
1072
- "id": 22,
1073
- "result": {
1074
- "scriptSource": "No source text avail…"
1075
- },
1076
- "sessionId": 1
1077
- }
1078
-
1079
899
  /* RehydratingConnection says: */
1080
900
  {
1081
901
  "method": "Debugger.scriptParsed",
@@ -1110,15 +930,6 @@ Content:
1110
930
  }
1111
931
  }
1112
932
 
1113
- /* RehydratingConnection says: */
1114
- {
1115
- "id": 23,
1116
- "result": {
1117
- "scriptSource": "() {}…"
1118
- },
1119
- "sessionId": 1
1120
- }
1121
-
1122
933
  /* RehydratingConnection says: */
1123
934
  {
1124
935
  "method": "Debugger.scriptParsed",
@@ -1151,15 +962,6 @@ Content:
1151
962
  }
1152
963
  }
1153
964
 
1154
- /* RehydratingConnection says: */
1155
- {
1156
- "id": 24,
1157
- "result": {
1158
- "scriptSource": "No source text avail…"
1159
- },
1160
- "sessionId": 1
1161
- }
1162
-
1163
965
  /* RehydratingConnection says: */
1164
966
  {
1165
967
  "method": "Debugger.scriptParsed",
@@ -1196,18 +998,216 @@ Content:
1196
998
 
1197
999
  /* RehydratingConnection says: */
1198
1000
  {
1199
- "id": 25,
1001
+ "id": 2,
1200
1002
  "result": {
1201
- "scriptSource": "var chrome;if (!chro…"
1003
+ "debuggerId": "7777777777777777777.8888888888888888888"
1202
1004
  },
1203
1005
  "sessionId": 1
1204
1006
  }
1205
1007
 
1206
1008
  /* RehydratingConnection says: */
1207
1009
  {
1208
- "id": 2,
1010
+ "id": 3,
1209
1011
  "result": {
1210
- "debuggerId": "7777777777777777777.8888888888888888888"
1012
+ "scriptSource": "(function () {\n 'us…"
1013
+ },
1014
+ "sessionId": 1
1015
+ }
1016
+
1017
+ /* RehydratingConnection says: */
1018
+ {
1019
+ "id": 4,
1020
+ "result": {
1021
+ "scriptSource": "No source text avail…"
1022
+ },
1023
+ "sessionId": 1
1024
+ }
1025
+
1026
+ /* RehydratingConnection says: */
1027
+ {
1028
+ "id": 5,
1029
+ "result": {
1030
+ "scriptSource": "\nvar firebaseConfig …"
1031
+ },
1032
+ "sessionId": 1
1033
+ }
1034
+
1035
+ /* RehydratingConnection says: */
1036
+ {
1037
+ "id": 6,
1038
+ "result": {
1039
+ "scriptSource": "\\n window.dataLayer…"
1040
+ },
1041
+ "sessionId": 1
1042
+ }
1043
+
1044
+ /* RehydratingConnection says: */
1045
+ {
1046
+ "id": 7,
1047
+ "result": {
1048
+ "scriptSource": " …"
1049
+ },
1050
+ "sessionId": 1
1051
+ }
1052
+
1053
+ /* RehydratingConnection says: */
1054
+ {
1055
+ "id": 8,
1056
+ "result": {
1057
+ "scriptSource": "\\n\\tperformance.mark…"
1058
+ },
1059
+ "sessionId": 1
1060
+ }
1061
+
1062
+ /* RehydratingConnection says: */
1063
+ {
1064
+ "id": 9,
1065
+ "result": {
1066
+ "scriptSource": "/* Modernizr 2.0.4 (…"
1067
+ },
1068
+ "sessionId": 1
1069
+ }
1070
+
1071
+ /* RehydratingConnection says: */
1072
+ {
1073
+ "id": 10,
1074
+ "result": {
1075
+ "scriptSource": "!function(e,t){\"obje…"
1076
+ },
1077
+ "sessionId": 1
1078
+ }
1079
+
1080
+ /* RehydratingConnection says: */
1081
+ {
1082
+ "id": 11,
1083
+ "result": {
1084
+ "scriptSource": "/*!\n * ============…"
1085
+ },
1086
+ "sessionId": 1
1087
+ }
1088
+
1089
+ /* RehydratingConnection says: */
1090
+ {
1091
+ "id": 12,
1092
+ "result": {
1093
+ "scriptSource": "function getNav() {\n…"
1094
+ },
1095
+ "sessionId": 1
1096
+ }
1097
+
1098
+ /* RehydratingConnection says: */
1099
+ {
1100
+ "id": 13,
1101
+ "result": {
1102
+ "scriptSource": "\nperformance.mark('e…"
1103
+ },
1104
+ "sessionId": 1
1105
+ }
1106
+
1107
+ /* RehydratingConnection says: */
1108
+ {
1109
+ "id": 14,
1110
+ "result": {
1111
+ "scriptSource": "\\n (function(i,s,o,…"
1112
+ },
1113
+ "sessionId": 1
1114
+ }
1115
+
1116
+ /* RehydratingConnection says: */
1117
+ {
1118
+ "id": 15,
1119
+ "result": {
1120
+ "scriptSource": "\\n var disqus_s…"
1121
+ },
1122
+ "sessionId": 1
1123
+ }
1124
+
1125
+ /* RehydratingConnection says: */
1126
+ {
1127
+ "id": 16,
1128
+ "result": {
1129
+ "scriptSource": "var DISQUSWIDGETS,di…"
1130
+ },
1131
+ "sessionId": 1
1132
+ }
1133
+
1134
+ /* RehydratingConnection says: */
1135
+ {
1136
+ "id": 17,
1137
+ "result": {
1138
+ "scriptSource": "No source text avail…"
1139
+ },
1140
+ "sessionId": 1
1141
+ }
1142
+
1143
+ /* RehydratingConnection says: */
1144
+ {
1145
+ "id": 18,
1146
+ "result": {
1147
+ "scriptSource": "No source text avail…"
1148
+ },
1149
+ "sessionId": 1
1150
+ }
1151
+
1152
+ /* RehydratingConnection says: */
1153
+ {
1154
+ "id": 19,
1155
+ "result": {
1156
+ "scriptSource": "\n// Copyright 2012 G…"
1157
+ },
1158
+ "sessionId": 1
1159
+ }
1160
+
1161
+ /* RehydratingConnection says: */
1162
+ {
1163
+ "id": 20,
1164
+ "result": {
1165
+ "scriptSource": "(function(){var aa=f…"
1166
+ },
1167
+ "sessionId": 1
1168
+ }
1169
+
1170
+ /* RehydratingConnection says: */
1171
+ {
1172
+ "id": 21,
1173
+ "result": {
1174
+ "scriptSource": "(async function(){ a…"
1175
+ },
1176
+ "sessionId": 1
1177
+ }
1178
+
1179
+ /* RehydratingConnection says: */
1180
+ {
1181
+ "id": 22,
1182
+ "result": {
1183
+ "scriptSource": "No source text avail…"
1184
+ },
1185
+ "sessionId": 1
1186
+ }
1187
+
1188
+ /* RehydratingConnection says: */
1189
+ {
1190
+ "id": 23,
1191
+ "result": {
1192
+ "scriptSource": "() {}…"
1193
+ },
1194
+ "sessionId": 1
1195
+ }
1196
+
1197
+ /* RehydratingConnection says: */
1198
+ {
1199
+ "id": 24,
1200
+ "result": {
1201
+ "scriptSource": "No source text avail…"
1202
+ },
1203
+ "sessionId": 1
1204
+ }
1205
+
1206
+ /* RehydratingConnection says: */
1207
+ {
1208
+ "id": 25,
1209
+ "result": {
1210
+ "scriptSource": "var chrome;if (!chro…"
1211
1211
  },
1212
1212
  "sessionId": 1
1213
1213
  }
@@ -160,7 +160,6 @@ export class RehydratingConnection implements ProtocolClient.InspectorBackend.Co
160
160
 
161
161
  this.rehydratingConnectionState = RehydratingConnectionState.REHYDRATED;
162
162
  // Use revealer to load trace into performance panel
163
-
164
163
  await Common.Revealer.reveal(this.trace);
165
164
  }
166
165
 
@@ -220,7 +219,11 @@ class RehydratingSessionBase {
220
219
  }
221
220
 
222
221
  sendMessageToFrontend(payload: ServerMessage): void {
223
- this.connection?.postToFrontend(payload);
222
+ // The frontend doesn't expect CDP responses within the same synchronous event loop, so it breaks unexpectedly.
223
+ // Any async boundary will do, so we use setTimeout.
224
+ setTimeout(() => {
225
+ this.connection?.postToFrontend(payload);
226
+ });
224
227
  }
225
228
 
226
229
  handleFrontendMessageAsFakeCDPAgent(data: ProtocolMessage): void {
@@ -35,6 +35,7 @@ import * as CSSPropertyParserMatchers from './CSSPropertyParserMatchers.js';
35
35
  import * as CSSQuery from './CSSQuery.js';
36
36
  import * as CSSRule from './CSSRule.js';
37
37
  import * as CSSScope from './CSSScope.js';
38
+ import * as CSSStartingStyle from './CSSStartingStyle.js';
38
39
  import * as CSSStyleDeclaration from './CSSStyleDeclaration.js';
39
40
  import * as CSSStyleSheetHeader from './CSSStyleSheetHeader.js';
40
41
  import * as CSSSupports from './CSSSupports.js';
@@ -115,6 +116,7 @@ export {
115
116
  CSSQuery,
116
117
  CSSRule,
117
118
  CSSScope,
119
+ CSSStartingStyle,
118
120
  CSSStyleDeclaration,
119
121
  CSSStyleSheetHeader,
120
122
  CSSSupports,
@@ -9,6 +9,7 @@ import '../../Images/Images.js';
9
9
  import '../../models/logs/logs-meta.js';
10
10
  import '../../models/persistence/persistence-meta.js';
11
11
  import '../../panels/browser_debugger/browser_debugger-meta.js';
12
+ import '../../panels/developer_resources/developer_resources-meta.js';
12
13
  // panels/timeline depends on mobile_throttling for settings UI
13
14
  import '../../panels/mobile_throttling/mobile_throttling-meta.js';
14
15
  import '../../panels/protocol_monitor/protocol_monitor-meta.js';
@@ -145,30 +145,6 @@ When referring to an element for which you know the nodeId, annotate your output
145
145
  - When referring to the LCP, it's useful to also mention what the LCP element is via its nodeId. Use the markdown link syntax to do so.
146
146
  `;
147
147
 
148
- const callFrameDataFormatDescription = `Each call frame is presented in the following format:
149
-
150
- 'id;eventKey;name;duration;selfTime;urlIndex;childRange;[S]'
151
-
152
- Key definitions:
153
-
154
- * id: A unique numerical identifier for the call frame. Never mention this id in the output to the user.
155
- * eventKey: String that uniquely identifies this event in the flame chart.
156
- * name: A concise string describing the call frame (e.g., 'Evaluate Script', 'render', 'fetchData').
157
- * duration: The total execution time of the call frame, including its children.
158
- * selfTime: The time spent directly within the call frame, excluding its children's execution.
159
- * urlIndex: Index referencing the "All URLs" list. Empty if no specific script URL is associated.
160
- * childRange: Specifies the direct children of this node using their IDs. If empty ('' or 'S' at the end), the node has no children. If a single number (e.g., '4'), the node has one child with that ID. If in the format 'firstId-lastId' (e.g., '4-5'), it indicates a consecutive range of child IDs from 'firstId' to 'lastId', inclusive.
161
- * S: _Optional_. The letter 'S' terminates the line if that call frame was selected by the user.
162
-
163
- Example Call Tree:
164
-
165
- 1;r-123;main;500;100;;
166
- 2;r-124;update;200;50;;3
167
- 3;p-49575-15428179-2834-374;animate;150;20;0;4-5;S
168
- 4;p-49575-15428179-3505-1162;calculatePosition;80;80;;
169
- 5;p-49575-15428179-5391-2767;applyStyles;50;50;;
170
- `;
171
-
172
148
  enum ScorePriority {
173
149
  REQUIRED = 3,
174
150
  CRITICAL = 2,
@@ -321,7 +297,7 @@ export class PerformanceAgent extends AiAgent<AgentFocus> {
321
297
  metadata: {source: 'devtools', score: ScorePriority.CRITICAL}
322
298
  };
323
299
  #callFrameDataDescriptionFact: Host.AidaClient.RequestFact = {
324
- text: callFrameDataFormatDescription,
300
+ text: PerformanceTraceFormatter.callFrameDataFormatDescription,
325
301
  metadata: {source: 'devtools', score: ScorePriority.CRITICAL}
326
302
  };
327
303
  #traceFacts: Host.AidaClient.RequestFact[] = [];
@@ -617,7 +593,7 @@ export class PerformanceAgent extends AiAgent<AgentFocus> {
617
593
  this.addFact(this.#networkDataDescriptionFact);
618
594
 
619
595
  if (!this.#traceFacts.length) {
620
- this.#formatter = new PerformanceTraceFormatter(focus, PerformanceInsightFormatter.create);
596
+ this.#formatter = new PerformanceTraceFormatter(focus);
621
597
  this.#createFactForTraceSummary();
622
598
  this.#createFactForCriticalRequests();
623
599
  this.#createFactForMainThreadBottomUpSummary();