chrome-devtools-frontend 1.0.1473514 → 1.0.1506453
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/.gemini/commands/migrate-e2e-non-hosted.toml +43 -0
- package/.gemini/commands/review.toml +85 -0
- package/.geminiignore +6 -0
- package/.github/workflows/auto-close-prs.yml +30 -0
- package/.stylelintignore +0 -1
- package/.vscode/devtools-workspace-settings.json +2 -1
- package/AUTHORS +3 -0
- package/WATCHLISTS +0 -4
- package/config/gni/devtools_grd_files.gni +92 -47
- package/config/gni/devtools_image_files.gni +8 -0
- package/config/gni/i18n.gni +3 -2
- package/config/owner/COMMON_OWNERS +2 -0
- package/docs/README.md +2 -2
- package/docs/architecture_of_devtools.md +8 -8
- package/docs/committers_policy.md +2 -0
- package/docs/contributing/README.md +29 -5
- package/docs/contributing/changes.md +1 -1
- package/docs/contributing/images/quickstart-vscode-tsversion.png +0 -0
- package/docs/contributing/infrastructure.md +89 -0
- package/docs/cookbook/localization.md +86 -79
- package/docs/get_the_code.md +9 -9
- package/docs/styleguide/ux/components.md +190 -2
- package/docs/styleguide/ux/glossary.md +16 -0
- package/docs/styleguide/ux/images/context-menu-example.png +0 -0
- package/docs/ui_engineering.md +80 -19
- package/eslint.config.mjs +64 -23
- package/extension-api/ExtensionAPI.d.ts +3 -0
- package/extensions/cxx_debugging/CMakeLists.txt +0 -6
- package/extensions/cxx_debugging/e2e/MochaRootHooks.ts +3 -1
- package/extensions/cxx_debugging/e2e/TestDriver.ts +1 -2
- package/extensions/cxx_debugging/src/GlobMatch.ts +1 -1
- package/extensions/cxx_debugging/src/ModuleConfiguration.ts +2 -2
- package/extensions/cxx_debugging/third_party/llvm/README.chromium +2 -0
- package/extensions/cxx_debugging/tools/bootstrap.py +7 -0
- package/front_end/Images/generate-css-vars.js +1 -1
- package/front_end/Images/readme.md +1 -2
- package/front_end/Images/rollup.config.mjs +12 -1
- package/front_end/Images/src/baseline-high-availability.svg +17 -0
- package/front_end/Images/src/baseline-limited-availability.svg +19 -0
- package/front_end/Images/src/baseline-low-availability.svg +31 -0
- package/front_end/Images/src/bucket.svg +4 -0
- package/front_end/Images/src/label-auto.svg +3 -0
- package/front_end/Images/src/shield.svg +3 -0
- package/front_end/Images/src/smart-assistant.svg +3 -1
- package/front_end/Images/src/speculative-loads.svg +1 -0
- package/front_end/Images/src/text-analysis.svg +3 -0
- package/front_end/Tests.js +78 -230
- package/front_end/application_tokens.css +7 -1
- package/front_end/core/common/Base64.test.ts +1 -1
- package/front_end/core/common/Base64.ts +3 -3
- package/front_end/core/common/Color.ts +38 -0
- package/front_end/core/common/Debouncer.ts +3 -3
- package/front_end/core/common/EventTarget.test.ts +1 -0
- package/front_end/core/common/Gzip.test.ts +63 -0
- package/front_end/core/common/Gzip.ts +72 -0
- package/front_end/core/common/ResourceType.ts +29 -29
- package/front_end/core/common/ReturnToPanel.ts +15 -0
- package/front_end/core/common/Revealer.ts +10 -10
- package/front_end/core/common/SettingRegistration.ts +22 -22
- package/front_end/core/common/Settings.test.ts +151 -18
- package/front_end/core/common/Settings.ts +99 -8
- package/front_end/core/common/SimpleHistoryManager.ts +0 -17
- package/front_end/core/common/common.ts +4 -0
- package/front_end/core/host/AidaClient.test.ts +103 -2
- package/front_end/core/host/AidaClient.ts +161 -31
- package/front_end/core/host/InspectorFrontendHost.ts +57 -48
- package/front_end/core/host/InspectorFrontendHostAPI.ts +11 -0
- package/front_end/core/host/ResourceLoader.ts +15 -15
- package/front_end/core/host/UserMetrics.ts +27 -13
- package/front_end/core/i18n/NumberFormatter.test.ts +92 -0
- package/front_end/core/i18n/NumberFormatter.ts +9 -9
- package/front_end/core/i18n/collect-ui-strings.js +3 -3
- package/front_end/core/i18n/time-utilities.ts +3 -14
- package/front_end/core/platform/Brand.ts +8 -1
- package/front_end/core/platform/DevToolsPath.ts +1 -1
- package/front_end/core/platform/StringUtilities.test.ts +54 -1
- package/front_end/core/platform/StringUtilities.ts +34 -8
- package/front_end/core/protocol_client/InspectorBackend.ts +9 -9
- package/front_end/core/root/Runtime.ts +52 -8
- package/front_end/core/sdk/AnimationModel.test.ts +0 -24
- package/front_end/core/sdk/AnimationModel.ts +1 -95
- package/front_end/core/sdk/AutofillModel.ts +8 -2
- package/front_end/core/sdk/CPUProfilerModel.ts +2 -2
- package/front_end/core/sdk/CSSContainerQuery.test.ts +15 -0
- package/front_end/core/sdk/CSSContainerQuery.ts +3 -1
- package/front_end/core/sdk/CSSMatchedStyles.test.ts +2 -1
- package/front_end/core/sdk/CSSMatchedStyles.ts +79 -50
- package/front_end/core/sdk/CSSModel.ts +20 -7
- package/front_end/core/sdk/CSSPropertyParser.test.ts +4 -3
- package/front_end/core/sdk/CSSPropertyParser.ts +12 -4
- package/front_end/core/sdk/CSSPropertyParserMatchers.test.ts +46 -15
- package/front_end/core/sdk/CSSPropertyParserMatchers.ts +131 -58
- package/front_end/core/sdk/CSSRule.ts +44 -44
- package/front_end/core/sdk/CSSStyleSheetHeader.ts +2 -6
- package/front_end/core/sdk/ChildTargetManager.ts +1 -1
- package/front_end/core/sdk/CompilerSourceMappingContentProvider.ts +3 -8
- package/front_end/core/sdk/Connections.ts +17 -30
- package/front_end/core/sdk/ConsoleModel.ts +9 -9
- package/front_end/core/sdk/DOMModel.ts +45 -16
- package/front_end/core/sdk/DebuggerModel.test.ts +7 -4
- package/front_end/core/sdk/DebuggerModel.ts +55 -11
- package/front_end/core/sdk/EmulationModel.ts +13 -0
- package/front_end/core/sdk/EventBreakpointsModel.ts +2 -2
- package/front_end/core/sdk/IOModel.ts +28 -2
- package/front_end/core/sdk/NetworkManager.test.ts +0 -27
- package/front_end/core/sdk/NetworkManager.ts +137 -105
- package/front_end/core/sdk/NetworkRequest.ts +747 -616
- package/front_end/core/sdk/OverlayModel.ts +4 -8
- package/front_end/core/sdk/PageResourceLoader.ts +32 -13
- package/front_end/core/sdk/PreloadingModel.ts +1 -0
- package/front_end/core/sdk/RehydratingConnection.ts +13 -14
- package/front_end/core/sdk/RemoteObject.test.ts +24 -2
- package/front_end/core/sdk/RemoteObject.ts +0 -3
- package/front_end/core/sdk/Resource.ts +0 -5
- package/front_end/core/sdk/RuntimeModel.ts +2 -1
- package/front_end/core/sdk/Script.ts +2 -7
- package/front_end/core/sdk/ServerTiming.ts +12 -12
- package/front_end/core/sdk/ServiceWorkerCacheModel.ts +7 -3
- package/front_end/core/sdk/ServiceWorkerManager.ts +14 -18
- package/front_end/core/sdk/SourceMap.test.ts +55 -73
- package/front_end/core/sdk/SourceMap.ts +14 -11
- package/front_end/core/sdk/SourceMapFunctionRanges.ts +15 -9
- package/front_end/core/sdk/SourceMapScopeChainEntry.test.ts +6 -5
- package/front_end/core/sdk/SourceMapScopeChainEntry.ts +14 -14
- package/front_end/core/sdk/SourceMapScopesInfo.test.ts +232 -317
- package/front_end/core/sdk/SourceMapScopesInfo.ts +26 -25
- package/front_end/core/sdk/StorageBucketsModel.ts +4 -0
- package/front_end/core/sdk/Target.ts +2 -2
- package/front_end/core/sdk/TargetManager.ts +1 -1
- package/front_end/core/sdk/sdk-meta.ts +86 -86
- package/front_end/core/sdk/sdk.ts +0 -2
- package/front_end/design_system_tokens.css +1 -1
- package/front_end/devtools_compatibility.js +201 -177
- package/front_end/entrypoints/inspector_main/InspectorMain.ts +12 -0
- package/front_end/entrypoints/inspector_main/OutermostTargetSelector.ts +3 -3
- package/front_end/entrypoints/inspector_main/RenderingOptions.ts +1 -1
- package/front_end/entrypoints/inspector_main/inspector_main-meta.ts +1 -1
- package/front_end/entrypoints/js_app/js_app.ts +3 -3
- package/front_end/entrypoints/lighthouse_worker/LighthouseWorkerService.ts +1 -1
- package/front_end/entrypoints/main/GlobalAiButton.test.ts +132 -0
- package/front_end/entrypoints/main/GlobalAiButton.ts +141 -0
- package/front_end/entrypoints/main/MainImpl.test.ts +27 -0
- package/front_end/entrypoints/main/MainImpl.ts +179 -47
- package/front_end/entrypoints/main/globalAiButton.css +72 -0
- package/front_end/entrypoints/main/main-meta.ts +82 -42
- package/front_end/entrypoints/main/main.ts +2 -0
- package/front_end/entrypoints/node_app/NodeConnectionsPanel.ts +6 -6
- package/front_end/entrypoints/node_app/NodeMain.ts +8 -7
- package/front_end/entrypoints/node_app/node_app.ts +5 -5
- package/front_end/entrypoints/wasmparser_worker/WasmParserWorker.ts +1 -1
- package/front_end/entrypoints/worker_app/WorkerMain.ts +1 -1
- package/front_end/generated/Deprecation.ts +7 -29
- package/front_end/generated/InspectorBackendCommands.js +183 -167
- package/front_end/generated/SupportedCSSProperties.js +252 -166
- package/front_end/generated/protocol-mapping.d.ts +687 -608
- package/front_end/generated/protocol-proxy-api.d.ts +782 -672
- package/front_end/generated/protocol.ts +11862 -11509
- package/front_end/global_typings/global_defs.d.ts +5 -0
- package/front_end/legacy_test_runner/accessibility_test_runner/accessibility_test_runner.js +1 -1
- package/front_end/legacy_test_runner/application_test_runner/CacheStorageTestRunner.js +1 -1
- package/front_end/legacy_test_runner/application_test_runner/IndexedDBTestRunner.js +1 -1
- package/front_end/legacy_test_runner/application_test_runner/ResourceTreeTestRunner.js +1 -1
- package/front_end/legacy_test_runner/application_test_runner/ResourcesTestRunner.js +1 -1
- package/front_end/legacy_test_runner/application_test_runner/ServiceWorkersTestRunner.js +1 -1
- package/front_end/legacy_test_runner/application_test_runner/StorageTestRunner.js +1 -1
- package/front_end/legacy_test_runner/axe_core_test_runner/axe_core_test_runner.js +1 -1
- package/front_end/legacy_test_runner/bindings_test_runner/AutomappingTestRunner.js +1 -1
- package/front_end/legacy_test_runner/bindings_test_runner/BindingsTestRunner.js +1 -1
- package/front_end/legacy_test_runner/bindings_test_runner/IsolatedFilesystemTestRunner.js +1 -1
- package/front_end/legacy_test_runner/bindings_test_runner/OverridesTestRunner.js +1 -1
- package/front_end/legacy_test_runner/bindings_test_runner/PersistenceTestRunner.js +1 -1
- package/front_end/legacy_test_runner/console_test_runner/console_test_runner.js +20 -20
- package/front_end/legacy_test_runner/coverage_test_runner/coverage_test_runner.js +11 -11
- package/front_end/legacy_test_runner/data_grid_test_runner/data_grid_test_runner.js +1 -1
- package/front_end/legacy_test_runner/device_mode_test_runner/device_mode_test_runner.js +1 -1
- package/front_end/legacy_test_runner/elements_test_runner/EditDOMTestRunner.js +1 -1
- package/front_end/legacy_test_runner/elements_test_runner/ElementsPanelShadowSelectionOnRefreshTestRunner.js +1 -1
- package/front_end/legacy_test_runner/elements_test_runner/ElementsTestRunner.js +6 -80
- package/front_end/legacy_test_runner/elements_test_runner/SetOuterHTMLTestRunner.js +1 -1
- package/front_end/legacy_test_runner/elements_test_runner/StylesUpdateLinksTestRunner.js +1 -1
- package/front_end/legacy_test_runner/extensions_test_runner/ExtensionsNetworkTestRunner.js +1 -1
- package/front_end/legacy_test_runner/extensions_test_runner/ExtensionsTestRunner.js +1 -1
- package/front_end/legacy_test_runner/heap_profiler_test_runner/heap_profiler_test_runner.js +2 -2
- package/front_end/legacy_test_runner/layers_test_runner/layers_test_runner.js +1 -1
- package/front_end/legacy_test_runner/network_test_runner/network_test_runner.js +1 -1
- package/front_end/legacy_test_runner/performance_test_runner/TimelineDataTestRunner.js +1 -1
- package/front_end/legacy_test_runner/performance_test_runner/TimelineTestRunner.js +1 -10
- package/front_end/legacy_test_runner/sdk_test_runner/sdk_test_runner.js +1 -1
- package/front_end/legacy_test_runner/security_test_runner/security_test_runner.js +1 -1
- package/front_end/legacy_test_runner/sources_test_runner/AutocompleteTestRunner.js +1 -1
- package/front_end/legacy_test_runner/sources_test_runner/DebuggerTestRunner.js +4 -4
- package/front_end/legacy_test_runner/sources_test_runner/EditorTestRunner.js +1 -1
- package/front_end/legacy_test_runner/sources_test_runner/LiveEditTestRunner.js +1 -1
- package/front_end/legacy_test_runner/sources_test_runner/SearchTestRunner.js +1 -1
- package/front_end/legacy_test_runner/sources_test_runner/SourcesTestRunner.js +2 -2
- package/front_end/legacy_test_runner/test_runner/TestRunner.js +45 -45
- package/front_end/legacy_test_runner/test_runner/test_runner.js +4 -4
- package/front_end/models/ai_assistance/AiHistoryStorage.snapshot.txt +66 -0
- package/front_end/models/ai_assistance/AiHistoryStorage.test.ts +82 -3
- package/front_end/models/ai_assistance/AiHistoryStorage.ts +95 -6
- package/front_end/models/ai_assistance/AiUtils.ts +1 -1
- package/front_end/models/ai_assistance/ConversationHandler.test.ts +355 -0
- package/front_end/models/ai_assistance/ConversationHandler.ts +380 -0
- package/front_end/models/ai_assistance/ExtensionScope.ts +1 -4
- package/front_end/models/ai_assistance/README.md +79 -0
- package/front_end/models/ai_assistance/agents/AiAgent.test.ts +22 -1
- package/front_end/models/ai_assistance/agents/AiAgent.ts +76 -95
- package/front_end/models/ai_assistance/agents/FileAgent.test.ts +3 -2
- package/front_end/models/ai_assistance/agents/FileAgent.ts +1 -1
- package/front_end/models/ai_assistance/agents/NetworkAgent.ts +7 -7
- package/front_end/models/ai_assistance/agents/PerformanceAgent.test.ts +591 -62
- package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +1111 -117
- package/front_end/models/ai_assistance/agents/PerformanceAnnotationsAgent.test.ts +4 -2
- package/front_end/models/ai_assistance/agents/PerformanceAnnotationsAgent.ts +75 -5
- package/front_end/models/ai_assistance/agents/StylingAgent.test.ts +166 -507
- package/front_end/models/ai_assistance/agents/StylingAgent.ts +125 -319
- package/front_end/models/ai_assistance/ai_assistance.ts +2 -1
- package/front_end/models/ai_assistance/data_formatters/FileFormatter.test.ts +3 -2
- package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.snapshot.txt +725 -0
- package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.test.ts +249 -274
- package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.ts +494 -83
- package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +556 -0
- package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.test.ts +92 -0
- package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +359 -0
- package/front_end/models/ai_assistance/debug.ts +1 -1
- package/front_end/models/ai_assistance/injected.ts +1 -1
- package/front_end/models/ai_code_completion/AiCodeCompletion.test.ts +328 -0
- package/front_end/models/ai_code_completion/AiCodeCompletion.ts +289 -0
- package/front_end/models/ai_code_completion/ai_code_completion.ts +6 -0
- package/front_end/models/ai_code_completion/debug.ts +30 -0
- package/front_end/models/autofill_manager/AutofillManager.test.ts +0 -6
- package/front_end/models/autofill_manager/AutofillManager.ts +16 -9
- package/front_end/models/bindings/CSSWorkspaceBinding.ts +0 -4
- package/front_end/models/bindings/CompilerScriptMapping.test.ts +8 -4
- package/front_end/models/bindings/CompilerScriptMapping.ts +12 -5
- package/front_end/models/bindings/DebuggerLanguagePlugins.test.ts +7 -2
- package/front_end/models/bindings/DebuggerLanguagePlugins.ts +33 -24
- package/front_end/models/bindings/DebuggerWorkspaceBinding.test.ts +95 -3
- package/front_end/models/bindings/DebuggerWorkspaceBinding.ts +94 -21
- package/front_end/models/bindings/DefaultScriptMapping.test.ts +3 -2
- package/front_end/models/bindings/FileUtils.test.ts +1 -10
- package/front_end/models/bindings/FileUtils.ts +6 -22
- package/front_end/models/bindings/LiveLocation.ts +0 -5
- package/front_end/models/bindings/PresentationConsoleMessageHelper.test.ts +7 -2
- package/front_end/models/bindings/PresentationConsoleMessageHelper.ts +0 -4
- package/front_end/models/bindings/ResourceMapping.test.ts +7 -2
- package/front_end/models/bindings/ResourceMapping.ts +0 -4
- package/front_end/models/bindings/ResourceScriptMapping.test.ts +2 -1
- package/front_end/models/bindings/ResourceScriptMapping.ts +4 -4
- package/front_end/models/bindings/SASSSourceMapping.ts +1 -1
- package/front_end/models/bindings/StylesSourceMapping.ts +0 -5
- package/front_end/models/bindings/bindings.ts +0 -2
- package/front_end/models/breakpoints/BreakpointManager.test.ts +9 -2
- package/front_end/models/cpu_profile/CPUProfileDataModel.ts +4 -2
- package/front_end/models/elements/ElementUpdateRecord.ts +101 -0
- package/front_end/models/elements/elements.ts +9 -0
- package/front_end/models/emulation/DeviceModeModel.ts +6 -22
- package/front_end/models/emulation/EmulatedDevices.ts +12 -12
- package/front_end/models/extensions/ExtensionAPI.ts +9 -5
- package/front_end/models/extensions/ExtensionPanel.ts +5 -2
- package/front_end/models/extensions/ExtensionServer.test.ts +122 -16
- package/front_end/models/extensions/ExtensionServer.ts +114 -31
- package/front_end/models/extensions/ExtensionView.ts +1 -1
- package/front_end/models/extensions/LanguageExtensionEndpoint.ts +14 -7
- package/front_end/models/har/HARFormat.ts +1 -1
- package/front_end/models/har/Importer.test.ts +40 -0
- package/front_end/models/har/Importer.ts +35 -1
- package/front_end/models/har/Writer.test.ts +3 -2
- package/front_end/models/har/Writer.ts +2 -2
- package/front_end/models/issues_manager/BounceTrackingIssue.ts +1 -1
- package/front_end/models/issues_manager/ClientHintIssue.ts +1 -1
- package/front_end/models/issues_manager/ContentSecurityPolicyIssue.ts +5 -5
- package/front_end/models/issues_manager/CookieIssue.ts +2 -2
- package/front_end/models/issues_manager/CorsIssue.ts +3 -3
- package/front_end/models/issues_manager/CrossOriginEmbedderPolicyIssue.ts +2 -2
- package/front_end/models/issues_manager/{SelectElementAccessibilityIssue.test.ts → ElementAccessibilityIssue.test.ts} +22 -21
- package/front_end/models/issues_manager/{SelectElementAccessibilityIssue.ts → ElementAccessibilityIssue.ts} +29 -21
- package/front_end/models/issues_manager/FederatedAuthRequestIssue.ts +1 -1
- package/front_end/models/issues_manager/FederatedAuthUserInfoRequestIssue.ts +1 -1
- package/front_end/models/issues_manager/GenericIssue.ts +4 -4
- package/front_end/models/issues_manager/HeavyAdIssue.ts +1 -1
- package/front_end/models/issues_manager/Issue.ts +6 -6
- package/front_end/models/issues_manager/IssuesManager.ts +8 -3
- package/front_end/models/issues_manager/LowTextContrastIssue.ts +1 -1
- package/front_end/models/issues_manager/MarkdownIssueDescription.ts +1 -1
- package/front_end/models/issues_manager/MixedContentIssue.ts +1 -1
- package/front_end/models/issues_manager/PartitioningBlobURLIssue.ts +2 -2
- package/front_end/models/issues_manager/QuirksModeIssue.ts +1 -1
- package/front_end/models/issues_manager/SRIMessageSignatureIssue.ts +3 -3
- package/front_end/models/issues_manager/SharedArrayBufferIssue.ts +1 -1
- package/front_end/models/issues_manager/SharedDictionaryIssue.ts +1 -1
- package/front_end/models/issues_manager/UnencodedDigestIssue.test.ts +49 -0
- package/front_end/models/issues_manager/UnencodedDigestIssue.ts +88 -0
- package/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderValueNotInnerList.md +1 -1
- package/front_end/models/issues_manager/descriptions/sriValidationFailedIntegrityMismatch.md +1 -3
- package/front_end/models/issues_manager/descriptions/summaryElementAccessibilityInteractiveContentSummaryDescendant.md +3 -0
- package/front_end/models/issues_manager/descriptions/unencodedDigestIncorrectDigestLength.md +12 -0
- package/front_end/models/issues_manager/descriptions/unencodedDigestIncorrectDigestType.md +17 -0
- package/front_end/models/issues_manager/descriptions/unencodedDigestMalformedDictionary.md +14 -0
- package/front_end/models/issues_manager/descriptions/unencodedDigestUnknownAlgorithm.md +15 -0
- package/front_end/models/issues_manager/descriptions/userReidentificationBlocked.md +1 -1
- package/front_end/models/issues_manager/issues_manager.ts +4 -2
- package/front_end/models/javascript_metadata/NativeFunctions.js +201 -127
- package/front_end/models/live-metrics/web-vitals-injected/OnEachInteraction.ts +1 -1
- package/front_end/models/live-metrics/web-vitals-injected/rollup.config.mjs +1 -1
- package/front_end/models/logs/NetworkLog.ts +74 -83
- package/front_end/models/logs/logs-meta.ts +4 -4
- package/front_end/models/persistence/AutomaticFileSystemManager.test.ts +0 -39
- package/front_end/models/persistence/AutomaticFileSystemManager.ts +14 -21
- package/front_end/models/persistence/EditFileSystemView.ts +6 -6
- package/front_end/models/persistence/IsolatedFileSystem.ts +27 -9
- package/front_end/models/persistence/IsolatedFileSystemManager.ts +16 -3
- package/front_end/models/persistence/NetworkPersistenceManager.ts +7 -3
- package/front_end/models/persistence/PersistenceAction.test.ts +10 -7
- package/front_end/models/persistence/PersistenceActions.ts +26 -15
- package/front_end/models/persistence/PersistenceImpl.test.ts +2 -1
- package/front_end/models/persistence/PersistenceImpl.ts +7 -4
- package/front_end/models/persistence/PersistenceUtils.ts +10 -7
- package/front_end/models/persistence/PlatformFileSystem.ts +11 -2
- package/front_end/models/persistence/WorkspaceSettingsTab.ts +6 -6
- package/front_end/models/persistence/editFileSystemView.css +17 -15
- package/front_end/models/persistence/persistence-meta.ts +10 -10
- package/front_end/models/persistence/workspaceSettingsTab.css +29 -27
- package/front_end/models/project_settings/ProjectSettingsModel.ts +2 -2
- package/front_end/models/source_map_scopes/NamesResolver.test.ts +3 -2
- package/front_end/models/source_map_scopes/NamesResolver.ts +1 -1
- package/front_end/models/source_map_scopes/ScopeChainModel.test.ts +2 -1
- package/front_end/models/stack_trace/README.md +14 -0
- package/front_end/models/stack_trace/StackTrace.ts +35 -0
- package/front_end/models/stack_trace/StackTraceImpl.test.ts +74 -0
- package/front_end/models/stack_trace/StackTraceImpl.ts +82 -0
- package/front_end/models/stack_trace/StackTraceModel.test.ts +296 -0
- package/front_end/models/stack_trace/StackTraceModel.ts +127 -0
- package/front_end/models/stack_trace/Trie.test.ts +129 -0
- package/front_end/models/stack_trace/Trie.ts +154 -0
- package/front_end/models/stack_trace/stack_trace.ts +9 -0
- package/front_end/models/stack_trace/stack_trace_impl.ts +13 -0
- package/front_end/models/text_utils/ContentProvider.ts +1 -3
- package/front_end/models/text_utils/StaticContentProvider.test.ts +1 -1
- package/front_end/models/text_utils/StaticContentProvider.ts +1 -5
- package/front_end/models/text_utils/TextUtils.ts +2 -3
- package/front_end/models/trace/LanternComputationData.ts +1 -0
- package/front_end/models/trace/ModelImpl.ts +18 -7
- package/front_end/models/trace/Processor.test.ts +15 -14
- package/front_end/models/trace/Processor.ts +49 -32
- package/front_end/models/trace/extras/ScriptDuplication.test.ts +13 -10
- package/front_end/models/trace/extras/StackTraceForEvent.test.ts +10 -8
- package/front_end/models/trace/extras/ThirdParties.ts +2 -3
- package/front_end/models/trace/extras/TraceTree.ts +7 -6
- package/front_end/models/trace/extras/extras.ts +0 -2
- package/front_end/models/trace/handlers/AnimationFramesHandler.test.ts +5 -5
- package/front_end/models/trace/handlers/AnimationFramesHandler.ts +10 -0
- package/front_end/models/trace/handlers/ExtensionTraceDataHandler.test.ts +177 -85
- package/front_end/models/trace/handlers/ExtensionTraceDataHandler.ts +28 -27
- package/front_end/models/trace/handlers/FramesHandler.test.ts +2 -7
- package/front_end/models/trace/handlers/FramesHandler.ts +46 -37
- package/front_end/models/trace/handlers/ImagePaintingHandler.test.ts +41 -0
- package/front_end/models/trace/handlers/ImagePaintingHandler.ts +44 -1
- package/front_end/models/trace/handlers/InitiatorsHandler.test.ts +62 -15
- package/front_end/models/trace/handlers/InitiatorsHandler.ts +24 -0
- package/front_end/models/trace/handlers/LayoutShiftsHandler.test.ts +6 -18
- package/front_end/models/trace/handlers/LayoutShiftsHandler.ts +21 -17
- package/front_end/models/trace/handlers/MetaHandler.test.ts +12 -0
- package/front_end/models/trace/handlers/MetaHandler.ts +5 -4
- package/front_end/models/trace/handlers/NetworkRequestsHandler.test.ts +21 -21
- package/front_end/models/trace/handlers/NetworkRequestsHandler.ts +79 -32
- package/front_end/models/trace/handlers/PageLoadMetricsHandler.test.ts +6 -18
- package/front_end/models/trace/handlers/RendererHandler.test.ts +26 -39
- package/front_end/models/trace/handlers/RendererHandler.ts +10 -17
- package/front_end/models/trace/handlers/SamplesHandler.test.ts +3 -4
- package/front_end/models/trace/handlers/SamplesHandler.ts +13 -12
- package/front_end/models/trace/handlers/ScriptsHandler.test.ts +1 -1
- package/front_end/models/trace/handlers/ScriptsHandler.ts +8 -4
- package/front_end/models/trace/handlers/SelectorStatsHandler.test.ts +1 -3
- package/front_end/models/trace/handlers/SelectorStatsHandler.ts +65 -0
- package/front_end/models/trace/handlers/UserInteractionsHandler.test.ts +4 -2
- package/front_end/models/trace/handlers/UserInteractionsHandler.ts +4 -2
- package/front_end/models/trace/handlers/UserTimingsHandler.test.ts +326 -0
- package/front_end/models/trace/handlers/UserTimingsHandler.ts +61 -24
- package/front_end/models/trace/handlers/helpers.test.ts +7 -6
- package/front_end/models/trace/handlers/helpers.ts +19 -14
- package/front_end/models/trace/handlers/types.ts +5 -1
- package/front_end/models/trace/helpers/SamplesIntegrator.test.ts +3 -3
- package/front_end/models/trace/helpers/SamplesIntegrator.ts +24 -33
- package/front_end/models/trace/helpers/SyntheticEvents.ts +2 -2
- package/front_end/models/trace/helpers/Timing.ts +66 -3
- package/front_end/models/trace/helpers/Trace.test.ts +6 -7
- package/front_end/models/trace/helpers/Trace.ts +47 -19
- package/front_end/models/trace/helpers/TreeHelpers.test.ts +0 -8
- package/front_end/models/trace/helpers/TreeHelpers.ts +1 -1
- package/front_end/models/trace/insights/CLSCulprits.test.ts +10 -7
- package/front_end/models/trace/insights/CLSCulprits.ts +85 -23
- package/front_end/models/trace/insights/Cache.ts +12 -0
- package/front_end/models/trace/insights/Common.test.ts +3 -3
- package/front_end/models/trace/insights/Common.ts +56 -22
- package/front_end/models/trace/insights/DOMSize.test.ts +4 -1
- package/front_end/models/trace/insights/DOMSize.ts +48 -1
- package/front_end/models/trace/insights/DocumentLatency.test.ts +5 -1
- package/front_end/models/trace/insights/DocumentLatency.ts +59 -4
- package/front_end/models/trace/insights/DuplicatedJavaScript.test.ts +2 -3
- package/front_end/models/trace/insights/DuplicatedJavaScript.ts +15 -4
- package/front_end/models/trace/insights/FontDisplay.test.ts +1 -1
- package/front_end/models/trace/insights/FontDisplay.ts +8 -0
- package/front_end/models/trace/insights/ForcedReflow.ts +25 -4
- package/front_end/models/trace/insights/{InteractionToNextPaint.test.ts → INPBreakdown.test.ts} +2 -2
- package/front_end/models/trace/insights/{InteractionToNextPaint.ts → INPBreakdown.ts} +63 -16
- package/front_end/models/trace/insights/ImageDelivery.ts +39 -7
- package/front_end/models/trace/insights/LCPBreakdown.test.ts +100 -0
- package/front_end/models/trace/insights/LCPBreakdown.ts +255 -0
- package/front_end/models/trace/insights/LCPDiscovery.ts +84 -8
- package/front_end/models/trace/insights/LegacyJavaScript.ts +14 -4
- package/front_end/models/trace/insights/Models.ts +2 -2
- package/front_end/models/trace/insights/ModernHTTP.test.ts +3 -2
- package/front_end/models/trace/insights/ModernHTTP.ts +35 -18
- package/front_end/models/trace/insights/NetworkDependencyTree.test.ts +10 -1
- package/front_end/models/trace/insights/NetworkDependencyTree.ts +41 -13
- package/front_end/models/trace/insights/RenderBlocking.test.ts +8 -12
- package/front_end/models/trace/insights/RenderBlocking.ts +13 -1
- package/front_end/models/trace/insights/SlowCSSSelector.test.ts +12 -34
- package/front_end/models/trace/insights/SlowCSSSelector.ts +46 -27
- package/front_end/models/trace/insights/ThirdParties.test.ts +1 -1
- package/front_end/models/trace/insights/ThirdParties.ts +36 -0
- package/front_end/models/trace/insights/Viewport.test.ts +16 -1
- package/front_end/models/trace/insights/Viewport.ts +41 -3
- package/front_end/models/trace/insights/types.ts +5 -2
- package/front_end/models/trace/lantern/core/NetworkAnalyzer.test.ts +4 -0
- package/front_end/models/trace/lantern/graph/BaseNode.ts +1 -1
- package/front_end/models/trace/lantern/simulation/SimulationTimingMap.ts +1 -1
- package/front_end/models/trace/trace.ts +0 -2
- package/front_end/models/trace/types/Configuration.ts +8 -0
- package/front_end/models/trace/types/Extensions.ts +24 -3
- package/front_end/models/trace/types/File.ts +5 -2
- package/front_end/models/trace/types/Overlays.ts +140 -0
- package/front_end/models/trace/types/Timing.ts +1 -0
- package/front_end/models/trace/types/TraceEvents.test.ts +2 -1
- package/front_end/models/trace/types/TraceEvents.ts +98 -62
- package/front_end/models/trace/types/types.ts +1 -0
- package/front_end/models/workspace/FileManager.ts +5 -3
- package/front_end/models/{bindings → workspace}/IgnoreListManager.test.ts +11 -7
- package/front_end/models/{bindings → workspace}/IgnoreListManager.ts +36 -33
- package/front_end/models/workspace/UISourceCode.test.ts +18 -17
- package/front_end/models/workspace/UISourceCode.ts +17 -7
- package/front_end/models/workspace/WorkspaceImpl.ts +1 -1
- package/front_end/models/workspace/workspace.ts +2 -0
- package/front_end/models/workspace_diff/WorkspaceDiff.test.ts +2 -0
- package/front_end/models/workspace_diff/WorkspaceDiff.ts +7 -2
- package/front_end/panels/accessibility/ARIAAttributesView.test.ts +101 -0
- package/front_end/panels/accessibility/ARIAAttributesView.ts +16 -4
- package/front_end/panels/accessibility/AXBreadcrumbsPane.ts +12 -9
- package/front_end/panels/accessibility/AccessibilityNodeView.ts +31 -28
- package/front_end/panels/accessibility/AccessibilitySidebarView.ts +8 -12
- package/front_end/panels/accessibility/AccessibilityStrings.ts +87 -87
- package/front_end/panels/accessibility/AccessibilitySubPane.ts +6 -6
- package/front_end/panels/accessibility/SourceOrderView.ts +95 -61
- package/front_end/panels/accessibility/accessibilityProperties.css +5 -0
- package/front_end/panels/ai_assistance/AiAssistancePanel.snapshot.txt +32 -0
- package/front_end/panels/ai_assistance/AiAssistancePanel.test.ts +465 -377
- package/front_end/panels/ai_assistance/AiAssistancePanel.ts +289 -339
- package/front_end/panels/ai_assistance/PatchWidget.ts +30 -29
- package/front_end/panels/ai_assistance/SelectWorkspaceDialog.test.ts +11 -1
- package/front_end/panels/ai_assistance/SelectWorkspaceDialog.ts +29 -19
- package/front_end/panels/ai_assistance/aiAssistancePanel.css +1 -0
- package/front_end/panels/ai_assistance/ai_assistance-meta.ts +40 -20
- package/front_end/panels/ai_assistance/components/ChatView.test.ts +1 -0
- package/front_end/panels/ai_assistance/components/ChatView.ts +55 -44
- package/front_end/panels/ai_assistance/components/ExploreWidget.ts +10 -24
- package/front_end/panels/ai_assistance/components/UserActionRow.test.ts +4 -0
- package/front_end/panels/ai_assistance/components/UserActionRow.ts +25 -3
- package/front_end/panels/ai_assistance/components/chatView.css +0 -9
- package/front_end/panels/ai_assistance/components/exploreWidget.css +104 -102
- package/front_end/panels/ai_assistance/components/userActionRow.css +95 -94
- package/front_end/panels/ai_assistance/selectWorkspaceDialog.css +70 -69
- package/front_end/panels/animation/AnimationGroupPreviewUI.ts +1 -10
- package/front_end/panels/animation/AnimationTimeline.test.ts +6 -13
- package/front_end/panels/animation/AnimationTimeline.ts +183 -169
- package/front_end/panels/animation/AnimationUI.ts +4 -4
- package/front_end/panels/animation/animation.ts +0 -2
- package/front_end/panels/animation/animationTimeline.css +0 -67
- package/front_end/panels/application/AppManifestView.test.ts +21 -0
- package/front_end/panels/application/AppManifestView.ts +158 -139
- package/front_end/panels/application/ApplicationPanelSidebar.test.ts +13 -8
- package/front_end/panels/application/ApplicationPanelSidebar.ts +53 -54
- package/front_end/panels/application/BackForwardCacheTreeElement.ts +1 -1
- package/front_end/panels/application/BackgroundServiceView.test.ts +4 -8
- package/front_end/panels/application/BackgroundServiceView.ts +46 -44
- package/front_end/panels/application/CookieItemsView.ts +13 -14
- package/front_end/panels/application/DOMStorageItemsView.ts +5 -5
- package/front_end/panels/application/ExtensionStorageItemsView.ts +3 -3
- package/front_end/panels/application/IndexedDBModel.test.ts +2 -2
- package/front_end/panels/application/IndexedDBModel.ts +3 -0
- package/front_end/panels/application/IndexedDBViews.ts +58 -32
- package/front_end/panels/application/InterestGroupStorageModel.ts +3 -0
- package/front_end/panels/application/InterestGroupStorageView.ts +4 -4
- package/front_end/panels/application/InterestGroupTreeElement.ts +1 -1
- package/front_end/panels/application/KeyValueStorageItemsView.ts +10 -10
- package/front_end/panels/application/OpenedWindowDetailsView.ts +18 -18
- package/front_end/panels/application/PreloadingTreeElement.ts +5 -5
- package/front_end/panels/application/ReportingApiTreeElement.ts +1 -1
- package/front_end/panels/application/ReportingApiView.test.ts +161 -30
- package/front_end/panels/application/ReportingApiView.ts +153 -50
- package/front_end/panels/application/ServiceWorkerCacheTreeElement.ts +5 -5
- package/front_end/panels/application/ServiceWorkerCacheViews.ts +20 -17
- package/front_end/panels/application/ServiceWorkerUpdateCycleView.ts +7 -7
- package/front_end/panels/application/ServiceWorkersView.ts +40 -76
- package/front_end/panels/application/SharedStorageEventsView.test.ts +2 -2
- package/front_end/panels/application/SharedStorageEventsView.ts +10 -20
- package/front_end/panels/application/SharedStorageItemsView.ts +11 -11
- package/front_end/panels/application/SharedStorageListTreeElement.ts +1 -1
- package/front_end/panels/application/SharedStorageModel.ts +3 -0
- package/front_end/panels/application/StorageBucketsTreeElement.test.ts +5 -4
- package/front_end/panels/application/StorageBucketsTreeElement.ts +4 -4
- package/front_end/panels/application/StorageItemsToolbar.ts +7 -7
- package/front_end/panels/application/StorageView.test.ts +5 -1
- package/front_end/panels/application/StorageView.ts +15 -13
- package/front_end/panels/application/application-meta.ts +7 -7
- package/front_end/panels/application/application.ts +0 -2
- package/front_end/panels/application/components/BackForwardCacheStrings.ts +5 -0
- package/front_end/panels/application/components/BackForwardCacheView.ts +11 -37
- package/front_end/panels/application/components/BounceTrackingMitigationsView.ts +1 -0
- package/front_end/panels/application/components/EndpointsGrid.ts +6 -2
- package/front_end/panels/application/components/FrameDetailsView.test.ts +4 -2
- package/front_end/panels/application/components/FrameDetailsView.ts +88 -57
- package/front_end/panels/application/components/InterestGroupAccessGrid.ts +9 -10
- package/front_end/panels/application/components/OriginTrialTreeView.ts +13 -22
- package/front_end/panels/application/components/PermissionsPolicySection.ts +11 -16
- package/front_end/panels/application/components/ProtocolHandlersView.ts +10 -10
- package/front_end/panels/application/components/ReportsGrid.ts +10 -11
- package/front_end/panels/application/components/SharedStorageAccessGrid.test.ts +4 -4
- package/front_end/panels/application/components/SharedStorageAccessGrid.ts +107 -101
- package/front_end/panels/application/components/SharedStorageMetadataView.ts +8 -8
- package/front_end/panels/application/components/StackTrace.ts +6 -12
- package/front_end/panels/application/components/StorageMetadataView.ts +22 -26
- package/front_end/panels/application/components/TrustTokensView.ts +3 -3
- package/front_end/panels/application/components/frameDetailsReportView.css +1 -1
- package/front_end/panels/application/components/sharedStorageAccessGrid.css +19 -17
- package/front_end/panels/application/preloading/PreloadingView.ts +29 -24
- package/front_end/panels/application/preloading/components/MismatchedPreloadingGrid.ts +9 -9
- package/front_end/panels/application/preloading/components/PreloadingDetailsReportView.ts +22 -22
- package/front_end/panels/application/preloading/components/PreloadingDisabledInfobar.ts +28 -29
- package/front_end/panels/application/preloading/components/PreloadingGrid.ts +5 -7
- package/front_end/panels/application/preloading/components/PreloadingMismatchedHeadersGrid.test.ts +2 -2
- package/front_end/panels/application/preloading/components/PreloadingMismatchedHeadersGrid.ts +4 -4
- package/front_end/panels/application/preloading/components/PreloadingString.ts +34 -34
- package/front_end/panels/application/preloading/components/RuleSetDetailsView.test.ts +28 -1
- package/front_end/panels/application/preloading/components/RuleSetDetailsView.ts +4 -10
- package/front_end/panels/application/preloading/components/RuleSetGrid.test.ts +21 -0
- package/front_end/panels/application/preloading/components/RuleSetGrid.ts +10 -10
- package/front_end/panels/application/preloading/components/UsedPreloadingView.ts +22 -23
- package/front_end/panels/application/resourcesSidebar.css +0 -4
- package/front_end/panels/autofill/AutofillView.test.ts +188 -259
- package/front_end/panels/autofill/AutofillView.ts +207 -217
- package/front_end/panels/autofill/autofill-meta.ts +3 -4
- package/front_end/panels/autofill/autofillView.css +85 -82
- package/front_end/panels/browser_debugger/CategorizedBreakpointsSidebarPane.test.ts +179 -0
- package/front_end/panels/browser_debugger/CategorizedBreakpointsSidebarPane.ts +146 -35
- package/front_end/panels/browser_debugger/DOMBreakpointsSidebarPane.ts +27 -27
- package/front_end/panels/browser_debugger/ObjectEventListenersSidebarPane.ts +3 -2
- package/front_end/panels/browser_debugger/XHRBreakpointsSidebarPane.ts +16 -14
- package/front_end/panels/browser_debugger/browser_debugger-meta.ts +17 -17
- package/front_end/panels/browser_debugger/browser_debugger.ts +2 -0
- package/front_end/panels/changes/ChangesSidebar.ts +7 -7
- package/front_end/panels/changes/ChangesView.ts +6 -5
- package/front_end/panels/changes/CombinedDiffView.test.ts +2 -0
- package/front_end/panels/changes/CombinedDiffView.ts +2 -2
- package/front_end/panels/common/AiCodeCompletionDisclaimer.test.ts +57 -0
- package/front_end/panels/common/AiCodeCompletionDisclaimer.ts +186 -0
- package/front_end/panels/common/AiCodeCompletionSummaryToolbar.test.ts +85 -0
- package/front_end/panels/common/AiCodeCompletionSummaryToolbar.ts +139 -0
- package/front_end/panels/common/AiCodeCompletionTeaser.test.ts +98 -0
- package/front_end/panels/common/AiCodeCompletionTeaser.ts +258 -0
- package/front_end/panels/common/FreDialog.ts +139 -0
- package/front_end/panels/common/aiCodeCompletionDisclaimer.css +57 -0
- package/front_end/panels/common/aiCodeCompletionSummaryToolbar.css +101 -0
- package/front_end/panels/common/aiCodeCompletionTeaser.css +42 -0
- package/front_end/panels/common/common.css +0 -83
- package/front_end/panels/common/common.ts +8 -107
- package/front_end/panels/common/freDialog.css +88 -0
- package/front_end/panels/console/ConsoleContextSelector.ts +5 -5
- package/front_end/panels/console/ConsoleFormat.test.ts +1 -1
- package/front_end/panels/console/ConsolePanel.ts +1 -2
- package/front_end/panels/console/ConsolePinPane.ts +9 -9
- package/front_end/panels/console/ConsolePrompt.test.ts +47 -1
- package/front_end/panels/console/ConsolePrompt.ts +188 -19
- package/front_end/panels/console/ConsoleSidebar.test.ts +130 -0
- package/front_end/panels/console/ConsoleSidebar.ts +170 -207
- package/front_end/panels/console/ConsoleView.test.ts +4 -4
- package/front_end/panels/console/ConsoleView.ts +146 -54
- package/front_end/panels/console/ConsoleViewMessage.test.ts +1 -1
- package/front_end/panels/console/ConsoleViewMessage.ts +66 -71
- package/front_end/panels/console/console-meta.ts +27 -27
- package/front_end/panels/console/consoleSidebar.css +2 -0
- package/front_end/panels/console/consoleView.css +22 -15
- package/front_end/panels/console_counters/WarningErrorCounter.ts +133 -100
- package/front_end/panels/coverage/CoverageDecorationManager.test.ts +2 -1
- package/front_end/panels/coverage/CoverageListView.ts +30 -30
- package/front_end/panels/coverage/CoverageView.test.ts +3 -2
- package/front_end/panels/coverage/CoverageView.ts +35 -34
- package/front_end/panels/coverage/coverage-meta.ts +7 -7
- package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +49 -49
- package/front_end/panels/css_overview/CSSOverviewPanel.test.ts +3 -3
- package/front_end/panels/css_overview/CSSOverviewPanel.ts +1 -1
- package/front_end/panels/css_overview/CSSOverviewProcessingView.ts +3 -3
- package/front_end/panels/css_overview/CSSOverviewSidebarPanel.ts +3 -3
- package/front_end/panels/css_overview/CSSOverviewStartView.ts +8 -8
- package/front_end/panels/css_overview/CSSOverviewUnusedDeclarations.ts +7 -7
- package/front_end/panels/css_overview/cssOverviewCompletedView.css +289 -287
- package/front_end/panels/css_overview/cssOverviewSidebarPanel.css +43 -42
- package/front_end/panels/css_overview/cssOverviewStartView.css +68 -66
- package/front_end/panels/css_overview/css_overview-meta.ts +2 -2
- package/front_end/panels/developer_resources/DeveloperResourcesListView.ts +14 -14
- package/front_end/panels/developer_resources/DeveloperResourcesView.ts +5 -5
- package/front_end/panels/developer_resources/developerResourcesListView.css +19 -18
- package/front_end/panels/developer_resources/developerResourcesView.css +32 -30
- package/front_end/panels/elements/AccessibilityTreeView.ts +2 -1
- package/front_end/panels/elements/CSSRuleValidator.test.ts +39 -0
- package/front_end/panels/elements/CSSRuleValidator.ts +41 -37
- package/front_end/panels/elements/CSSRuleValidatorHelper.ts +8 -0
- package/front_end/panels/elements/CSSValueTraceView.test.ts +2 -1
- package/front_end/panels/elements/CSSValueTraceView.ts +1 -2
- package/front_end/panels/elements/ClassesPaneWidget.ts +5 -3
- package/front_end/panels/elements/ColorSwatchPopoverIcon.ts +18 -9
- package/front_end/panels/elements/ComputedStyleWidget.ts +4 -3
- package/front_end/panels/elements/DOMLinkifier.ts +6 -4
- package/front_end/panels/elements/DOMTreeWidget.test.ts +58 -0
- package/front_end/panels/elements/ElementIssueUtils.ts +14 -9
- package/front_end/panels/elements/ElementStatePaneWidget.ts +3 -3
- package/front_end/panels/elements/ElementsPanel.test.ts +69 -2
- package/front_end/panels/elements/ElementsPanel.ts +105 -187
- package/front_end/panels/elements/ElementsSidebarPane.ts +1 -1
- package/front_end/panels/elements/ElementsTreeElement.test.ts +401 -0
- package/front_end/panels/elements/ElementsTreeElement.ts +434 -82
- package/front_end/panels/elements/ElementsTreeOutline.test.ts +9 -6
- package/front_end/panels/elements/ElementsTreeOutline.ts +425 -258
- package/front_end/panels/elements/ElementsTreeOutlineRenderer.ts +80 -0
- package/front_end/panels/elements/EventListenersWidget.test.ts +129 -0
- package/front_end/panels/elements/EventListenersWidget.ts +112 -78
- package/front_end/panels/elements/ImagePreviewPopover.ts +1 -1
- package/front_end/panels/elements/InspectElementModeController.test.ts +77 -2
- package/front_end/panels/elements/InspectElementModeController.ts +13 -2
- package/front_end/panels/elements/LayersWidget.ts +95 -63
- package/front_end/panels/elements/{components/LayoutPane.test.ts → LayoutPane.test.ts} +60 -49
- package/front_end/panels/elements/LayoutPane.ts +593 -0
- package/front_end/panels/elements/MarkerDecorator.ts +2 -2
- package/front_end/panels/elements/MetricsSidebarPane.ts +6 -6
- package/front_end/panels/elements/NodeStackTraceWidget.ts +16 -14
- package/front_end/panels/elements/PlatformFontsWidget.ts +8 -8
- package/front_end/panels/elements/PropertiesWidget.ts +2 -2
- package/front_end/panels/elements/PropertyRenderer.test.ts +1 -1
- package/front_end/panels/elements/PropertyRenderer.ts +8 -11
- package/front_end/panels/elements/ShortcutTreeElement.ts +157 -0
- package/front_end/panels/elements/StyleEditorWidget.ts +1 -1
- package/front_end/panels/elements/StylePropertiesSection.test.ts +10 -10
- package/front_end/panels/elements/StylePropertiesSection.ts +42 -44
- package/front_end/panels/elements/StylePropertyHighlighter.test.ts +32 -21
- package/front_end/panels/elements/StylePropertyHighlighter.ts +9 -11
- package/front_end/panels/elements/StylePropertyTreeElement.test.ts +111 -53
- package/front_end/panels/elements/StylePropertyTreeElement.ts +166 -100
- package/front_end/panels/elements/StylesSidebarPane.ts +47 -48
- package/front_end/panels/elements/TopLayerContainer.ts +8 -7
- package/front_end/panels/elements/WebCustomData.test.ts +2 -2
- package/front_end/panels/elements/components/AccessibilityTreeNode.ts +1 -1
- package/front_end/panels/elements/components/AdornerManager.ts +15 -0
- package/front_end/panels/elements/components/CSSHintDetailsView.ts +1 -1
- package/front_end/panels/elements/components/CSSPropertyDocsView.test.ts +101 -2
- package/front_end/panels/elements/components/CSSPropertyDocsView.ts +188 -5
- package/front_end/panels/elements/components/CSSPropertyIconResolver.test.ts +1 -1
- package/front_end/panels/elements/components/CSSPropertyIconResolver.ts +2 -2
- package/front_end/panels/elements/components/CSSVariableValueView.ts +5 -5
- package/front_end/panels/elements/components/ElementsBreadcrumbs.ts +2 -7
- package/front_end/panels/elements/components/ElementsTreeExpandButton.ts +1 -1
- package/front_end/panels/elements/components/QueryContainer.ts +1 -4
- package/front_end/panels/elements/components/components.ts +0 -4
- package/front_end/panels/elements/components/cssPropertyDocsView.css +12 -1
- package/front_end/panels/elements/components/cssVariableValueView.css +1 -0
- package/front_end/panels/elements/domLinkifier.css +36 -35
- package/front_end/panels/elements/elementStatePaneWidget.css +46 -45
- package/front_end/panels/elements/elements-meta.ts +4 -13
- package/front_end/panels/elements/elements.ts +4 -3
- package/front_end/panels/elements/elementsTreeOutline.css +2 -1
- package/front_end/panels/elements/layersWidget.css +2 -11
- package/front_end/panels/elements/layoutPane.css +145 -0
- package/front_end/panels/elements/metricsSidebarPane.css +1 -1
- package/front_end/panels/elements/nodeStackTraceWidget.css +5 -4
- package/front_end/panels/elements/platformFontsWidget.css +32 -31
- package/front_end/panels/elements/stylePropertiesTreeOutline.css +2 -2
- package/front_end/panels/elements/stylesSidebarPane.css +1 -0
- package/front_end/panels/emulation/DeviceModeToolbar.ts +13 -50
- package/front_end/panels/emulation/DeviceModeView.ts +3 -4
- package/front_end/panels/emulation/InspectedPagePlaceholder.ts +1 -1
- package/front_end/panels/emulation/MediaQueryInspector.ts +4 -2
- package/front_end/panels/emulation/emulation-meta.ts +7 -7
- package/front_end/panels/event_listeners/EventListenersView.test.ts +4 -4
- package/front_end/panels/event_listeners/EventListenersView.ts +34 -31
- package/front_end/panels/explain/PromptBuilder.test.ts +7 -2
- package/front_end/panels/explain/PromptBuilder.ts +3 -1
- package/front_end/panels/explain/components/ConsoleInsight.test.ts +14 -10
- package/front_end/panels/explain/components/ConsoleInsight.ts +13 -34
- package/front_end/panels/explain/explain-meta.ts +3 -3
- package/front_end/panels/issues/AffectedBlockedByResponseView.ts +4 -4
- package/front_end/panels/issues/AffectedCookiesView.ts +6 -6
- package/front_end/panels/issues/AffectedDescendantsWithinSelectElementView.ts +6 -6
- package/front_end/panels/issues/AffectedDirectivesView.ts +9 -9
- package/front_end/panels/issues/AffectedDocumentsInQuirksModeView.ts +4 -4
- package/front_end/panels/issues/AffectedElementsView.ts +1 -1
- package/front_end/panels/issues/AffectedElementsWithLowContrastView.ts +6 -6
- package/front_end/panels/issues/AffectedHeavyAdView.ts +7 -7
- package/front_end/panels/issues/AffectedMetadataAllowedSitesView.ts +1 -1
- package/front_end/panels/issues/AffectedResourcesView.ts +6 -6
- package/front_end/panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts +10 -10
- package/front_end/panels/issues/AffectedSourcesView.ts +1 -1
- package/front_end/panels/issues/AffectedTrackingSitesView.ts +1 -1
- package/front_end/panels/issues/CorsIssueDetailsView.ts +27 -27
- package/front_end/panels/issues/GenericIssueDetailsView.ts +3 -3
- package/front_end/panels/issues/HiddenIssuesRow.ts +55 -29
- package/front_end/panels/issues/IssueAggregator.ts +5 -11
- package/front_end/panels/issues/IssueKindView.ts +2 -2
- package/front_end/panels/issues/IssueView.ts +13 -13
- package/front_end/panels/issues/IssuesPane.ts +5 -4
- package/front_end/panels/issues/components/HideIssuesMenu.ts +1 -1
- package/front_end/panels/issues/issues-meta.ts +2 -2
- package/front_end/panels/js_timeline/js_timeline-meta.ts +6 -6
- package/front_end/panels/layer_viewer/LayerDetailsView.ts +43 -41
- package/front_end/panels/layer_viewer/LayerTreeOutline.ts +7 -7
- package/front_end/panels/layer_viewer/LayerViewHost.ts +1 -1
- package/front_end/panels/layer_viewer/Layers3DView.ts +19 -13
- package/front_end/panels/layer_viewer/PaintProfilerView.ts +9 -9
- package/front_end/panels/layer_viewer/TransformController.ts +14 -8
- package/front_end/panels/layer_viewer/layer_viewer-meta.ts +9 -9
- package/front_end/panels/layers/LayersPanel.ts +3 -3
- package/front_end/panels/layers/layers-meta.ts +2 -2
- package/front_end/panels/lighthouse/LighthouseController.ts +27 -27
- package/front_end/panels/lighthouse/LighthousePanel.ts +7 -7
- package/front_end/panels/lighthouse/LighthouseProtocolService.ts +31 -33
- package/front_end/panels/lighthouse/LighthouseReportRenderer.ts +4 -2
- package/front_end/panels/lighthouse/LighthouseReportSelector.ts +2 -4
- package/front_end/panels/lighthouse/LighthouseStartView.ts +4 -3
- package/front_end/panels/lighthouse/LighthouseStatusView.ts +31 -31
- package/front_end/panels/lighthouse/lighthouse-meta.ts +1 -1
- package/front_end/panels/lighthouse/lighthousePanel.css +9 -0
- package/front_end/panels/linear_memory_inspector/LinearMemoryInspectorController.ts +2 -2
- package/front_end/panels/linear_memory_inspector/LinearMemoryInspectorPane.ts +5 -6
- package/front_end/panels/linear_memory_inspector/components/LinearMemoryHighlightChipList.ts +6 -10
- package/front_end/panels/linear_memory_inspector/components/LinearMemoryInspector.ts +3 -3
- package/front_end/panels/linear_memory_inspector/components/LinearMemoryNavigator.ts +6 -6
- package/front_end/panels/linear_memory_inspector/components/LinearMemoryValueInterpreter.ts +2 -2
- package/front_end/panels/linear_memory_inspector/components/ValueInterpreterDisplay.ts +6 -7
- package/front_end/panels/linear_memory_inspector/components/ValueInterpreterDisplayUtils.ts +1 -1
- package/front_end/panels/linear_memory_inspector/components/ValueInterpreterSettings.ts +1 -1
- package/front_end/panels/linear_memory_inspector/linear_memory_inspector-meta.ts +2 -2
- package/front_end/panels/media/EventDisplayTable.ts +5 -7
- package/front_end/panels/media/EventTimelineView.ts +4 -4
- package/front_end/panels/media/MainView.test.ts +1 -1
- package/front_end/panels/media/MainView.ts +4 -4
- package/front_end/panels/media/MediaModel.ts +2 -2
- package/front_end/panels/media/PlayerDetailView.ts +8 -8
- package/front_end/panels/media/PlayerListView.ts +8 -8
- package/front_end/panels/media/PlayerMessagesView.ts +15 -17
- package/front_end/panels/media/PlayerPropertiesView.ts +66 -51
- package/front_end/panels/media/TickingFlameChart.ts +6 -5
- package/front_end/panels/media/media-meta.ts +3 -3
- package/front_end/panels/mobile_throttling/CalibrationController.ts +3 -4
- package/front_end/panels/mobile_throttling/MobileThrottlingSelector.ts +3 -3
- package/front_end/panels/mobile_throttling/NetworkPanelIndicator.ts +4 -4
- package/front_end/panels/mobile_throttling/NetworkThrottlingSelector.ts +189 -51
- package/front_end/panels/mobile_throttling/ThrottlingManager.test.ts +37 -1
- package/front_end/panels/mobile_throttling/ThrottlingManager.ts +114 -126
- package/front_end/panels/mobile_throttling/ThrottlingPresets.ts +8 -8
- package/front_end/panels/mobile_throttling/ThrottlingSettingsTab.test.ts +115 -0
- package/front_end/panels/mobile_throttling/ThrottlingSettingsTab.ts +178 -143
- package/front_end/panels/mobile_throttling/mobile_throttling-meta.ts +6 -6
- package/front_end/panels/mobile_throttling/throttlingSettingsTab.css +30 -36
- package/front_end/panels/network/BinaryResourceView.ts +7 -7
- package/front_end/panels/network/BlockedURLsPane.ts +18 -17
- package/front_end/panels/network/EventSourceMessagesView.ts +9 -10
- package/front_end/panels/network/NetworkConfigView.test.ts +35 -0
- package/front_end/panels/network/NetworkConfigView.ts +19 -17
- package/front_end/panels/network/NetworkDataGridNode.test.ts +19 -8
- package/front_end/panels/network/NetworkDataGridNode.ts +129 -90
- package/front_end/panels/network/NetworkItemView.test.ts +3 -3
- package/front_end/panels/network/NetworkItemView.ts +79 -79
- package/front_end/panels/network/NetworkLogView.test.ts +61 -23
- package/front_end/panels/network/NetworkLogView.ts +207 -130
- package/front_end/panels/network/NetworkLogViewColumns.ts +60 -63
- package/front_end/panels/network/NetworkManageCustomHeadersView.ts +5 -5
- package/front_end/panels/network/NetworkPanel.test.ts +3 -3
- package/front_end/panels/network/NetworkPanel.ts +69 -68
- package/front_end/panels/network/NetworkSearchScope.ts +1 -1
- package/front_end/panels/network/NetworkTimeCalculator.ts +35 -40
- package/front_end/panels/network/NetworkWaterfallColumn.ts +2 -12
- package/front_end/panels/network/RequestCookiesView.ts +10 -11
- package/front_end/panels/network/RequestHTMLView.ts +2 -2
- package/front_end/panels/network/RequestInitiatorView.ts +16 -16
- package/front_end/panels/network/RequestPayloadView.ts +12 -13
- package/front_end/panels/network/RequestPreviewView.ts +3 -4
- package/front_end/panels/network/RequestResponseView.test.ts +36 -0
- package/front_end/panels/network/RequestResponseView.ts +5 -5
- package/front_end/panels/network/RequestTimingView.ts +54 -54
- package/front_end/panels/network/ResourceChunkView.ts +13 -13
- package/front_end/panels/network/ResourceDirectSocketChunkView.ts +26 -17
- package/front_end/panels/network/ResourceWebSocketFrameView.ts +9 -9
- package/front_end/panels/network/SignedExchangeInfoView.ts +24 -24
- package/front_end/panels/network/binaryResourceView.css +1 -0
- package/front_end/panels/network/components/DirectSocketConnectionView.ts +18 -16
- package/front_end/panels/network/components/HeaderSectionRow.ts +17 -42
- package/front_end/panels/network/components/RequestHeaderSection.ts +6 -11
- package/front_end/panels/network/components/RequestHeadersView.css +2 -2
- package/front_end/panels/network/components/RequestHeadersView.test.ts +5 -2
- package/front_end/panels/network/components/RequestHeadersView.ts +24 -34
- package/front_end/panels/network/components/RequestTrustTokensView.ts +19 -23
- package/front_end/panels/network/components/ResponseHeaderSection.ts +16 -15
- package/front_end/panels/network/components/WebBundleInfoView.ts +4 -9
- package/front_end/panels/network/network-meta.ts +27 -27
- package/front_end/panels/network/networkConfigView.css +13 -6
- package/front_end/panels/network/networkLogView.css +1 -1
- package/front_end/panels/network/networkPanel.css +3 -2
- package/front_end/panels/network/requestHTMLView.css +9 -8
- package/front_end/panels/network/resourceChunkView.css +21 -28
- package/front_end/panels/performance_monitor/PerformanceMonitor.test.ts +121 -6
- package/front_end/panels/performance_monitor/PerformanceMonitor.ts +252 -168
- package/front_end/panels/performance_monitor/performanceMonitor.css +7 -9
- package/front_end/panels/performance_monitor/performance_monitor-meta.ts +7 -7
- package/front_end/panels/profiler/HeapDetachedElementsDataGrid.ts +19 -52
- package/front_end/panels/profiler/HeapDetachedElementsView.ts +9 -6
- package/front_end/panels/profiler/HeapProfileView.ts +24 -24
- package/front_end/panels/profiler/HeapProfilerPanel.ts +1 -1
- package/front_end/panels/profiler/HeapSnapshotDataGrids.ts +20 -20
- package/front_end/panels/profiler/HeapSnapshotGridNodes.ts +27 -27
- package/front_end/panels/profiler/HeapSnapshotProxy.ts +2 -6
- package/front_end/panels/profiler/HeapSnapshotView.ts +59 -56
- package/front_end/panels/profiler/HeapTimelineOverview.ts +1 -2
- package/front_end/panels/profiler/IsolateSelector.ts +16 -16
- package/front_end/panels/profiler/LiveHeapProfileView.ts +14 -14
- package/front_end/panels/profiler/ModuleUIStrings.ts +26 -26
- package/front_end/panels/profiler/ProfileDataGrid.ts +5 -5
- package/front_end/panels/profiler/ProfileHeader.ts +0 -9
- package/front_end/panels/profiler/ProfileLauncherView.ts +6 -6
- package/front_end/panels/profiler/ProfileSidebarTreeElement.ts +1 -1
- package/front_end/panels/profiler/ProfileView.ts +23 -20
- package/front_end/panels/profiler/ProfilesPanel.ts +9 -9
- package/front_end/panels/profiler/heapProfiler.css +8 -0
- package/front_end/panels/profiler/profiler-meta.ts +12 -12
- package/front_end/panels/protocol_monitor/JSONEditor.test.ts +2 -2
- package/front_end/panels/protocol_monitor/JSONEditor.ts +36 -19
- package/front_end/panels/protocol_monitor/ProtocolMonitor.test.ts +105 -103
- package/front_end/panels/protocol_monitor/ProtocolMonitor.ts +24 -25
- package/front_end/panels/protocol_monitor/protocolMonitor.css +15 -9
- package/front_end/panels/protocol_monitor/protocol_monitor-meta.ts +1 -1
- package/front_end/panels/recorder/RecorderController.test.ts +9 -2
- package/front_end/panels/recorder/RecorderController.ts +82 -85
- package/front_end/panels/recorder/components/CreateRecordingView.ts +2 -2
- package/front_end/panels/recorder/components/RecordingListView.test.ts +42 -53
- package/front_end/panels/recorder/components/RecordingListView.ts +141 -125
- package/front_end/panels/recorder/components/RecordingView.test.ts +73 -122
- package/front_end/panels/recorder/components/RecordingView.ts +912 -929
- package/front_end/panels/recorder/components/StepEditor.ts +13 -13
- package/front_end/panels/recorder/components/StepView.ts +23 -24
- package/front_end/panels/recorder/components/recordingListView.css +76 -75
- package/front_end/panels/recorder/components/recordingView.css +303 -308
- package/front_end/panels/recorder/components/stepView.css +197 -196
- package/front_end/panels/recorder/components/timelineSection.css +1 -1
- package/front_end/panels/recorder/injected/rollup.config.mjs +1 -1
- package/front_end/panels/recorder/injected/selectors/ARIASelector.ts +2 -2
- package/front_end/panels/recorder/injected/selectors/CSSSelector.ts +4 -4
- package/front_end/panels/recorder/injected/selectors/PierceSelector.ts +2 -2
- package/front_end/panels/recorder/injected/selectors/TextSelector.ts +2 -2
- package/front_end/panels/recorder/injected/selectors/XPath.ts +3 -3
- package/front_end/panels/recorder/models/RecorderSettings.ts +0 -1
- package/front_end/panels/recorder/models/RecordingPlayer.test.ts +48 -68
- package/front_end/panels/recorder/models/RecordingPlayer.ts +9 -9
- package/front_end/panels/recorder/models/RecordingSession.ts +3 -3
- package/front_end/panels/recorder/recorder-meta.ts +5 -5
- package/front_end/panels/recorder/recorderController.css +3 -3
- package/front_end/panels/screencast/ScreencastApp.ts +1 -1
- package/front_end/panels/screencast/ScreencastView.ts +13 -18
- package/front_end/panels/search/SearchResultsPane.ts +8 -8
- package/front_end/panels/search/SearchView.test.ts +2 -2
- package/front_end/panels/search/SearchView.ts +130 -127
- package/front_end/panels/search/searchResultsPane.css +2 -2
- package/front_end/panels/search/searchView.css +2 -2
- package/front_end/panels/security/CookieControlsView.ts +27 -27
- package/front_end/panels/security/CookieReportView.ts +40 -73
- package/front_end/panels/security/IPProtectionTreeElement.ts +21 -0
- package/front_end/panels/security/IPProtectionView.ts +179 -0
- package/front_end/panels/security/SecurityModel.ts +10 -10
- package/front_end/panels/security/SecurityPanel.test.ts +22 -0
- package/front_end/panels/security/SecurityPanel.ts +107 -107
- package/front_end/panels/security/SecurityPanelSidebar.ts +27 -11
- package/front_end/panels/security/ipProtectionView.css +109 -0
- package/front_end/panels/security/security-meta.ts +4 -4
- package/front_end/panels/security/security.ts +2 -0
- package/front_end/panels/sensors/LocationsSettingsTab.ts +32 -31
- package/front_end/panels/sensors/SensorsView.ts +50 -42
- package/front_end/panels/sensors/sensors-meta.ts +20 -20
- package/front_end/panels/settings/AISettingsTab.test.ts +19 -6
- package/front_end/panels/settings/AISettingsTab.ts +118 -72
- package/front_end/panels/settings/FrameworkIgnoreListSettingsTab.ts +22 -20
- package/front_end/panels/settings/KeybindsSettingsTab.ts +31 -30
- package/front_end/panels/settings/SettingsScreen.ts +19 -20
- package/front_end/panels/settings/components/SyncSection.test.ts +43 -9
- package/front_end/panels/settings/components/SyncSection.ts +63 -29
- package/front_end/panels/settings/components/syncSection.css +16 -7
- package/front_end/panels/settings/emulation/DevicesSettingsTab.ts +14 -16
- package/front_end/panels/settings/emulation/components/UserAgentClientHintsForm.test.ts +61 -0
- package/front_end/panels/settings/emulation/components/UserAgentClientHintsForm.ts +134 -28
- package/front_end/panels/settings/emulation/components/userAgentClientHintsForm.css +19 -0
- package/front_end/panels/settings/emulation/emulation-meta.ts +2 -2
- package/front_end/panels/settings/settings-meta.ts +12 -12
- package/front_end/panels/settings/settingsScreen.css +0 -1
- package/front_end/panels/snippets/ScriptSnippetFileSystem.ts +5 -5
- package/front_end/panels/snippets/SnippetsQuickOpen.ts +4 -4
- package/front_end/panels/sources/AddSourceMapURLDialog.ts +5 -5
- package/front_end/panels/sources/AiCodeCompletionPlugin.test.ts +119 -0
- package/front_end/panels/sources/AiCodeCompletionPlugin.ts +400 -0
- package/front_end/panels/sources/AiWarningInfobarPlugin.ts +3 -3
- package/front_end/panels/sources/BreakpointEditDialog.ts +13 -11
- package/front_end/panels/sources/{components/BreakpointsView.test.ts → BreakpointsView.test.ts} +237 -225
- package/front_end/panels/sources/{components/BreakpointsView.ts → BreakpointsView.ts} +336 -301
- package/front_end/panels/sources/{components/BreakpointsViewUtils.test.ts → BreakpointsViewUtils.test.ts} +29 -29
- package/front_end/panels/sources/{components/BreakpointsViewUtils.ts → BreakpointsViewUtils.ts} +3 -3
- package/front_end/panels/sources/CSSPlugin.ts +26 -17
- package/front_end/panels/sources/CallStackSidebarPane.ts +34 -58
- package/front_end/panels/sources/CategorizedBreakpointL10n.ts +18 -18
- package/front_end/panels/sources/CoveragePlugin.test.ts +2 -0
- package/front_end/panels/sources/CoveragePlugin.ts +5 -5
- package/front_end/panels/sources/DebuggerPausedMessage.test.ts +2 -0
- package/front_end/panels/sources/DebuggerPausedMessage.ts +33 -39
- package/front_end/panels/sources/DebuggerPlugin.test.ts +4 -3
- package/front_end/panels/sources/DebuggerPlugin.ts +68 -49
- package/front_end/panels/sources/FilteredUISourceCodeListProvider.test.ts +3 -4
- package/front_end/panels/sources/FilteredUISourceCodeListProvider.ts +7 -7
- package/front_end/panels/sources/GoToLineQuickOpen.ts +15 -15
- package/front_end/panels/sources/InplaceFormatterEditorAction.ts +9 -6
- package/front_end/panels/sources/NavigatorView.test.ts +2 -1
- package/front_end/panels/sources/NavigatorView.ts +39 -35
- package/front_end/panels/sources/OpenFileQuickOpen.ts +6 -6
- package/front_end/panels/sources/OutlineQuickOpen.ts +3 -3
- package/front_end/panels/sources/ProfilePlugin.ts +3 -3
- package/front_end/panels/sources/ResourceOriginPlugin.ts +1 -1
- package/front_end/panels/sources/ScopeChainSidebarPane.ts +11 -9
- package/front_end/panels/sources/SnippetsPlugin.ts +2 -2
- package/front_end/panels/sources/SourcesNavigator.test.ts +3 -2
- package/front_end/panels/sources/SourcesNavigator.ts +32 -20
- package/front_end/panels/sources/SourcesPanel.test.ts +90 -0
- package/front_end/panels/sources/SourcesPanel.ts +71 -28
- package/front_end/panels/sources/SourcesSearchScope.ts +1 -1
- package/front_end/panels/sources/SourcesView.test.ts +5 -2
- package/front_end/panels/sources/SourcesView.ts +7 -8
- package/front_end/panels/sources/TabbedEditorContainer.ts +11 -8
- package/front_end/panels/sources/ThreadsSidebarPane.ts +7 -10
- package/front_end/panels/sources/UISourceCodeFrame.test.ts +104 -0
- package/front_end/panels/sources/UISourceCodeFrame.ts +40 -17
- package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +14 -9
- package/front_end/panels/sources/breakpointsView.css +276 -0
- package/front_end/panels/sources/components/HeadersView.ts +17 -13
- package/front_end/panels/sources/components/components.ts +0 -4
- package/front_end/panels/sources/scopeChainSidebarPane.css +1 -1
- package/front_end/panels/sources/sources-meta.ts +103 -112
- package/front_end/panels/sources/sources.ts +6 -0
- package/front_end/panels/timeline/ActiveFilters.ts +2 -1
- package/front_end/panels/timeline/AnimationsTrackAppender.ts +1 -1
- package/front_end/panels/timeline/AnnotationHelpers.test.ts +14 -8
- package/front_end/panels/timeline/AnnotationHelpers.ts +28 -23
- package/front_end/panels/timeline/AppenderUtils.ts +2 -2
- package/front_end/panels/timeline/CompatibilityTracksAppender.ts +1 -14
- package/front_end/panels/timeline/CountersGraph.test.ts +80 -0
- package/front_end/panels/timeline/CountersGraph.ts +27 -18
- package/front_end/panels/timeline/EntriesFilter.test.ts +22 -15
- package/front_end/panels/timeline/EventsTimelineTreeView.ts +4 -25
- package/front_end/panels/timeline/ExtensionTrackAppender.ts +4 -9
- package/front_end/panels/timeline/GPUTrackAppender.ts +3 -3
- package/front_end/panels/timeline/Initiators.test.ts +22 -19
- package/front_end/panels/timeline/Initiators.ts +19 -6
- package/front_end/panels/timeline/InteractionsTrackAppender.ts +6 -6
- package/front_end/panels/timeline/IsolateSelector.ts +2 -2
- package/front_end/panels/timeline/LayoutShiftsTrackAppender.ts +6 -5
- package/front_end/panels/timeline/ModificationsManager.test.ts +98 -188
- package/front_end/panels/timeline/ModificationsManager.ts +51 -48
- package/front_end/panels/timeline/NetworkTrackAppender.ts +3 -3
- package/front_end/panels/timeline/README.md +5 -13
- package/front_end/{models/trace/extras/Metadata.test.ts → panels/timeline/RecordingMetadata.test.ts} +61 -29
- package/front_end/panels/timeline/RecordingMetadata.ts +79 -0
- package/front_end/panels/timeline/SaveFileFormatter.test.ts +1 -3
- package/front_end/panels/timeline/SaveFileFormatter.ts +0 -8
- package/front_end/panels/timeline/StatusDialog.ts +12 -8
- package/front_end/panels/timeline/ThirdPartyTreeView.ts +5 -5
- package/front_end/panels/timeline/ThreadAppender.ts +29 -29
- package/front_end/panels/timeline/TimelineController.ts +14 -18
- package/front_end/panels/timeline/TimelineDetailsView.test.ts +49 -15
- package/front_end/panels/timeline/TimelineDetailsView.ts +213 -105
- package/front_end/panels/timeline/TimelineEventOverview.ts +6 -6
- package/front_end/panels/timeline/TimelineFlameChartDataProvider.test.ts +56 -95
- package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +94 -65
- package/front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.test.ts +3 -62
- package/front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.ts +10 -30
- package/front_end/panels/timeline/TimelineFlameChartView.test.ts +105 -80
- package/front_end/panels/timeline/TimelineFlameChartView.ts +107 -102
- package/front_end/panels/timeline/TimelineHistoryManager.test.ts +0 -5
- package/front_end/panels/timeline/TimelineHistoryManager.ts +8 -8
- package/front_end/panels/timeline/TimelineLoader.test.ts +4 -7
- package/front_end/panels/timeline/TimelineLoader.ts +22 -3
- package/front_end/panels/timeline/TimelineMiniMap.ts +13 -5
- package/front_end/panels/timeline/TimelinePaintProfilerView.ts +1 -1
- package/front_end/panels/timeline/TimelinePanel.test.ts +381 -117
- package/front_end/panels/timeline/TimelinePanel.ts +576 -345
- package/front_end/panels/timeline/TimelineSelectorStatsView.ts +195 -80
- package/front_end/panels/timeline/TimelineTreeView.test.ts +5 -5
- package/front_end/panels/timeline/TimelineTreeView.ts +25 -25
- package/front_end/panels/timeline/TimelineUIUtils.test.ts +58 -55
- package/front_end/panels/timeline/TimelineUIUtils.ts +159 -345
- package/front_end/panels/timeline/TimingsTrackAppender.ts +12 -7
- package/front_end/panels/timeline/TrackConfigBanner.test.ts +68 -0
- package/front_end/panels/timeline/TrackConfigBanner.ts +97 -0
- package/front_end/panels/timeline/TrackConfiguration.test.ts +3 -3
- package/front_end/panels/timeline/TrackConfiguration.ts +1 -0
- package/front_end/panels/timeline/UIDevtoolsUtils.ts +15 -15
- package/front_end/panels/timeline/components/BreadcrumbsUI.ts +4 -9
- package/front_end/panels/timeline/components/DetailsView.ts +13 -13
- package/front_end/panels/timeline/components/ExportTraceOptions.test.ts +281 -0
- package/front_end/panels/timeline/components/ExportTraceOptions.ts +262 -0
- package/front_end/panels/timeline/components/FieldSettingsDialog.test.ts +1 -1
- package/front_end/panels/timeline/components/FieldSettingsDialog.ts +2 -1
- package/front_end/panels/timeline/components/IgnoreListSetting.test.ts +5 -4
- package/front_end/panels/timeline/components/IgnoreListSetting.ts +7 -7
- package/front_end/panels/timeline/components/InteractionBreakdown.ts +3 -3
- package/front_end/panels/timeline/components/Invalidations.test.ts +2 -1
- package/front_end/panels/timeline/components/LayoutShiftDetails.test.ts +21 -11
- package/front_end/panels/timeline/components/LayoutShiftDetails.ts +325 -307
- package/front_end/panels/timeline/components/LiveMetricsView.test.ts +14 -22
- package/front_end/panels/timeline/components/LiveMetricsView.ts +1 -1
- package/front_end/panels/timeline/components/MetricCard.test.ts +2 -2
- package/front_end/panels/timeline/components/NetworkRequestDetails.test.ts +38 -44
- package/front_end/panels/timeline/components/NetworkRequestDetails.ts +318 -278
- package/front_end/panels/timeline/components/NetworkRequestTooltip.ts +8 -8
- package/front_end/panels/timeline/components/NetworkThrottlingSelector.test.ts +3 -0
- package/front_end/panels/timeline/components/OriginMap.ts +1 -1
- package/front_end/panels/timeline/components/RelatedInsightChips.test.ts +17 -31
- package/front_end/panels/timeline/components/RelatedInsightChips.ts +87 -66
- package/front_end/panels/timeline/components/Sidebar.test.ts +43 -4
- package/front_end/panels/timeline/components/Sidebar.ts +47 -20
- package/front_end/panels/timeline/components/SidebarAnnotationsTab.test.ts +47 -72
- package/front_end/panels/timeline/components/SidebarAnnotationsTab.ts +228 -218
- package/front_end/panels/timeline/components/SidebarInsightsTab.test.ts +1 -0
- package/front_end/panels/timeline/components/SidebarInsightsTab.ts +18 -54
- package/front_end/panels/timeline/components/SidebarSingleInsightSet.test.ts +7 -53
- package/front_end/panels/timeline/components/SidebarSingleInsightSet.ts +61 -44
- package/front_end/panels/timeline/components/TimelineSummary.ts +4 -4
- package/front_end/panels/timeline/components/Utils.ts +9 -9
- package/front_end/panels/timeline/components/components.ts +2 -0
- package/front_end/panels/timeline/components/exportTraceOptions.css +26 -0
- package/front_end/panels/timeline/components/insights/BaseInsightComponent.test.ts +40 -16
- package/front_end/panels/timeline/components/insights/BaseInsightComponent.ts +28 -34
- package/front_end/panels/timeline/components/insights/CLSCulprits.test.ts +5 -5
- package/front_end/panels/timeline/components/insights/CLSCulprits.ts +32 -23
- package/front_end/panels/timeline/components/insights/Cache.ts +4 -22
- package/front_end/panels/timeline/components/insights/Checklist.ts +6 -7
- package/front_end/panels/timeline/components/insights/DOMSize.ts +35 -15
- package/front_end/panels/timeline/components/insights/DocumentLatency.ts +1 -61
- package/front_end/panels/timeline/components/insights/DuplicatedJavaScript.ts +5 -17
- package/front_end/panels/timeline/components/insights/EventRef.ts +7 -9
- package/front_end/panels/timeline/components/insights/FontDisplay.ts +20 -21
- package/front_end/panels/timeline/components/insights/ForcedReflow.ts +5 -28
- package/front_end/panels/timeline/components/insights/{InteractionToNextPaint.test.ts → INPBreakdown.test.ts} +8 -5
- package/front_end/panels/timeline/components/insights/INPBreakdown.ts +70 -0
- package/front_end/panels/timeline/components/insights/ImageDelivery.ts +7 -21
- package/front_end/panels/timeline/components/insights/LCPBreakdown.ts +146 -0
- package/front_end/panels/timeline/components/insights/LCPDiscovery.ts +28 -80
- package/front_end/panels/timeline/components/insights/LegacyJavaScript.ts +3 -15
- package/front_end/panels/timeline/components/insights/ModernHTTP.ts +18 -23
- package/front_end/panels/timeline/components/insights/NetworkDependencyTree.test.ts +76 -0
- package/front_end/panels/timeline/components/insights/NetworkDependencyTree.ts +35 -29
- package/front_end/panels/timeline/components/insights/NodeLink.test.ts +113 -0
- package/front_end/panels/timeline/components/insights/NodeLink.ts +50 -10
- package/front_end/panels/timeline/components/insights/README.md +1 -1
- package/front_end/panels/timeline/components/insights/RenderBlocking.ts +4 -22
- package/front_end/panels/timeline/components/insights/SidebarInsight.ts +1 -2
- package/front_end/panels/timeline/components/insights/SlowCSSSelector.ts +16 -28
- package/front_end/panels/timeline/components/insights/Table.ts +2 -3
- package/front_end/panels/timeline/components/insights/ThirdParties.ts +7 -47
- package/front_end/panels/timeline/components/insights/Viewport.ts +0 -6
- package/front_end/panels/timeline/components/insights/insights.ts +4 -4
- package/front_end/panels/timeline/components/insights/table.css +18 -0
- package/front_end/panels/timeline/components/insights/types.ts +2 -2
- package/front_end/panels/timeline/components/layoutShiftDetails.css +99 -92
- package/front_end/panels/timeline/components/networkRequestDetails.css +110 -104
- package/front_end/panels/timeline/components/networkRequestTooltip.css +88 -83
- package/front_end/panels/timeline/components/relatedInsightChips.css +60 -58
- package/front_end/panels/timeline/components/sidebarAnnotationsTab.css +80 -78
- package/front_end/panels/timeline/components/sidebarInsightsTab.css +0 -25
- package/front_end/panels/timeline/components/sidebarSingleInsightSet.css +1 -1
- package/front_end/panels/timeline/docs/flame_chart_migration.md +2 -2
- package/front_end/panels/timeline/overlays/OverlaysImpl.test.ts +149 -42
- package/front_end/panels/timeline/overlays/OverlaysImpl.ts +218 -283
- package/front_end/panels/timeline/overlays/components/EntriesLinkOverlay.ts +1 -1
- package/front_end/panels/timeline/overlays/components/EntryLabelOverlay.ts +69 -104
- package/front_end/panels/timeline/overlays/components/TimeRangeOverlay.ts +1 -1
- package/front_end/panels/timeline/overlays/components/entryLabelOverlay.css +13 -0
- package/front_end/panels/timeline/overlays/components/timeRangeOverlay.css +2 -1
- package/front_end/panels/timeline/timeline-meta.ts +14 -14
- package/front_end/panels/timeline/timeline.ts +4 -4
- package/front_end/panels/timeline/timelineDetailsView.css +118 -0
- package/front_end/panels/timeline/timelineFlameChartView.css +18 -117
- package/front_end/panels/timeline/timelineMiniMap.css +5 -0
- package/front_end/panels/timeline/timelinePanel.css +2 -10
- package/front_end/panels/timeline/timelineTreeView.css +0 -4
- package/front_end/panels/timeline/track_appenders/CompatibilityTracksAppender.test.ts +16 -15
- package/front_end/panels/timeline/track_appenders/ExtensionTrackAppender.test.ts +6 -4
- package/front_end/panels/timeline/track_appenders/InteractionsTrackAppender.test.ts +0 -1
- package/front_end/panels/timeline/track_appenders/ThreadAppender.test.ts +34 -49
- package/front_end/panels/timeline/utils/AICallTree.test.ts +54 -120
- package/front_end/panels/timeline/utils/AICallTree.ts +31 -74
- package/front_end/panels/timeline/utils/AIContext.ts +67 -0
- package/front_end/panels/timeline/utils/EntityMapper.test.ts +5 -4
- package/front_end/panels/timeline/utils/EntityMapper.ts +3 -3
- package/front_end/panels/timeline/utils/EntryName.test.ts +3 -3
- package/front_end/panels/timeline/utils/EntryName.ts +10 -10
- package/front_end/panels/timeline/utils/EntryNodes.test.ts +137 -0
- package/front_end/panels/timeline/utils/EntryNodes.ts +107 -0
- package/front_end/panels/timeline/utils/EntryStyles.ts +110 -110
- package/front_end/panels/timeline/{EventsSerializer.test.ts → utils/EventsSerializer.test.ts} +7 -7
- package/front_end/panels/timeline/{EventsSerializer.ts → utils/EventsSerializer.ts} +1 -1
- package/front_end/panels/timeline/{FreshRecording.test.ts → utils/FreshRecording.test.ts} +5 -5
- package/front_end/panels/timeline/{FreshRecording.ts → utils/FreshRecording.ts} +1 -1
- package/front_end/panels/timeline/utils/Helpers.ts +6 -0
- package/front_end/panels/timeline/utils/IgnoreList.test.ts +7 -6
- package/front_end/panels/timeline/utils/IgnoreList.ts +6 -6
- package/front_end/panels/timeline/utils/InsightAIContext.test.ts +61 -25
- package/front_end/panels/timeline/utils/InsightAIContext.ts +102 -81
- package/front_end/panels/timeline/utils/SourceMapsResolver.test.ts +5 -4
- package/front_end/panels/timeline/utils/Treemap.ts +5 -20
- package/front_end/panels/timeline/utils/utils.ts +8 -0
- package/front_end/panels/utils/utils.test.ts +1 -7
- package/front_end/panels/utils/utils.ts +17 -21
- package/front_end/panels/web_audio/WebAudioView.test.ts +224 -11
- package/front_end/panels/web_audio/WebAudioView.ts +219 -267
- package/front_end/panels/web_audio/web_audio-meta.ts +3 -3
- package/front_end/panels/web_audio/web_audio.ts +0 -12
- package/front_end/panels/webauthn/WebauthnPane.test.ts +75 -72
- package/front_end/panels/webauthn/WebauthnPane.ts +517 -578
- package/front_end/panels/webauthn/webauthn-meta.ts +2 -2
- package/front_end/panels/webauthn/webauthnPane.css +157 -155
- package/front_end/panels/whats_new/ReleaseNoteText.ts +11 -11
- package/front_end/panels/whats_new/ReleaseNoteView.ts +2 -2
- package/front_end/panels/whats_new/releaseNoteView.css +92 -91
- package/front_end/panels/whats_new/resources/WNDT.md +6 -10
- package/front_end/panels/whats_new/whats_new-meta.ts +7 -7
- package/front_end/services/trace_bounds/TraceBounds.ts +1 -1
- package/front_end/services/tracing/ExternalRequests.test.ts +39 -0
- package/front_end/services/tracing/ExternalRequests.ts +74 -0
- package/front_end/services/tracing/PerformanceTracing.ts +5 -4
- package/front_end/{models/trace → services/tracing}/TracingManager.test.ts +9 -7
- package/front_end/{models/trace → services/tracing}/TracingManager.ts +3 -4
- package/front_end/services/tracing/tracing.ts +4 -0
- package/front_end/testing/AiAssistanceHelpers.ts +10 -8
- package/front_end/testing/DOMHelpers.ts +8 -6
- package/front_end/testing/EnvironmentHelpers.ts +21 -6
- package/front_end/testing/ExpectStubCall.ts +2 -1
- package/front_end/testing/InsightHelpers.ts +11 -4
- package/front_end/testing/MockConnection.ts +3 -2
- package/front_end/testing/MockSettingStorage.ts +23 -0
- package/front_end/testing/MutationHelpers.test.ts +1 -3
- package/front_end/testing/OverridesHelpers.ts +9 -3
- package/front_end/testing/PropertyParser.ts +1 -1
- package/front_end/testing/README.md +34 -0
- package/front_end/testing/SnapshotTester.snapshot.txt +9 -0
- package/front_end/testing/SnapshotTester.test.ts +32 -0
- package/front_end/testing/SnapshotTester.ts +150 -0
- package/front_end/testing/SourceMapEncoder.ts +1 -237
- package/front_end/testing/SourceMapHelpers.ts +3 -5
- package/front_end/testing/StackTraceHelpers.ts +47 -0
- package/front_end/testing/StyleHelpers.ts +43 -22
- package/front_end/testing/TraceHelpers.ts +135 -122
- package/front_end/testing/TraceLoader.ts +23 -65
- package/front_end/testing/test_setup.ts +31 -4
- package/front_end/ui/components/buttons/Button.ts +1 -1
- package/front_end/ui/components/buttons/FloatingButton.ts +37 -6
- package/front_end/ui/components/cards/Card.ts +2 -2
- package/front_end/ui/components/copy_to_clipboard/copyToClipboard.ts +1 -1
- package/front_end/ui/components/dialogs/ButtonDialog.test.ts +2 -6
- package/front_end/ui/components/dialogs/ButtonDialog.ts +15 -0
- package/front_end/ui/components/dialogs/Dialog.ts +68 -8
- package/front_end/ui/components/dialogs/ShortcutDialog.test.ts +1 -3
- package/front_end/ui/components/diff_view/DiffView.ts +6 -6
- package/front_end/ui/components/docs/console_insight/basic.ts +1 -1
- package/front_end/ui/components/docs/console_insight/error.ts +1 -1
- package/front_end/ui/components/docs/console_insight/loading.ts +1 -1
- package/front_end/ui/components/docs/context_menu/basic.html +45 -0
- package/front_end/ui/components/docs/context_menu/basic.ts +102 -0
- package/front_end/ui/components/docs/icon_component/basic.html +1 -3
- package/front_end/ui/components/docs/icon_component/basic.ts +1 -1
- package/front_end/ui/components/docs/recorder_recording_list_view/basic.ts +4 -1
- package/front_end/ui/components/docs/select_menu/basic.html +1 -27
- package/front_end/ui/components/docs/select_menu/basic.ts +86 -194
- package/front_end/ui/components/icon_button/Icon.ts +16 -10
- package/front_end/ui/components/icon_button/IconButton.ts +1 -3
- package/front_end/ui/components/icon_button/icon.css +73 -0
- package/front_end/ui/components/issue_counter/IssueCounter.ts +13 -14
- package/front_end/ui/components/issue_counter/IssueLinkIcon.ts +3 -3
- package/front_end/ui/components/markdown_view/MarkdownImagesMap.ts +4 -4
- package/front_end/ui/components/markdown_view/MarkdownLinksMap.ts +9 -6
- package/front_end/ui/components/markdown_view/MarkdownView.test.ts +73 -0
- package/front_end/ui/components/panel_feedback/PanelFeedback.ts +5 -11
- package/front_end/ui/components/panel_feedback/PreviewToggle.ts +4 -9
- package/front_end/ui/components/settings/SettingCheckbox.ts +3 -3
- package/front_end/ui/components/settings/SettingDeprecationWarning.ts +2 -4
- package/front_end/ui/components/snackbars/Snackbar.ts +32 -17
- package/front_end/ui/components/snackbars/snackbar.css +1 -1
- package/front_end/ui/components/spinners/Spinner.ts +50 -2
- package/front_end/ui/components/spinners/spinner.css +10 -1
- package/front_end/ui/components/srgb_overlay/SrgbOverlay.ts +0 -1
- package/front_end/ui/components/survey_link/SurveyLink.ts +4 -8
- package/front_end/ui/components/text_editor/AiCodeCompletionTeaserPlaceholder.test.ts +84 -0
- package/front_end/ui/components/text_editor/AiCodeCompletionTeaserPlaceholder.ts +83 -0
- package/front_end/ui/components/text_editor/ExecutionPositionHighlighter.ts +0 -1
- package/front_end/ui/components/text_editor/TextEditor.test.ts +72 -12
- package/front_end/ui/components/text_editor/TextEditor.ts +2 -0
- package/front_end/ui/components/text_editor/config.ts +120 -12
- package/front_end/ui/{legacy/components/inline_editor/bezierSwatch.css → components/text_editor/textEditor.css} +2 -6
- package/front_end/ui/components/text_editor/text_editor.ts +1 -0
- package/front_end/ui/components/tooltips/Tooltip.test.ts +70 -40
- package/front_end/ui/components/tooltips/Tooltip.ts +208 -33
- package/front_end/ui/components/tooltips/tooltip.css +13 -77
- package/front_end/ui/components/tree_outline/TreeOutline.ts +11 -0
- package/front_end/ui/legacy/ARIAUtils.test.ts +101 -20
- package/front_end/ui/legacy/ARIAUtils.ts +77 -49
- package/front_end/ui/legacy/ActionRegistration.test.ts +0 -2
- package/front_end/ui/legacy/ActionRegistration.ts +24 -24
- package/front_end/ui/legacy/ContextMenu.test.ts +60 -1
- package/front_end/ui/legacy/ContextMenu.ts +349 -29
- package/front_end/ui/legacy/DockController.ts +13 -7
- package/front_end/ui/legacy/EmptyWidget.ts +62 -32
- package/front_end/ui/legacy/FilterBar.ts +14 -9
- package/front_end/ui/legacy/GlassPane.ts +10 -4
- package/front_end/ui/legacy/Infobar.ts +2 -2
- package/front_end/ui/legacy/InspectorView.test.ts +99 -0
- package/front_end/ui/legacy/InspectorView.ts +71 -25
- package/front_end/ui/legacy/ListWidget.ts +9 -9
- package/front_end/ui/legacy/Panel.ts +1 -1
- package/front_end/ui/legacy/ProgressIndicator.ts +44 -41
- package/front_end/ui/legacy/RemoteDebuggingTerminatedScreen.ts +4 -4
- package/front_end/ui/legacy/ReportView.ts +1 -1
- package/front_end/ui/legacy/SearchableView.ts +24 -24
- package/front_end/ui/legacy/SettingsUI.ts +2 -2
- package/front_end/ui/legacy/ShortcutRegistry.ts +2 -1
- package/front_end/ui/legacy/SoftContextMenu.ts +23 -9
- package/front_end/ui/legacy/SoftDropDown.ts +1 -1
- package/front_end/ui/legacy/SplitWidget.test.ts +8 -0
- package/front_end/ui/legacy/SplitWidget.ts +3 -3
- package/front_end/ui/legacy/SuggestBox.ts +15 -15
- package/front_end/ui/legacy/TabbedPane.ts +27 -31
- package/front_end/ui/legacy/TargetCrashedScreen.ts +4 -4
- package/front_end/ui/legacy/TextPrompt.ts +4 -2
- package/front_end/ui/legacy/ThrottledWidget.ts +1 -1
- package/front_end/ui/legacy/Toolbar.test.ts +13 -0
- package/front_end/ui/legacy/Toolbar.ts +39 -19
- package/front_end/ui/legacy/Treeoutline.test.ts +140 -0
- package/front_end/ui/legacy/Treeoutline.ts +244 -8
- package/front_end/ui/legacy/UIUtils.test.ts +59 -0
- package/front_end/ui/legacy/UIUtils.ts +235 -25
- package/front_end/ui/legacy/View.test.ts +14 -1
- package/front_end/ui/legacy/View.ts +33 -9
- package/front_end/ui/legacy/ViewManager.test.ts +235 -0
- package/front_end/ui/legacy/ViewManager.ts +109 -15
- package/front_end/ui/legacy/ViewRegistration.ts +17 -7
- package/front_end/ui/legacy/Widget.test.ts +35 -3
- package/front_end/ui/legacy/Widget.ts +127 -16
- package/front_end/ui/legacy/XLink.ts +1 -1
- package/front_end/ui/legacy/components/color_picker/ContrastDetails.ts +36 -26
- package/front_end/ui/legacy/components/color_picker/FormatPickerContextMenu.ts +4 -8
- package/front_end/ui/legacy/components/color_picker/Spectrum.test.ts +36 -1
- package/front_end/ui/legacy/components/color_picker/Spectrum.ts +72 -49
- package/front_end/ui/legacy/components/color_picker/spectrum.css +1 -1
- package/front_end/ui/legacy/components/cookie_table/CookiesTable.ts +14 -19
- package/front_end/ui/legacy/components/data_grid/DataGrid.ts +31 -30
- package/front_end/ui/legacy/components/data_grid/DataGridElement.test.ts +19 -15
- package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +15 -3
- package/front_end/ui/legacy/components/data_grid/ShowMoreDataGridNode.ts +2 -2
- package/front_end/ui/legacy/components/data_grid/ViewportDataGrid.ts +6 -3
- package/front_end/ui/legacy/components/data_grid/dataGrid.css +9 -3
- package/front_end/ui/legacy/components/inline_editor/BezierEditor.ts +1 -1
- package/front_end/ui/legacy/components/inline_editor/BezierUI.ts +1 -1
- package/front_end/ui/legacy/components/inline_editor/CSSAngle.test.ts +25 -25
- package/front_end/ui/legacy/components/inline_editor/CSSAngle.ts +11 -5
- package/front_end/ui/legacy/components/inline_editor/CSSShadowEditor.ts +5 -5
- package/front_end/ui/legacy/components/inline_editor/ColorSwatch.test.ts +1 -9
- package/front_end/ui/legacy/components/inline_editor/ColorSwatch.ts +35 -20
- package/front_end/ui/legacy/components/inline_editor/FontEditor.ts +32 -31
- package/front_end/ui/legacy/components/inline_editor/FontEditorUnitConverter.ts +1 -1
- package/front_end/ui/legacy/components/inline_editor/Swatches.ts +3 -47
- package/front_end/ui/legacy/components/inline_editor/cssAngle.css +4 -5
- package/front_end/ui/legacy/components/object_ui/CustomPreviewComponent.ts +2 -2
- package/front_end/ui/legacy/components/object_ui/ObjectPopoverHelper.ts +1 -1
- package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.test.ts +19 -1
- package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +31 -28
- package/front_end/ui/legacy/components/object_ui/objectPropertiesSection.css +2 -0
- package/front_end/ui/legacy/components/perf_ui/BrickBreaker.ts +2 -2
- package/front_end/ui/legacy/components/perf_ui/ChartViewport.ts +7 -3
- package/front_end/ui/legacy/components/perf_ui/FilmStripView.ts +7 -7
- package/front_end/ui/legacy/components/perf_ui/FlameChart.test.ts +162 -1
- package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +153 -99
- package/front_end/ui/legacy/components/perf_ui/NetworkPriorities.ts +5 -5
- package/front_end/ui/legacy/components/perf_ui/OverviewGrid.ts +3 -3
- package/front_end/ui/legacy/components/perf_ui/PieChart.ts +1 -1
- package/front_end/ui/legacy/components/perf_ui/TimelineGrid.ts +0 -4
- package/front_end/ui/legacy/components/perf_ui/TimelineOverviewPane.ts +54 -6
- package/front_end/ui/legacy/components/perf_ui/perf_ui-meta.ts +6 -6
- package/front_end/ui/legacy/components/quick_open/CommandMenu.ts +29 -3
- package/front_end/ui/legacy/components/quick_open/FilteredListWidget.ts +14 -5
- package/front_end/ui/legacy/components/quick_open/HelpQuickOpen.ts +2 -5
- package/front_end/ui/legacy/components/quick_open/filteredListWidget.css +2 -0
- package/front_end/ui/legacy/components/quick_open/quick_open-meta.ts +2 -2
- package/front_end/ui/legacy/components/source_frame/FontView.ts +8 -5
- package/front_end/ui/legacy/components/source_frame/ImageView.ts +17 -29
- package/front_end/ui/legacy/components/source_frame/JSONView.ts +3 -3
- package/front_end/ui/legacy/components/source_frame/PreviewFactory.ts +2 -2
- package/front_end/ui/legacy/components/source_frame/ResourceSourceFrame.test.ts +0 -4
- package/front_end/ui/legacy/components/source_frame/ResourceSourceFrame.ts +2 -2
- package/front_end/ui/legacy/components/source_frame/SourceFrame.ts +41 -31
- package/front_end/ui/legacy/components/source_frame/StreamingContentHexView.ts +1 -1
- package/front_end/ui/legacy/components/source_frame/XMLView.ts +2 -2
- package/front_end/ui/legacy/components/source_frame/fontView.css +1 -1
- package/front_end/ui/legacy/components/source_frame/source_frame-meta.ts +9 -9
- package/front_end/ui/legacy/components/utils/ImagePreview.ts +4 -4
- package/front_end/ui/legacy/components/utils/JSPresentationUtils.test.ts +6 -5
- package/front_end/ui/legacy/components/utils/JSPresentationUtils.ts +76 -34
- package/front_end/ui/legacy/components/utils/Linkifier.test.ts +154 -2
- package/front_end/ui/legacy/components/utils/Linkifier.ts +108 -50
- package/front_end/ui/legacy/components/utils/TargetDetachedDialog.ts +2 -1
- package/front_end/ui/legacy/confirmDialog.css +1 -1
- package/front_end/ui/legacy/filter.css +12 -4
- package/front_end/ui/legacy/inspectorCommon.css +25 -20
- package/front_end/ui/legacy/remoteDebuggingTerminatedScreen.css +18 -17
- package/front_end/ui/legacy/softContextMenu.css +4 -0
- package/front_end/ui/legacy/tabbedPane.css +5 -1
- package/front_end/ui/legacy/targetCrashedScreen.css +9 -8
- package/front_end/ui/legacy/viewContainers.css +8 -0
- package/front_end/ui/visual_logging/Debugging.ts +122 -26
- package/front_end/ui/visual_logging/KnownContextValues.ts +139 -1
- package/front_end/ui/visual_logging/LoggingConfig.ts +1 -1
- package/front_end/ui/visual_logging/LoggingDriver.test.ts +74 -44
- package/front_end/ui/visual_logging/LoggingDriver.ts +3 -2
- package/front_end/ui/visual_logging/LoggingState.ts +6 -4
- package/front_end/ui/visual_logging/README.md +1 -3
- package/front_end/ui/visual_logging/visual_logging.ts +9 -0
- package/front_end/ui/visual_logging/visual_logging_debugging.png +0 -0
- package/inspector_overlay/css_grid_label_helpers.ts +4 -4
- package/inspector_overlay/highlight_flex_common.ts +2 -2
- package/inspector_overlay/loadCSS.rollup.js +2 -2
- package/inspector_overlay/main.ts +0 -4
- package/inspector_overlay/tool_highlight.css +1 -1
- package/inspector_overlay/tool_highlight.ts +7 -7
- package/package.json +32 -36
- package/scripts/add_icon_paths.py +1 -1
- package/scripts/ai_assistance/README.md +1 -0
- package/scripts/ai_assistance/auto-run/auto-run.ts +46 -6
- package/scripts/ai_assistance/auto-run/shared/comment-parsers.test.ts +2 -2
- package/scripts/ai_assistance/auto-run/shared/comment-parsers.ts +2 -2
- package/scripts/ai_assistance/auto-run/shared/puppeteer-helpers.ts +18 -15
- package/scripts/ai_assistance/auto-run/targets/elements-executor.ts +2 -0
- package/scripts/ai_assistance/auto-run/targets/elements-multimodal-executor.ts +2 -0
- package/scripts/ai_assistance/auto-run/targets/interface.ts +1 -0
- package/scripts/ai_assistance/auto-run/targets/patching-executor.ts +1 -0
- package/scripts/ai_assistance/auto-run/targets/performance-insights-executor.ts +2 -0
- package/scripts/ai_assistance/auto-run/targets/performance-main-thread-executor.ts +2 -0
- package/scripts/ai_assistance/eval/index.js +5 -1
- package/scripts/ai_assistance/package.json +2 -1
- package/scripts/ai_assistance/suite/README.md +57 -0
- package/scripts/ai_assistance/suite/helpers/evaluators.ts +183 -0
- package/scripts/ai_assistance/suite/helpers/gemini.ts +122 -0
- package/scripts/ai_assistance/suite/helpers/outputs.ts +112 -0
- package/scripts/ai_assistance/suite/instructions/lcp-breakdown.md +12 -0
- package/scripts/ai_assistance/suite/instructions/load.ts +13 -0
- package/scripts/ai_assistance/suite/instructions/scoring.md +27 -0
- package/scripts/ai_assistance/suite/performance.eval.ts +18 -0
- package/scripts/ai_assistance/suite/to_eval_output.ts +166 -0
- package/scripts/ai_assistance/suite/types.d.ts +40 -0
- package/scripts/ai_assistance/suite/upload_to_gcp.ts +104 -0
- package/scripts/ai_assistance/tsconfig.json +1 -1
- package/scripts/ai_assistance/types.d.ts +8 -3
- package/scripts/build/assert_grd.py +1 -1
- package/scripts/build/compress_files.js +9 -4
- package/scripts/build/cross_reference_ninja_and_tsc.js +5 -5
- package/scripts/build/devtools_plugin.js +9 -2
- package/scripts/build/esbuild.js +4 -1
- package/scripts/build/generate_html_entrypoint.js +5 -4
- package/scripts/build/ninja/README.md +2 -3
- package/scripts/build/ninja/bundle.gni +7 -30
- package/scripts/build/ninja/devtools_entrypoint.gni +4 -4
- package/scripts/build/ninja/devtools_pre_built.gni +2 -1
- package/scripts/build/ninja/generate_css.gni +4 -2
- package/scripts/build/ninja/vars.gni +5 -1
- package/scripts/build/ninja/write-if-changed.js +2 -2
- package/scripts/build/typescript/ts_library.py +7 -1
- package/scripts/build/typescript/typescript.gni +2 -1
- package/scripts/component_server/server.js +8 -7
- package/scripts/devtools_build.mjs +93 -26
- package/scripts/devtools_build.test.mjs +48 -48
- package/scripts/devtools_paths.py +0 -5
- package/scripts/eslint_rules/README.md +4 -2
- package/scripts/eslint_rules/lib/canvas-context-tracking.ts +1 -1
- package/scripts/eslint_rules/lib/check-css-import.ts +2 -2
- package/scripts/eslint_rules/lib/check-license-header.ts +3 -3
- package/scripts/eslint_rules/lib/check-test-definitions.ts +2 -2
- package/scripts/eslint_rules/lib/enforce-custom-element-definitions-location.ts +1 -1
- package/scripts/eslint_rules/lib/enforce-optional-properties-last.ts +1 -1
- package/scripts/eslint_rules/lib/enforce-ui-strings-as-const.ts +1 -1
- package/scripts/eslint_rules/lib/es-modules-import.ts +3 -2
- package/scripts/eslint_rules/lib/html-tagged-template.ts +2 -2
- package/scripts/eslint_rules/lib/inject-checkbox-styles.ts +36 -24
- package/scripts/eslint_rules/lib/inline-type-imports.ts +1 -1
- package/scripts/eslint_rules/lib/jslog-context-list.ts +32 -7
- package/scripts/eslint_rules/lib/no-adopted-style-sheets.ts +2 -2
- package/scripts/eslint_rules/lib/no-assert-deep-strict-equal.ts +17 -16
- package/scripts/eslint_rules/lib/no-assert-equal-boolean-null-undefined.ts +1 -1
- package/scripts/eslint_rules/lib/no-assert-equal.ts +1 -1
- package/scripts/eslint_rules/lib/no-assert-strict-equal-for-arrays-and-objects.ts +1 -1
- package/scripts/eslint_rules/lib/no-commented-out-console.ts +4 -2
- package/scripts/eslint_rules/lib/no-customized-builtin-elements.ts +1 -4
- package/scripts/eslint_rules/lib/no-imperative-dom-api/adorner.ts +5 -9
- package/scripts/eslint_rules/lib/no-imperative-dom-api/aria-utils.ts +5 -8
- package/scripts/eslint_rules/lib/no-imperative-dom-api/ast.ts +24 -1
- package/scripts/eslint_rules/lib/no-imperative-dom-api/button.ts +5 -4
- package/scripts/eslint_rules/lib/no-imperative-dom-api/class-member.ts +1 -1
- package/scripts/eslint_rules/lib/no-imperative-dom-api/data-grid.ts +23 -25
- package/scripts/eslint_rules/lib/no-imperative-dom-api/dom-api-devtools-extensions.ts +5 -9
- package/scripts/eslint_rules/lib/no-imperative-dom-api/dom-api.ts +11 -16
- package/scripts/eslint_rules/lib/no-imperative-dom-api/dom-fragment.ts +2 -2
- package/scripts/eslint_rules/lib/no-imperative-dom-api/split-widget.ts +14 -18
- package/scripts/eslint_rules/lib/no-imperative-dom-api/toolbar.ts +17 -18
- package/scripts/eslint_rules/lib/no-imperative-dom-api/ui-fragment.ts +7 -12
- package/scripts/eslint_rules/lib/no-imperative-dom-api/ui-utils.ts +7 -7
- package/scripts/eslint_rules/lib/no-imperative-dom-api/widget.ts +8 -13
- package/scripts/eslint_rules/lib/no-imperative-dom-api.ts +3 -22
- package/scripts/eslint_rules/lib/no-importing-images-from-src.ts +1 -1
- package/scripts/eslint_rules/lib/no-imports-in-directory.ts +18 -7
- package/scripts/eslint_rules/lib/no-lit-render-outside-of-view.ts +48 -37
- package/scripts/eslint_rules/lib/no-new-lit-element-components.ts +5 -2
- package/scripts/eslint_rules/lib/no-underscored-properties.ts +36 -28
- package/scripts/eslint_rules/lib/prefer-assert-instance-of.ts +24 -20
- package/scripts/eslint_rules/lib/prefer-assert-is-ok.ts +54 -45
- package/scripts/eslint_rules/lib/prefer-assert-length-of.ts +24 -17
- package/scripts/eslint_rules/lib/prefer-assert-strict-equal.ts +22 -16
- package/scripts/eslint_rules/lib/prefer-private-class-members.ts +11 -4
- package/scripts/eslint_rules/lib/prefer-sinon-assert.ts +37 -29
- package/scripts/eslint_rules/lib/prefer-url-string.ts +1 -1
- package/scripts/eslint_rules/lib/utils/lit.ts +26 -9
- package/scripts/eslint_rules/lib/validate-timing-types.ts +330 -0
- package/scripts/eslint_rules/rules-dir.mjs +4 -1
- package/scripts/eslint_rules/tests/check-license-header.test.ts +8 -8
- package/scripts/eslint_rules/tests/check-test-definitions.test.ts +0 -10
- package/scripts/eslint_rules/tests/enforce-optional-properties-last.test.ts +1 -1
- package/scripts/eslint_rules/tests/inject-checkbox-styles.test.ts +49 -0
- package/scripts/eslint_rules/tests/no-imports-in-directory.test.ts +20 -5
- package/scripts/eslint_rules/tests/no-lit-render-outside-of-view.test.ts +60 -10
- package/scripts/eslint_rules/tests/no-new-lit-element-components.test.ts +4 -0
- package/scripts/eslint_rules/tests/prefer-private-class-members.test.ts +2 -2
- package/scripts/eslint_rules/tests/utils/RuleTester.ts +19 -1
- package/scripts/eslint_rules/tests/utils.test.ts +1 -1
- package/scripts/eslint_rules/tests/validate-timing-types.test.ts +289 -0
- package/scripts/eslint_rules/tsconfig.json +3 -2
- package/scripts/extract_bugs.ts +2 -3
- package/scripts/javascript_natives/helpers.js +9 -9
- package/scripts/migration/e2e_non_hosted_gemini.mjs +102 -0
- package/scripts/migration/web-tests-esm/rename-legacy-global.mjs +1 -1
- package/scripts/npm_test.js +1 -1
- package/scripts/protocol_typescript/protocol_dts_generator.ts +27 -16
- package/scripts/protocol_typescript/protocol_schema.d.ts +9 -4
- package/scripts/reformat-clang-js-ts.js +1 -1
- package/scripts/run_build.mjs +14 -2
- package/scripts/run_start.mjs +6 -3
- package/scripts/scaffold/scaffold-widget.js +7 -7
- package/scripts/scaffold/templates/WidgetTemplate.ts.txt +1 -1
- package/scripts/tools/update_goldens.py +143 -168
- package/scripts/tsconfig.json +2 -1
- package/scripts/whitespaces.txt +1 -1
- package/front_end/core/sdk/SourceMapScopes.test.ts +0 -507
- package/front_end/core/sdk/SourceMapScopes.ts +0 -472
- package/front_end/models/ai_assistance/agents/PerformanceInsightsAgent.test.ts +0 -448
- package/front_end/models/ai_assistance/agents/PerformanceInsightsAgent.ts +0 -498
- package/front_end/models/trace/extras/FetchNodes.test.ts +0 -261
- package/front_end/models/trace/extras/FetchNodes.ts +0 -254
- package/front_end/models/trace/extras/Metadata.ts +0 -79
- package/front_end/models/trace/insights/LCPPhases.test.ts +0 -71
- package/front_end/models/trace/insights/LCPPhases.ts +0 -222
- package/front_end/panels/animation/AnimationScreenshotPopover.ts +0 -65
- package/front_end/panels/animation/animationScreenshotPopover.css +0 -18
- package/front_end/panels/application/ReportingApiReportsView.test.ts +0 -117
- package/front_end/panels/application/ReportingApiReportsView.ts +0 -88
- package/front_end/panels/elements/ElementsTreeElementHighlighter.test.ts +0 -51
- package/front_end/panels/elements/ElementsTreeElementHighlighter.ts +0 -107
- package/front_end/panels/elements/components/LayoutPane.ts +0 -515
- package/front_end/panels/elements/components/LayoutPaneUtils.ts +0 -41
- package/front_end/panels/elements/components/layoutPane.css +0 -168
- package/front_end/panels/sources/components/breakpointsView.css +0 -275
- package/front_end/panels/timeline/components/insights/InteractionToNextPaint.ts +0 -118
- package/front_end/panels/timeline/components/insights/LCPPhases.ts +0 -256
- package/front_end/panels/web_audio/AudioContextContentBuilder.ts +0 -113
- package/front_end/panels/web_audio/AudioContextSelector.ts +0 -140
- package/front_end/panels/web_audio/audioContextSelector.css +0 -20
- package/front_end/panels/web_audio/graph_visualizer/EdgeView.ts +0 -80
- package/front_end/panels/web_audio/graph_visualizer/GraphManager.ts +0 -46
- package/front_end/panels/web_audio/graph_visualizer/GraphStyle.ts +0 -96
- package/front_end/panels/web_audio/graph_visualizer/GraphView.ts +0 -197
- package/front_end/panels/web_audio/graph_visualizer/NodeRendererUtility.ts +0 -43
- package/front_end/panels/web_audio/graph_visualizer/NodeView.ts +0 -258
- package/front_end/panels/web_audio/graph_visualizer/graph_visualizer.ts +0 -19
- package/front_end/ui/components/docs/recorder_recording_view/basic.html +0 -20
- package/front_end/ui/components/docs/recorder_recording_view/basic.ts +0 -99
- package/front_end/ui/legacy/inspectorViewTabbedPane.css +0 -13
- package/inspector_overlay/debug/tool_distances.html +0 -25
- package/inspector_overlay/tool_distances.ts +0 -125
- package/scripts/eslint_rules/lib/no-it-screenshot-only-or-repeat.ts +0 -47
- package/scripts/eslint_rules/lib/no-screenshot-test-outside-perf-panel.ts +0 -77
- package/scripts/eslint_rules/lib/screenshot-assertion-in-it-screenshot.ts +0 -110
- package/scripts/eslint_rules/lib/single-screenshot-assertion-per-test.ts +0 -85
- package/scripts/eslint_rules/tests/no-it-screenshot-only-or-repeat.test.ts +0 -34
- package/scripts/eslint_rules/tests/no-screenshot-test-outside-perf-panel.test.ts +0 -99
- package/scripts/eslint_rules/tests/screenshot-assertion-in-it-screenshot.test.ts +0 -79
- package/scripts/eslint_rules/tests/single-screenshot-assertion-per-test.test.ts +0 -97
- package/scripts/tools/update_goldens_unittest.py +0 -88
- package/scripts/tools/update_goldens_v2.py +0 -68
- package/scripts/watch_build.js +0 -230
- /package/front_end/panels/recorder/models/{RecorderShorcutHelper.test.ts → RecorderShortcutHelper.test.ts} +0 -0
@@ -7,24 +7,103 @@ import '../../../ui/components/icon_button/icon_button.js';
|
|
7
7
|
import * as Common from '../../../core/common/common.js';
|
8
8
|
import * as Host from '../../../core/host/host.js';
|
9
9
|
import * as i18n from '../../../core/i18n/i18n.js';
|
10
|
+
import * as Platform from '../../../core/platform/platform.js';
|
10
11
|
import * as Root from '../../../core/root/root.js';
|
12
|
+
import * as SDK from '../../../core/sdk/sdk.js';
|
11
13
|
import * as TimelineUtils from '../../../panels/timeline/utils/utils.js';
|
12
14
|
import {html, type TemplateResult} from '../../../ui/lit/lit.js';
|
13
15
|
import * as Trace from '../../trace/trace.js';
|
16
|
+
import {ConversationType} from '../AiHistoryStorage.js';
|
17
|
+
import {PerformanceInsightFormatter, TraceEventFormatter} from '../data_formatters/PerformanceInsightFormatter.js';
|
18
|
+
import {PerformanceTraceFormatter} from '../data_formatters/PerformanceTraceFormatter.js';
|
19
|
+
import {debugLog} from '../debug.js';
|
14
20
|
|
15
21
|
import {
|
22
|
+
type AgentOptions,
|
16
23
|
AiAgent,
|
17
24
|
type ContextResponse,
|
18
25
|
ConversationContext,
|
26
|
+
type ConversationSuggestion,
|
27
|
+
type ParsedResponse,
|
19
28
|
type RequestOptions,
|
29
|
+
type ResponseData,
|
20
30
|
ResponseType,
|
21
31
|
} from './AiAgent.js';
|
22
32
|
|
33
|
+
const UIStringsNotTranslated = {
|
34
|
+
/**
|
35
|
+
*@description Shown when the agent is investigating a trace
|
36
|
+
*/
|
37
|
+
analyzingTrace: 'Analyzing trace',
|
38
|
+
analyzingCallTree: 'Analyzing call tree',
|
39
|
+
/**
|
40
|
+
* @description Shown when the agent is investigating network activity
|
41
|
+
*/
|
42
|
+
networkActivitySummary: 'Investigating network activity…',
|
43
|
+
/**
|
44
|
+
* @description Shown when the agent is investigating main thread activity
|
45
|
+
*/
|
46
|
+
mainThreadActivity: 'Investigating main thread activity…',
|
47
|
+
} as const;
|
48
|
+
const lockedString = i18n.i18n.lockedString;
|
49
|
+
|
23
50
|
/**
|
24
51
|
* WARNING: preamble defined in code is only used when userTier is
|
25
52
|
* TESTERS. Otherwise, a server-side preamble is used (see
|
26
53
|
* chrome_preambles.gcl). Sync local changes with the server-side.
|
27
54
|
*/
|
55
|
+
/* clang-format off */
|
56
|
+
const insightPreamble = `You are an AI-powered web performance optimization expert, simulating a highly skilled Chrome DevTools user. Your goal is to provide actionable advice to web developers based on Chrome Performance Panel insights.
|
57
|
+
|
58
|
+
You will be provided with an Insight from the Chrome Performance Panel. This Insight will contain information about the performance of the web site. It is your task to analyze the data available to you and suggest solutions to improve the performance of the page.
|
59
|
+
|
60
|
+
You will be told the following information about the Insight:
|
61
|
+
- **Insight Title:** The name of the performance issue detected by Chrome DevTools.
|
62
|
+
- **Insight Summary:** A brief explanation of the performance problem and its potential impact on the user experience.
|
63
|
+
- **Detailed Analysis:** Specific data points and observations from the Chrome Performance Panel, including timestamps, durations, resource URLs, and function call stacks. Use this data to pinpoint the root cause of the performance issue.
|
64
|
+
|
65
|
+
You will be provided with a list of relevant URLs containing up-to-date information regarding web performance optimization. Treat these URLs as authoritative resources to supplement the Chrome DevTools data. Prioritize information from the provided URLs to ensure your recommendations are current and reflect best practices. Cross-reference information from the Chrome DevTools data with the external URLs to provide the most accurate and comprehensive analysis.
|
66
|
+
|
67
|
+
Additionally, you may also be asked basic questions such as "What is LCP?". Ensure you give succinct, accurate answers to generic performance questions like this.
|
68
|
+
|
69
|
+
*IMPORTANT*: All time units provided in the 'Detailed Analysis' are in milliseconds (ms). Ensure your response reflects this unit of measurement.
|
70
|
+
|
71
|
+
## Step-by-step instructions
|
72
|
+
|
73
|
+
- Utilize the provided functions (e.g., \`getMainThreadActivity\`, \`getNetworkActivitySummary\`) to retrieve detailed performance data. Prioritize function calls that provide context relevant to the Insight being analyzed.
|
74
|
+
- Make sure you use \`getNetworkRequestDetail\` to get vital information about any network requests that you are referencing in your suggestions. Use this information to verify your assumptions.
|
75
|
+
- Retrieve all necessary data through function calls before generating your response. Do not rely on assumptions or incomplete information.
|
76
|
+
- Provide clear, actionable recommendations. Avoid technical jargon unless necessary, and explain any technical terms used.
|
77
|
+
- If you see a generic task like "Task", "Evaluate script" or "(anonymous)" in the main thread activity, try to look at its children to see what actual functions executed and refer to those. When referencing main thread activity, be as specific as you can. Ensure you identify to the user relevant functions and which script they were defined in. Avoid referencing "Task", "Evaluate script" and "(anonymous)" nodes if possible and instead focus on their children.
|
78
|
+
- Prioritize recommendations based on their potential impact on performance. Focus on the most significant bottlenecks.
|
79
|
+
- Structure your response using markdown headings and bullet points for improved readability.
|
80
|
+
- Your answer should contain the following sections:
|
81
|
+
1. **Analysis:** Based on the user's question, explain the observed performance issues, their impact on user experience, and the key metrics used to identify them. Include relevant timestamps and durations from the provided data. Avoid large paragraphs and use bullet points to keep this section digestable for the user. Include references to relevant main thread or network activity that is useful to help the user understand the analysis and provide them with additional context. Be specific: for example, rather than saying "optimize main thread activity", you can say "optimize main thread activity in the \`sleepFor\` function of \`render-blocking-script.js\`."
|
82
|
+
2. **Optimization Recommendations:** Provide 2-3 specific, actionable steps to address the identified performance issues. Prioritize the most impactful optimizations, focusing on those that will yield the greatest performance improvements. Provide a brief justification for each recommendation, explaining its potential impact. Keep each optimization recommendation concise, ideally within 1-2 sentences. Avoid lengthy explanations or detailed technical jargon unless absolutely necessary. Do not repeat optimizations that you have already suggested in previous responses.
|
83
|
+
- Your response should immediately start with the "Analysis" section.
|
84
|
+
- Be direct and to the point. Avoid unnecessary introductory phrases or filler content. Focus on delivering actionable advice efficiently.
|
85
|
+
|
86
|
+
## Strict Constraints
|
87
|
+
|
88
|
+
- Adhere to the following critical requirements:
|
89
|
+
- Execute \`getMainThreadActivity\` only once *per Insight context*. If the Insight changes, you may call this function again.
|
90
|
+
- Execute \`getNetworkActivitySummary\` only once *per Insight context*. If the Insight changes, you may call this function again.
|
91
|
+
- Ensure comprehensive data retrieval through function calls to provide accurate and complete recommendations.
|
92
|
+
- Before suggesting changing the format of an image, consider what format it is already in. For example, if the mime type is image/webp, do not suggest to the user that the image is converted to WebP, as the image is already in that format.
|
93
|
+
- Do not mention function names (e.g., \`getMainThreadActivity\`, \`getNetworkActivitySummary\`) in your output. These are internal implementation details.
|
94
|
+
- Do not mention that you are an AI, or refer to yourself in the third person. You are simulating a performance expert.
|
95
|
+
- If asked about sensitive topics (religion, race, politics, sexuality, gender, etc.), respond with: "My expertise is limited to website performance analysis. I cannot provide information on that topic.".
|
96
|
+
- Refrain from providing answers on non-web-development topics, such as legal, financial, medical, or personal advice.
|
97
|
+
|
98
|
+
## Additional guidance for specific insights
|
99
|
+
- If you are being asked any questions that relate to LCP, it is CRITICAL that you use \`getNetworkActivitySummary\` to get a summary of network requests.
|
100
|
+
- If the LCP resource was fetched over the network, you MUST use the \`getNetworkRequestDetail\` function to find out more information before providing your analysis.
|
101
|
+
- If the LCP resource was fetched over the network, pay attention to the network request's priority. Important resources for LCP should have a high priority. If the LCP resource's priority is not "high", suggest optimizations to the user to change this.
|
102
|
+
- If you are asked about "LCP by Phase" and the "element render delay" phase makes up a large percentage of the time, that indicates that there was main thread activity that blocked the browser painting. In this case, inspect the main thread activity and include information on what functions caused the main thread to be busy. Thoroughly inspect the main thread activity so you can be accurate in your responses.
|
103
|
+
- Only suggest image size and format optimizations as a solution if you are confident that the download time of the image was a major contribution to the performance problems you have investigated, or if the user specifically asks about image optimization techniques.
|
104
|
+
`;
|
105
|
+
/* clang-format on */
|
106
|
+
|
28
107
|
/**
|
29
108
|
* Preamble clocks in at ~970 tokens.
|
30
109
|
* The prose is around 4.5 chars per token.
|
@@ -32,30 +111,24 @@ import {
|
|
32
111
|
*
|
33
112
|
* Check token length in https://aistudio.google.com/
|
34
113
|
*/
|
35
|
-
const
|
114
|
+
export const callTreePreamble = `You are an expert performance analyst embedded within Chrome DevTools.
|
36
115
|
You meticulously examine web application behavior captured by the Chrome DevTools Performance Panel and Chrome tracing.
|
37
116
|
You will receive a structured text representation of a call tree, derived from a user-selected call frame within a performance trace's flame chart.
|
38
117
|
This tree originates from the root task associated with the selected call frame.
|
39
118
|
|
40
119
|
Each call frame is presented in the following format:
|
41
120
|
|
42
|
-
|
43
|
-
Selected: true (if this is the call frame selected by the user)
|
44
|
-
Duration: $duration (milliseconds, including children)
|
45
|
-
Self Time: $self (milliseconds, excluding children, defaults to 0)
|
46
|
-
URL: $url_number (reference to the "All URLs" list)
|
47
|
-
Children:
|
48
|
-
* $child.id - $child.name
|
121
|
+
'id;name;duration;selfTime;urlIndex;childRange;[S]'
|
49
122
|
|
50
123
|
Key definitions:
|
51
124
|
|
52
|
-
* name: A concise string describing the call frame (e.g., 'Evaluate Script', 'render', 'fetchData').
|
53
125
|
* id: A unique numerical identifier for the call frame.
|
54
|
-
*
|
55
|
-
*
|
56
|
-
*
|
57
|
-
*
|
58
|
-
*
|
126
|
+
* name: A concise string describing the call frame (e.g., 'Evaluate Script', 'render', 'fetchData').
|
127
|
+
* duration: The total execution time of the call frame, including its children.
|
128
|
+
* selfTime: The time spent directly within the call frame, excluding its children's execution.
|
129
|
+
* urlIndex: Index referencing the "All URLs" list. Empty if no specific script URL is associated.
|
130
|
+
* 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.
|
131
|
+
* S: **Optional marker.** The letter 'S' appears at the end of the line **only** for the single call frame selected by the user.
|
59
132
|
|
60
133
|
Your objective is to provide a comprehensive analysis of the **selected call frame and the entire call tree** and its context within the performance recording, including:
|
61
134
|
|
@@ -83,38 +156,11 @@ All URLs:
|
|
83
156
|
|
84
157
|
Call Tree:
|
85
158
|
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
* 2 - update
|
92
|
-
|
93
|
-
Node: 2 - update
|
94
|
-
Selected: false
|
95
|
-
Duration: 200
|
96
|
-
Self Time: 50
|
97
|
-
Children:
|
98
|
-
* 3 - animate
|
99
|
-
|
100
|
-
Node: 3 - animate
|
101
|
-
Selected: true
|
102
|
-
Duration: 150
|
103
|
-
Self Time: 20
|
104
|
-
URL: 0
|
105
|
-
Children:
|
106
|
-
* 4 - calculatePosition
|
107
|
-
* 5 - applyStyles
|
108
|
-
|
109
|
-
Node: 4 - calculatePosition
|
110
|
-
Selected: false
|
111
|
-
Duration: 80
|
112
|
-
Self Time: 80
|
113
|
-
|
114
|
-
Node: 5 - applyStyles
|
115
|
-
Selected: false
|
116
|
-
Duration: 50
|
117
|
-
Self Time: 50
|
159
|
+
1;main;500;100;;
|
160
|
+
2;update;200;50;;3
|
161
|
+
3;animate;150;20;0;4-5;S
|
162
|
+
4;calculatePosition;80;80;;
|
163
|
+
5;applyStyles;50;50;;
|
118
164
|
|
119
165
|
Analyze the selected call frame.
|
120
166
|
|
@@ -127,80 +173,323 @@ The 'calculatePosition' function, taking 80ms, is a potential bottleneck.
|
|
127
173
|
Consider optimizing the position calculation logic or reducing the frequency of calls to improve animation performance.
|
128
174
|
`;
|
129
175
|
|
130
|
-
|
131
|
-
* Strings that don't need to be translated at this time.
|
132
|
-
*/
|
133
|
-
const UIStringsNotTranslate = {
|
134
|
-
analyzingCallTree: 'Analyzing call tree',
|
135
|
-
} as const;
|
176
|
+
const fullTracePreamble = `You are an assistant, expert in web performance and highly skilled with Chrome DevTools.
|
136
177
|
|
137
|
-
|
178
|
+
Your primary goal is to provide actionable advice to web developers about their web page by using the Chrome Performance Panel and analyzing a trace. You may need to diagnose problems yourself, or you may be given direction for what to focus on by the user.
|
179
|
+
|
180
|
+
You will be provided a summary of a trace: some performance metrics; the most critical network requests; a bottom-up call graph summary; and a brief overview of available insights. Each insight has information about potential performance issues with the page.
|
181
|
+
|
182
|
+
Don't mention anything about an insight without first getting more data about it by calling \`getInsightDetails\`.
|
183
|
+
|
184
|
+
You have many functions available to learn more about the trace. Use these to confirm hypotheses, or to further explore the trace when diagnosing performance issues.
|
185
|
+
|
186
|
+
You will be given bounds representing a time range within the trace. Bounds include a min and a max time in microseconds. max is always bigger than min in a bounds.
|
187
|
+
|
188
|
+
The 3 main performance metrics are:
|
189
|
+
- LCP: "Largest Contentful Paint"
|
190
|
+
- INP: "Interaction to Next Paint"
|
191
|
+
- CLS: "Cumulative Layout Shift"
|
192
|
+
|
193
|
+
Trace events referenced in the information given to you will be marked with an \`eventKey\`. For example: \`LCP element: <img src="..."> (eventKey: r-123, ts: 123456)\`
|
194
|
+
You can use this key with \`getEventByKey\` to get more information about that trace event. For example: \`getEventByKey('r-123')\`
|
195
|
+
|
196
|
+
## Step-by-step instructions for debugging performance issues
|
197
|
+
|
198
|
+
Note: if the user asks a specific question about the trace (such as "What is my LCP?", or "How many requests were render-blocking?", directly answer their question and skip starting a performance investigation. Otherwise, your task is to collaborate with the user to discover and resolve real performance issues.
|
199
|
+
|
200
|
+
### Step 1: Determine a performance problem to investigate
|
201
|
+
|
202
|
+
- With help from the user, determine what performance problem to focus on.
|
203
|
+
- If the user is not specific about what problem to investigate, help them by doing a high-level investigation yourself. Present to the user a few options with 1-sentence summaries. Mention what performance metrics each option impacts. Call as many functions and confirm the data thoroughly: never present an option without being certain it is a real performance issue. Don't suggest solutions yet.
|
204
|
+
- Rank the options from most impactful to least impactful, and present them to the user in that order.
|
205
|
+
- Don't present more than 5 options.
|
206
|
+
- Once a performance problem has been identified for investigation, move on to step 2.
|
207
|
+
|
208
|
+
### Step 2: Suggest solutions
|
209
|
+
|
210
|
+
- Suggest possible solutions to remedy the identified performance problem. Be as specific as possible, using data from the trace via the provided functions to back up everything you say. You should prefer specific solutions, but absent any specific solution you may suggest general solutions (such as from an insight's documentation links).
|
211
|
+
- A good first step to discover solutions is to consider the insights, but you should also validate all potential advice by analyzing the trace until you are confident about the root cause of a performance issue.
|
212
|
+
|
213
|
+
## Guidelines
|
214
|
+
|
215
|
+
- Use the provided functions to get detailed performance data. Prioritize functions that provide context relevant to the performance issue being investigated.
|
216
|
+
- Before finalizing your advice, look over it and validate using any relevant functions. If something seems off, refine the advice before giving it to the user.
|
217
|
+
- Do not rely on assumptions or incomplete information. Use the provided functions to get more data when needed.
|
218
|
+
- Use the track summary functions to get high-level detail about portions of the trace. For the \`bounds\` parameter, default to using the bounds of the trace. Never specifically ask the user for a bounds. You can use more narrow bounds (such as the bounds relevant to a specific insight) when appropriate. Narrow the bounds given functions when possible.
|
219
|
+
- Use \`getEventByKey\` to get data on a specific trace event. This is great for root-cause analysis or validating any assumptions.
|
220
|
+
- Provide clear, actionable recommendations. Avoid technical jargon unless necessary, and explain any technical terms used.
|
221
|
+
- If you see a generic task like "Task", "Evaluate script" or "(anonymous)" in the main thread activity, try to look at its children to see what actual functions are executed and refer to those. When referencing the main thread activity, be as specific as you can. Ensure you identify to the user relevant functions and which script they were defined in. Avoid referencing "Task", "Evaluate script" and "(anonymous)" nodes if possible and instead focus on their children.
|
222
|
+
- Structure your response using markdown headings and bullet points for improved readability.
|
223
|
+
- Be direct and to the point. Avoid unnecessary introductory phrases or filler content. Focus on delivering actionable advice efficiently.
|
224
|
+
|
225
|
+
## Strict Constraints
|
226
|
+
|
227
|
+
Adhere to the following critical requirements:
|
228
|
+
|
229
|
+
- Never show bounds to the user.
|
230
|
+
- Never show eventKey to the user.
|
231
|
+
- Ensure your responses only use ms for time units.
|
232
|
+
- Ensure numbers for time units are rounded to the nearest whole number.
|
233
|
+
- Ensure comprehensive data retrieval through function calls to provide accurate and complete recommendations.
|
234
|
+
- If the user asks a specific question about web performance that doesn't have anything to do with the trace, don't call any functions and be succinct in your answer.
|
235
|
+
- Before suggesting changing the format of an image, consider what format it is already in. For example, if the mime type is image/webp, do not suggest to the user that the image is converted to WebP, as the image is already in that format.
|
236
|
+
- Do not mention the functions you call to gather information about the trace (e.g., \`getEventByKey\`, \`getMainThreadTrackSummary\`) in your output. These are internal implementation details that should be hidden from the user.
|
237
|
+
- Do not mention that you are an AI, or refer to yourself in the third person. You are simulating a performance expert.
|
238
|
+
- If asked about sensitive topics (religion, race, politics, sexuality, gender, etc.), respond with: "My expertise is limited to website performance analysis. I cannot provide information on that topic.".
|
239
|
+
- Do not provide answers on non-web-development topics, such as legal, financial, medical, or personal advice.
|
240
|
+
`;
|
241
|
+
|
242
|
+
const callFrameDataFormatDescription = `Each call frame is presented in the following format:
|
243
|
+
|
244
|
+
'id;name;duration;selfTime;urlIndex;childRange;[S]'
|
245
|
+
|
246
|
+
Key definitions:
|
247
|
+
|
248
|
+
* id: A unique numerical identifier for the call frame.
|
249
|
+
* name: A concise string describing the call frame (e.g., 'Evaluate Script', 'render', 'fetchData').
|
250
|
+
* duration: The total execution time of the call frame, including its children.
|
251
|
+
* selfTime: The time spent directly within the call frame, excluding its children's execution.
|
252
|
+
* urlIndex: Index referencing the "All URLs" list. Empty if no specific script URL is associated.
|
253
|
+
* 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.
|
254
|
+
* S: _Optional_. The letter 'S' terminates the line if that call frame was selected by the user.
|
255
|
+
|
256
|
+
Example Call Tree:
|
257
|
+
|
258
|
+
1;main;500;100;;
|
259
|
+
2;update;200;50;;3
|
260
|
+
3;animate;150;20;0;4-5;S
|
261
|
+
4;calculatePosition;80;80;;
|
262
|
+
5;applyStyles;50;50;;
|
263
|
+
`;
|
264
|
+
|
265
|
+
const mainThreadActivityFormatDescription =
|
266
|
+
`The tree is represented as a call frame with a root task and a series of children.
|
267
|
+
The format of each callframe is:
|
268
|
+
|
269
|
+
'id;name;duration;selfTime;urlIndex;childRange;[S]'
|
270
|
+
|
271
|
+
The fields are:
|
272
|
+
|
273
|
+
* id: A unique numerical identifier for the call frame.
|
274
|
+
* name: A concise string describing the call frame (e.g., 'Evaluate Script', 'render', 'fetchData').
|
275
|
+
* duration: The total execution time of the call frame, including its children.
|
276
|
+
* selfTime: The time spent directly within the call frame, excluding its children's execution.
|
277
|
+
* urlIndex: Index referencing the "All URLs" list. Empty if no specific script URL is associated.
|
278
|
+
* 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.
|
279
|
+
* S: **Optional marker.** The letter 'S' appears at the end of the line **only** for the single call frame selected by the user.`;
|
280
|
+
|
281
|
+
enum ScorePriority {
|
282
|
+
REQUIRED = 3,
|
283
|
+
CRITICAL = 2,
|
284
|
+
DEFAULT = 1,
|
285
|
+
}
|
286
|
+
|
287
|
+
export class PerformanceTraceContext extends ConversationContext<TimelineUtils.AIContext.AgentFocus> {
|
288
|
+
static full(
|
289
|
+
parsedTrace: Trace.Handlers.Types.ParsedTrace, insightSet: Trace.Insights.Types.InsightSet|null,
|
290
|
+
traceMetadata: Trace.Types.File.MetaData): PerformanceTraceContext {
|
291
|
+
return new PerformanceTraceContext(TimelineUtils.AIContext.AgentFocus.full(parsedTrace, insightSet, traceMetadata));
|
292
|
+
}
|
293
|
+
|
294
|
+
static fromInsight(
|
295
|
+
parsedTrace: Trace.Handlers.Types.ParsedTrace, insight: Trace.Insights.Types.InsightModel,
|
296
|
+
insightSetBounds: Trace.Types.Timing.TraceWindowMicro): PerformanceTraceContext {
|
297
|
+
return new PerformanceTraceContext(
|
298
|
+
TimelineUtils.AIContext.AgentFocus.fromInsight(parsedTrace, insight, insightSetBounds));
|
299
|
+
}
|
300
|
+
|
301
|
+
static fromCallTree(callTree: TimelineUtils.AICallTree.AICallTree): PerformanceTraceContext {
|
302
|
+
return new PerformanceTraceContext(TimelineUtils.AIContext.AgentFocus.fromCallTree(callTree));
|
303
|
+
}
|
138
304
|
|
139
|
-
|
140
|
-
#callTree: TimelineUtils.AICallTree.AICallTree;
|
305
|
+
#focus: TimelineUtils.AIContext.AgentFocus;
|
141
306
|
|
142
|
-
constructor(
|
307
|
+
constructor(focus: TimelineUtils.AIContext.AgentFocus) {
|
143
308
|
super();
|
144
|
-
this.#
|
309
|
+
this.#focus = focus;
|
145
310
|
}
|
146
311
|
|
147
312
|
override getOrigin(): string {
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
313
|
+
const focus = this.#focus.data;
|
314
|
+
|
315
|
+
if (focus.type === 'full') {
|
316
|
+
const {min, max} = focus.parsedTrace.Meta.traceBounds;
|
317
|
+
return `trace-${min}-${max}`;
|
318
|
+
}
|
319
|
+
|
320
|
+
if (focus.type === 'call-tree') {
|
321
|
+
// Although in this context we expect the call tree to have a selected node
|
322
|
+
// as the entrypoint into the "Ask AI" tool is via selecting a node, it is
|
323
|
+
// possible to build trees without a selected node, in which case we
|
324
|
+
// fallback to the root node.
|
325
|
+
const node = focus.callTree.selectedNode ?? focus.callTree.rootNode;
|
326
|
+
const selectedEvent = node.event;
|
327
|
+
// Get the non-resolved (ignore sourcemaps) URL for the event. We use the
|
328
|
+
// non-resolved URL as in the context of the AI Assistance panel, we care
|
329
|
+
// about the origin it was served on.
|
330
|
+
const nonResolvedURL = Trace.Handlers.Helpers.getNonResolvedURL(selectedEvent, focus.callTree.parsedTrace);
|
331
|
+
if (nonResolvedURL) {
|
332
|
+
const origin = Common.ParsedURL.ParsedURL.extractOrigin(nonResolvedURL);
|
333
|
+
if (origin) { // origin could be the empty string.
|
334
|
+
return origin;
|
335
|
+
}
|
162
336
|
}
|
337
|
+
// Generate a random "origin". We do this rather than return an empty
|
338
|
+
// string or some "unknown" string so that each event without a definite
|
339
|
+
// URL is considered a new, standalone origin. This is safer from a privacy
|
340
|
+
// & security perspective, else we risk bucketing events together that
|
341
|
+
// should not be. We also don't want to make it entirely random so we
|
342
|
+
// cannot calculate it deterministically.
|
343
|
+
const uuid = `${selectedEvent.name}_${selectedEvent.pid}_${selectedEvent.tid}_${selectedEvent.ts}`;
|
344
|
+
return uuid;
|
345
|
+
}
|
346
|
+
|
347
|
+
if (focus.type === 'insight') {
|
348
|
+
const {min, max} = focus.parsedTrace.Meta.traceBounds;
|
349
|
+
return `insight-${min}-${max}`;
|
163
350
|
}
|
164
|
-
|
165
|
-
|
166
|
-
// URL is considered a new, standalone origin. This is safer from a privacy
|
167
|
-
// & security perspective, else we risk bucketing events together that
|
168
|
-
// should not be. We also don't want to make it entirely random so we
|
169
|
-
// cannot calculate it deterministically.
|
170
|
-
const uuid = `${selectedEvent.name}_${selectedEvent.pid}_${selectedEvent.tid}_${selectedEvent.ts}`;
|
171
|
-
return uuid;
|
351
|
+
|
352
|
+
Platform.assertNever(focus, 'Unknown agent focus');
|
172
353
|
}
|
173
354
|
|
174
|
-
override getItem(): TimelineUtils.
|
175
|
-
return this.#
|
355
|
+
override getItem(): TimelineUtils.AIContext.AgentFocus {
|
356
|
+
return this.#focus;
|
176
357
|
}
|
177
358
|
|
178
359
|
override getIcon(): TemplateResult {
|
179
|
-
return html`<devtools-icon name="performance" title="Performance"
|
180
|
-
style="color: var(--sys-color-on-surface-subtle);"></devtools-icon>`;
|
360
|
+
return html`<devtools-icon name="performance" title="Performance"></devtools-icon>`;
|
181
361
|
}
|
182
362
|
|
183
363
|
override getTitle(): string {
|
184
|
-
const
|
185
|
-
|
186
|
-
|
364
|
+
const focus = this.#focus.data;
|
365
|
+
|
366
|
+
if (focus.type === 'full') {
|
367
|
+
return `Trace: ${new URL(focus.parsedTrace.Meta.mainFrameURL).hostname}`;
|
368
|
+
}
|
369
|
+
|
370
|
+
if (focus.type === 'call-tree') {
|
371
|
+
const event = focus.callTree.selectedNode?.event ?? focus.callTree.rootNode.event;
|
372
|
+
if (!event) {
|
373
|
+
return 'unknown';
|
374
|
+
}
|
375
|
+
return TimelineUtils.EntryName.nameForEntry(event);
|
376
|
+
}
|
377
|
+
|
378
|
+
if (focus.type === 'insight') {
|
379
|
+
return `Insight: ${focus.insight.title}`;
|
380
|
+
}
|
381
|
+
|
382
|
+
Platform.assertNever(focus, 'Unknown agent focus');
|
383
|
+
}
|
384
|
+
|
385
|
+
/**
|
386
|
+
* Presents the default suggestions that are shown when the user first clicks
|
387
|
+
* "Ask AI".
|
388
|
+
*/
|
389
|
+
override async getSuggestions(): Promise<[ConversationSuggestion, ...ConversationSuggestion[]]|undefined> {
|
390
|
+
const focus = this.#focus.data;
|
391
|
+
|
392
|
+
if (focus.type !== 'insight') {
|
393
|
+
return;
|
187
394
|
}
|
188
395
|
|
189
|
-
return
|
396
|
+
return new PerformanceInsightFormatter(focus.parsedTrace, focus.insight).getSuggestions();
|
190
397
|
}
|
191
398
|
}
|
192
399
|
|
400
|
+
// 16k Tokens * ~4 char per token.
|
401
|
+
const MAX_FUNCTION_RESULT_BYTE_LENGTH = 16384 * 4;
|
402
|
+
|
403
|
+
/**
|
404
|
+
* Union of all the performance conversation types, which are all implemented by this file.
|
405
|
+
* This temporary until all Performance Panel AI features use the "Full" type. go/chrome-devtools:more-powerful-performance-agent-design
|
406
|
+
*/
|
407
|
+
type PerformanceConversationType =
|
408
|
+
ConversationType.PERFORMANCE_FULL|ConversationType.PERFORMANCE_CALL_TREE|ConversationType.PERFORMANCE_INSIGHT;
|
409
|
+
|
193
410
|
/**
|
194
411
|
* One agent instance handles one conversation. Create a new agent
|
195
412
|
* instance for a new conversation.
|
196
413
|
*/
|
197
|
-
export class PerformanceAgent extends AiAgent<TimelineUtils.
|
198
|
-
|
414
|
+
export class PerformanceAgent extends AiAgent<TimelineUtils.AIContext.AgentFocus> {
|
415
|
+
// TODO: would make more sense on AgentOptions
|
416
|
+
#conversationType: PerformanceConversationType;
|
417
|
+
#formatter: PerformanceTraceFormatter|null = null;
|
418
|
+
#lastInsightForEnhancedQuery: Trace.Insights.Types.InsightModel|undefined;
|
419
|
+
#eventsSerializer = new TimelineUtils.EventsSerializer.EventsSerializer();
|
420
|
+
#lastFocusHandledForContextDetails: TimelineUtils.AIContext.AgentFocus|null = null;
|
421
|
+
|
422
|
+
constructor(opts: AgentOptions, conversationType: PerformanceConversationType) {
|
423
|
+
super(opts);
|
424
|
+
this.#conversationType = conversationType;
|
425
|
+
}
|
426
|
+
|
427
|
+
/**
|
428
|
+
* Store results (as facts) for the functions that are pure and return the
|
429
|
+
* same data for the same insight.
|
430
|
+
* This fact is then passed into the request on all future
|
431
|
+
* queries for the conversation. This means that the LLM is far less likely to
|
432
|
+
* call the function again, because we have provided the same data as a
|
433
|
+
* fact. We cache based on the active insight to ensure that if the user
|
434
|
+
* changes which insight they are focusing we will call the function again.
|
435
|
+
* It's important that we store it as a Fact in the cache, because the AI
|
436
|
+
* Agent stores facts in a set, and we need to pass the same object through to
|
437
|
+
* make sure it isn't mistakenly duplicated in the request.
|
438
|
+
*/
|
439
|
+
#functionCallCacheForInsight = new Map<Trace.Insights.Types.InsightModel, {
|
440
|
+
getNetworkActivitySummary?: Host.AidaClient.RequestFact,
|
441
|
+
getMainThreadActivity?: Host.AidaClient.RequestFact,
|
442
|
+
}>();
|
199
443
|
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
444
|
+
/**
|
445
|
+
* Similar to above, but only used for the "Full" trace focus.
|
446
|
+
*
|
447
|
+
* The record key is the result of a function's displayInfoFromArgs.
|
448
|
+
*/
|
449
|
+
#functionCallCacheForFocus =
|
450
|
+
new Map<TimelineUtils.AIContext.AgentFocus, Record<string, Host.AidaClient.RequestFact>>();
|
451
|
+
|
452
|
+
/*
|
453
|
+
* Since don't know for sure if the model will request the main thread or network requests information,
|
454
|
+
* add the formats description to facts once the main thread activity or network requests need to be sent.
|
455
|
+
*/
|
456
|
+
#mainThreadActivityDescriptionFact:
|
457
|
+
Host.AidaClient.RequestFact = {text: mainThreadActivityFormatDescription, metadata: {source: 'devtools'}};
|
458
|
+
#networkDataDescriptionFact: Host.AidaClient.RequestFact = {
|
459
|
+
text: TraceEventFormatter.networkDataFormatDescription,
|
460
|
+
metadata: {source: 'devtools', score: ScorePriority.CRITICAL}
|
461
|
+
};
|
462
|
+
#callFrameDataDescriptionFact: Host.AidaClient.RequestFact = {
|
463
|
+
text: callFrameDataFormatDescription,
|
464
|
+
metadata: {source: 'devtools', score: ScorePriority.CRITICAL}
|
465
|
+
};
|
466
|
+
#traceFacts: Host.AidaClient.RequestFact[] = [];
|
467
|
+
|
468
|
+
get preamble(): string {
|
469
|
+
if (this.#conversationType === ConversationType.PERFORMANCE_FULL) {
|
470
|
+
return fullTracePreamble;
|
471
|
+
}
|
472
|
+
if (this.#conversationType === ConversationType.PERFORMANCE_CALL_TREE) {
|
473
|
+
return callTreePreamble;
|
474
|
+
}
|
475
|
+
if (this.#conversationType === ConversationType.PERFORMANCE_INSIGHT) {
|
476
|
+
return insightPreamble;
|
477
|
+
}
|
478
|
+
Platform.assertNever(this.#conversationType, 'Unexpected conversation type');
|
479
|
+
}
|
480
|
+
|
481
|
+
get clientFeature(): Host.AidaClient.ClientFeature {
|
482
|
+
if (this.#conversationType === ConversationType.PERFORMANCE_FULL) {
|
483
|
+
return Host.AidaClient.ClientFeature.CHROME_PERFORMANCE_FULL_AGENT;
|
484
|
+
}
|
485
|
+
if (this.#conversationType === ConversationType.PERFORMANCE_CALL_TREE) {
|
486
|
+
return Host.AidaClient.ClientFeature.CHROME_PERFORMANCE_AGENT;
|
487
|
+
}
|
488
|
+
if (this.#conversationType === ConversationType.PERFORMANCE_INSIGHT) {
|
489
|
+
return Host.AidaClient.ClientFeature.CHROME_PERFORMANCE_INSIGHTS_AGENT;
|
490
|
+
}
|
491
|
+
Platform.assertNever(this.#conversationType, 'Unexpected conversation type');
|
492
|
+
}
|
204
493
|
get userTier(): string|undefined {
|
205
494
|
return Root.Runtime.hostConfig.devToolsAiAssistancePerformanceAgent?.userTier;
|
206
495
|
}
|
@@ -214,40 +503,745 @@ export class PerformanceAgent extends AiAgent<TimelineUtils.AICallTree.AICallTre
|
|
214
503
|
};
|
215
504
|
}
|
216
505
|
|
506
|
+
getConversationType(): ConversationType {
|
507
|
+
return this.#conversationType;
|
508
|
+
}
|
509
|
+
|
510
|
+
#lookupEvent(key: Trace.Types.File.SerializableKey): Trace.Types.Events.Event|null {
|
511
|
+
const parsedTrace = this.context?.getItem().data.parsedTrace;
|
512
|
+
if (!parsedTrace) {
|
513
|
+
return null;
|
514
|
+
}
|
515
|
+
|
516
|
+
try {
|
517
|
+
return this.#eventsSerializer.eventForKey(key, parsedTrace);
|
518
|
+
} catch (err) {
|
519
|
+
if (err.toString().includes('Unknown trace event')) {
|
520
|
+
return null;
|
521
|
+
}
|
522
|
+
|
523
|
+
throw err;
|
524
|
+
}
|
525
|
+
}
|
526
|
+
|
527
|
+
#serializeFocus(focus: TimelineUtils.AIContext.AgentFocus): string {
|
528
|
+
if (focus.data.type === 'full') {
|
529
|
+
if (!this.#formatter) {
|
530
|
+
return '';
|
531
|
+
}
|
532
|
+
|
533
|
+
return this.#formatter.formatTraceSummary();
|
534
|
+
}
|
535
|
+
|
536
|
+
if (focus.data.type === 'call-tree') {
|
537
|
+
return focus.data.callTree.serialize();
|
538
|
+
}
|
539
|
+
|
540
|
+
if (focus.data.type === 'insight') {
|
541
|
+
const formatter = new PerformanceInsightFormatter(focus.data.parsedTrace, focus.data.insight);
|
542
|
+
return formatter.formatInsight();
|
543
|
+
}
|
544
|
+
|
545
|
+
Platform.assertNever(focus.data, 'Unknown agent focus');
|
546
|
+
}
|
547
|
+
|
217
548
|
async *
|
218
|
-
handleContextDetails(
|
549
|
+
handleContextDetails(context: ConversationContext<TimelineUtils.AIContext.AgentFocus>|null):
|
219
550
|
AsyncGenerator<ContextResponse, void, void> {
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
551
|
+
if (!context) {
|
552
|
+
return;
|
553
|
+
}
|
554
|
+
|
555
|
+
const focus = context.getItem();
|
556
|
+
if (this.#lastFocusHandledForContextDetails === focus) {
|
557
|
+
return;
|
558
|
+
}
|
559
|
+
|
560
|
+
this.#lastFocusHandledForContextDetails = focus;
|
561
|
+
|
562
|
+
if (focus.data.type === 'full') {
|
563
|
+
yield {
|
564
|
+
type: ResponseType.CONTEXT,
|
565
|
+
title: lockedString(UIStringsNotTranslated.analyzingTrace),
|
566
|
+
details: [
|
567
|
+
{
|
568
|
+
title: 'Trace',
|
569
|
+
text: this.#serializeFocus(focus),
|
570
|
+
},
|
571
|
+
],
|
572
|
+
};
|
573
|
+
} else if (focus.data.type === 'call-tree') {
|
574
|
+
yield {
|
575
|
+
type: ResponseType.CONTEXT,
|
576
|
+
title: lockedString(UIStringsNotTranslated.analyzingCallTree),
|
577
|
+
details: [
|
578
|
+
{
|
579
|
+
title: 'Selected call tree',
|
580
|
+
text: this.#serializeFocus(focus),
|
581
|
+
},
|
582
|
+
],
|
583
|
+
};
|
584
|
+
} else if (focus.data.type === 'insight') {
|
585
|
+
const activeInsight = focus.data.insight;
|
586
|
+
const title = `Analyzing insight: ${activeInsight.title}`;
|
587
|
+
yield {
|
588
|
+
type: ResponseType.CONTEXT,
|
589
|
+
title,
|
590
|
+
details: [
|
591
|
+
{
|
592
|
+
// Purposefully use the raw title in the details view, we don't need to repeat "Analyzing insight"
|
593
|
+
title: activeInsight.title,
|
594
|
+
text: this.#serializeFocus(focus),
|
595
|
+
},
|
596
|
+
],
|
597
|
+
};
|
598
|
+
} else {
|
599
|
+
Platform.assertNever(focus.data, 'Unknown agent focus');
|
600
|
+
}
|
230
601
|
}
|
231
602
|
|
232
|
-
#
|
603
|
+
#callTreeContextSet = new WeakSet();
|
233
604
|
|
234
|
-
|
605
|
+
#isFunctionResponseTooLarge(response: string): boolean {
|
606
|
+
return response.length > MAX_FUNCTION_RESULT_BYTE_LENGTH;
|
607
|
+
}
|
608
|
+
|
609
|
+
override parseTextResponse(response: string): ParsedResponse {
|
610
|
+
/**
|
611
|
+
* Sometimes the LLM responds with code chunks that wrap a text based markdown response.
|
612
|
+
* If this happens, we want to remove those before continuing.
|
613
|
+
* See b/405054694 for more details.
|
614
|
+
*/
|
615
|
+
const trimmed = response.trim();
|
616
|
+
const FIVE_BACKTICKS = '`````';
|
617
|
+
if (trimmed.startsWith(FIVE_BACKTICKS) && trimmed.endsWith(FIVE_BACKTICKS)) {
|
618
|
+
// Purposefully use the trimmed text here; we might as well remove any
|
619
|
+
// newlines that are at the very start or end.
|
620
|
+
const stripped = trimmed.slice(FIVE_BACKTICKS.length, -FIVE_BACKTICKS.length);
|
621
|
+
return super.parseTextResponse(stripped);
|
622
|
+
}
|
623
|
+
return super.parseTextResponse(response);
|
624
|
+
}
|
625
|
+
|
626
|
+
override async enhanceQuery(query: string, context: ConversationContext<TimelineUtils.AIContext.AgentFocus>|null):
|
235
627
|
Promise<string> {
|
236
|
-
|
237
|
-
|
628
|
+
if (!context) {
|
629
|
+
this.clearDeclaredFunctions();
|
630
|
+
return query;
|
631
|
+
}
|
632
|
+
|
633
|
+
this.clearDeclaredFunctions();
|
634
|
+
this.#declareFunctions(context);
|
635
|
+
|
636
|
+
const focus = context.getItem();
|
637
|
+
let contextString = '';
|
638
|
+
|
639
|
+
if (focus.data.type === 'full') {
|
640
|
+
return query;
|
641
|
+
}
|
642
|
+
|
643
|
+
if (focus.data.type === 'call-tree') {
|
644
|
+
// If this is a followup chat about the same call tree, don't include the call tree serialization again.
|
645
|
+
// We don't need to repeat it and we'd rather have more the context window space.
|
646
|
+
if (!this.#callTreeContextSet.has(focus.data.callTree)) {
|
647
|
+
contextString = this.#serializeFocus(focus);
|
648
|
+
}
|
649
|
+
if (!this.#callTreeContextSet.has(focus.data.callTree)) {
|
650
|
+
this.#callTreeContextSet.add(focus.data.callTree);
|
651
|
+
}
|
652
|
+
const perfEnhancementQuery = contextString ? `${contextString}\n\n# User request\n\n` : '';
|
653
|
+
return `${perfEnhancementQuery}${query}`;
|
654
|
+
}
|
655
|
+
|
656
|
+
if (focus.data.type === 'insight') {
|
657
|
+
// We only need to add Insight info to a prompt when the context changes. For example:
|
658
|
+
// User clicks Insight A. We need to send info on Insight A with the prompt.
|
659
|
+
// User asks follow up question. We do not need to resend Insight A with the prompt.
|
660
|
+
// User clicks Insight B. We now need to send info on Insight B with the prompt.
|
661
|
+
// User clicks Insight A. We should resend the Insight info with the prompt.
|
662
|
+
const includeInsightInfo = focus.data.insight !== this.#lastInsightForEnhancedQuery;
|
663
|
+
const extraQuery =
|
664
|
+
`${includeInsightInfo ? this.#serializeFocus(focus) + '\n\n' : ''}# User question for you to answer:\n`;
|
665
|
+
this.#lastInsightForEnhancedQuery = focus.data.insight;
|
666
|
+
return `${extraQuery}${query}`;
|
667
|
+
}
|
668
|
+
|
669
|
+
Platform.assertNever(focus.data, 'Unknown agent focus');
|
670
|
+
}
|
671
|
+
|
672
|
+
override async * run(initialQuery: string, options: {
|
673
|
+
selected: ConversationContext<TimelineUtils.AIContext.AgentFocus>|null,
|
674
|
+
signal?: AbortSignal,
|
675
|
+
}): AsyncGenerator<ResponseData, void, void> {
|
676
|
+
const focus = options.selected?.getItem();
|
677
|
+
|
678
|
+
// Clear any previous facts in case the user changed the active context.
|
679
|
+
this.clearFacts();
|
680
|
+
|
681
|
+
if (this.#conversationType === ConversationType.PERFORMANCE_FULL) {
|
682
|
+
if (focus) {
|
683
|
+
this.#addFactsForFullTrace(focus);
|
684
|
+
}
|
685
|
+
} else if (this.#conversationType === ConversationType.PERFORMANCE_INSIGHT) {
|
686
|
+
const insight = focus?.data.type === 'insight' ? focus.data.insight : null;
|
687
|
+
const cachedFunctionCalls = insight ? this.#functionCallCacheForInsight.get(insight) : null;
|
688
|
+
if (cachedFunctionCalls) {
|
689
|
+
for (const fact of Object.values(cachedFunctionCalls)) {
|
690
|
+
this.addFact(fact);
|
691
|
+
}
|
692
|
+
}
|
693
|
+
}
|
694
|
+
|
695
|
+
return yield* super.run(initialQuery, options);
|
696
|
+
}
|
697
|
+
|
698
|
+
#createFactForTraceSummary(focus: TimelineUtils.AIContext.AgentFocus): void {
|
699
|
+
if (!this.#formatter) {
|
700
|
+
return;
|
701
|
+
}
|
702
|
+
|
703
|
+
const text = this.#serializeFocus(focus);
|
704
|
+
if (!text) {
|
705
|
+
return;
|
706
|
+
}
|
238
707
|
|
239
|
-
|
708
|
+
this.#traceFacts.push(
|
709
|
+
{text: `Trace summary:\n${text}`, metadata: {source: 'devtools', score: ScorePriority.REQUIRED}});
|
710
|
+
}
|
240
711
|
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
treeStr = undefined;
|
712
|
+
#createFactForCriticalRequests(): void {
|
713
|
+
if (!this.#formatter) {
|
714
|
+
return;
|
245
715
|
}
|
246
|
-
|
247
|
-
|
716
|
+
|
717
|
+
const text = this.#formatter.formatCriticalRequests();
|
718
|
+
if (!text) {
|
719
|
+
return;
|
248
720
|
}
|
249
721
|
|
250
|
-
|
251
|
-
|
722
|
+
this.#traceFacts.push({
|
723
|
+
text,
|
724
|
+
metadata: {source: 'devtools', score: ScorePriority.CRITICAL},
|
725
|
+
});
|
726
|
+
}
|
727
|
+
|
728
|
+
#createFactForMainThreadBottomUpSummary(): void {
|
729
|
+
if (!this.#formatter) {
|
730
|
+
return;
|
731
|
+
}
|
732
|
+
|
733
|
+
const text = this.#formatter.formatMainThreadBottomUpSummary();
|
734
|
+
if (!text) {
|
735
|
+
return;
|
736
|
+
}
|
737
|
+
|
738
|
+
this.#traceFacts.push({
|
739
|
+
text,
|
740
|
+
metadata: {source: 'devtools', score: ScorePriority.CRITICAL},
|
741
|
+
});
|
742
|
+
}
|
743
|
+
|
744
|
+
#createFactForThirdPartySummary(): void {
|
745
|
+
if (!this.#formatter) {
|
746
|
+
return;
|
747
|
+
}
|
748
|
+
|
749
|
+
const text = this.#formatter.formatThirdPartySummary();
|
750
|
+
if (!text) {
|
751
|
+
return;
|
752
|
+
}
|
753
|
+
|
754
|
+
this.#traceFacts.push({
|
755
|
+
text,
|
756
|
+
metadata: {source: 'devtools', score: ScorePriority.CRITICAL},
|
757
|
+
});
|
758
|
+
}
|
759
|
+
|
760
|
+
#createFactForLongestTasks(): void {
|
761
|
+
if (!this.#formatter) {
|
762
|
+
return;
|
763
|
+
}
|
764
|
+
|
765
|
+
const text = this.#formatter.formatLongestTasks();
|
766
|
+
if (!text) {
|
767
|
+
return;
|
768
|
+
}
|
769
|
+
|
770
|
+
this.#traceFacts.push({
|
771
|
+
text,
|
772
|
+
metadata: {source: 'devtools', score: ScorePriority.CRITICAL},
|
773
|
+
});
|
774
|
+
}
|
775
|
+
|
776
|
+
#addFactsForFullTrace(focus: TimelineUtils.AIContext.AgentFocus): void {
|
777
|
+
if (focus.data.type !== 'full') {
|
778
|
+
return;
|
779
|
+
}
|
780
|
+
|
781
|
+
this.addFact(this.#callFrameDataDescriptionFact);
|
782
|
+
this.addFact(this.#networkDataDescriptionFact);
|
783
|
+
|
784
|
+
if (!this.#traceFacts.length) {
|
785
|
+
this.#formatter = new PerformanceTraceFormatter(focus, this.#eventsSerializer);
|
786
|
+
this.#createFactForTraceSummary(focus);
|
787
|
+
this.#createFactForCriticalRequests();
|
788
|
+
this.#createFactForMainThreadBottomUpSummary();
|
789
|
+
this.#createFactForThirdPartySummary();
|
790
|
+
this.#createFactForLongestTasks();
|
791
|
+
}
|
792
|
+
|
793
|
+
for (const fact of this.#traceFacts) {
|
794
|
+
this.addFact(fact);
|
795
|
+
}
|
796
|
+
|
797
|
+
const cachedFunctionCalls = this.#functionCallCacheForFocus.get(focus);
|
798
|
+
if (cachedFunctionCalls) {
|
799
|
+
for (const fact of Object.values(cachedFunctionCalls)) {
|
800
|
+
this.addFact(fact);
|
801
|
+
}
|
802
|
+
}
|
803
|
+
}
|
804
|
+
|
805
|
+
#cacheFunctionResult(focus: TimelineUtils.AIContext.AgentFocus, key: string, result: string): void {
|
806
|
+
const fact: Host.AidaClient.RequestFact = {
|
807
|
+
text: `This is the result of calling ${key}:\n${result}`,
|
808
|
+
metadata: {source: key, score: ScorePriority.DEFAULT},
|
809
|
+
};
|
810
|
+
const cache = this.#functionCallCacheForFocus.get(focus) ?? {};
|
811
|
+
cache[key] = fact;
|
812
|
+
this.#functionCallCacheForFocus.set(focus, cache);
|
813
|
+
}
|
814
|
+
|
815
|
+
#declareFunctionsForFullTrace(focus: TimelineUtils.AIContext.AgentFocus): void {
|
816
|
+
if (focus.data.type !== 'full') {
|
817
|
+
return;
|
818
|
+
}
|
819
|
+
|
820
|
+
const {parsedTrace, insightSet, traceMetadata} = focus.data;
|
821
|
+
|
822
|
+
this.declareFunction<{insightName: string}, {details: string}>('getInsightDetails', {
|
823
|
+
description:
|
824
|
+
'Returns detailed information about a specific insight. Use this before commenting on any specific issue to get more information.',
|
825
|
+
parameters: {
|
826
|
+
type: Host.AidaClient.ParametersTypes.OBJECT,
|
827
|
+
description: '',
|
828
|
+
nullable: false,
|
829
|
+
properties: {
|
830
|
+
insightName: {
|
831
|
+
type: Host.AidaClient.ParametersTypes.STRING,
|
832
|
+
description: 'The name of the insight. Only use the insight names given in the Available Insights list.',
|
833
|
+
nullable: false,
|
834
|
+
}
|
835
|
+
},
|
836
|
+
},
|
837
|
+
displayInfoFromArgs: params => {
|
838
|
+
return {
|
839
|
+
title: lockedString(`Investigating insight ${params.insightName}…`),
|
840
|
+
action: `getInsightDetails('${params.insightName}')`
|
841
|
+
};
|
842
|
+
},
|
843
|
+
handler: async params => {
|
844
|
+
debugLog('Function call: getInsightDetails', params);
|
845
|
+
const insight = insightSet?.model[params.insightName as keyof Trace.Insights.Types.InsightModels];
|
846
|
+
if (!insight) {
|
847
|
+
return {error: 'No insight available'};
|
848
|
+
}
|
849
|
+
|
850
|
+
const details = new PerformanceInsightFormatter(parsedTrace, insight).formatInsight();
|
851
|
+
|
852
|
+
const key = `getInsightDetails('${params.insightName}')`;
|
853
|
+
this.#cacheFunctionResult(focus, key, details);
|
854
|
+
return {result: {details}};
|
855
|
+
},
|
856
|
+
});
|
857
|
+
|
858
|
+
this.declareFunction<{eventKey: string}, {details: string}>('getEventByKey', {
|
859
|
+
description:
|
860
|
+
'Returns detailed information about a specific event. Use the detail returned to validate performance issues, but do not tell the user about irrelevant raw data from a trace event.',
|
861
|
+
parameters: {
|
862
|
+
type: Host.AidaClient.ParametersTypes.OBJECT,
|
863
|
+
description: '',
|
864
|
+
nullable: false,
|
865
|
+
properties: {
|
866
|
+
eventKey: {
|
867
|
+
type: Host.AidaClient.ParametersTypes.STRING,
|
868
|
+
description: 'The key for the event.',
|
869
|
+
nullable: false,
|
870
|
+
}
|
871
|
+
},
|
872
|
+
},
|
873
|
+
displayInfoFromArgs: params => {
|
874
|
+
return {title: lockedString('Looking at trace event…'), action: `getEventByKey('${params.eventKey}')`};
|
875
|
+
},
|
876
|
+
handler: async params => {
|
877
|
+
debugLog('Function call: getEventByKey', params);
|
878
|
+
const event = this.#lookupEvent(params.eventKey as Trace.Types.File.SerializableKey);
|
879
|
+
if (!event) {
|
880
|
+
return {error: 'Invalid eventKey'};
|
881
|
+
}
|
882
|
+
|
883
|
+
// TODO(b/425270067): Format in the same way that "Summary" detail tab does.
|
884
|
+
const details = JSON.stringify(event);
|
885
|
+
|
886
|
+
const key = `getEventByKey('${params.eventKey}')`;
|
887
|
+
this.#cacheFunctionResult(focus, key, details);
|
888
|
+
return {result: {details}};
|
889
|
+
},
|
890
|
+
});
|
891
|
+
|
892
|
+
const createBounds =
|
893
|
+
(min: Trace.Types.Timing.Micro, max: Trace.Types.Timing.Micro): Trace.Types.Timing.TraceWindowMicro => {
|
894
|
+
min = Math.max(min ?? 0, parsedTrace.Meta.traceBounds.min) as Trace.Types.Timing.Micro;
|
895
|
+
max = Math.min(max ?? Number.POSITIVE_INFINITY, parsedTrace.Meta.traceBounds.max) as Trace.Types.Timing.Micro;
|
896
|
+
return Trace.Helpers.Timing.traceWindowFromMicroSeconds(min, max);
|
897
|
+
};
|
898
|
+
|
899
|
+
this.declareFunction<{min: Trace.Types.Timing.Micro, max: Trace.Types.Timing.Micro}, {
|
900
|
+
activity: string,
|
901
|
+
}>('getMainThreadTrackSummary', {
|
902
|
+
description:
|
903
|
+
'Returns a summary of the main thread for the given bounds. The result includes a top-down summary, bottom-up summary, third-parties summary, and a list of related insights for the events within the given bounds.',
|
904
|
+
parameters: {
|
905
|
+
type: Host.AidaClient.ParametersTypes.OBJECT,
|
906
|
+
description: '',
|
907
|
+
nullable: false,
|
908
|
+
properties: {
|
909
|
+
min: {
|
910
|
+
type: Host.AidaClient.ParametersTypes.INTEGER,
|
911
|
+
description: 'The minimum time of the bounds, in microseconds',
|
912
|
+
nullable: false,
|
913
|
+
},
|
914
|
+
max: {
|
915
|
+
type: Host.AidaClient.ParametersTypes.INTEGER,
|
916
|
+
description: 'The maximum time of the bounds, in microseconds',
|
917
|
+
nullable: false,
|
918
|
+
},
|
919
|
+
},
|
920
|
+
},
|
921
|
+
displayInfoFromArgs: args => {
|
922
|
+
return {
|
923
|
+
title: lockedString(UIStringsNotTranslated.mainThreadActivity),
|
924
|
+
action: `getMainThreadTrackSummary({min: ${args.min}, max: ${args.max}})`
|
925
|
+
};
|
926
|
+
},
|
927
|
+
handler: async args => {
|
928
|
+
debugLog('Function call: getMainThreadTrackSummary');
|
929
|
+
|
930
|
+
if (!this.#formatter) {
|
931
|
+
throw new Error('missing formatter');
|
932
|
+
}
|
933
|
+
|
934
|
+
const bounds = createBounds(args.min, args.max);
|
935
|
+
const activity = this.#formatter.formatMainThreadTrackSummary(bounds);
|
936
|
+
if (this.#isFunctionResponseTooLarge(activity)) {
|
937
|
+
return {
|
938
|
+
error:
|
939
|
+
'getMainThreadTrackSummary response is too large. Try investigating using other functions, or a more narrow bounds',
|
940
|
+
};
|
941
|
+
}
|
942
|
+
|
943
|
+
const key = `getMainThreadTrackSummary({min: ${bounds.min}, max: ${bounds.max}})`;
|
944
|
+
this.#cacheFunctionResult(focus, key, activity);
|
945
|
+
return {result: {activity}};
|
946
|
+
},
|
947
|
+
|
948
|
+
});
|
949
|
+
|
950
|
+
this.declareFunction<
|
951
|
+
{min: Trace.Types.Timing.Micro, max: Trace.Types.Timing.Micro}, {activity: string}>('getNetworkTrackSummary', {
|
952
|
+
description: 'Returns a summary of the network for the given bounds.',
|
953
|
+
parameters: {
|
954
|
+
type: Host.AidaClient.ParametersTypes.OBJECT,
|
955
|
+
description: '',
|
956
|
+
nullable: false,
|
957
|
+
properties: {
|
958
|
+
min: {
|
959
|
+
type: Host.AidaClient.ParametersTypes.INTEGER,
|
960
|
+
description: 'The minimum time of the bounds, in microseconds',
|
961
|
+
nullable: false,
|
962
|
+
},
|
963
|
+
max: {
|
964
|
+
type: Host.AidaClient.ParametersTypes.INTEGER,
|
965
|
+
description: 'The maximum time of the bounds, in microseconds',
|
966
|
+
nullable: false,
|
967
|
+
},
|
968
|
+
},
|
969
|
+
},
|
970
|
+
displayInfoFromArgs: args => {
|
971
|
+
return {
|
972
|
+
title: lockedString(UIStringsNotTranslated.networkActivitySummary),
|
973
|
+
action: `getNetworkTrackSummary({min: ${args.min}, max: ${args.max}})`
|
974
|
+
};
|
975
|
+
},
|
976
|
+
handler: async args => {
|
977
|
+
debugLog('Function call: getNetworkTrackSummary');
|
978
|
+
|
979
|
+
if (!this.#formatter) {
|
980
|
+
throw new Error('missing formatter');
|
981
|
+
}
|
982
|
+
|
983
|
+
const bounds = createBounds(args.min, args.max);
|
984
|
+
const activity = this.#formatter.formatNetworkTrackSummary(bounds);
|
985
|
+
if (this.#isFunctionResponseTooLarge(activity)) {
|
986
|
+
return {
|
987
|
+
error:
|
988
|
+
'getNetworkTrackSummary response is too large. Try investigating using other functions, or a more narrow bounds',
|
989
|
+
};
|
990
|
+
}
|
991
|
+
|
992
|
+
const key = `getNetworkTrackSummary({min: ${bounds.min}, max: ${bounds.max}})`;
|
993
|
+
this.#cacheFunctionResult(focus, key, activity);
|
994
|
+
return {result: {activity}};
|
995
|
+
},
|
996
|
+
|
997
|
+
});
|
998
|
+
|
999
|
+
this.declareFunction<{eventKey: string}, {callTree: string}>('getDetailedCallTree', {
|
1000
|
+
description: 'Returns a detailed call tree for the given main thread event.',
|
1001
|
+
parameters: {
|
1002
|
+
type: Host.AidaClient.ParametersTypes.OBJECT,
|
1003
|
+
description: '',
|
1004
|
+
nullable: false,
|
1005
|
+
properties: {
|
1006
|
+
eventKey: {
|
1007
|
+
type: Host.AidaClient.ParametersTypes.STRING,
|
1008
|
+
description: 'The key for the event.',
|
1009
|
+
nullable: false,
|
1010
|
+
},
|
1011
|
+
},
|
1012
|
+
},
|
1013
|
+
displayInfoFromArgs: args => {
|
1014
|
+
return {title: lockedString('Looking at call tree…'), action: `getDetailedCallTree(${args.eventKey})`};
|
1015
|
+
},
|
1016
|
+
handler: async args => {
|
1017
|
+
debugLog('Function call: getDetailedCallTree');
|
1018
|
+
|
1019
|
+
if (!this.#formatter) {
|
1020
|
+
throw new Error('missing formatter');
|
1021
|
+
}
|
1022
|
+
|
1023
|
+
const event = this.#lookupEvent(args.eventKey as Trace.Types.File.SerializableKey);
|
1024
|
+
if (!event) {
|
1025
|
+
return {error: 'Invalid eventKey'};
|
1026
|
+
}
|
1027
|
+
|
1028
|
+
const tree = TimelineUtils.AICallTree.AICallTree.fromEvent(event, parsedTrace);
|
1029
|
+
const callTree = tree?.serialize() ?? 'No call tree found';
|
1030
|
+
|
1031
|
+
const key = `getDetailedCallTree(${args.eventKey})`;
|
1032
|
+
this.#cacheFunctionResult(focus, key, callTree);
|
1033
|
+
return {result: {callTree}};
|
1034
|
+
},
|
1035
|
+
|
1036
|
+
});
|
1037
|
+
|
1038
|
+
const isFresh = TimelineUtils.FreshRecording.Tracker.instance().recordingIsFresh(parsedTrace);
|
1039
|
+
const hasScriptContents = traceMetadata.enhancedTraceVersion && parsedTrace.Scripts.scripts.some(s => s.content);
|
1040
|
+
|
1041
|
+
if (isFresh || hasScriptContents) {
|
1042
|
+
this.declareFunction<{url: string}, {content: string}>('getResourceContent', {
|
1043
|
+
description: 'Returns the content of the resource with the given url. Only use this for text resource types.',
|
1044
|
+
parameters: {
|
1045
|
+
type: Host.AidaClient.ParametersTypes.OBJECT,
|
1046
|
+
description: '',
|
1047
|
+
nullable: false,
|
1048
|
+
properties: {
|
1049
|
+
url: {
|
1050
|
+
type: Host.AidaClient.ParametersTypes.STRING,
|
1051
|
+
description: 'The url for the resource.',
|
1052
|
+
nullable: false,
|
1053
|
+
},
|
1054
|
+
},
|
1055
|
+
},
|
1056
|
+
displayInfoFromArgs: args => {
|
1057
|
+
return {title: lockedString('Looking at resource content…'), action: `getResourceContent(${args.url})`};
|
1058
|
+
},
|
1059
|
+
handler: async args => {
|
1060
|
+
debugLog('Function call: getResourceContent');
|
1061
|
+
|
1062
|
+
const url = args.url as Platform.DevToolsPath.UrlString;
|
1063
|
+
const resource = SDK.ResourceTreeModel.ResourceTreeModel.resourceForURL(url);
|
1064
|
+
if (!resource) {
|
1065
|
+
if (!resource) {
|
1066
|
+
return {error: 'Resource not found'};
|
1067
|
+
}
|
1068
|
+
}
|
1069
|
+
|
1070
|
+
const content = resource.content;
|
1071
|
+
if (!content) {
|
1072
|
+
return {error: 'Resource has no content'};
|
1073
|
+
}
|
1074
|
+
|
1075
|
+
const key = `getResourceContent(${args.url})`;
|
1076
|
+
this.#cacheFunctionResult(focus, key, content);
|
1077
|
+
return {result: {content}};
|
1078
|
+
},
|
1079
|
+
|
1080
|
+
});
|
1081
|
+
}
|
1082
|
+
}
|
1083
|
+
|
1084
|
+
#declareFunctions(context: ConversationContext<TimelineUtils.AIContext.AgentFocus>): void {
|
1085
|
+
const focus = context.getItem();
|
1086
|
+
|
1087
|
+
if (focus.data.type === 'full') {
|
1088
|
+
this.#declareFunctionsForFullTrace(focus);
|
1089
|
+
return;
|
1090
|
+
}
|
1091
|
+
|
1092
|
+
if (focus.data.type !== 'insight') {
|
1093
|
+
return;
|
1094
|
+
}
|
1095
|
+
|
1096
|
+
const {parsedTrace, insight, insightSetBounds} = focus.data;
|
1097
|
+
|
1098
|
+
this.declareFunction<Record<never, unknown>, {
|
1099
|
+
requests: string,
|
1100
|
+
}>('getNetworkActivitySummary', {
|
1101
|
+
description:
|
1102
|
+
'Returns a summary of network activity for the selected insight. If you want to get more detailed information on a network request, you can pass the URL of a request into `getNetworkRequestDetail`.',
|
1103
|
+
parameters: {
|
1104
|
+
type: Host.AidaClient.ParametersTypes.OBJECT,
|
1105
|
+
description: '',
|
1106
|
+
nullable: true,
|
1107
|
+
properties: {},
|
1108
|
+
},
|
1109
|
+
displayInfoFromArgs: () => {
|
1110
|
+
return {
|
1111
|
+
title: lockedString(UIStringsNotTranslated.networkActivitySummary),
|
1112
|
+
action: 'getNetworkActivitySummary()'
|
1113
|
+
};
|
1114
|
+
},
|
1115
|
+
handler: async () => {
|
1116
|
+
debugLog('Function call: getNetworkActivitySummary');
|
1117
|
+
if (!insight) {
|
1118
|
+
return {error: 'No insight available'};
|
1119
|
+
}
|
1120
|
+
const requests = TimelineUtils.InsightAIContext.AIQueries.networkRequests(
|
1121
|
+
insight,
|
1122
|
+
insightSetBounds,
|
1123
|
+
parsedTrace,
|
1124
|
+
);
|
1125
|
+
const formatted = TraceEventFormatter.networkRequests(requests, parsedTrace);
|
1126
|
+
|
1127
|
+
const byteCount = Platform.StringUtilities.countWtf8Bytes(formatted);
|
1128
|
+
Host.userMetrics.performanceAINetworkSummaryResponseSize(byteCount);
|
1129
|
+
|
1130
|
+
if (this.#isFunctionResponseTooLarge(formatted)) {
|
1131
|
+
return {
|
1132
|
+
error: 'getNetworkActivitySummary response is too large. Try investigating using other functions',
|
1133
|
+
};
|
1134
|
+
}
|
1135
|
+
const summaryFact: Host.AidaClient.RequestFact = {
|
1136
|
+
text:
|
1137
|
+
`This is the network summary for this insight. You can use this and not call getNetworkActivitySummary again:\n${
|
1138
|
+
formatted}`,
|
1139
|
+
metadata: {source: 'getNetworkActivitySummary()'}
|
1140
|
+
};
|
1141
|
+
const cacheForInsight = this.#functionCallCacheForInsight.get(insight) ?? {};
|
1142
|
+
cacheForInsight.getNetworkActivitySummary = summaryFact;
|
1143
|
+
this.#functionCallCacheForInsight.set(insight, cacheForInsight);
|
1144
|
+
|
1145
|
+
this.addFact(this.#networkDataDescriptionFact);
|
1146
|
+
return {result: {requests: formatted}};
|
1147
|
+
},
|
1148
|
+
});
|
1149
|
+
|
1150
|
+
this.declareFunction<Record<'url', string>, {
|
1151
|
+
request: string,
|
1152
|
+
}>('getNetworkRequestDetail', {
|
1153
|
+
description:
|
1154
|
+
'Returns detailed debugging information about a specific network request. Use this eagerly to gather information about a network request to improve your diagnosis and optimization recommendations',
|
1155
|
+
parameters: {
|
1156
|
+
type: Host.AidaClient.ParametersTypes.OBJECT,
|
1157
|
+
description: '',
|
1158
|
+
nullable: true,
|
1159
|
+
properties: {
|
1160
|
+
url: {
|
1161
|
+
type: Host.AidaClient.ParametersTypes.STRING,
|
1162
|
+
description: 'The URL of the network request',
|
1163
|
+
nullable: false,
|
1164
|
+
}
|
1165
|
+
},
|
1166
|
+
},
|
1167
|
+
displayInfoFromArgs: params => {
|
1168
|
+
return {
|
1169
|
+
title: lockedString(`Investigating network request ${params.url}…`),
|
1170
|
+
action: `getNetworkRequestDetail('${params.url}')`
|
1171
|
+
};
|
1172
|
+
},
|
1173
|
+
handler: async params => {
|
1174
|
+
debugLog('Function call: getNetworkRequestDetail', params);
|
1175
|
+
if (!insight) {
|
1176
|
+
return {error: 'No insight available'};
|
1177
|
+
}
|
1178
|
+
const request = TimelineUtils.InsightAIContext.AIQueries.networkRequest(parsedTrace, params.url);
|
1179
|
+
if (!request) {
|
1180
|
+
return {error: 'Request not found'};
|
1181
|
+
}
|
1182
|
+
const formatted = TraceEventFormatter.networkRequests([request], parsedTrace, {verbose: true});
|
1183
|
+
|
1184
|
+
const byteCount = Platform.StringUtilities.countWtf8Bytes(formatted);
|
1185
|
+
Host.userMetrics.performanceAINetworkRequestDetailResponseSize(byteCount);
|
1186
|
+
|
1187
|
+
if (this.#isFunctionResponseTooLarge(formatted)) {
|
1188
|
+
return {
|
1189
|
+
error: 'getNetworkRequestDetail response is too large. Try investigating using other functions',
|
1190
|
+
};
|
1191
|
+
}
|
1192
|
+
this.addFact(this.#networkDataDescriptionFact);
|
1193
|
+
return {result: {request: formatted}};
|
1194
|
+
},
|
1195
|
+
});
|
1196
|
+
|
1197
|
+
this.declareFunction<Record<never, unknown>, {activity: string}>('getMainThreadActivity', {
|
1198
|
+
description: 'Returns the main thread activity for the selected insight.',
|
1199
|
+
parameters: {
|
1200
|
+
type: Host.AidaClient.ParametersTypes.OBJECT,
|
1201
|
+
description: '',
|
1202
|
+
nullable: true,
|
1203
|
+
properties: {},
|
1204
|
+
},
|
1205
|
+
displayInfoFromArgs: () => {
|
1206
|
+
return {title: lockedString(UIStringsNotTranslated.mainThreadActivity), action: 'getMainThreadActivity()'};
|
1207
|
+
},
|
1208
|
+
handler: async () => {
|
1209
|
+
debugLog('Function call: getMainThreadActivity');
|
1210
|
+
if (!insight) {
|
1211
|
+
return {error: 'No insight available'};
|
1212
|
+
}
|
1213
|
+
const tree = TimelineUtils.InsightAIContext.AIQueries.mainThreadActivityForInsight(
|
1214
|
+
insight,
|
1215
|
+
insightSetBounds,
|
1216
|
+
parsedTrace,
|
1217
|
+
);
|
1218
|
+
if (!tree) {
|
1219
|
+
return {error: 'No main thread activity found'};
|
1220
|
+
}
|
1221
|
+
const activity = tree.serialize();
|
1222
|
+
|
1223
|
+
const byteCount = Platform.StringUtilities.countWtf8Bytes(activity);
|
1224
|
+
Host.userMetrics.performanceAIMainThreadActivityResponseSize(byteCount);
|
1225
|
+
|
1226
|
+
if (this.#isFunctionResponseTooLarge(activity)) {
|
1227
|
+
return {
|
1228
|
+
error: 'getMainThreadActivity response is too large. Try investigating using other functions',
|
1229
|
+
};
|
1230
|
+
}
|
1231
|
+
const activityFact: Host.AidaClient.RequestFact = {
|
1232
|
+
text:
|
1233
|
+
`This is the main thread activity for this insight. You can use this and not call getMainThreadActivity again:\n${
|
1234
|
+
activity}`,
|
1235
|
+
metadata: {source: 'getMainThreadActivity()'},
|
1236
|
+
};
|
1237
|
+
const cacheForInsight = this.#functionCallCacheForInsight.get(insight) ?? {};
|
1238
|
+
cacheForInsight.getMainThreadActivity = activityFact;
|
1239
|
+
this.#functionCallCacheForInsight.set(insight, cacheForInsight);
|
1240
|
+
|
1241
|
+
this.addFact(this.#mainThreadActivityDescriptionFact);
|
1242
|
+
return {result: {activity}};
|
1243
|
+
},
|
1244
|
+
|
1245
|
+
});
|
252
1246
|
}
|
253
1247
|
}
|